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中查看結果即可

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM