上一篇已经写了falcon的基础安装配置以及简单的使用说明,现在来记录下一些业务相关的监控如何做,截图居多。心疼流量三秒…其实实现方法都不难,设计一个良好的命名规范以及科学的分组,实际上对监控来说是十分必要的。还有就是要对监控指标的判断做个性化设置,最好就是看图的话一眼就概览全局(要让图清晰直观的反应状况),报警的话做到真实有效人性化。这篇里面只涉及如何对常见服务进行配置。

  1. 对于基础监控:cpu、内存、IO、网络适合折线图;而磁盘使用量这些其实设置多维度报警即可(如磁盘使用率>80%且小于20G报警)
  2. 对于服务和端口:监控出数字显示服务总数量,服务正常数量、服务异常数量,然后配置报警即可
  3. 对于业务监控:对业务指标使用折线图一般都是适用的

监控自定义服务进程或端口

**Tips:**一般而言,对于某一服务仅监听服务或端口取其一即可,因为一般而言进程挂了端口自然也就down了,这两者是有直接关联的。但也分业务,具体看需求吧

监控端口

**Tips:**端口监控,falcon现在的机制是配置完策略agent才会去采集这些信息。可参考官网说明

  • 设置端口监控模板 falconuse-1
  • 模板关联至主机组
  • 然后就可以收到报警信息了(这里为测试方便监控了Mysql的3306端口,有值就报警) falconuse-2

监控服务

**Tips:**官方给出两种方案,一种取/proc/$pid/status这里面的name字段,另一种取/proc/$pid/cmdline里的name字段,这里拿mysql举例,个人推荐cmdline,因为name字段很容易重复

  • 获取两个字段
    1
    2
    
    ps axu | grep mysql
    #root      5465  0.0  0.0 113176  1600 ?        S    May18   0:00 /bin/sh /usr/libexec/mysql55/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql
    

