open-falcon之安装篇

小米开源监控软件 - open-falcon 安装篇

open-falcon官网地址:http://open-falcon.org/

相关的文档地址(v2.0):https://book.open-falcon.org/zh_0_2/intro/

官网的架构示意图

架构

这里尽量以我的理解来说一下这个架构图每个组件的作用(大部分来自官网):

  1. falcon-agent是部署在每一台被监控的主机上的,主要作用是负责数据采集和数据上报,另外它还有一个proxy-gateway的接口提供给用户使用,这样用户就可以自定义一些数据,然后上报给agent,agent再上报到transfer
  2. transfer是一个无状态的集群(可单点)。transfer接收agent上报的数据,然后使用一致性哈希进行数据分片、并把分片后的数据转发给graph、judge集群(transfer还会打一份数据到opentsdb)。其消耗的资源 主要是网络和CPU
  3. transfer辐射的一个组件是graph,graph组件用于存储、归档作图数据,可以集群部署。每个graph实例会处理一个分片的数据: 接收transfer发送来的分片数据,归档、存储、生成索引;接受query对该数据分片的查询请求。graph会持久存储监控数据,频繁写入磁盘,状态数据会缓存在内存,因此graph消耗的主要资源是磁盘存储、磁盘IO和内存资源。
  4. 图中API的用途是处理终端用户请求,收到查询请求后,会去多个graph里面,查询不同metric的数据,汇总后统一返回给用户。
  5. 这里顺便说一下dashboard,是一个可视化的用户管理ui,用户可以以多个维度来搜索endpoint列表,即可以根据上报的tags来搜索关联的endpoint。
  6. Aggregato 的作用是聚合监控数据,比如说多个机器的某个指标,提供给dashboard显示
  7. nodata 组件的作用是检测监控数据的上报异常,比如agent.alived,异常可以返回-1,重新push到transfer,从而触发告警。
  8. tranfer辐射的还有一个叫judge的插件,judge用于实现报警策略的触发逻辑。judge实现触发计算时,会在本地缓存 触发逻辑的中间状态和定量的监控历史数据,因此会消耗较多的内存资源和计算资源。
  9. 告警judge触发需要一些触发条件,这里需要heartbeat server的策略下发,hbs是open-falcon的配置中心,负责 适配系统的配置信息、管理agent信息等。
  10. 这样judge收到告警策略(portal ui组件配置)之后进行告警判断,符合规则的就放到redis队列中,然后视配置情况进行告警或者合并告警(links组件),告警使用的是alarm组件,alarm需要调用sender(email, 短信api…)

https://book.open-falcon.org/zh_0_2/practice/deploy.html

编译安装后端

这里我机器的原因我只会进行单机的安装,有条件的可以实现以下集群安装:

安装环境:

1
2
3
4
5
OS:CentOS Linux release 7.3.1611 (Core)
go version: go1.9.4 linux/amd64
git version: 1.8.3.1
redis: 3.2.10
mysql:5.7.18

这里我的mysql是源码安装以外,其它都使用yum安装方式。

yum install git golang redis

基础环境配置之后,设置一下GOPATH环境变量

1
2
3
vim ~/.bashrc
export GOPATH=/opt/go
source ~/.bashrc

#这个是自定义的,可以理解成你放go代码的地方,通常地下还需要有src(放源码),pkg,bin 三个目录,而这个路径又叫做workspace

#这里务必写对,除了GOPATH是你自定义的,其他请按照这个来,不然编译的时候会出错

1
2
3
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

创建需要的数据库

先来看看需要导入的5个sql文件
sql
导入到mysql数据库

