telegraf 收集监控数据

好风 发表于 2016-11-25T02:55:59.849466Z
引用地址:https://plus.ooclab.com/note/article/1305

常用功能

测试收集数据

指定配置文件,指定收集的 input 模块,运行 telegraf 收集数据:

# telegraf -config /etc/telegraf/telegraf.conf -input-filter mem -test
* Plugin: inputs.mem, Collection 1
> mem,host=dev130.sailcraft active=390197248i,available=5849612288i,available_percent=71.70832791468479,buffered=8806400i,cached=5539155968i,free=243499008i,inactive=5403308032i,total=8157507584i,used=2307895296i,used_percent=28.29167208531522 1480044595000000000

inputs

docker

如果出现下面错误:

E! ERROR in input [inputs.docker]: Cannot connect to the Docker daemon. Is the docker daemon running on this host?

请为 telegraf 用户增加 docker 组,这样才可以让 telegraf 访问 dockerd 服务。

exec

一个实例:exec 收集一个脚本,统计连接数(使用lsof,默认需要root权限):

# cat /opt/telegraf/exec/skynet_online.sh 
#!/bin/bash

ONLINE=`lsof -i:1888 | grep ESTABLISHED | wc -l`
cat <<EOF
{
  "online": $ONLINE
}
EOF

如果 root 用户执行 test 可以收集数据:

# telegraf -test -config-directory /etc/telegraf/telegraf.d/ -input-filter=exec -debug
2017/03/02 01:58:58 I! Using config file: /etc/telegraf/telegraf.conf
* Plugin: inputs.exec, Collection 1
> exec_mycollector,host=skynet-1 online=3 1488441539000000000

而用 systemd 运行 telegraf.service 却无法获取数据。 先使用 telegraf 测试下收集是否正确:

sudo -u telegraf telegraf -test -config-directory /etc/telegraf/telegraf.d/ -input-filter=exec -debug                                                             
2017/03/02 01:56:37 I! Using config file: /etc/telegraf/telegraf.conf
* Plugin: inputs.exec, Collection 1
> exec_mycollector,host=skynet-1 online=0 1488441397000000000

可能是 systemd 使用 telegraf 用户权限运行进程的:

# grep User /usr/lib/systemd/system/telegraf.service 
User=telegraf

暂时先修改为 root 角色吧。

参考:Exec which outputs valid JSON fails