1. 程式人生 > >Zabbix監控系統中內建的監控引數(Key)詳解

Zabbix監控系統中內建的監控引數(Key)詳解

轉載自:https://blog.csdn.net/xkjcf/article/details/78559273?locationNum=10&fps=1

Zabbix 中內建了很多監控引數(Key),我們可以通過在客戶端配置檔案中定義key,獲取監控物件中的系統、CPU、網路、記憶體、檔案系統等資訊。下面就詳細介紹一下這些監控引數的意義。


1. 舉例

假如我的需求是:監控某臺Web伺服器的80埠的併發連線數,並設定圖形

先分析該需求,可以分為兩步。第一步是要建立自定義監控項,第二步是要針對該監控項設定成圖形。監控專案有一個核心元素就是資料來源,有了資料來源才可以建立監控項。

  • 首先在zabbix-agent端上編輯自定義指令碼:
[[email protected] ~]# vim /usr/local/sbin/estab.sh                    #寫入下面內容
#!/bin/bash
## 獲取80埠併發連線數
netstat -ant |grep ':80 ' |grep -c ESTABLISHED                    # netstat -an 可檢視系統TCP連線數;ESTABLISHED表示正在連線中的狀態,另外80後面多個空格是為了精確,避免包含8080埠
  • 儲存後,需要修改指令碼許可權(讓zabbix使用者也能執行):
[[email protected] ~]# chmod 777 /usr/local/sbin/estab.sh
  • 還需要編輯zabbix-agent的配置檔案,定義監控項的key:
[[email protected] ~]# vim /etc/zabbix/zabbix_agentd.conf                   #增加下面兩行
UnsafeUserParameters=1                          #表示使用自定義指令碼
UserParameter=my.estab.count[*],/usr/local/sbin/estab.sh                      #自定義監控項的key為my.estab.count,後面的[*]裡面寫指令碼引數,沒有可以省略,指令碼為 /usr/local/sbin/estab.sh
  • 儲存配置檔案後重啟zabbix-agent服務:
[[email protected] ~]# systemctl restart zabbix-agent
  • 然後到服務端做個驗證,檢視剛剛配置是否正確,在服務端執行命令:
[[email protected] fonts]# zabbix_get -s 192.168.33.129 -p 10050 -k 'my.estab.count'
0                 #因為129伺服器上沒有任何80埠的訪問,所以為0,只要能夠獲取到客戶端的資料,就說明剛剛配置沒有問題

2. 測試獲取監控引數內容的方法

上面例子中,我們就自定義了key——my.estab.count,通過設定key來獲得我們想要監控的資訊。

在Zabbix Server上使用zabbix_get命令可以從監控物件獲取監控引數的具體內容。

  • zabbix_get命令的具體使用方法:
zabbix_get -s 目標伺服器IP -p 埠(10050) -k {key}
  • 示例:
[email protected]:~$ zabbix_get -s 192.168.0.5 -p 10050 -k system.uname                      # key為 system.uname 
Linux ubuntu 4.2.0-16-generic #19-Ubuntu SMP Thu Oct 8 15:35:06 UTC 2015 x86_64

3. 監控引數的實際意義

3.1 作業系統資訊(OS)

# 系統啟動的時間點(Host boot time)
system.boottime

# 系統已執行時長(System uptime)
system.uptime

# 系統時間(Host local time)
system.localtime

# 主機名(Host name)
system.hostname

# 核心引數,可開啟的最大檔案數(Maximum number of opened files)
kernel.maxfiles

# 核心引數,支援的最大程序數(Maximum number of processes)
kernel.maxproc

# 目前登入到系統中的使用者數量(Number of logged in users)
system.users.num

# 獲取系統資訊(System information)
system.uname

3.2 網絡卡資訊(Network interfaces)

# 網絡卡流速,流入方向
net.if.in

# 獲取指定網絡卡(br0)的流入流量的流速值(Incoming network traffic on br0)
net.if.in[br0]

# 網絡卡流速,流出方向
net.if.out

# 獲取指定網絡卡(br0)的流出流量的流速值(Outgoing network traffic on br0)
net.if.out[br0]

