其实这篇是在Centos6.7下做的,不过没感受到差距
官方文档http://book.open-falcon.org/zh_0_2/philosophy/plugin.html
plugin就是open-falcon上类似于zabbix的用户自定义监控项userparameter的功能,简单来说,你把采集监控数据的可执行文件弄好,在open-falcon前端页面配置一下,他就会按你设置的时间间隔去执行脚本并获取输出作为监控数据
官方给的教程是把可执行文件放在git上,再通过http请求让agent自动去拉取这些文件,但是我的服务器连不上外网,所以写了这篇,其实也没差多少
1 配置agent
open-falcon的agent配置文件要进行修改,使能plugin
因为我们不用git的那些功能,只要改enabled和dir就可以了
"plugin": {
"enabled": true, // 使能
"dir": "./plugin", // 本地插件目录,相对目录是相对于open-falcon这个脚本的目录而言
"git": "https://github.com/open-falcon/plugin.git",
"logs": "./logs"
},
这个dir是相对于open-falcon这个可执行文件而言的(就是我们./open-falcon start agent那个),比如下面这么写,就要建立这样的目录结构
改完重启agent
sudo ./open-falcon restart agent
2 编写监控脚本
只要这个脚本执行后,可以打印出json,json按open-falcon push数据的json格式来就好了
因为每个监控脚本都要写一下怎么把数据封装成open-falcon的json格式很麻烦,所以我写了一个封装脚本,要执行shell命令还是脚本,自己填就好了,支持中文,output里面每一行代表一个自定义监控项,自己要几个写几个,用逗号分隔
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import time
import json
import os
def cmd(command):
return os.popen(command).read().split("\n")[0]
output = [
{"endpoint": "这里写你的endpoint", "tags": "这里写你的tag", "timestamp": int(time.time()), "metric": "这里写你的counter名", "value": cmd(这里写上你要执行的shell命令,或者脚本), "counterType": "GAUGE", "step": 这里写监控周期},
{"endpoint": "这里写你的endpoint", "tags": "这里写你的tag", "timestamp": int(time.time()), "metric": "这里写你的counter名", "value": cmd(这里写上你要执行的shell命令,或者脚本), "counterType": "GAUGE", "step": 这里写监控周期}
]
print json.dumps(output, ensure_ascii=False)
脚本要用数字加下划线开头,数字就是step,比如我这个脚本60s执行一次,就命名为60_xxx.py
脚本放在刚才建立的plugin目录下,再建立一个子目录MetaStore,把脚本放进去
再强调一下,目录结构是plugin/MetaStore/60_xxx.py
3 前端配置
现在来到HostGroup那里,找到你要绑定这个plugin的主机组
这里的目录是plugin下面的目录,比如我刚才的目录结构,这里填写MetaStore就可以了
配置之后,等一两分钟,就可以了