天天看點

zabbix企業應用之low level discovery監控redis

下面是監控效果圖:

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/ &amp;&amp; /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>&amp;&amp; </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>&gt;&gt;/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>&gt;&amp;</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,如需轉載請自行聯系原作者

繼續閱讀