码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-05-26 18:00:15      阅读:522      评论:0      收藏:0      [点我收藏+]

标签:默认   done   command   val   lse   解析   exe   led   stat   

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插件收集监控数据

标签:默认   done   command   val   lse   解析   exe   led   stat   

原文地址:https://www.cnblogs.com/tommyjiang/p/10926484.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!