概述

一、 介绍

  监控系统是整个运维环节,乃至整个产品生命周期中最重要的一环,事前及时预警发现故障,事后提供翔实的数据用于追查定位问题。监控系统作为一个成熟的运维产品,业界有很多开源的实现可供选择。当公司刚刚起步,业务规模较小,运维团队也刚刚建立的初期,选择一款开源的监控系统,是一个省时省力,效率最高的方案。之后,随着业务规模的持续快速增长,监控的对象也越来越多,越来越复杂,监控系统的使用对象也从最初少数的几个SRE,扩大为更多的DEVS,SRE。这时候,监控系统的容量和用户的“使用效率”成了最为突出的问题。

  监控系统业界有很多杰出的开源监控系统。我们在早期,一直在用zabbix,不过随着业务的快速发展,以及互联网公司特有的一些需求,现有的开源的监控系统在性能、扩展性、和用户的使用效率方面,已经无法支撑了。

  因此,我们在过去的一年里,从互联网公司的一些需求出发,从各位SRE、SA、DEVS的使用经验和反馈出发,结合业界的一些大的互联网公司做监控,用监控的一些思考出发,设计开发了小米的监控系统:Open-Falcon。

二、特点

  • 数据采集免配置:agent自发现、支持Plugin、主动推送模式
  • 容量水平扩展:生产环境每秒50万次数据收集、告警、存储、绘图,可持续水平扩展。
  • 告警策略自发现:Web界面、支持策略模板、模板继承和覆盖、多种告警方式、支持回调动作。
  • 告警设置人性化:支持最大告警次数、告警级别设置、告警恢复通知、告警暂停、不同时段不同阈值、支持维护周期,支持告警合并。
  • 历史数据高效查询:秒级返回上百个指标一年的历史数据。
  • Dashboard人性化:多维度的数据展示,用户自定义Dashboard等功能。
  • 架构设计高可用:整个系统无核心单点,易运维,易部署。

三、架构图

 

 

备注:虚线所在的aggregator组件还在设计开发阶段。

每台服务器,都有安装falcon-agent,falcon-agent是一个golang开发的daemon程序,用于自发现的采集单机的各种数据和指标,这些指标包括不限于以下几个方面,共计200多项指标。

  • CPU相关
  • 磁盘相关
  • IO
  • Load
  • 内存相关
  • 网络相关
  • 端口存活、进程存活
  • ntp offset(插件)
  • 某个进程资源消耗(插件)
  • netstat、ss 等相关统计项采集
  • 机器内核配置参数

  只要安装了falcon-agent的机器,就会自动开始采集各项指标,主动上报,不需要用户在server做任何配置(这和zabbix有很大的不同),这样做的好处,就是用户维护方便,覆盖率高。当然这样做也会server端造成较大的压力,不过open-falcon的服务端组件单机性能足够高,同时都可以水平扩展,所以自动多采集足够多的数据,反而是一件好事情,对于SRE和DEV来讲,事后追查问题,不再是难题。

另外,falcon-agent提供了一个proxy-gateway,用户可以方便的通过http接口,push数据到本机的gateway,gateway会帮忙高效率的转发到server端。

falcon-agent,可以在github上找到:https://github.com/open-falcon/agent

四、数据流程图

 

 

部署Open-falcon

一、环境准备

系统环境:CentOS 7

1. 搭建阿里云yum源

[root@Open-falcon ~]# hostname Open-falcon

[root@Open-falcon ~]# cd /etc/yum.repos.d/

[root@Open-falcon yum.repos.d]# mkdir bak && mv * ./bak

[root@Open-falcon yum.repos.d]# curl -O

http://mirrors.aliyun.com/repo/Centos-7.repo

[root@Open-falcon yum.repos.d]# yum clean all [root@Open-falcon yum.repos.d]# yum makecache [root@Open-falcon yum.repos.d]# yum -y update //更新所有包

 

2. 安装Go语言环境

[root@Open-falcon ~]# yum -y install epel-release     //因为官方yum和阿里yum都没有go的安装包,故只能通过fedora的epel仓库来安装

