菜单位置:策略配置 / 采集配置 / 新建 / 插件,大部分字段的含义一目了然不再赘述。

    插件是扩展agent采集能力的一种手段,通常是一个脚本,有时是二进制,我们在web上通过配置,告诉系统哪些机器上应该执行哪些插件,执行频率是多少,插件脚本的路径在哪里等等,这个配置会下发给agent,agent就知道去哪个位置找插件,并且按照某个频率周期性去执行,截获插件的stdout,解析出监控指标上报。

    截获的stdout要求是个json array,举例:

    1. [
    2. {
    3. "metric": "disk.io.util",
    4. "tags": "device=sda",
    5. "value": 15.4,
    6. "timestamp": 1554455574
    7. },
    8. {
    9. "metric": "api.latency",
    10. "tags": "api=/api/v1/auth/login,srv=n9e,mod=monapi,idc=bj",
    11. "value": 5.4,
    12. "timestamp": 1554455574
    13. }
    14. ]

    还记得监控指标那一节讲解的DataModel么,这个json和那个相比,少了两个字段,一个是endpoint,一个是step,endpoint可以不为空,可以为空,为空是个偷懒的做法啦,为空的话就会默认使用agent的endpoint(一般就是本机ip),step这个字段在插件场景不需要,因为web端会配置插件多久跑一次,所以agent知道step(就是用户配置的执行频率)是多少,即使这里输出了step值,也会被agent覆盖掉。

    agent执行插件,每次都是fork一个进程去跑的,就类似我们在shell环境下跑一个脚本,Linux下跑一个脚本可以给脚本传参数,可以设置环境变量,可以给脚本传入stdin,所以页面上也支持配置这些内容。有些社区同仁贡献了一些插件脚本,在这里,欢迎大家把一些好用的插件脚本贡献到这个repo。

    另外,插件机制有个比较有意思的用法,可以和Prometheus社区的各类exporter做整合,之前录制过一个视频讲解这块内容,大家可以参考:开源运维监控系统Nightingale-系列10-新版插件以及与Prometheus Exporter整合