下面是監控效果圖:
1、Redis 20000 Port Connections
<a href="http://s3.51cto.com/wyfs02/M02/19/9F/wKioL1MT5fuTl331AAQktsi8GGc337.jpg" target="_blank"></a>
2、Redis 20000 Port key
<a href="http://s3.51cto.com/wyfs02/M01/19/9F/wKiom1MT5m3j5v3vAAPHA-Z2xdY859.jpg" target="_blank"></a>
3、Redis 20000 Port Last_save_time
<a href="http://s3.51cto.com/wyfs02/M02/19/9F/wKiom1MT5p3RZPscAAPUilCx0N8911.jpg" target="_blank"></a>
4、Redis 20000 Port status
<a href="http://s3.51cto.com/wyfs02/M00/19/A0/wKioL1MT5rKgk624AAOkTIkbnHY590.jpg" target="_blank"></a>
5、Redis 20000 Port Uptime_in_seconds
<a href="http://s3.51cto.com/wyfs02/M01/19/A0/wKioL1MT5xzzuX1fAAOeH4KTQvM868.jpg" target="_blank"></a>
6、Redis 20000 Port Used memory
<a href="http://s3.51cto.com/wyfs02/M02/19/A0/wKiom1MT54GBA1_mAAMyD0REBQg772.jpg" target="_blank"></a>
如何實作:
一、用戶端
1、監控内容的json化
在用戶端裡,需要把監控的内容json化展示,然後服務端可以通過正則來過濾出結果
下面在是我的json監控redis的json展示
<a href="http://s3.51cto.com/wyfs02/M01/19/A7/wKiom1MT7yrAIIWSAACL1Sd60Rg007.jpg" target="_blank"></a>
腳本内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<code>#!/bin/bash</code>
<code>#Fucation:mysql low-level discovery</code>
<code>#Script_name redis_low_discovery.sh</code>
<code>redis() {</code>
<code> </code><code>port=($(sudo netstat -tpln | awk -F </code><code>"[ :]+"</code> <code>'/redis/ && /0.0.0.0/ {print $5}'</code><code>))</code>
<code> </code><code>printf </code><code>'{\n'</code>
<code> </code><code>printf </code><code>'\t"data":[\n'</code>
<code> </code><code>for</code> <code>key </code><code>in</code> <code>${!port[@]}</code>
<code> </code><code>do</code>
<code> </code><code>if</code> <code>[[ </code><code>"${#port[@]}"</code> <code>-gt </code><code>1</code> <code>&& </code><code>"${key}"</code> <code>-ne </code><code>"$((${#port[@]}-1))"</code> <code>]];then</code>
<code> </code><code>socket=`ps aux|grep ${port[${key}]}|grep -v grep|awk -F </code><code>'='</code> <code>'{print $10}'</code><code>|cut -d </code><code>' '</code> <code>-f </code><code>1</code><code>`</code>
<code> </code><code>printf </code><code>'\t {\n'</code>
<code> </code><code>printf </code><code>"\t\t\t\"{#REDISPORT}\":\"${port[${key}]}\"},\n"</code>
<code> </code><code>else</code> <code>[[ </code><code>"${key}"</code> <code>-eq </code><code>"((${#port[@]}-1))"</code> <code>]]</code>
<code> </code><code>printf </code><code>"\t\t\t\"{#REDISPORT}\":\"${port[${key}]}\"}\n"</code>
<code> </code><code>fi</code>
<code> </code><code>done</code>
<code> </code><code>printf </code><code>'\t ]\n'</code>
<code> </code><code>printf </code><code>'}\n'</code>
<code>}</code>
<code>$</code><code>1</code>
把此檔案存放到/usr/local/zabbix/bin裡,然後給與755權限,并修改使用者與組為zabbix,同時允許zabbix使用者無密碼運作netstat
<code>echo </code><code>"zabbix ALL=(root) NOPASSWD:/bin/netstat"</code><code>>>/etc/sudoers</code>
#Disable requiretty
<code>sed -i </code><code>'s/^Defaults.*.requiretty/#Defaults requiretty/'</code> <code>/etc/sudoers</code>
不關閉的話,會無法擷取資料,并且zabbix日志裡報
2、修改zabbix_agentd.conf檔案
在zabbix_agentd.conf最後添加以下内容
<code>UserParameter=zabbix_low_discovery[*],/bin/bash /usr/local/zabbix/bin/redis_low_discovery.sh $</code><code>1</code>
<code>UserParameter=redis_stats[*],(echo info; sleep </code><code>1</code><code>) | telnet </code><code>127.0</code><code>.</code><code>0.1</code> <code>$</code><code>1</code> <code>2</code><code>>&</code><code>1</code> <code>|grep $</code><code>2</code><code>|cut -d : -f2</code>
redis_stats裡的telnet的ip,請根據自己的環境來設定
測試
如果你能通過/usr/local/zabbix/bin/zabbix_get -s 127.0.0.1 -k zabbix_low_discovery[redis]指令擷取資料就代表沒問題
<a href="http://s3.51cto.com/wyfs02/M00/19/B0/wKioL1MT9xbyWV9PAACr6829dkc725.jpg" target="_blank"></a>
3、重新開機zabbix服務
<code>ps -ef|grep zabbix|grep -v grep|awk </code><code>'{print $2}'</code><code>|xargs kill -</code><code>9</code>
<code>/usr/local/zabbix/sbin/zabbix_agentd -c /usr/local/zabbix/conf/zabbix_agentd.conf</code>
二、服務端
1、模闆導入
把Template Redis Auto Discovery導入到zabbix裡(模闆在附件),具體操作不介紹。
2、設定正則
在“管理”=》“一般”=》“正規表達式”裡,選擇“新的正規表達式”
然後設定類似如下
<a href="http://s3.51cto.com/wyfs02/M02/19/B0/wKioL1MT97Pzv4GDAAJ_GhR5I0o411.jpg" target="_blank"></a>
我這是運作很多redis執行個體
3、主機關聯模闆
把需要監控redis執行個體的主機管理模闆即可監控,預設是3600秒後自動更新,如下圖
<a href="http://s3.51cto.com/wyfs02/M00/19/B0/wKiom1MT-CTTPlIiAAJ3kZAdPX0616.jpg" target="_blank"></a>
為什麼設定3600秒?原因是如果設定時間過短,比如你設定60s,一個是伺服器的壓力大,一個是如果你檢測的端口突然當掉了,還沒有來的急報警,主機通過json來擷取不到這個資訊,就認為沒有這個端口,模闆裡會自動關閉這個監控項的内容(預設保留30天,然後自動删除),這樣報警功能就基本沒有了,是以還是發現的間隔時間長一些比較好。
<a href="http://down.51cto.com/data/2364117" target="_blank">附件:http://down.51cto.com/data/2364117</a>
本文轉自 reinxu 51CTO部落格,原文連結:http://blog.51cto.com/dl528888/1366309,如需轉載請自行聯系原作者