zabbix專題:第九章 自定義key(案例:監控內存,監控nginx狀態)

第九章 自定義key

對Linux有興趣的朋友加入QQ羣:476794643 在線交流


本文防盜鏈:http://zhang789.blog.51cto.com

爲什麼要自定義KEY

有時候我們想讓被監控端執行一個zabbix沒有預定義的檢測,zabbix的用戶自定義參數功能提供了這個方法。我們可以在客戶端配置文件zabbix_angentd.conf裏面配置UserParameter.

語法如下:

UserParameter=key,command

用戶自定義參數包含一個key和一個命令,key必須整個系統唯一,配置好之後,重啓客戶端。 
然後配置item,在key的位置填上我們自定義的key即可。

簡單點的命令示例:

UserParameter=ping,echo 1

如果調用ping這個key,將會收到返回值1.

更復雜的命令示例:

UserParameter=mysql.ping,mysqladmin -uroot ping|grep -c alive

如果返回1表示MySQL運行中,如果返回0表示MySQL掛了

key的高級使用方法

參數 描述 
Key 唯一. [*]表示裏面可以傳遞多個參數 
Command 需要執行的腳本,key的[]裏面的參數一一對應9,一共9個參數。$0表示腳本命令.

1. 如果需要使用命令行裏面出現$2這種變量,那麼你要使用兩個$$2,例如awk ’{ print $$2 }’,之前就遇到過這個問題,不停的測試自己腳本輸出正常,但是zabbix卻拿不到數據,原來是出在這裏。爲了防止和參數衝突,所以zabbix做了這個規定。
2. zabbix禁止使用一些不安全的參數,如下:\ ' ”  * ? [ ] { } ~ $ ! & ; ( ) < > | # @
3. 從zabbix 2.0開始,zabbix返回文本數據可以是空格。

UserParameter=ping[*],echo $1
ping[0] - 將一直返回0
ping[aaa] - 將一直返回 'aaa'

案例:簡單的key實現

我們這個參數可以查出內存空閒了多少,如果我們zabbix要監控,但是zabbix服務器上面沒有這個key怎麼辦呢,我們就要自定義了

[root@localhost ~]# free | awk '/^Mem:/{print $4}'
88412

1、客戶端必須安裝了zabbix-agentd客戶端,修改zabbix_agentd.conf

[root@localhost ~]# vim /etc/zabbix/zabbix_agentd.conf
UserParameter=Mem.free,free | awk '/^Mem:/{print $4}'

2、重啓客戶端

[root@localhost ~]# service zabbix-agent restart
Shutting down Zabbix agent:                                [  OK  ]
Starting Zabbix agent:                                     [  OK  ]

3、在zabbix服務端上面zabbix_get測試能否獲取數據

[root@localhost ~]# zabbix_get -s 10.1.252.241 -k "Mem.free"
87844

案例:高級的key監控內存總大小和當前使用

我們都知道/proc是內核的反射區,/proc/meminfo 中顯示的內存信息

[root@localhost ~]# cat /proc/meminfo 
MemTotal:
       1001332 kB
MemFree:          121864 kB
MemAvailable:     325308 kB
Buffers:               0 kB
Cached:           274108 kB
........

上面顯示出來了內存的詳細信息,我們如何定義key讓zabbix服務端監控我們主機的內存信息

1、執行正則表達式命令可以把信息過濾出來,但是每個參數都用一個正則表達式來做,這不符合我們這些高級的搬服務器能幹的出來的的,從上面的簡單案例可以看出,我們可以使用[*]然後$1,$2這樣的來調用

[root@localhost ~]# cat /proc/meminfo | awk "/^MemTotal:/{print $2}"
MemTotal:        1004136 kB

2、我們就監控這些參數,用一個key實現

MemTotal:        1004136 kB
MemFree:          87800 kB
Buffers:         108264 kB
Cached:          590832 kB

3、修改zabbix_agentd.conf 
$1 是調用前面的[*]裏面的參數的,爲什麼使用$$2,如果使用一個$會讓這個shell命令認爲是調用第二個[*]裏面的參數

UserParameter=memory.usage[*],/bin/cat /proc/meminfo | awk '/^$1:/{print $$2}

4、我們在服務器用zabbix_get測試,看能不能獲取key定義的值(完全不用質疑,可以

[root@localhost ~]# zabbix_get -s 10.1.252.241 -k "memory.usage[MemTotal]"
1004136
[root@localhost ~]# zabbix_get -s 10.1.252.241 -k "memory.usage[MemFree]"
85464
[root@localhost ~]# zabbix_get -s 10.1.252.241 -k "memory.usage[Buffers]"
108516
[root@localhost ~]# zabbix_get -s 10.1.252.241 -k "memory.usage[Cached]"
590900

5、到zabbix服務器上面添加對應的參數監控項,然後集中到一個圖裏面,應該不是什麼事吧,不會設置監控項和圖的,可以參考前面的文章

案例:利用高級的key監控nginx的狀態

1、nginx server的主配置文件 都配置status模塊 代碼端如下

location /ngst{  
   stub_status on;  
   access_log off;  
   allow 127.0.0.1;  
   deny all;  
}

2、nginx-status的取值腳本

[root@localhost ~]# vim /home/zabbix/nginx_status.sh 
#!/bin/bash
#
host='127.0.0.1'
port='80'
status='/status'

active() {
       curl -s http://${host}:${port}${status} | awk '/^Active/{print $3}'
}

accepts() {
       curl -s http://${host}:${port}${status} | awk 'NR==3{print $1}'
}

handled() {
       curl -s http://${host}:${port}${status} | awk 'NR==3{print $2}'
}

requests() {
       curl -s http://${host}:${port}${status} | awk 'NR==3{print $3}'
}

reading() {
       curl -s http://${host}:${port}${status} | awk 'NR==4{print $2}'
}

writing() {
       curl -s http://${host}:${port}${status} | awk 'NR==4{print $4}'
}

waiting() {
       curl -s http://${host}:${port}${status} | awk 'NR==4{print $6}'
}

$1

3、加上執行權限

[root@localhost zabbix]# chmod +x nginx_status.sh

4、修改zabbix_agentd.conf

UserParameter=nginx.status[*],/home/zabbix/nginx_status.sh $1
[root@localhost zabbix]# service zabbix-agent restart
Shutting down Zabbix agent:                                [  OK  ]
Starting Zabbix agent:                                     [  OK  ]

5、zabbix服務端zabbix_get測試自定義key

[root@localhost ~]# zabbix_get -s 10.1.252.241 -k "nginx.status[requests]"
503

6、自定義已經執行成功,在web上面添加監控項

QQ截圖20161105155355.png

7、添加好,把監控項做成一張圖

QQ截圖20161105155444.png


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章