telegraf 使用 inputs.exec插件收集监控数据

Posted tommyjiang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了telegraf 使用 inputs.exec插件收集监控数据相关的知识,希望对你有一定的参考价值。

telegraf (v1.5.2)虽然好用但是默认情况下并不能帮你收集好所有你需要的数据,比如io数据,默认情况下只收集了iotime, iops_in_process, weighted_io_time, read, write等相关数据,并不能收集到每个盘的iops, await, svctm, util 等数据,最近正好有这个需求,查了下官网telegraf可以支持用户自定义脚本收集监控数据上传到infulxdb,下面直奔主题吧

1,自己写脚本收集好每块盘的iops, await, svctm, util , collect_iostat.sh脚本内容如下

#/bin/bash

devname=(`lsblk| grep disk|awk {print $1}`)
dirname=(`lsblk| grep disk|awk {if ($7=="") print "/";else print $7}`)
#当时想用字典格式存储这些目录名,后来改为变量方式,shell的[ ] { } * @ $特殊字符会让你抓狂
#declare -A devdict
devnum=`expr ${#devname[@]} - 1`
for i in `seq 0 $devnum`;do
  if [-z "${dirname[$i]}" ];then
    eval ${devname[$i]}="/"
  else
    eval ${devname[$i]}="${dirname[$i]}"
  fi
  #devdict+=([${devname[$i]}]="${dirname[$i]}")
done
#echo ${!devdict[*]}
#echo ${devdict[*]}

ioarry=`iostat -x | grep sd|awk {print "datadir=${"$1"}@r="$4",w="$5",await="$10",svctm="$11",util="$12}`
for i in ${ioarry[@]};do
  eval temp="${i}"
  #替换特殊字符@,shell中空格会截断为两个元素
  temp=${temp/@/ }
  echo "exec,${temp}"
  #保证最后输出如下格式,第一个字端是measurements名,如果inputs.exec插件中有配置name_suffix会自动加上后缀
  #输出格式为measurements名, 逗号, tag keys(逗号分隔),空格,filed keys(逗号分隔)
  #数据格式输出不匹配会导致telegraf解析不了数据上到influxdb失败,调试的时候卡了很久,没细看官网给自己挖的坑 
  #exec,datadir=/data/data11 r=4.1,w=6.1,await=0.83,svctm=1.35,util=1.46" 
done 
#echo ${devdict[@]}

2,telegraf.conf文件中新增[[inputs.exec]]的插件

[[inputs.exec]]
  ##Commands array
  commands = ["bash /appcom/telegraf/collect_iostat.sh",]
  timeout=5s
  ##measurements 的后缀
  name_suffix="_collectiostat"
  data_format="influx"

3,可以telegraf --debug一下结果

4,启动telegraf后,去influxdb中查看结果即可

 

以上是关于telegraf 使用 inputs.exec插件收集监控数据的主要内容,如果未能解决你的问题,请参考以下文章

Telegraf部署

Telegraf 输入插件:如何确定从哪个服务接受输入

TICK技术栈Telegraf安装及使用

telegraf 安装使用

使用telegraf+influxdb+grafana监控ceph集群

[转帖]使用Grafana和Telegraf监视VMware ESXi的方法