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]