3.3 程序資訊(Processes)

# 程序數量(Number of processes)
proc.num

# 目前系統中的程序總數(Number of processes)
proc.num[]

#目前正在執行(處於執行態)的程序總數(Number of running processes)
proc.num[run]

3.4 處理器資訊(CPU)

# CPU的程序上下文切換(Context switches)
system.cpu.switches

# CPU中斷數量(Interrupts per second)
system.cpu.intr

# CPU的負載值,程序佇列的平均長度(Processor load)
system.cpu.load

# CPU每分鐘的負載值,按照核數做平均值(Processor load (1 min average per core))
system.cpu.load[percpu,avg1]

# CPU每5分鐘的負載值,按照核數做平均值(Processor load (5 min average per core))
system.cpu.load[percpu,avg5]

# CPU每15分鐘的負載值,按照核數做平均值(Processor load (15 min average per core))
system.cpu.load[percpu,avg15]

CPU的負載值可以使用uptime命令檢視,但是Zabbix所獲得到CPU負載值與uptime所顯示的結果並不同,它的結果是uptime所顯示的負載值除以主機的CPU核數。

測試結果如下:

[email protected]:/tmp$ uptime
 14:08:59 up 21 days, 19 min,  2 users,  load average: 0.04, 0.05, 0.05
[email protected]:/tmp$ cat /proc/cpuinfo|grep processor|wc -l
4

通過zabbix_get獲取負載值
[email protected]:~$ zabbix_get -s 192.168.0.38 -p 10050 -k system.cpu.load[percpu,avg1]
0.010000
[email protected]:~$ zabbix_get -s 192.168.0.38 -p 10050 -k system.cpu.load[percpu,avg5]
0.012500
[email protected]:~$ zabbix_get -s 192.168.0.38 -p 10050 -k system.cpu.load[percpu,avg15]
0.012500
# CPU的使用率
system.cpu.util

# CPU的空閒時間,百分比形式(CPU idle time)
system.cpu.util[,idle]

# CPU的使用者態執行時間,百分比形式(CPU user time)
system.cpu.util[,user]

# CPU的系統態執行時間,百分比形式(CPU system time)
system.cpu.util[,system]

# CPU的io等待時間,百分比形式(CPU iowait time)
system.cpu.util[,iowait]

# CPU的中斷時間,百分比形式(CPU interrupt time)
system.cpu.util[,interrupt]

# CPU的nice時間,百分比形式(CPU nice time)
system.cpu.util[,nice]

# CPU的軟中斷時間,百分比形式(CPU softirq time)
system.cpu.util[,softirq]

# CPU的偷盜的時間,百分比形式(CPU steal time)
system.cpu.util[,steal]

系統態執行時間較高說明程序進行系統呼叫的次數比較多。一般的程式,如果系統態執行時間佔用過高,就需要優化程式,減少系統呼叫。

io等待時間的比例過高,則表明硬碟的IO效能差,如果是讀寫檔案比較頻繁,讀寫效率要求比較高,可以考慮更換硬碟,或者使用多磁碟做Raid的方案。


3.5 記憶體資訊(Memory)

# 系統中swap分割槽的使用情況
system.swap.size

# swap分割槽的總容量(Total swap space)
system.swap.size[,total]

#swap分割槽尚可使用的容量(Free swap space)
system.swap.size[,free]

# swap分割槽尚可使用的容量,百分比形式(Free swap space in %)
system.swap.size[,pfree]

# 獲取實體記憶體的使用情況
vm.memory.size

# 實體記憶體總量(Total memory)
vm.memory.size[total]

#實體記憶體目前可用的容量(Available memory)
vm.memory.size[available]

虛擬記憶體是由實體記憶體(即購買的記憶體條)和swap分割槽組成。實體記憶體佔用過高之後,會將部分很久不用的資料轉儲到swap分割槽中。由此可見,在正常情況下,實體記憶體使用量並不高的情況下,不會佔用swap分割槽。如果出現實體記憶體使用量過高,開始使用swap分割槽,或者swap分割槽使用過高的情況,就需要考慮購買並新增實體記憶體了。

