1. 首页
  2. 分享即是快乐

运维监控系统Open-Falcon

 
亮点、特点:
    强大灵活的数据采集:自动发现,支持falcon-agent、snmp、支持用户主动push、用户自定义插件支持、opentsdb data model like(timestamp、endpoint、metric、key-value tags)
    水平扩展能力:支持每个周期上亿次的数据采集、告警判定、历史数据存储和查询
    高效的告警策略管理:高效的portal、支持策略模板、模板继承和覆盖、多种告警方式、支持callback调用
    人性化的告警设置:最大告警次数、告警级别、告警恢复通知、告警暂停、不同时段不同阈值、支持维护周期
    高效率的graph组件:单机支撑200万metric的上报、归档、存储(周期为1分钟)
    高效的历史数据query组件:采用rrdtool的数据归档策略,秒级返回上百个metric一年的历史数据
    dashboard:多维度的数据展示,用户自定义Screen
    高可用:整个系统无核心单点,易运维,易部署,可水平扩展
开发语言: 整个系统的后端,全部golang编写,portal和dashboard使用python编写。
Open-Falcon是一个比较大的分布式系统,有十几个组件。按照功能,这十几个组件可以划分为 基础组件、作图链路组件和报警链路组件,其安装部署的架构如下图所示:
运维监控系统Open-Falcon
 
部署:
一、环境准备
1、系统环境
[root@open-falcon-server ~]# cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)
[root@localhost dashboard]# ifconfig | grep inet |awk {‘print $2’}|head -n 1
172.20.10.7
2、系统优化
#可以直接关闭防火墙、selinux
systemctl stop firewalld
systemctl disable firewalld
sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/selinux/config
setenforce 0
#更换阿里源,下载epel源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all
yum makecache
#下载常用软件
yum -y install git telnet net-tools tree tcpdump lrzsz
#更改主机名
hostnamectl set-hostname open-falcon-server
hostname open-falcon-server
3、软件环境准备
  • 安装redis
yum install -y redis
redis-server &
systemctl enable redis #设置开机自启
  • 安装mysql
yum -y install mariadb mariadb-server
systemctl start mariadb
systemctl enable mariadb

#登陆测试
[root@open-falcon-server ~]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Server version: 5.5.65-MariaDB MariaDB Server

MariaDB [(none)]> exit

#检查服务
netstat -tnlp |egrep ‘6379|3306’
tcp   0   0 0.0.0.0:3306    0.0.0.0:*    LISTEN   2755/mysqld        
tcp   0   0 0.0.0.0:6379    0.0.0.0:*    LISTEN   2459/redis-server *
tcp6  0   0 :::6379         :::*         LISTEN   2459/redis-server *

#初始化mysql表结构
cd /tmp/ && git clone https://github.com/open-falcon/falcon-plus.git
cd /tmp/falcon-plus/scripts/mysql/db_schema/
mysql -h 127.0.0.1 -u root -p < 1_uic-db-schema.sql
mysql -h 127.0.0.1 -u root -p < 2_portal-db-schema.sql
mysql -h 127.0.0.1 -u root -p < 3_dashboard-db-schema.sql
mysql -h 127.0.0.1 -u root -p < 4_graph-db-schema.sql
mysql -h 127.0.0.1 -u root -p < 5_alarms-db-schema.sql
rm -rf /tmp/falcon-plus/

#设置数据库密码
mysqladmin -uroot password “123456”
  • 安装go
yum -y install golang
go version查看版本


二、安装Open-Falcon后端(服务端)

#创建工作目录
export FALCON_HOME=/home/work
export WORKSPACE=$FALCON_HOME/open-falcon
mkdir -p $WORKSPACE

#下载解压二进制包
wget https://github.com/open-falcon/falcon-plus/releases/download/v0.2.1/open-falcon-v0.2.1.tar.gz
cd /home/work/open-falcon
tar zxf open-falcon-v0.2.1.tar.gz

#修改以下组件配置文件中数据库账号密码
grep -Ilr 3306  ./ | xargs -n1 — sed -i ‘s/root:/root:123456/g’
grep -Ilr 3306  ./ | xargs -n1 — sed  ‘s/root:/root:123456/g’ | grep root:123456  ##查看

#启动所有的后端组件模块
[root@open-falcon-server open-falcon]# ./open-falcon start

#检查所有模块的启动状况
[root@open-falcon-server open-falcon]# ./open-falcon check  
全都显示为UP即可

#更多的命令行工具用法
# ./open-falcon [start|stop|restart|check|monitor|reload] module

./open-falcon start agent
./open-falcon check
全都显示为UP即可

#For debugging , You can check $WorkDir/$moduleName/log/logs/xxx.log
至此后端部署完成。

#其他用法
重载配置(备注:修改vi cfg.json配置文件后,可以用下面命令重载配置)
curl 127.0.0.1:1988/config/reload


三、安装Open-Falcon前端(服务端)

#创建工作目录
export HOME=/home/work
export WORKSPACE=$HOME/open-falcon
mkdir -p $WORKSPACE
cd $WORKSPACE

#克隆前端组件代码
git clone https://github.com/open-falcon/dashboard.git

#安装依赖包
yum install -y python-virtualenv python-devel openldap-devel mysql-devel
yum groupinstall -y “Development tools”
cd /home/work/open-falcon/dashboard
virtualenv ./env
./env/bin/pip install -r pip_requirements.txt -i https://pypi.douban.com/simple
安装完成后可以看到:
Successfully installed……等信息

#修改配置
dashboard的配置文件为: ‘rrd/config.py’,根据实际情况修改

## API_ADDR 表示后端api组件的地址
API_ADDR = “http://127.0.0.1:8080/api/v1”
## 根据实际情况,修改PORTAL_DB_*, 默认用户名为root,默认密码为””
## 根据实际情况,修改ALARM_DB_*, 默认用户名为root,默认密码为””
## if following error msg occurred, please check DB config in rrd/config.py
Error ‘NoneType’ object has no attribute ‘cursor’

配置修改:
cp rrd/config.py{,.bak}
vim rrd/config.py  修改如下内容:

# Falcon+ API
API_ADDR = os.environ.get(“API_ADDR”,”http://127.0.0.1:8080/api/v1″)

# portal database
# TODO: read from api instead of db
PORTAL_DB_HOST = os.environ.get(“PORTAL_DB_HOST”,”127.0.0.1″)
PORTAL_DB_PORT = int(os.environ.get(“PORTAL_DB_PORT”,3306))
PORTAL_DB_USER = os.environ.get(“PORTAL_DB_USER”,”root”)
PORTAL_DB_PASS = os.environ.get(“PORTAL_DB_PASS”,”123456″)
PORTAL_DB_NAME = os.environ.get(“PORTAL_DB_NAME”,”falcon_portal”)

# alarm database
# TODO: read from api instead of db
ALARM_DB_HOST = os.environ.get(“ALARM_DB_HOST”,”127.0.0.1″)
ALARM_DB_PORT = int(os.environ.get(“ALARM_DB_PORT”,3306))
ALARM_DB_USER = os.environ.get(“ALARM_DB_USER”,”root”)
ALARM_DB_PASS = os.environ.get(“ALARM_DB_PASS”,”123456″)
ALARM_DB_NAME = os.environ.get(“ALARM_DB_NAME”,”alarms”)

#启动前端
[root@open-falcon-server dashboard]# bash control  start

#其他操作命令
[root@open-falcon-server dashboard]# bash control  
control start|stop|restart|status|tail|kill9|version|pack   #对进程进行管理
./env/bin/python wsgi.py   #以开发者模式进行启动


四、访问网站
open http://172.20.10.7:8081 in browser.

运维监控系统Open-Falcon


#用户管理:
dashbord没有默认创建任何账号包括管理账号,需要通过页面进行注册账号。
想拥有管理全局的超级管理员账号,需要手动注册用户名为root的账号(第一个帐号名称为root的用户会被自动设置为超级管理员)。
超级管理员可以给普通用户分配权限管理。

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

#注册root超级管理员账号
  • 点击”sign up”
  • 输入用户名root等信息,点击”sign up”创建root账号


#关闭注册功能

注册账号能够被任何打开dashboard页面的人注册,所以当给相关的人注册完账号后,需要去关闭注册账号功能;没有接入LDAP的话,可以通过root账号增加用户账号。

修改api组件的配置文件cfg.jso:
cd /home/work/open-falcon/api/config  &&  sed -i  ‘/signup_disable/s/false/true/g’ cfg.json
重启api模块
[root@open-falcon-server open-falcon]# ./open-falcon restart api
再次注册账号,已经无法注册了。

#创建普通用户的方式
  • 没有接入LDAP,允许用户创建账号登录,使用缺省模式,不关闭注册功能。
  • 没有接入LDAP,不允许用户创建账号登录,使用管理员root账号创建普通账号。
  • 接入LDAP,直接使用LDAP账号登陆。

五、Open-Falcon客户端节点部署agent(客户端)

#服务端操作
cd /home/work/open-falcon
scp -r agent root@172.20.10.6:/home/
scp -r open-falcon root@172.20.10.6:/home/

#客户端操作
客户端ip:172.20.10.6
hostnamectl set-hostname node1  #修改主机名以区别服务端
mkdir -p /home/work/open-falcon
mv /home/open-falcon /home/agent /home/work/open-falcon
cd /home/work/open-falcon
vim agent/config/cfg.json 修改配置文件中两个addr地址,指向服务端:
“heartbeat” :{“addr”: “172.20.10.7:6030″},”transfer”: {“addrs”: 172.20.10.7:8433}

#启动服务
./open-falcon start agent  启动进程
./open-falcon stop agent  停止进程
./open-falcon monitor agent  查看日志;也可以查看日志文件/home/work/open-falcon/agent/logs/agent.log

看var目录下的log是否正常,或者浏览器访问其1988端口。另外agent提供了一个–check参数,可以检查agent是否可以正常跑在当前机器上。

#服务端已经收集到falcon-node1的数据。

运维监控系统Open-Falcon


六、配置邮件告警告警(服务端)

#下载编译好的二进制包
cd /home/work/open-falcon
wget https://dl.cactifans.com/open-falcon/falcon-mail-provider.tar.gz
mkdir falcon-mail-provider
tar zxvf falcon-mail-provider.tar.gz -C falcon-mail-provider
cd falcon-mail-provider
vim 修改cfg.json文件相关信息,如下:
 
运维监控系统Open-Falcon

#启动服务:
[root@open-falcon-server falcon-mail-provider]# ./control start
falcon-mail-provider started…, pid=18279

#启动之后使用以下命令测试:
#curl http://127.0.0.1:4000/sender/mail -d “tos=a@a.com,b@b.com&subject=xx&content=yy”
curl http://127.0.0.1:4000/sender/mail -d “tos=xxx@qq.com,xxx@163.com&subject=testmail&content=你好,世界!”

收到qq和163邮件:
运维监控系统Open-Falcon

#配置alarm模块的配置文件cfg.json,修改”mail”: “http://127.0.0.1:10086/mail”选项的url并重启。
sed -i ‘s#http://127.0.0.1:10086/mail#http://127.0.0.1:4000/sender/mail#g’  ./alarm/config/cfg.json
[root@open-falcon-server open-falcon]# ./open-falcon restart  alarm

#配置邮件告警参考:https://book.open-falcon.org/zh_0_2/usage/getting-started.html
##配置微信告警参考:https://github.com/Yanjunhui/chat
##官网: http://open-falcon.org


组件说明
一、agent(数据采集模块):
agent用于采集机器负载监控指标,比如cpu.idle、load.1min、disk.io.util等等,每隔60秒push给Transfer。agent与Transfer建立了长连接,数据发送速度比较快,agent提供了一个http接口/v1/push用于接收用户手工push的一些数据,然后通过长连接迅速转发给Transfer。只要安装了falcon-agent的机器,就会自动开始采集各项指标,主动上报,不需要用户在server做任何配置,agent需要部署到所有要被监控的机器上,每台被监控的机器都要安装agent。
agent会采集哪些信息呢?
  • 机器的性能指标,比如cpu、内存、网卡、磁盘
  • 业务监控指标,比如某个接口调用的latency
  • 各种开源软件的状态指标,如nginx,redis,mysql等
  • 通过snmp采集的各种网络设备的相关指标等

二、Transfer(数据接收模块)
transfer是数据转发服务。它接收agent上报的数据,然后按照哈希规则进行数据分片、并将分片后的数据分别push给graph&judge等组件。同时 transfer 也支持将数据转发给 opentsdb 和 influxdb,也可以转发给另外一个 transfer。

说明:部署完成transfer组件后,请修改agent的配置,使其指向正确的transfer地址。在安装完graph和judge后,请修改transfer的相应配置、使其能够正确寻址到这两个组件。


三、Graph

graph是存储绘图数据的组件。graph组件 接收transfer组件推送上来的监控数据,同时处理api组件的查询请求、返回绘图数据。

说明:部署完graph组件后,请修改transfer和api的配置,使这两个组件可以寻址到graph。


四、API

api组件,提供统一的restAPI操作接口。比如:api组件接收查询请求,根据一致性哈希算法去相应的graph实例查询不同metric的数据,然后汇总拿到的数据,最后统一返回给用户。

注意: 请确保 graphs的内容与transfer的配置完全一致
说明:部署完成api组件后,请修改dashboard组件的配置、使其能够正确寻址到api组件。
请确保api组件的graph列表 与 transfer的配置 一致。


五、
HBS(Heartbeat Server)
心跳服务器,公司所有agent都会连到HBS,每分钟发一次心跳请求。
说明:hbs是可以水平扩展的,至少部署两个实例以保证可用性。一般一个实例可以搞定5000台机器,所以说,如果公司有10万台机器,可以部署20个hbs实例,前面架设lvs,agent中就配置上lvs vip即可。

如果你先部署了agent,后部署的hbs,那咱们部署完hbs之后需要回去修改agent的配置,把agent配置中的heartbeat部分enabled设置为true,addr设置为hbs的rpc地址。如果hbs的配置文件维持默认,rpc端口就是6030,http端口是6031,agent中应该配置为hbs的rpc端口,小心别弄错了。


六、
Judge
Judge用于告警判断,agent将数据push给Transfer,Transfer不但会转发给Graph组件来绘图,还会转发给Judge用于判断是否触发告警。

因为监控系统数据量比较大,一台机器显然是搞不定的,所以必须要有个数据分片方案。Transfer通过一致性哈希来分片,每个Judge就只需要处理一小部分数据就可以了。所以判断告警的功能不能放在直接的数据接收端:Transfer,而应该放到Transfer后面的组件里。


七、Alarm
alarm模块是处理报警event的,judge产生的报警event写入redis,alarm从redis读取处理,并进行不同渠道的发送。
在配置报警策略的时候配置了报警级别,比如P0/P1/P2等等,每个及别的报警都会对应不同的redis队列 alarm去读取这个数据的时候我们希望先读取P0的数据,再读取P1的数据,最后读取P5的数据,因为我们希望先处理优先级高的。于是:用了redis的brpop指令。
有的时候报警短信、邮件太多,对于优先级比较低的报警,希望做报警合并,这些逻辑都是在alarm中做的。
说明:alarm是个单点。对于未恢复的告警是放到alarm的内存中的,alarm还需要做报警合并,故而alarm只能部署一个实例。需要对alarm的存活做好监控。


八、
Task
task是监控系统一个必要的辅助模块。定时任务,实现了如下几个功能:
index更新。包括图表索引的全量更新 和 垃圾索引清理。
falcon服务组件的自身状态数据采集。定时任务采集了transfer、graph、task这三个服务的内部状态数据。
falcon自检控任务。
部署完成task组件后,请修改collector配置、使task能够正确采集transfer & graph的内部状态,请修改monitor配置、使task模块能够自检控Open-Falon的各组件(当前支持transfer、graph、query、judge等)。

九、Nodata
nodata用于检测监控数据的上报异常。nodata和实时报警judge模块协同工作,过程为: 配置了nodata的采集项超时未上报数据,nodata生成一条默认的模拟数据;用户配置相应的报警策略,收到mock数据就产生报警。采集项上报异常检测,作为judge模块的一个必要补充,能够使judge的实时报警功能更加可靠、完善。


十、Aggregator
集群聚合模块。聚合某集群下的所有机器的某个指标的值,提供一种集群视角的监控体验。


十一、 Agent-updater

每台机器都要部署falcon-agent,如果公司机器量比较少,用pssh、ansible、fabric之类的工具手工安装问题也不大。但是公司机器量多了之后,手工安装、升级、回滚falcon-agent将成为噩梦。

agent-updater这个工具,用于管理falcon-agent,agent-updater也有一个agent:ops-updater,可以看做是一个超级agent,用于管理其他agent的agent,呵呵,ops-updater推荐在装机的时候一起安装上。ops-updater通常是不会升级的。具体参看:https://github.com/open-falcon/ops-updater



原理:
agent应该随装机过程部署到每个机器实例上。agent从hbs拉取配置信息,进行数据采集、收集,将数据上报给transfer。
transfer是一个无状态的集群。transfer接收agent上报的数据,然后使用一致性哈希进行数据分片、并把分片后的数据转发给graph、judge集群(transfer还会打一份数据到opentsdb)。
graph组件用于存储、归档作图数据;
dashboard用户监控数据的图表展示,是一个web应用。
judge用于实现报警策略的触发逻辑
alarm负责整理报警信息,使变成适合发送的形式

1、目标服务器运行agent
2、agent采集各类监控项数值,传给transfer
3、transfer校验和整理监控项数值,做一致性hash分片,传给对应的judge模块以验证是否触发告警
4、transfer整理监控项数值,做一致性hash分片,传输给graph以进行数据的存储
5、judge根据具体报警策略或阈值进行告警判断,如触发告警则组装告警event事件,写入缓存队列。
6、alarm和sender根据event事件中的判定结果,执行event,像用户组发送短信或邮件。
7、graph收到监控项数据后,将数据存储成RRD文件格式,进行归档,并提供查询接口。
8、query将调用graph的查询接口,将监控数据传送到dashboard以进行页面展示。
9、dashboard则渲染页面,展示曲线报表图等。
10、portal提供页面供用户配置机器分组、报警策略、表达式、nodata等配置。

原理:客户端安装运行agent,agent进行数据采集,将数据上报给transfer,transfer将数据进行分片并转发给graph进行数据存储,dashboard则会根据存储的监控数据进行页面展示,同时transfer也会将分片数据转发给judge,judge根据报警策略、阈值进行告警判断,如有告警事件,会写入redis缓存队列,alarm会整理报警事件,通过邮件等方式发送报警信息。

原创文章,作者:wz,如若转载,请注明出处:https://www.wzstyle.cn/417.html

发表评论

邮箱地址不会被公开。 必填项已用*标注