|
上一次给大家分享了工作中监控多实例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
第一个脚本
vim memcached_discovery.py
[color=#B85C00 !important]#!/usr/bin/env python
[color=#C29734 !important]import [color=#C29734 !important]os
[color=#C29734 !important]import [color=#C7C7C7 !important]json
[color=#ABFC04 !important]t[color=#FFD700 !important]=[color=#ABFC04 !important]os[color=#C29734 !important].popen[color=#C9D2D1 !important]([color=#B2AF75 !important]""[color=#B2AF75 !important]"sudo netstat -nltp|awk -F: '/memcached/&&/LISTEN/{print $2}'|awk '{print $1}'| grep -v grep | grep -v '^$' "[color=#B2AF75 !important]""[color=#C9D2D1 !important])
[color=#ABFC04 !important]ports[color=#006FE0 !important] [color=#FFD700 !important]=[color=#006FE0 !important] [color=#C9D2D1 !important][[color=#C9D2D1 !important]]
[color=#0185D7 !important]for[color=#006FE0 !important] [color=#C29734 !important]port [color=#0185D7 !important]in[color=#006FE0 !important] [color=#ABFC04 !important]t[color=#C29734 !important].readlines[color=#C9D2D1 !important]([color=#C9D2D1 !important])[color=#FFD700 !important]:
[color=#006FE0 !important] [color=#ABFC04 !important]r[color=#006FE0 !important] [color=#FFD700 !important]=[color=#006FE0 !important] [color=#ABFC04 !important]os[color=#C29734 !important].path[color=#C29734 !important].basename[color=#C9D2D1 !important]([color=#ABFC04 !important]port[color=#C29734 !important].strip[color=#C9D2D1 !important]([color=#C9D2D1 !important])[color=#C9D2D1 !important])
[color=#006FE0 !important] [color=#ABFC04 !important]ports[color=#006FE0 !important] [color=#FFD700 !important]+=[color=#006FE0 !important] [color=#C9D2D1 !important][[color=#C9D2D1 !important]{[color=#B2AF75 !important]'{#MCPORT}'[color=#FFD700 !important]:[color=#ABFC04 !important]r[color=#C9D2D1 !important]}[color=#C9D2D1 !important]]
[color=#C29734 !important]print [color=#ABFC04 !important]json[color=#C29734 !important].dumps[color=#C9D2D1 !important]([color=#C9D2D1 !important]{[color=#B2AF75 !important]'data'[color=#FFD700 !important]:[color=#ABFC04 !important]ports[color=#C9D2D1 !important]}[color=#C9D2D1 !important],[color=#ABFC04 !important]sort_keys[color=#FFD700 !important]=[color=#BBA7C5 !important]True[color=#C9D2D1 !important],[color=#ABFC04 !important]indent[color=#FFD700 !important]=[color=#EB5B04 !important]4[color=#C9D2D1 !important],[color=#ABFC04 !important]separators[color=#FFD700 !important]=[color=#C9D2D1 !important]([color=#B2AF75 !important]','[color=#C9D2D1 !important],[color=#B2AF75 !important]':'[color=#C9D2D1 !important])[color=#C9D2D1 !important])
第二个脚本
vim memcached_status.sh
[color=#B85C00 !important]#!/bin/bash
# 1)yum install nc
[color=#FF8C00 !important]# 2)python memcached_discovery.py
[color=#FF8C00 !important]#########################
[color=#ABFC04 !important]IP[color=#FFD700 !important]=[color=#EB5B04 !important]127.0.0.1[color=#006FE0 !important]
[color=#ABFC04 !important]PORT[color=#FFD700 !important]=[color=#B2AF75 !important]"$1"
[color=#ABFC04 !important]METRIC[color=#FFD700 !important]=[color=#B2AF75 !important]"$2"
[color=#006FE0 !important]
[color=#0185D7 !important]if[color=#006FE0 !important] [color=#C9D2D1 !important][[color=#006FE0 !important] [color=#C9D2D1 !important]$[color=#FF8C00 !important]# -lt 2 ];then
[color=#006FE0 !important] [color=#92AFC1 !important]echo[color=#006FE0 !important] [color=#B2AF75 !important]"please set argument"
[color=#006FE0 !important] [color=#92AFC1 !important]exit[color=#006FE0 !important] [color=#EB5B04 !important]1
[color=#0185D7 !important]fi
[color=#ABFC04 !important]STATUS[color=#FFD700 !important]=[color=#C9D2D1 !important]`[color=#92AFC1 !important]echo[color=#006FE0 !important] [color=#B2AF75 !important]"stats"[color=#006FE0 !important] [color=#FFD700 !important]|[color=#006FE0 !important] [color=#C7C7C7 !important]nc[color=#006FE0 !important] [color=#ABFC04 !important]$IP[color=#006FE0 !important] [color=#ABFC04 !important]$PORT[color=#006FE0 !important] [color=#FFD700 !important]|[color=#006FE0 !important] [color=#92AFC1 !important]grep[color=#006FE0 !important] [color=#FFD700 !important]-[color=#C7C7C7 !important]w[color=#006FE0 !important] [color=#B2AF75 !important]"$METRIC"[color=#006FE0 !important] [color=#FFD700 !important]|[color=#006FE0 !important] [color=#92AFC1 !important]awk[color=#006FE0 !important] [color=#B2AF75 !important]'{print $3}'[color=#C9D2D1 !important]`
[color=#0185D7 !important]case[color=#006FE0 !important] [color=#ABFC04 !important]$METRIC[color=#006FE0 !important] [color=#0185D7 !important]in
[color=#006FE0 !important] [color=#B2AF75 !important]'version'[color=#C9D2D1 !important])
[color=#006FE0 !important] [color=#92AFC1 !important]echo[color=#006FE0 !important] [color=#ABFC04 !important]$STATUS
[color=#006FE0 !important] [color=#C9D2D1 !important];[color=#C9D2D1 !important];
[color=#006FE0 !important] [color=#B2AF75 !important]'uptime'[color=#C9D2D1 !important])
[color=#006FE0 !important] [color=#92AFC1 !important]echo[color=#006FE0 !important] [color=#ABFC04 !important]$STATUS[color=#006FE0 !important]
[color=#006FE0 !important] [color=#C9D2D1 !important];[color=#C9D2D1 !important];
[color=#006FE0 !important] [color=#B2AF75 !important]'curr_connections'[color=#C9D2D1 !important])
[color=#006FE0 !important] [color=#92AFC1 !important]echo[color=#006FE0 !important] [color=#ABFC04 !important]$STATUS
[color=#006FE0 !important] [color=#C9D2D1 !important];[color=#C9D2D1 !important];
[color=#006FE0 !important] [color=#B2AF75 !important]'total_connections'[color=#C9D2D1 !important])
[color=#006FE0 !important] [color=#92AFC1 !important]echo[color=#006FE0 !important] [color=#ABFC04 !important]$STATUS
[color=#006FE0 !important] [color=#C9D2D1 !important];[color=#C9D2D1 !important];
[color=#006FE0 !important] [color=#B2AF75 !important]'cmd_get'[color=#C9D2D1 !important])
[color=#006FE0 !important] [color=#92AFC1 !important]echo[color=#006FE0 !important] [color=#ABFC04 !important]$STATUS
[color=#006FE0 !important] [color=#C9D2D1 !important];[color=#C9D2D1 !important];
[color=#006FE0 !important] [color=#B2AF75 !important]'cmd_set'[color=#C9D2D1 !important])
[color=#006FE0 !important] [color=#92AFC1 !important]echo[color=#006FE0 !important] [color=#ABFC04 !important]$STATUS
[color=#006FE0 !important] [color=#C9D2D1 !important];[color=#C9D2D1 !important];
[color=#006FE0 !important] [color=#B2AF75 !important]'get_hits'[color=#C9D2D1 !important])
[color=#006FE0 !important] [color=#92AFC1 !important]echo[color=#006FE0 !important] [color=#ABFC04 !important]$STATUS
[color=#006FE0 !important] [color=#C9D2D1 !important];[color=#C9D2D1 !important];
[color=#006FE0 !important] [color=#B2AF75 !important]'get_misses'[color=#C9D2D1 !important])
[color=#006FE0 !important] [color=#92AFC1 !important]echo[color=#006FE0 !important] [color=#ABFC04 !important]$STATUS
[color=#006FE0 !important] [color=#C9D2D1 !important];[color=#C9D2D1 !important];
[color=#006FE0 !important] [color=#B2AF75 !important]'bytes_read'[color=#C9D2D1 !important])
[color=#006FE0 !important] [color=#92AFC1 !important]echo[color=#006FE0 !important] [color=#ABFC04 !important]$STATUS
[color=#006FE0 !important] [color=#C9D2D1 !important];[color=#C9D2D1 !important];
[color=#006FE0 !important] [color=#B2AF75 !important]'bytes_written'[color=#C9D2D1 !important])
[color=#006FE0 !important] [color=#92AFC1 !important]echo[color=#006FE0 !important] [color=#ABFC04 !important]$STATUS
[color=#006FE0 !important] [color=#C9D2D1 !important];[color=#C9D2D1 !important];
[color=#006FE0 !important] [color=#B2AF75 !important]'curr_items'[color=#C9D2D1 !important])
[color=#006FE0 !important] [color=#92AFC1 !important]echo[color=#006FE0 !important] [color=#ABFC04 !important]$STATUS
[color=#006FE0 !important] [color=#C9D2D1 !important];[color=#C9D2D1 !important];
[color=#006FE0 !important] [color=#B2AF75 !important]'total_items'[color=#C9D2D1 !important])
[color=#006FE0 !important] [color=#92AFC1 !important]echo[color=#006FE0 !important] [color=#ABFC04 !important]$STATUS
[color=#006FE0 !important] [color=#C9D2D1 !important];[color=#C9D2D1 !important];
[color=#006FE0 !important] [color=#B2AF75 !important]'expired_unfetched'[color=#C9D2D1 !important])
[color=#006FE0 !important] [color=#92AFC1 !important]echo[color=#006FE0 !important] [color=#ABFC04 !important]$STATUS
[color=#006FE0 !important] [color=#C9D2D1 !important];[color=#C9D2D1 !important];
[color=#006FE0 !important] [color=#B2AF75 !important]'evicted_unfetched'[color=#C9D2D1 !important])
[color=#006FE0 !important] [color=#92AFC1 !important]echo[color=#006FE0 !important] [color=#ABFC04 !important]$STATUS
[color=#006FE0 !important] [color=#C9D2D1 !important];[color=#C9D2D1 !important];
[color=#006FE0 !important] [color=#FFD700 !important]*[color=#C9D2D1 !important])
[color=#006FE0 !important] [color=#92AFC1 !important]echo[color=#006FE0 !important] [color=#B2AF75 !important]"Not selected metric"
[color=#006FE0 !important] [color=#92AFC1 !important]exit[color=#006FE0 !important] [color=#EB5B04 !important]0
[color=#006FE0 !important] [color=#C9D2D1 !important];[color=#C9D2D1 !important];
[color=#0185D7 !important]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:环境准备:
[root@agent scripts]# cat /etc/redhat-release
CentOS release 6.7 (Final)
[root@agent scripts]# sestatus
SELinux status: disabled
[root@agent scripts]# /etc/init.d/iptables stop
这里我的memcached服务器的ip是192.168.56.99
2:安装nc工具
本文的监控脚本中需要使用nc工具
yum install -y nc
3:配置自定义监控项
上传脚本
[root@agent ~]# mkdir /etc/zabbix/scripts/ -p
[root@agent ~]# cd /etc/zabbix/scripts/
[root@agent scripts]# ls
memcache_monitor.sh
脚本需要给执行权限!
脚本内容如下:
[root@agent scripts]# 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的自定义监控项配置文件
[root@agent scripts]# cd /etc/zabbix/zabbix_agentd.d/
[root@agent zabbix_agentd.d]# cat memcache_monitor.conf
UserParameter=memcached_stats
,/etc/zabbix/scripts/memcache_monitor.sh $1
重启zabbix-agent使刚才的配置文件生效
[root@agent scripts]# /etc/init.d/zabbix-agent restart
Shutting down Zabbix agent: [ OK ]
Starting Zabbix agent: [ OK ]
4:在zabbix-server上测试
[root@zabbix-server01 ~]# zabbix_get -s 192.168.56.99 -k memcached_stats[uptime]
10518
[root@zabbix-server01 ~]# zabbix_get -s 192.168.56.99 -k memcached_stats[bytes]
74
5:web上配置
导入模板
链接模板到主机
在Latest data中看到最新的数据,恭喜你,成功了!
系统运维工程师:李超
|
|
|