概述
一、 介绍
监控系统是整个运维环节,乃至整个产品生命周期中最重要的一环,事前及时预警发现故障,事后提供翔实的数据用于追查定位问题。监控系统作为一个成熟的运维产品,业界有很多开源的实现可供选择。当公司刚刚起步,业务规模较小,运维团队也刚刚建立的初期,选择一款开源的监控系统,是一个省时省力,效率最高的方案。之后,随着业务规模的持续快速增长,监控的对象也越来越多,越来越复杂,监控系统的使用对象也从最初少数的几个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这个项目的所有机器加一些负载监控,应该如何做呢?
- 创建一个HostGroup:sa.dev.falcon,把所有falcon的机器都塞进去
- 创建一个模板:sa.dev.falcon.common,添加一些像ping, df.bytes.free.percent, load.5min等策略
- 将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
所有评论(0)