123sw 发表于 2019-1-20 09:51:57

ZABBIX监控一台服务器上多实例memcache落地经验步骤

  上一次给大家分享了工作中监控多实例tomcat的自发现zabbix做法,今天带给大家的就是一台服务器上监控多memcache的一个落地经验。
  首先我带大家看一下多实例memcache做法,话不多说,咱们开工:
  由于是多实例,所以就需要用到zabbix的自动发现功能(LLD)基本思路如下:
1、写自动发现脚本。
2、写状态取值脚本。
3、添加配置文件。
4、添加权限。
5、配置zabbix web。
  

  zabbix我采用yum安装所以路径是/etc/zabbix首先创建一个目录为:   mkdir-p /etc/zabbix/scripts
这里我们要用到两个脚本:
  cd /etc/zabbix/scripts

  第一个脚本
  vimmemcached_discovery.py
  #!/usr/bin/env python
  import os
  import json
  t=os.popen("""sudo netstat -nltp|awk -F: '/memcached/&&/LISTEN/{print $2}'|awk '{print $1}'| grep -v grep | grep -v '^$'   """)
  ports = []
  for port int.readlines():
        r = os.path.basename(port.strip())
        ports += [{'{#MCPORT}':r}]
  print json.dumps({'data':ports},sort_keys=True,indent=4,separators=(',',':'))
  第二个脚本
  vim memcached_status.sh
  #!/bin/bash
  #1)yum install nc
  #2)python memcached_discovery.py
  #########################
  IP=127.0.0.1
  PORT="$1"
  METRIC="$2"
  
  if [ $# -lt 2 ];then
      echo "please set argument"
      exit 1
  fi
  STATUS=`echo "stats" | nc $IP $PORT | grep -w "$METRIC" | awk '{print $3}'`
  case $METRIC in
      'version')
        echo $STATUS
        ;;
      'uptime')
        echo $STATUS
        ;;
      'curr_connections')
        echo $STATUS
        ;;
      'total_connections')
        echo $STATUS
        ;;
      'cmd_get')
        echo $STATUS
        ;;
      'cmd_set')
        echo $STATUS
        ;;
      'get_hits')
        echo $STATUS
        ;;
      'get_misses')
        echo $STATUS
        ;;
      'bytes_read')
        echo $STATUS
        ;;
      'bytes_written')
        echo $STATUS
        ;;
      'curr_items')
        echo $STATUS
        ;;
      'total_items')
        echo $STATUS
        ;;
      'expired_unfetched')
        echo $STATUS
        ;;
      'evicted_unfetched')
        echo $STATUS
        ;;
      *)
        echo "Not selected metric"
        exit 0
        ;;
  esac
  ok,两个脚本解决因为我zabbix配置文件里指定的.conf位置是zabbix_agentd.d下
  所以cd /etc/zabbix/zabbix_agnetd.d
  下边创建key
  vim userparameter_memcached.conf
  UserParameter=memcached.discovery
[*],python /etc/zabbix/scripts/memcached_discovery.py
  UserParameter=memcached