[root@Open-falcon ~]# yum -y install go

 

 

#安装之后确认安装后的版本是不是>=1.6版本(官方需求)

[root@Open-falcon ~]# go version

go version go1.8.3 linux/amd64

 

 

 

3. 安装Redis

由于部署go时已经安装了epel,故直接执行下面的安装命令。

 

[root@Open-falcon ~]# yum -y install redis

[root@Open-falcon ~]# systemctl start redis

[root@Open-falcon ~]# systemctl enable redis    //开机启动

[root@Open-falcon ~]# systemctl status redis    //查看状态

 redis.service - Redis persistent key-value database

   Loaded: loaded (/usr/lib/systemd/system/redis.service; enabled; vendor preset: disabled) Drop-In: /etc/systemd/system/redis.service.d └─limit.conf Active: active (running) since Sun 2018-04-29 09:30:00 EDT; 2h 24min ago Main PID: 35732 (redis-server) CGroup: /system.slice/redis.service └─35732 /usr/bin/redis-server 127.0.0.1:6379

 

 

 

4. 安装Mysql

包名:mysql-5.6.40-linux-glibc2.12-x86_64.tar.gz(331MB)

 

[root@Open-falcon ~]# tar xf mysql-5.6.40-linux-glibc2.12-x86_64.tar.gz

[root@Open-falcon ~]# cp -r mysql-5.6.40-linux-glibc2.12-x86_64 -C /usr/local/mysql

[root@Open-falcon ~]# useradd -M -s /sbin/nologin mysql

[root@Open-falcon ~]# chown mysql:mysql /usr/local/mysql/ -R

[root@Open-falcon ~]# /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/

[root@Open-falcon ~]# cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf [root@Open-falcon ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld [root@Open-falcon ~]# chmod +x /etc/init.d/mysqld [root@Open-falcon ~]# /etc/init.d/mysqld start [root@Open-falcon ~]# netstat -antup | grep :::3306 tcp6 0 0 :::3306 :::* LISTEN 60648/mysqld 

 

5. 初始化Mysql数据库

[root@Open-falcon ~]# mkdir falcon-plus

[root@Open-falcon ~]# cd falcon-plus

[root@Open-falcon falcon-plus]# unzip falcon-plus-master.zip

[root@Open-falcon falcon-plus]# cd falcon-plus-master/scripts/mysql/db_schema/

[root@Open-falcon db_schema]# ll

total 24

-rw-r--r--. 1 root root 1952 Apr  8 02:44 1_uic-db-schema.sql -rw-r--r--. 1 root root 7573 Apr 8 02:44 2_portal-db-schema.sql -rw-r--r--. 1 root root 3391 Apr 8 02:44 3_dashboard-db-schema.sql -rw-r--r--. 1 root root 1807 Apr 8 02:44 4_graph-db-schema.sql -rw-r--r--. 1 root root 2560 Apr 8 02:44 5_alarms-db-schema.sql [root@Open-falcon db_schema]# mysql -u root -p < 1_uic-db-schema.sql [root@Open-falcon db_schema]# mysql -u root -p < 2_portal-db-schema.sql [root@Open-falcon db_schema]# mysql -u root -p < 3_dashboard-db-schema.sql [root@Open-falcon db_schema]# mysql -u root -p < 4_graph-db-schema.sql [root@Open-falcon db_schema]# mysql -u root -p < 5_alarms-db-schema.sql [root@Open-falcon db_schema]# mysql -uroot -e 'show databases' +--------------------+ | Database | +--------------------+ | information_schema | | alarms | | dashboard | | falcon_portal | | graph | | mysql | | performance_schema | | test | | uic | +--------------------+ 6. 安装Open-falcon(两种安装方式) a. 源码安装 参考: https://book.open-falcon.org/zh_0_2/quick_install/prepare.html  b. 二进制版本安装 [root@Open-falcon ~]# WORKSPACE=/opt/work/ [root@Open-falcon ~]# mkdir $WORKSPACE [root@Open-falcon ~]# cd /opt/work/ [root@Open-falcon work]# tar xf open-falcon-v0.2.1.tar.gz [root@Open-falcon work]# rm -f open-falcon-v0.2.1.tar.gz

 

 

