目前监控同时使用了阿里云云监控(基础监控)、prometheus(应用监控),监控系统比较混乱,接入方式以及查询入口、报警配置及报警方式不统一,所以使用open-falcon来做统一。
使用open-falcon对比prometheus主要是考虑一下几个方面:
- open-falcon相较prometheus方式有更好的性能。
- open-falcon各个组件基本都是实现很好的横向扩展。
- open-falcon对比prometheus可以通过hostgroup和template更好的管理应用、host、报警规则的关系。
- open-falcon接口完善,可以更高效率的配置报警信息。
兼容历史数据问题
业务暴露业务指标通过promehtues进行采集,迁移到open-falcon时也需要做对应的兼容,通过falcon-agent的plugin功能对服务暴露的prometheus指标进行解析push到本地agent。
agent部署规范
open-falcon agent使用ansible进行标准话推送:
推送方式:
# 1. 更新hosts文件, 更新需要推送的IP信息
# 2. ansible 批量推送
ansible-playbook -i hosts -e host=all install_openfalcon_agent.yaml -f 30
ansible任务如下:
- name: "install the git"
yum:
name: git
- name: "init the dir"
file:
path: "/opt/servers/.openfalcon_agent"
recurse: yes
state: directory
- name: "push openfalcon_agent file"
copy:
src: "{{ item.src }}"
dest: "{{ item.dest }}"
mode: 0755
owner: root
group: root
with_items:
- { src: "files/openfalcon_agent.tar.gz", dest: "/opt/servers/.openfalcon_agent/openfalcon_agent.tar.gz" }
- name: "unarchive file "
unarchive:
src: /opt/servers/.openfalcon_agent/openfalcon_agent.tar.gz
dest: /opt/servers/.openfalcon_agent/
remote_src: yes
- name: "push the openfalcon_agent configuration!"
template:
src: "{{ item.src }}"
dest: "{{ item.dest }}"
mode: 0755
owner: root
group: root
with_items:
- { src: "templates/cfg.json.j2", dest: "/opt/servers/.openfalcon_agent/agent/config/cfg.json" }
- name: "start openfalcon_agent"
shell: "cd /opt/servers/.openfalcon_agent/ && chmod 755 ./open-falcon && nohup ./open-falcon restart agent &"
become_user: root
- name: "plugin update"
shell: "curl -X GET http://127.0.0.1:1988/plugin/update"
plugin插件使用方式
-
在git仓库中创建public类型的项目,线上生产环境使用的git地址为:https://code.soulapp-inc.cn/falcon/falcon-plugin
-
在agent的配置文件中修改plugin相关的配置。
"plugin": { "enabled": true, "dir": "./plugin", "git": "https://code.soulapp-inc.cn/falcon/falcon-plugin.git", "logs": "./logs" },
-
配置完成后确保节点下发最新的配置后,在hostgroup中对host主机和plugin进行绑定,
注意事项
- open-falcon-agent在启动后不会去主动拉取plugin相关的代码信息, 需要手动触发,这里我使用在ansilbe中配置服务启动后进行相关接口的调用来触发代码拉取,需要注意git仓库的压力问题。
- 推送open-falcon-agent时注意不要有plugin目录,会导致clone代码异常。
- plugin相关的脚本执行后后输出信息,会有日志的报错信息。这个不影响使用,非必需。
- portal上配置完成之后并不会立马生效,有个同步的过程,最终是agent通过调用hbs的接口获取的,需要一两分钟。上例我们绑定了sys/ntp,这实际是个目录,这个目录下的所有插件都会被执行,那什么样的文件会被看做插件呢?文件名是数字下划线打头的,这个数字代表的是step,即多长时间跑一次,单位是秒,比如60_a.py,就是在通过命名告诉agent,这个插件每60秒跑一次。sys/ntp目录下的子目录、其他命名方式的文件都会被忽略。
参考文档:
Prometheus-exporter-collector: https://github.com/n9e/prometheus-exporter-collector
plugin机制:https://book.open-falcon.org/zh_0_2/philosophy/plugin.html
open-falcon-agent接口:https://github.com/open-falcon/falcon-plus/blob/master/modules/agent/http/