[*],/bin/bash /etc/zabbix/scripts/memcached_status.sh $1 $2
  保存退出!
  添加zabbix权限
  vim /etc/sudoers.d/zabbix
  Defaults:zabbix    !requiretty
  zabbix ALL=(ALL) NOPASSWD: SUPERVISORCTLZB
  Cmnd_Alias SUPERVISORCTLZB = /sbin/ss,/usr/sbin/ss,/sbin/dmidecode,/usr/sbin/dmidecode,/sbin/service,/usr/sbin/service,/bin/netstat
  ok,记得要么关闭防火墙要么添加规则并添加zabbix权限否则会监控时出现json格式的问题
  下边就在web上导入模板添加模板就好了,这些都是基础的不在复述,下边给大家模板:
  
  
  3.0
  2017-04-05T09:25:04Z
  
  
  Template For Base
  
  
  
  
  Template Linux Memcached Discovery
  Template Linux Memcached Discovery
  
  
  
  Template For Base
  
  
  
  
  Memcached_Status
  
  
  
  
  
  Linux Memcached Discovery
  0
  
  
  memcached.discovery
  60
  0
  
  
  
  0
  0
  
  0
  
  
  
  
  0
  
  
  
  
  
  
  0
  
  
  
  30
  Discovery of redis ports on Linux
  
  
  Memcached-$1-bytes_read
  0
  
  0
  
  memcached[{#MCPORT},bytes_read]
  60
  90
  365
  0
  3
  
  
  1
  
  
  0
  0
  
  0
  
  1
  
  
  
  0
  0
  
  
  
  
  
  
  0
  
  
  Memcached_Status
  
  
  
  
  
  
  
  Memcached-$1-bytes_written
  0
  
  0
  
  memcached[{#MCPORT},bytes_written]
  60
  90
  365
  0
  3
  
  
  1
  
  
  0
  0
  
  0
  
  1
  
  
  
  0
  0
  
  
  
  
  
  
  0
  
  
  Memcached_Status
  
  
  
  
  
  
  
  Memcached-$1-cmd_get
  0
  
  0
  
  memcached[{#MCPORT},cmd_get]
  60
  90
  365
  0
  3
  
  
  1
  
  
  0
  0
  
  0
  
  1
  
  
  
  0
  0
  
  
  
  
  
  
  0
  
  
  Memcached_Status
  
  
  
  
  
  
  
  Memcached-$1-cmd_set
  0
  
  0
  
  memcached[{#MCPORT},cmd_set]
  60
  90
  365
  0
  3
  
  
  1
  
  
  0
  0
  
  0
  
  1
  
  
  
  0
  0
  
  
  
  
  
  
  0
  
  
  Memcached_Status
  
  
  
  
  
  
  
  Memcached-$1-curr_connections
  0
  
  0
  
  memcached[{#MCPORT},curr_connections]
  60
  90
  365
  0
  3
  
  
  0
  
  
  0
  0
  
  0
  
  1
  
  
  
  0
  0
  
  
  
  
  
  
  0
  
  
  Memcached_Status
  
  
  
  
  
  
  
  Memcached-$1-evicted_unfetched
  0
  
  0
  
  memcached[{#MCPORT},evicted_unfetched]
  60
  90
  365
  0
  3
  
  
  0
  
  
  0
  0
  
  0
  
  1
  
  
  
  0
  0
  
  
  
  
  
  
  0
  
  
  Memcached_Status
  
  
  
  
  
  
  
  Memcached-$1-expired_unfetched
  0
  
  0
  
  memcached[{#MCPORT},expired_unfetched]
  60
  90
  365
  0
  3
  
  
  0
  
  
  0
  0
  
  0
  
  1
  
  
  
  0
  0
  
  
  
  
  
  
  0
  
  
  Memcached_Status
  
  
  
  
  
  
  
  Memcached-$1-get_hits
  0
  
  0
  
  memcached[{#MCPORT},get_hits]
  60
  90
  365
  0
  3
  
  
  1
  
  
  0
  0
  
  0
  
  1
  
  
  
  0
  0
  
  
  
  
  
  
  0
  
  
  Memcached_Status
  
  
  
  
  
  
  
  Memcached-$1-get_misses
  0
  
  0
  
  memcached[{#MCPORT},get_misses]
  60
  90
  365
  0
  3
  
  
  1
  
  
  0
  0
  
  0
  
  1
  
  
  
  0
  0
  
  
  
  
  
  
  0
  
  
  Memcached_Status
  
  
  
  
  
  
  
  Memcached-$1-total_connections
  0
  
  0
  
  memcached[{#MCPORT},total_connections]
  60
  90
  365
  0
  3
  
  
  0
  
  
  0
  0
  
  0
  
  1
  
  
  
  0
  0
  
  
  
  
  
  
  0
  
  
  Memcached_Status
  
  
  
  
  
  
  
  Memcached-$1-total_items
  0
  
  0
  
  memcached[{#MCPORT},total_items]
  60
  90
  365
  0
  3
  
  
  0
  
  
  0
  0
  
  0
  
  1
  
  
  
  0
  0
  
  
  
  
  
  
  0
  
  
  Memcached_Status
  
  
  
  
  
  
  
  Memcached-$1-uptime
  0
  
  0
  
  memcached[{#MCPORT},uptime]
  3600
  90
  365
  0
  3
  
  
  0
  
  
  0
  0
  
  0
  
  1
  
  
  
  0
  0
  
  
  
  
  
  
  0
  
  
  Memcached_Status
  
  
  
  
  
  
  
  Memcached-$1-version
  0
  
  0
  
  memcached[{#MCPORT},version]
  3600
  90
  365
  0
  3
  
  
  0
  
  
  0
  0
  
  0
  
  1
  
  
  
  0
  0
  
  
  
  
  
  
  0
  
  
  Memcached_Status
  
  
  
  
  
  
  
  Memcached-$1-shutdown
  0
  
  0
  
  net.tcp.listen[{#MCPORT}]
  60
  90
  365
  0
  3
  
  
  0
  
  
  0
  0
  
  0
  
  1
  
  
  
  0
  0
  
  
  
  
  
  
  0
  
  
  Memcached_Status
  
  
  
  
  
  
  
  
  
  {Template Linux Memcached Discovery:net.tcp.listen[{#MCPORT}].last()}<>1
  Memcached-{HOST.NAME}-{#MCPORT} shutdown
  
  0
  4
  
  0
  
  
  
  
  
  
  
  
  
  
  
  
  
  至此,zabbix监控多实例memcache已经完成! 那个监控单点的怎么监控呢?
  1:环境准备:
  # cat /etc/redhat-release
  CentOS release 6.7 (Final)
  # sestatus
  SELinux status:               disabled
  # /etc/init.d/iptables stop
  这里我的memcached服务器的ip是192.168.56.99
  2:安装nc工具
  本文的监控脚本中需要使用nc工具
  yum install -y nc
  3:配置自定义监控项
  上传脚本
  # mkdir /etc/zabbix/scripts/ -p
  # cd /etc/zabbix/scripts/
  # ls
  memcache_monitor.sh
  脚本需要给执行权限!
  脚本内容如下:
  # cat memcache_monitor.sh
  #!/bin/bash
  Status=$1
  CACHEFILE="/tmp/memcache_monitor.txt"
  # Check and run the script
  TIMEFLM=`stat -c %Y $CACHEFILE`
  TIMENOW=`date +%s`
  if [ `expr $TIMENOW - $TIMEFLM` -gt 60 ]; then
  rm -f $CACHEFILE
  fi
  if [ ! -f $CACHEFILE];then
  echo -e "stats\nquit"|nc 127.0.0.1 11211|grep STAT >$CACHEFILE 2>/dev/null
  fi
  awk '/ '$Status' /{print $NF}' $CACHEFILE
  创建zabbix agent的自定义监控项配置文件
  # cd /etc/zabbix/zabbix_agentd.d/
  # cat memcache_monitor.conf
  UserParameter=memcached_stats
[*],/etc/zabbix/scripts/memcache_monitor.sh $1
  重启zabbix-agent使刚才的配置文件生效
  # /etc/init.d/zabbix-agent restart
  Shutting down Zabbix agent:                              
  Starting Zabbix agent:                                    
  4:在zabbix-server上测试
  # zabbix_get -s 192.168.56.99 -k memcached_stats
  10518
  # zabbix_get -s 192.168.56.99 -k memcached_stats
  74
  5:web上配置
  导入模板
  链接模板到主机

  在Latest data中看到最新的数据,恭喜你,成功了!
  系统运维工程师:李超




页: [1]
查看完整版本: ZABBIX监控一台服务器上多实例memcache落地经验步骤