#mysql 5658 0.0 1.2 1336076 101032 ? Sl May18 27:08 /usr/libexec/mysql55/mysqld –basedir=/usr –datadir=/var/lib/mysql –plugin-dir=/usr/lib64/mysql/plugin –user=mysql –log-error=/var/log/mysqld.log –pid-file=/var/run/mysqld/mysqld.pid –socket=/var/lib/mysql/mysql.sock #tai_ops 28522 0.0 0.0 110408 868 pts/0 S+ 03:04 0:00 grep mysql cat /proc/5465/status | grep -i name #Name: mysqld_safe cat /proc/5465/cmdline #/bin/sh/usr/libexec/mysql55/mysqld_safe–datadir=/var/lib/mysql–socket=/var/lib/mysql/mysql.sock–pid-file=/var/run/mysqld/mysqld.pid–basedir=/usr–user=mysql cat /proc/5658/status | grep -i name #Name: mysqld cat /proc/5658/cmdline #/usr/libexec/mysql55/mysqld–basedir=/usr–datadir=/var/lib/mysql–plugin-dir=/usr/lib64/mysql/plugin–user=mysql–log-error=/var/log/mysqld.log–pid-file=/var/run/mysqld/m

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
- Dashboard上模板配置
![falconuse-3](http://img.arvon.top:80/images/2019/08/12/20170704-falconuse-3.jpg)
- 报警如下
**注意:**我测试的host组有3台机器,其中一台是没有mysql的,所以检测不到进程所以就报警了,从这也可以看出,falcon默认是不收集这些数据的,当你写上规则之后它会按这个规则进行抓取不管有没有这个服务,只要你配置了规则,就按这个规则去取数据,取不到或取到报警阈值都会报警
![falconuse-4](http://img.arvon.top:80/images/2019/08/12/20170704-falconuse-4.jpg)

### 常用服务监控

Tips:常用服务监控除了官方提供的一些方案也可以自己往transfer接口post自定义的监控数据,不过个人感觉使用crontab的方式收集数据还是挺僵硬的

#### Redis监控/Ardb监控

官方提供了[两种方案](https://book.open-falcon.org/zh_0_2/usage/redis.html),都在github开源,由于第二种方案目前还不支持redis3.2.0,所以我使用第一种。实际上就是连接到redis然后获取一些redis的info信息,然后用固定的数据格式post给falcon,ardb与redis监控基本相同。
- 获取监控脚本
需要**特别注意**脚本中redis-cli的命令路径,我就折在这里了
```bash
git clone https://github.com/iambocai/falcon-monit-scripts.git
ll /data/falcon_scripts/falcon-monit-scripts/redis/redis-monitor.py
#vim redis-monitor.py  修改脚本,主要该host、port、redis-cli的路径
#设置crontab -e
#* * * * * python /opt/falcon-agent/scripts/falcon-monit-scripts/redis/redis-monitor.py
  • web配置如下 5
  • 出图如下 6

Mysql监控

由于小米官方给出的方案是需要go环境进行的编译的,所以就直接在falcon的server机器上进行编译,然后拿编译的包对mysql机器进行分发部署

  • 下载并编译监控mysql的脚本源码 这里监控连接数据库的用户必须是root不然会access deney
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    
    cd $GOPATH/src/github.com/open-falcon
    git clone https://github.com/open-falcon/mymon.git
    cd mymon
    go get ./...
    go build -o mymon
    #crontab设置 crontab -e 或直接写配置
    #* * * * * cd $GOPATH/src/github.com/open-falcon/mymon && ./mymon -c etc/mon.cfg
    #echo '* * * * * cd $GOPATH/src/github.com/open-falcon/mymon && ./mymon -c etc/mon.cfg' > /etc/cron.d/mymon
    tar czvf mysql_monitor.tar.gz mymon etc/
    #然后去部署这个tar包即可
    
  • 调试正常后log输出 具体监控项、tag等信息都可以通过日志获得,安装文档中有队metric的汇总表

    … {“level”:“debug”,“msg”:“MetaData Metric:Innodb_mutex_spin_waits Endpoint:ip-10-222-0-63 Value:302 CounterType:COUNTER Tags:port=3306 Timestamp:1499389081 Step:60”,“time”:“2017-07-07T00:58:01Z”} {“level”:“debug”,“msg”:“MetaData Metric:Innodb_mutex_spin_rounds Endpoint:ip-10-222-0-63 Value:1780 CounterType:COUNTER Tags:port=3306 Timestamp:1499389081 Step:60”,“time”:“2017-07-07T00:58:01Z”} {“level”:“debug”,“msg”:“MetaData Metric:Innodb_mutex_os_waits Endpoint:ip-10-222-0-63 Value:42 CounterType:COUNTER Tags:port=3306 Timestamp:1499389081 Step:60”,“time”:“2017-07-07T00:58:01Z”} {“level”:“debug”,“msg”:“MetaData Metric:Is_slave Endpoint:ip-10-222-0-63 Value:0 CounterType:GAUGE Tags:port=3306 Timestamp:1499389081 Step:60”,“time”:“2017-07-07T00:58:01Z”} {“level”:“info”,“msg”:“Send response 127.0.0.1:3306: success”,“time”:“2017-07-07T00:58:01Z”} {“level”:“debug”,“msg”:“Send to http://10.222.0.44:1988/v1/push, size: 1”,“time”:“2017-07-07T00:58:01Z”} {“level”:“debug”,“msg”:“MetaData Metric:mysql_alive_local Endpoint:ip-10-222-0-63 Value:1 CounterType:GAUGE Tags:port=3306 Timestamp:1499389081 Step:60”,“time”:“2017-07-07T00:58:01Z”} {“level”:“info”,“msg”:“Alive data response 127.0.0.1:3306: success”,“time”:“2017-07-07T00:58:01Z”}

  • Web配置举例 7
  • 出图如下 8

nginx监控

这个目前没什么需求,就直接先参考小米给出的方案吧,其实都大同小异,有需求的话之后可能会自己写一些业务方面的监控脚本。到时候再共享

关于排错

  • 绘图数据流向及验证

    agent->transfer->graph->query->dashboard **可以从 graph 的http接口进行验证