设为首页 收藏本站
查看: 1040|回复: 0

[经验分享] 使用iostat和LLD实现zabbix监控IO性能

[复制链接]

尚未签到

发表于 2019-1-25 07:40:33 | 显示全部楼层 |阅读模式
  本文主要分为3个部分
  第一部分 前言,主要说说需求和获取数据的命令
  第二部分 zabbix,主要说如何利用lld获得想要监控的数据
  第三部分 ansible,主要提供一个ansible playbook来分发该监控所需的文件
  第一部分 前言部分
  最近有一个需求是对系统的IO进行监控,最后决定从iostat获取数据。

  这是具体的命令:
iostat -x -d -m 1 3  参数简单解析:
  -x     Display  extended statistics
  -d     Display the device utilization report
  -m     Display statistics in megabytes per second instead of blocks or kilobytes per second
  

  那么为什么要 1 3呢?
  我们用
iostat -x -d -m 1  多次测试,会发现第一次输出的值变动不大,第二次,第三次输出的值会有一定的变化,因此我更偏向与取第二次,第三次的值做平均
  命令的输出格式如下:
Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await  svctm  %util  可以较好地满足我们的监控需求

  

  第二部分 zabbix部分
  接下来,我们就用zabbix的LLD来自动发现当前系统的Device值
  cat /etc/zabbix/scripts/io_discovery.py
#!/bin/env python
import os
import commands
(status,output) = commands.getstatusoutput("iostat -x -d -m  | sed -n '4,$p' | grep -v ^$|  awk '{print $1}'")
DISKS = output.split()
print '{'
print '\t"data":['
count = 1
for key in DISKS:
    print '\t{'
    if count < len(DISKS):
        print '\t\t"{#DISK}":"%s"},' % key
    else:
        print '\t\t"{#DISK}":"%s"}' % key
    count += 1
print '\t]'
print '}'  

  拿到Device以后,用脚本来获取对应的数值
  cat /etc/zabbix/scripts/userparameter_diskio.py
#!/bin/env python
import commands
import sys
DISK = sys.argv[1]
cmdline = 'cat /tmp/iostat.txt | grep %s' % DISK
(status,output) = commands.getstatusoutput(cmdline)
output_list = output.split()
value = zip(*[iter(output_list)]*12)
if sys.argv[2] == "rrqmps":
    print ((float(value[1][1])+float(value[2][1]))/2)
elif sys.argv[2] == "wrqmps":
    print ((float(value[1][2])+float(value[2][2]))/2)
elif sys.argv[2] == "rps":
    print ((float(value[1][3])+float(value[2][3]))/2)
elif sys.argv[2] == "wps":
    print ((float(value[1][4])+float(value[2][4]))/2)
elif sys.argv[2] == "rspeed":
    print ((float(value[1][5])+float(value[2][5]))/2)
elif sys.argv[2] == "wspeed":
    print ((float(value[1][6])+float(value[2][6]))/2)
elif sys.argv[2] == "await":
    print ((float(value[1][9])+float(value[2][9]))/2)
elif sys.argv[2] == "svctm":
    print ((float(value[1][10])+float(value[2][10]))/2)
elif sys.argv[2] == "util":
    print ((float(value[1][11])+float(value[2][11]))/2)  这里还需要一个crontab来生成/tmp/iostat.txt文件
  * * * * * iostat -x -d -m 1 3 > /tmp/iostat.txt
  

  接着写一个自定义配置文件
  cat /etc/zabbix/zabbix_agentd.d/userparameter_diskio.conf
UserParameter=diskio_discovery
  • ,python /etc/zabbix/scripts/io_discovery.py
    UserParameter=diskio
  • ,python /etc/zabbix/scripts/userparameter_diskio.py  $1 $2  

      接下来需要在zabbix上建一个监控模板,模板在附件里面,本模板适用于zabbix3.2,其他版本请自行测试,可能需要做一些修改
      

      都准备以后可以开始使用了
      首先把相应的脚本和配置文件放到客户机上面,添加cron
      接着把模板导入,在模板里面添加机器,然后restart zabbix 客户端
      

      第三部分 Ansible部分
      如果你有使用ansible,这里可以提供一个playbook,用来分发脚本等工作
    - hosts: 客户机
      tasks:
        - name: mkdir the scripts dir
          file: path=/etc/zabbix/scripts state=directory
        - name: copy conf files
          copy: src=/etc/zabbix/zabbix_agentd.d/userparameter_diskio.conf   dest=/etc/zabbix/zabbix_agentd.d/
        - name: copy io_discovery.py
          copy: src=/etc/zabbix/scripts/io_discovery.py   dest=/etc/zabbix/scripts/io_discovery.py mode=0755
        - name: copy userparameter_diskio.py
          copy: src=/etc/zabbix/scripts/userparameter_diskio.py   dest=/etc/zabbix/scripts/userparameter_diskio.py mode=0755
        - name: add cron
          cron: name='add iostat cron'  minute='*' hour='*' day='*' month='*' weekday='*' job='iostat -x -d -m 1 3 > /tmp/iostat.txt' state=present
          notify:
          - restart zabbix-agent
      handlers:
        - name: restart zabbix-agent
          service: name=zabbix-agent state=restarted enabled=yes  

      
      



    附件:http://down.运维网.com/data/2368552


  • 运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
    2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
    3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
    4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
    5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
    6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
    7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
    8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

    所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-667187-1-1.html 上篇帖子: Zabbix 使用企业微信公众号发送报警短信 下篇帖子: zabbix graph name marco
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    扫码加入运维网微信交流群X

    扫码加入运维网微信交流群

    扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

    扫描微信二维码查看详情

    客服E-mail:kefu@iyunv.com 客服QQ:1061981298


    QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


    提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


    本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



    合作伙伴: 青云cloud

    快速回复 返回顶部 返回列表