二、部署后端

a. 检查配置文件中数据库账号密码是否正确

[root@Open-falcon work]# vim aggregator/config/cfg.json

"addr": "root:@tcp(127.0.0.1:3306)/falcon_portal?loc=Local&parseTime=true",

 

 

检查以上内容的 root:password(如果没有密码就去掉password),服务器IP地址及端口

检查的模块配置文件列表如下:

模块

配置文件所在路径

aggregator   

/opt/work/aggregator/config/cfg.json

graph

/opt/work/graph/config/cfg.json

hbs

/opt/work/hbs/config/cfg.json

nodata

/opt/work/nodata/config/cfg.json

api

/opt/work/api/config/cfg.json

alarm

/opt/work/alarm/config/cfg.json

 

b. 启动

[root@Open-falcon work]# ./open-falcon

Usage:

  open-falcon [flags]

  open-falcon [command]

Available Commands:

  check       Check the status of Open-Falcon modules

  help        Help about any command

  monitor     Display an Open-Falcon module's log

  reload      Reload an Open-Falcon module's configuration file
 restart Restart Open-Falcon modules start Start Open-Falcon modules stop Stop Open-Falcon modules

 

 

 

三、部署前端

1. 创建工作目录

[root@Open-falcon ~]# export FRONTSPACE=/opt/front/open-falcon

[root@Open-falcon ~]# mkdir -p $FRONTSPACE

  

 

2. 解压dashboard

[root@Open-falcon open-falcon]# unzip dashboard-master.zip

[root@Open-falcon open-falcon]# mv dashboard-master dashboard && rm -f dashboard-master.zip

 

 

3. 安装依赖包

[root@Open-falcon open-falcon]# yum install -y python-virtualenv

[root@Open-falcon open-falcon]# yum install -y python-devel

[root@Open-falcon open-falcon]# yum install -y openldap-devel

[root@Open-falcon open-falcon]# yum install -y mysql-devel

[root@Open-falcon open-falcon]# yum -y groupinstall "Development tools"

 

[root@Open-falcon open-falcon]# cd dashboard/ [root@Open-falcon dashboard]# virtualenv ./env [root@Open-falcon dashboard]# ./env/bin/pip install -r pip_requirements.txt

 

 

4. 修改配置

dashboard的配置文件在/opt/front/open-falcon/dashboard/rrd/config.py,需要根据实际情况对内部配置进行修改。

由于前端后台搭在一台服务器里,且暂时不接入LDAP,且数据库root的密码为空,故先不修改配置文件。

 

5. 启动

a. 生产环境启动

[root@Open-falcon dashboard]# bash control # 以下参数
start|stop|restart|status|tail|kill9|version|pack

 

b. 开发者模式启动

[root@Open-falcon dashboard]# ./env/bin/python wsgi.py

 

 

6. dashbord用户管理

dashbord没有默认创建任何账号包括管理账号,需要你通过页面进行注册账号。

 

想拥有管理全局的超级管理员账号,需要手动注册用户名为root的账号(第一个帐号名称为root的用户会被自动设置为超级管理员)。

超级管理员可以给普通用户分配权限管理。

 

小提示:注册账号能够被任何打开dashboard页面的人注册,所以当给相关的人注册完账号后,需要去关闭注册账号功能。只需要去修改api组件的配置文件cfg.json,将signup_disable配置项修改为true,重启api即可。当需要给人开账号的时候,再将配置选项改回去,用完再关掉即可。

 

Open-falcon使用

一、查看监控数据

 

 

 

二、如何配置报警策略

1. 配置报警接收人

falcon的报警接收人不是一个具体的手机号,也不是一个具体的邮箱,因为手机号、邮箱都是容易发生变化的,如果变化了去修改所有相关配置那就太麻烦了。我们把用户的联系信息维护在一个叫 帐户/Profile 里,以后如果要修改手机号、邮箱,只要修改自己的帐户信息即可。报警接收人也不是单个的人,而是一个组(Teams),比如falcon这个系统的任何组件出问题了,都应该发报警给falcon的运维和开发人员,发给falcon这个团队,这样一来,新员工入职只要加入falcon这个Team即可;员工离职,只要从falcon这个Team删掉即可。

