环境
内核: n3.10.0-693.11.6.el7.x86_64
系统: CentOS Linux release 7.4.1708 (Core)
falcon: open-falcon-v0.2.x.tar.gz
go: go1.9.2.linux-amd64.tar.gz
安装
安装redis和mysql
yum install -y redis
yum install -y mariadb-server
导入表结构
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/
安装golang环境
tar -C /usr/local -xzf go1.9.2.linux-amd64.tar.gz
echo ‘export GOROOT=/usr/local/go‘ >> /etc/profile
echo ‘export GOPATH=/root/workspace‘ >> /etc/profile
echo ‘export PATH=$PATH:/usr/local/go/bin
‘ >> /etc/profile
从源码编译
mkdir -p $GOPATH/src/github.com/open-falcon
cd $GOPATH/src/github.com/open-falcon
git clone https://github.com/open-falcon/falcon-plus.git
cd falcon-plus/
make all modules
make pack
##这时候,你会在当前目录下面,得到open-falcon-v0.2.x.tar.gz的压缩包,就表示已经编译和打包成功了。
创建工作目录
export FALCON_HOME=/home/work
export WORKSPACE=$FALCON_HOME/open-falcon
mkdir -p $WORKSPACE
解压二进制包
tar xf open-falcon-v0.2.1.tar.gz -C $WORKSPACE
根据实际情况修改配置文件中的账号密码
cd $WORKSPACE
grep -Ilr 3306 ./ | xargs -n1 -- sed -i ‘s/root:password/自己的用户:自己的密码/g‘)
启动
cd $WORKSPACE
./open-falcon start
# 检查所有模块的启动状况
./open-falcon check
安装dashboard
export HOME=/home/work
export WORKSPACE=$HOME/open-falcon
mkdir -p $WORKSPACE
cd $WORKSPACE
# 克隆代码
cd $WORKSPACE
git clone https://github.com/open-falcon/dashboard.git
# 安装依赖包
yum install -y python-virtualenv
yum install -y python-devel
yum install -y openldap-devel
yum install -y mysql-devel
yum groupinstall "Development tools"
cd $WORKSPACE/dashboard/
virtualenv ./env
./env/bin/pip install -r pip_requirements.txt -i https://pypi.douban.com/simple
# 修改配置
dashboard的配置文件为: ‘rrd/config.py‘,请根据实际情况修改
## API_ADDR 表示后端api组件的地址
API_ADDR = "http://127.0.0.1:8080/api/v1"
## 根据实际情况,修改PORTAL_DB_*, 默认用户名为root,默认密码为""
## 根据实际情况,修改ALARM_DB_*, 默认用户名为root,默认密码为""
# 启动
bash control start
# 停止
bash control stop
# 查看日志
bash control tail
组件介绍
- falcon-graph
- graph是存储绘图数据的组件。graph组件 接收transfer组件推送上来的监控数据,同时处理api组件的查询请求、返回绘图数据。
- 部署完graph组件后,请修改transfer和api的配置,使这两个组件可以寻址到graph。
- falcon-hbs
- agent发送心跳信息给HBS的时候,会把hostname、ip、agent version、plugin version等信息告诉HBS,HBS负责更新host表。
- HBS去获取所有的报警策略缓存在内存里,然后Judge去向HBS请求。
- 如果你先部署了agent,后部署的hbs,那咱们部署完hbs之后需要回去修改agent的配置,把agent配置中的heartbeat部分enabled设置为true,addr设置为hbs的rpc地址。如果hbs的配置文件维持默认,rpc端口就是6030,http端口是6031,agent中应该配置为hbs的rpc端口,小心别弄错了。
- falcon-judge
- Judge用于告警判断,agent将数据push给Transfer,Transfer不但会转发给Graph组件来绘图,还会转发给Judge用于判断是否触发告警。
- 因为监控系统数据量比较大,一台机器显然是搞不定的,所以必须要有个数据分片方案。Transfer通过一致性哈希来分片,每个Judge就只需要处理一小部分数据就可以了。所以判断告警的功能不能放在直接的数据接收端:Transfer,而应该放到Transfer后面的组件里。
- falcon-transfer
- transfer是数据转发服务。它接收agent上报的数据,然后按照哈希规则进行数据分片、并将分片后的数据分别push给graph&judge等组件。
- 部署完成transfer组件后,请修改agent的配置,使其指向正确的transfer地址。在安装完graph和judge后,请修改transfer的相应配置、使其能够正确寻址到这两个组件。
- falcon-nodata
- nodata用于检测监控数据的上报异常。nodata和实时报警judge模块协同工作,过程为: 配置了nodata的采集项超时未上报数据,nodata生成一条默认的模拟数据;用户配置相应的报警策略,收到mock数据就产生报警。采集项上报异常检测,作为judge模块的一个必要补充,能够使judge的实时报警功能更加可靠、完善。
- falcon-aggregator
- 集群聚合模块。聚合某集群下的所有机器的某个指标的值,提供一种集群视角的监控体验。
- falcon-agent
- agent用于采集机器负载监控指标,比如cpu.idle、load.1min、disk.io.util等等,每隔60秒push给Transfer。agent与Transfer建立了长连接,数据发送速度比较快,agent提供了一个http接口/v1/push用于接收用户手工push的一些数据,然后通过长连接迅速转发给Transfer
- falcon-gateway
- falcon-api
- api组件,提供统一的restAPI操作接口。比如:api组件接收查询请求,根据一致性哈希算法去相应的graph实例查询不同metric的数据,然后汇总拿到的数据,最后统一返回给用户。
- 部署完成api组件后,请修改dashboard组件的配置、使其能够正确寻址到api组件。
- 请确保api组件的graph列表 与 transfer的配置 一致。
- falcon-alarm
- alarm模块是处理报警event的,judge产生的报警event写入redis,alarm从redis读取处理,并进行不同渠道的发送。
- alarm是个单点。对于未恢复的告警是放到alarm的内存中的,alarm还需要做报警合并,故而alarm只能部署一个实例。需要对alarm的存活做好监控。
- 如果某个核心服务挂了,可能会造成大面积报警,为了减少报警短信数量,我们做了报警合并功能。把报警信息写入dashboard模块,然后dashboard返回一个url地址给alarm,alarm将这个url链接发给用户,这样用户只要收到一条短信(里边是个url地址),点击url进去就是多条报警内容。
- highQueues中配置的几个event队列中的事件是不会做报警合并的,因为那些是高优先级的报警,报警合并只是针对lowQueues中的事件。如果所有的事件都不想做报警合并,就把所有的event队列都配置到highQueues中即可
监控实现
端口监控
net.port.listen/port=22
net.port.listen/port=80
net.port.listen/port=443
进程监控
proc.num/name=ntpd
# 这里的name是cat /proc/ntpd对应的进程id/status中的name字段
yum install -y redis
yum install -y mariadb-server
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/
tar -C /usr/local -xzf go1.9.2.linux-amd64.tar.gz
echo ‘export GOROOT=/usr/local/go‘ >> /etc/profile
echo ‘export GOPATH=/root/workspace‘ >> /etc/profile
echo ‘export PATH=$PATH:/usr/local/go/bin
‘ >> /etc/profile
mkdir -p $GOPATH/src/github.com/open-falcon
cd $GOPATH/src/github.com/open-falcon
git clone https://github.com/open-falcon/falcon-plus.git
cd falcon-plus/
make all modules
make pack
##这时候,你会在当前目录下面,得到open-falcon-v0.2.x.tar.gz的压缩包,就表示已经编译和打包成功了。
export FALCON_HOME=/home/work
export WORKSPACE=$FALCON_HOME/open-falcon
mkdir -p $WORKSPACE
tar xf open-falcon-v0.2.1.tar.gz -C $WORKSPACE
cd $WORKSPACE
grep -Ilr 3306 ./ | xargs -n1 -- sed -i ‘s/root:password/自己的用户:自己的密码/g‘)
cd $WORKSPACE
./open-falcon start
# 检查所有模块的启动状况
./open-falcon check
export HOME=/home/work
export WORKSPACE=$HOME/open-falcon
mkdir -p $WORKSPACE
cd $WORKSPACE
# 克隆代码
cd $WORKSPACE
git clone https://github.com/open-falcon/dashboard.git
# 安装依赖包
yum install -y python-virtualenv
yum install -y python-devel
yum install -y openldap-devel
yum install -y mysql-devel
yum groupinstall "Development tools"
cd $WORKSPACE/dashboard/
virtualenv ./env
./env/bin/pip install -r pip_requirements.txt -i https://pypi.douban.com/simple
# 修改配置
dashboard的配置文件为: ‘rrd/config.py‘,请根据实际情况修改
## API_ADDR 表示后端api组件的地址
API_ADDR = "http://127.0.0.1:8080/api/v1"
## 根据实际情况,修改PORTAL_DB_*, 默认用户名为root,默认密码为""
## 根据实际情况,修改ALARM_DB_*, 默认用户名为root,默认密码为""
# 启动
bash control start
# 停止
bash control stop
# 查看日志
bash control tail
- graph是存储绘图数据的组件。graph组件 接收transfer组件推送上来的监控数据,同时处理api组件的查询请求、返回绘图数据。
- 部署完graph组件后,请修改transfer和api的配置,使这两个组件可以寻址到graph。
- agent发送心跳信息给HBS的时候,会把hostname、ip、agent version、plugin version等信息告诉HBS,HBS负责更新host表。
- HBS去获取所有的报警策略缓存在内存里,然后Judge去向HBS请求。
- 如果你先部署了agent,后部署的hbs,那咱们部署完hbs之后需要回去修改agent的配置,把agent配置中的heartbeat部分enabled设置为true,addr设置为hbs的rpc地址。如果hbs的配置文件维持默认,rpc端口就是6030,http端口是6031,agent中应该配置为hbs的rpc端口,小心别弄错了。
- Judge用于告警判断,agent将数据push给Transfer,Transfer不但会转发给Graph组件来绘图,还会转发给Judge用于判断是否触发告警。
- 因为监控系统数据量比较大,一台机器显然是搞不定的,所以必须要有个数据分片方案。Transfer通过一致性哈希来分片,每个Judge就只需要处理一小部分数据就可以了。所以判断告警的功能不能放在直接的数据接收端:Transfer,而应该放到Transfer后面的组件里。
- transfer是数据转发服务。它接收agent上报的数据,然后按照哈希规则进行数据分片、并将分片后的数据分别push给graph&judge等组件。
- 部署完成transfer组件后,请修改agent的配置,使其指向正确的transfer地址。在安装完graph和judge后,请修改transfer的相应配置、使其能够正确寻址到这两个组件。
- nodata用于检测监控数据的上报异常。nodata和实时报警judge模块协同工作,过程为: 配置了nodata的采集项超时未上报数据,nodata生成一条默认的模拟数据;用户配置相应的报警策略,收到mock数据就产生报警。采集项上报异常检测,作为judge模块的一个必要补充,能够使judge的实时报警功能更加可靠、完善。
- 集群聚合模块。聚合某集群下的所有机器的某个指标的值,提供一种集群视角的监控体验。
- agent用于采集机器负载监控指标,比如cpu.idle、load.1min、disk.io.util等等,每隔60秒push给Transfer。agent与Transfer建立了长连接,数据发送速度比较快,agent提供了一个http接口/v1/push用于接收用户手工push的一些数据,然后通过长连接迅速转发给Transfer
- api组件,提供统一的restAPI操作接口。比如:api组件接收查询请求,根据一致性哈希算法去相应的graph实例查询不同metric的数据,然后汇总拿到的数据,最后统一返回给用户。
- 部署完成api组件后,请修改dashboard组件的配置、使其能够正确寻址到api组件。
- 请确保api组件的graph列表 与 transfer的配置 一致。
- alarm模块是处理报警event的,judge产生的报警event写入redis,alarm从redis读取处理,并进行不同渠道的发送。
- alarm是个单点。对于未恢复的告警是放到alarm的内存中的,alarm还需要做报警合并,故而alarm只能部署一个实例。需要对alarm的存活做好监控。
- 如果某个核心服务挂了,可能会造成大面积报警,为了减少报警短信数量,我们做了报警合并功能。把报警信息写入dashboard模块,然后dashboard返回一个url地址给alarm,alarm将这个url链接发给用户,这样用户只要收到一条短信(里边是个url地址),点击url进去就是多条报警内容。
- highQueues中配置的几个event队列中的事件是不会做报警合并的,因为那些是高优先级的报警,报警合并只是针对lowQueues中的事件。如果所有的事件都不想做报警合并,就把所有的event队列都配置到highQueues中即可
net.port.listen/port=22
net.port.listen/port=80
net.port.listen/port=443
proc.num/name=ntpd
# 这里的name是cat /proc/ntpd对应的进程id/status中的name字段
怎么知道我的策略是否同步成功了?
A: curl -s "judge-hostname:port/strategy/host.test.01/cpu.idle", 这个是查看 机器host.test.01 & metric为 cpu.idle 对应的策略。
触发器函数:http://book.open-falcon.org/zh_0_2/usage/func.html
基本上all(#3)就够用了,其他先不用记,先知道有就行。