1
2
3
4
cd $GOPATH/src/github.com/open-falcon/falcon-plus/scripts/mysql/db_schema
for i in \`ls ./\` ;
​ do mysql -uroot -P4400 -h127.0.0.1 -p123456 < $i;
done

创建编译后的文件地址

mkdir /opt/open-falcon

编译open-falcon后端服务

1
2
3
4
cd $GOPATH/src/github.com/open-falcon/falcon-plus/
make all
make agent
make pack

执行成功出现下边这个压缩包:
package

open-falcon-v0.2.1.tar.gz

1
tar -xf open-falcon-v0.2.1.tar.gz -C /opt/open-falcon/

修改mysql的端口和密码,否则启动失败

1
2
3
cd /opt/open-falcon
grep -Ilr 3306 ./ | xargs -n1 -- sed -i 's/root:/root:123456/g'
grep -Ilr 3306 ./ | xargs -n1 -- sed -i 's/3306/4400/g'

启动后端:

./open-falcon start
观察一下成功输出
start log

检查后端:

./open-falcon check
观察一下check输出
check log

安装前端

选择性安装依赖:

1
2
yum install -y python-virtualenv python-devel openldap-devel mysql-devel
yum groupinstall "Development tools"

安装dashboard

1
2
cd /opt/open-falcon
git clone https://github.com/open-falcon/dashboard.git

创建一个虚拟python环境env

1
2
cd dashboard
virtualenv ./env

使用虚拟环境安装python依赖,独立于宿主机

1
./env/bin/pip install -r pip_requirements.txt -i https://pypi.douban.com/simple

修改一下rrd的配置文件,主要是mysql的配置,其他按需修改

1
2
3
4
5
6
7
vim rrd/config.py
PORTAL_DB_HOST = os.environ.get("PORTAL_DB_HOST","127.0.0.1")
PORTAL_DB_PORT = int(os.environ.get("PORTAL_DB_PORT",4400))
PORTAL_DB_USER = os.environ.get("PORTAL_DB_USER","root")
PORTAL_DB_PASS = os.environ.get("PORTAL_DB_PASS","123456")

API_ADDR = os.environ.get("API_ADDR","http://192.168.36.183:8080/api/v1") //这个修改成外网的ip

启动前端:

./env/bin/python wsgi.py #这是以开发者模式启动,将会阻塞终端
或者
./control start #以生产环境启动,另外./control stop就是停止dashboard

查看日志

./control tail #查看日志

其他各相关的日志在各自模块下的log文件夹下

使用的相关端口

[root@int-test-1 dashboard]# netstat  -tunpl  | grep fa
tcp6       0      0 :::6055                 :::*                    LISTEN      7166/falcon-aggrega
tcp6       0      0 :::6090                 :::*                    LISTEN      7158/falcon-nodata
tcp6       0      0 :::6060                 :::*                    LISTEN      7552/falcon-transfe 
tcp6       0      0 :::14444                :::*                    LISTEN      7186/falcon-gateway 
tcp6       0      0 :::6030                 :::*                    LISTEN      7136/falcon-hbs     
tcp6       0      0 :::6031                 :::*                    LISTEN      7136/falcon-hbs     
tcp6       0      0 :::8080                 :::*                    LISTEN      7195/falcon-api     
tcp6       0      0 :::8433                 :::*                    LISTEN      7552/falcon-transfe 
tcp6       0      0 :::6070                 :::*                    LISTEN      7122/falcon-graph   
tcp6       0      0 :::6071                 :::*                    LISTEN      7122/falcon-graph   
tcp6       0      0 :::9912                 :::*                    LISTEN      7209/falcon-alarm   
tcp6       0      0 :::3000                 :::*                    LISTEN      994/grafana-server  
tcp6       0      0 :::4444                 :::*                    LISTEN      7552/falcon-transfe 
tcp6       0      0 :::16060                :::*                    LISTEN      7186/falcon-gateway 
tcp6       0      0 :::6080                 :::*                    LISTEN      7147/falcon-judge   
tcp6       0      0 :::18433                :::*                    LISTEN      7186/falcon-gateway 
tcp6       0      0 :::6081                 :::*                    LISTEN      7147/falcon-judge   
tcp6       0      0 :::1988                 :::*                    LISTEN      7176/falcon-agent 
tcp        0      0 0.0.0.0:8081            0.0.0.0:*               LISTEN      10660/python

8081端口是dashboard的端口,访问前端:
http://192.168.36.183:8081/

使用dashboard

登录之后需要先注册一个账号

sign up

填写相关的信息,注意邮箱地址,告警的时候会使用到

user info

登录之后可以修改用户信息

change info

查看dashboard

dashboard

查看/过滤 endpoint 和counter

endpoint

查看监控图像

graph

好了,到这里就可以简单的查看监控的counter和监控图像了,接下来一篇会部署agent到其他节点,部署告警策略。