記憶體的資訊可以使用free命令檢視,其中<實體記憶體目前可用的容量>的值約等於free和cached的數值之和。

[email protected]:/tmp$ free -b
             total       used       free     shared    buffers     cached
Mem:    16784355328 16692240384   92114944  108625920   15360000 14823591936
-/+ buffers/cache: 1853288448 14931066880
Swap:   10691276800    9728000 10681548800

通過zabbix_get獲取記憶體使用資訊
[email protected]:~$ zabbix_get -s 192.168.0.38 -p 10050 -k vm.memory.size[available]
14989234176
[email protected]:~$ zabbix_get -s 192.168.0.38 -p 10050 -k system.swap.size[,free]
10681548800

3.6 檔案系統資訊(Filesystems)

# 檔案系統中的inode的使用情況
vfs.fs.inode

# 檔案系統的指定分割槽中尚未使用的inode數量,百分比形式(Free inodes on / (percentage))
vfs.fs.inode[/,pfree]

檔案系統的inode表示可以建立的檔案的最大數量。在需要建立很多檔案的系統中需要密切關注這個值。如果檔案系統的容量沒有用完,但是inode的數量已經消耗完了,也再也不能建立檔案了。

# 檔案系統中的使用容量詳情
vfs.fs.size

# 檔案系統中指定分割槽(目錄)中未使用的容量數值(Free disk space on /)
vfs.fs.size[/,free]

# 檔案系統中指定分割槽(目錄)中未使用的容量,百分比形式(Free disk space on / (percentage))
vfs.fs.size[/,pfree]

# 檔案系統中指定分割槽(目錄)中已使用的容量(Used disk space on /)
vfs.fs.size[/,used]

# 檔案系統中指定分割槽(目錄)的總容量(Total disk space on /)
vfs.fs.size[/,total]

3.7 Web應用資訊(WebApp)

Web應用資訊的引數,預設沒有配置在任何模板中,需要設定了web scenario之後才能夠看到。

# Web頁面下載速度
web.test.in

# 指定方案中所有步驟的頁面平均下載速度(Download speed for scenario "baidu.test".)
web.test.in[baidu.test,bps]

# 指定方案中指定步驟的頁面下載速度(Download speed for step "baidu" of scenario "baidu.test".)
web.test.in[baidu.test,baidu,bps]

# Web應用測試是否失敗(Failed step of scenario)
web.test.fail

# 指定方案是否測試失敗(Failed step of scenario "baidu.test".)
web.test.fail[baidu.test]

# Web應用測試錯誤詳情(Last error message of scenario)
web.test.error

# 指定方案中各個步驟中最後出現的錯誤詳情(Last error message of scenario "baidu.test".)
web.test.error[baidu.test]

# Web應用響應狀態碼(Last error message of scenario)
web.test.rspcode

# 指定方案中指定步驟的頁面響應狀態碼(Response code for step "baidu" of scenario "baidu.test".)
web.test.rspcode[baidu.test,baidu]

# Web應用響應時間(Response time.)
web.test.time

# 指定方案中指定步驟的頁面響應時間(Response time for step "baidu" of scenario "baidu.test".)
web.test.time[baidu.test,baidu,resp]

檢測Webapp的效能,頁面測試是否出現錯誤,測試錯誤詳情,頁面的響應時間,通過頁面大小和響應時間計算頁面的下載速度等。


3.8 安全資訊(Security)

# 求指定檔案的校驗和(Checksum)
vfs.file.cksum

# 求/etc/passwd的校驗和(Checksum of /etc/passwd)
vfs.file.cksum[/etc/passwd]

3.9 Agent資訊(Agent ping)

# Agent的線上狀態(Agent ping)
agent.ping

# Zabbix Agent的hostname(Host name of zabbix_agentd running)
agent.hostname

# Agent的軟體版本號(Version of zabbix_agent(d) running)
agent.version

以上介紹了Zabbix中與系統相關的監控引數,基本覆蓋了獲取系統資訊、影響系統穩定的各種引數,各個引數之間的相互影響需要在使用過程中細細體會。