693579551 发表于 2019-1-25 07:38:36

zabbix 自动发现 占用io最多的前十进程

  因为过程中碰到sudo -u zabbix pidstat -d 无法显示信息,所以无法获取数据。
  换了一种方法

[*]  生成临时文件
  cat pidsta.sh
  #!/bin/bash
  while [ true ]; do
  /bin/sleep 2
  pidstat -d|awk 'NR>3'|awk '{print $4,$6}'|awk '{a[$2]+=$1} END{for(i in a) print a,i}'|sort -nr -k 1|head -n 10>/tmp/pidsta
  done
  nohup sh pidsta.sh &
  2.获取进程名
  cat pidtest.sh
  #!/bin/bash
  #Fucation:mysql low-level discovery
  #Script_name mysql_low_discovery.sh
  pidtest() {
  port=($(cat /tmp/pidsta|awk '{print $2}'))
  printf '{\n'
  printf '\t"data":[\n'
  for key in ${!port[@]}
  do
  if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then
  printf '\t {\n'
  printf "\t\t\t\"{#PIDSTA}\":\"${port[${key}]}\"},\n"
  else [[ "${key}" -eq "((${#port[@]}-1))" ]]
  printf '\t {\n'
  printf "\t\t\t\"{#PIDSTA}\":\"${port[${key}]}\"}\n"
  fi
  done
  printf '\t ]\n'
  printf '}\n'
  }
  $1
  3.获取对应的数值
  cat pidnum.sh
  #!/bin/bash
  cat /tmp/pidsta|grep -w $1|awk '{print $1}'
  4.cat pidtest.conf
  UserParameter=pidtest.discovery
[*],/bin/bash /usr/local/zabbix/bin/pidtest.sh $1
  UserParameter=pidtest.num
[*],/bin/bash /usr/local/zabbix/bin/pidnum.sh $1
  5.创建模板就略过了。
  做这个的原因是有一台从mysql,到某个时刻io就升高,持续几分钟就恢复正常,想找出这几分钟io高的进程,来判断原因。



页: [1]
查看完整版本: zabbix 自动发现 占用io最多的前十进程