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中查看结果即可
原文地址:https://www.cnblogs.com/tommyjiang/p/10926484.html
时间: 2024-11-01 19:06:37