浏览器访问UIC,如果启用了LDAP,那就用LDAP账号登陆,如果没有启用,那就注册一个或者找管理员帮忙开通。创建一个Team,名称姑且叫falcon,把自己加进去,待会用来做测试。

首先修改帐户信息,保证邮箱和手机号正确 然后添加报警组,添加成员。

 


 

 

 


 

2. 创建HostGroup

比如我们要对falcon-judge这个组件做端口监控,那首先创建一个HostGroup,把所有部署了falcon-judge这个模块的机器都塞进去,以后要扩容或下线机器的时候直接从这个HostGroup增删机器即可,报警策略会自动生效、失效。咱们为这个HostGroup取名为:sa.dev.falcon.judge,这个名称有讲究,sa是我们部门,dev是我们组,falcon是项目名,judge是组件名,传达出了很多信息,这样命名比较容易管理,推荐大家这么做。

 

在往组里加机器的时候如果报错,需要检查portal的数据库中host表,看里边是否有相关机器。那host表中的机器从哪里来呢?agent有个heartbeat(hbs)的配置,agent每分钟会发心跳给hbs,把自己的ip、hostname、agent version等信息告诉hbs,hbs负责写入host表。如果host表中没数据,需要检查这条链路是否通畅。

3. 创建策略模板

portal最上面有个Templates链接,这就是策略模板管理的入口。我们进去之后创建一个模板,名称姑且也叫:sa.dev.falcon.judge.tpl,与HostGroup名称相同,在里边配置一个端口监控,通常进程监控有两种手段,一个是进程本身是否存活,一个是端口是否在监听,此处我们使用端口监控。

 


 

 

 

右上角那个加号按钮是用于增加策略的,一个模板中可以有多个策略,此处我们只添加了一个。下面可以配置报警接收人,此处填写的是falcon,这是之前在UIC中创建的Team。

4. 将HostGroup与模板绑定

一个模板是可以绑定到多个HostGroup的,现在我们重新回到HostGroups页面,找到sa.dev.falcon.judge这个HostGroup,右侧有几个超链接,点击【templates】进入一个新页面,输入模板名称,绑定一下就行了。

 


 

a. 补充

上面步骤做完了,也就配置完了。如果judge组件宕机,端口不再监听了,就会报警。不过大家不要为了测试报警效果,直接把judge组件给干掉了,因为judge本身就是负责判断报警的,把它干掉了,那就没法判断了……所以说falcon现在并不完善,没法用来监控本身的组件。为了测试,大家可以修改一下端口监控的策略配置,改成一个没有在监听的端口,这样就触发报警了。

上面的策略只是对falcon-judge做了端口监控,那如果我们要对falcon这个项目的所有机器加一些负载监控,应该如何做呢?

  1. 创建一个HostGroup:sa.dev.falcon,把所有falcon的机器都塞进去
  2. 创建一个模板:sa.dev.falcon.common,添加一些像ping, df.bytes.free.percent, load.5min等策略
  3. 将sa.dev.falcon.common绑定到sa.dev.falcon这个HostGroup

附:sa.dev.falcon.common的配置样例

 

大家可能不知道各个指标分别叫什么,自己push的数据肯定知道自己的metric了,agent push的数据可以参考:https://github.com/open-falcon/agent/tree/master/funcs

5. 如何配置策略表达式

策略表达式,即expression,具体可以参考 HostGroup与Tags设计理念,这里只是举个例子:

 

上例中的配置传达出的意思是:endpoint=aggregator 并且 metric=cpu.busy 的所有的监控指标,只要连续3次 >= 0.5 则报警给falcon-test1这个报警组。

expression无需绑定到HostGroup,enjoy it

 

 

 

转载于:https://www.cnblogs.com/msl23/p/9045486.html

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