如何通過Zabbix擷取監控資料?

來源:互聯網
上載者:User

如何通過Zabbix擷取監控資料?
##################################
zabbix基本架構
##################################
1.Server
zabbix系統核心進程,輪詢並捕獲資料、發送通知等。是zabbix agent和zabbix proxy彙報資料的對象。server自身可遠程檢測網路服務。所有的前後端配置、統計資訊、可操作資料儲存於此。包含server、前段介面和後端DB幾部分。

2.Agent
部署在被監控主機上用於監控本地資源和應用並向zabbix server彙報結果。使用本地系統調用故非常高效。有主動和被動兩種檢測模式。被動模式下agent根據server或proxy的具體請求來返回資料。主動模式下先主動由server擷取監控項列表在檢測並返回新的資料。採用主動或被動檢測取決於相應監控項的配置。

3.Proxy
可以自由選擇部署或者不部署,主要用於分擔server的負載。在集中化監控遠程位置、分支、網路的情境中是很好的解決方案。可從被監控裝置收集資料緩衝在proxy本地後傳遞給其所屬的zabbix server。proxy需要單獨的資料庫。

4.Java gateway
java實現的守護進程用於監控JMX類型的應用程式。

5.Sender
命令列工具zabbix_sender,用於向zabbix server發送效能資料和可用性資料。多用於使用者指令碼定期向server發送資料。
如:
shell> cd bin
shell> ./zabbix_sender -z zabbix -s "Linux DB3" -k db.connections -o 43

6.Get
命令列工具zabbix_get,用於同agent通訊從agent擷取資料。可用於zabbix agents的troubleshooting。
如:
shell> cd bin
shell> ./zabbix_get -s 127.0.0.1 -p 10050 -k "system.cpu.load[all,avg1]"

####################################
#zabbix術語表
####################################
host
需要被監控的裝置,如交換器、路由器、WEB伺服器、DB伺服器等

host group
被監控裝置的邏輯分組,如DB伺服器一組、WEB伺服器一組等。可包含主機和模板。用於許可權控制

item
需要被監控的項,如CPU空閑率、某一塊磁碟的使用率等

trigger
用於評估收到的監控值是否超出設定的閾值的邏輯運算式

event
如trigger狀態改變等值得注意的事件

action
預先定義的響應event的一系列operations

escalation
執行action中的operations的定製情境;一連串的發送通知、執行遠程命令

media
傳遞notification的方式

notification
通過media發送給使用者的關於某個event的訊息

remote command
在被監控機器上觸發並自動執行的預定義命令

template
用於簡化和加速主機上大規模監控任務的部署。包含一系列項目,如items, triggers, graphs, screens, applications, low-level discovery rules

application
邏輯組中的一組items

web scenario
一個或多個HTTP request用以檢查web網站可用性

frontend
zabbix的web介面

zabbix api
允許通過JSON RPC 協議建立、更新和擷取zabbix對象如,hosts, items, graphs and others。或者執行其他任務

zabbix server
zabbix核心,履行監控,與zabbix proxies、zabbix client互動、計算trigger、發送notification、儲存資料等任務

zabbix agent
部署在被監控主機上用於監控本地資源和應用

zabbix proxy
可代zabbix server收集資料分擔處理負載

######################################
#zabbix配置
######################################
可通過WEB介面或者模板進行配置
需配置內容包括users、user groups、hosts、host groups、items、Triggers、Events、notification、templates、visualisation等。
最終配置會被儲存在後端database中。


#####################################
zabbix取數方式
####################################
1.zabbix api
基於WEB的API,通過JSON PRC協議擷取或更改zabbix配置,並可用於擷取曆史監控資料。clients和API間的request和response使用JSON格式。包含一系列可從功能上分為不同組別的方法。

發起HTTP請求的格式類似如下:
POST http://company.com/zabbix/api_jsonrpc.php HTTP/1.1
Content-Type: application/json-rpc
{"jsonrpc":"2.0","method":"apiinfo.version","id":1,"auth":null,"params":{}}
其中http://company.com/zabbix/是zabbix前端的地址;Content-Type必須指明且為application/json-rpc, application/json or application/jsonrequest三者之一。{"jsonrpc":"2.0","method":"apiinfo.version","id":1,"auth":null,"params":{}}是請求的具體內容。

一些執行個體:
*登入認證
{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "Admin",
"password": "zabbix"
},
"id": 1,
"auth": null
}
其中:
jsonrpc:指明JSON-RPC協議版本,這裡是2.0版本
method:指明調用的API方法,這裡是使用者登入
params:需要傳遞給API method的參數,這裡是使用者名稱和密碼
id:本次請求的標識符
auth:使用者認證令牌,目前尚無所以為null
若參數無誤response將會包含使用者認證令牌,如:
{
"jsonrpc": "2.0",
"result": "0424bd59b807674191e7d77572075f33",
"id": 1
}

*擷取hosts資訊
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": [
"hostid",
"host"
],
"selectInterfaces": [
"interfaceid",
"ip"
]
},
"id": 2,
"auth": "0424bd59b807674191e7d77572075f33"
}
本例使用可用的使用者認證令牌通過host.get方法擷取所配置的主機的ID 、name等資訊,返回如下
{
"jsonrpc": "2.0",
"result": [
{
"hostid": "10084",
"host": "Zabbix server",
"interfaces": [
{
"interfaceid": "1",
"ip": "127.0.0.1"
}
]
}
],
"id": 2
}
為了考慮效能影響、盡量僅列出所需項而非返回所有資料

*建立新監控項
例如在上一步擷取的host上建立新的監控項、監控/home/joe/目錄的剩餘空間
{
"jsonrpc": "2.0",
"method": "item.create",
"params": {
"name": "Free disk space on $1",
"key_": "vfs.fs.size[/home/joe/,free]",
"hostid": "10084",
"type": 0,
"value_type": 3,
"interfaceid": "1",
"delay": 30
},
"auth": "0424bd59b807674191e7d77572075f33",
"id": 3
}
其中params參數中的幾個關鍵參數含義如下:
name:監控項的名稱,這個可以自己靈活定義,其中的$1代表key_中的第一個參數,此處為/home/joe/
key_:預定義的監控項,zabbix提供了一系列此類監控內容,此處需從其中進行選擇。
hostid:即上步獲得的hostid
value_type:監控資料值的類型,不同的數字代表不同的類型,此處的3代表整型
delay:zabbix取數時間間隔,此處為30秒取一次

返回結果如下:
{
"jsonrpc": "2.0",
"result": {
"itemids": [
"24759"
]
},
"id": 3
}
itemid為產生的監控項的id

*擷取曆史資料:
從記錄表擷取itemids為23296的按clock降序排列的十條記錄
history參數可能的取值
0 - float;
1 - string;
2 - log;
3 - integer;
4 - text.
{
"jsonrpc": "2.0",
"method": "history.get",
"params": {
"output": "extend",
"history": 0,
"itemids": "23296",
"sortfield": "clock",
"sortorder": "DESC",
"limit": 10
},
"auth": "038e1d7b1735c6a5436ee9eae095879e",
"id": 1
}
返回結果:
{
"jsonrpc": "2.0",
"result": [
{
"itemid": "23296",
"clock": "1351090996",
"value": "0.0850",
"ns": "563157632"
},
{
"itemid": "23296",
"clock": "1351090936",
"value": "0.1600",
"ns": "549216402"
},
...]
}

*錯誤處理
下例忘記了groups這個參數
{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": "Linux server",
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": "192.168.3.1",
"dns": "",
"port": "10050"
}
]
},
"id": 3,
"auth": "0424bd59b807674191e7d77572075f33"
}
返回結果如下,包含的不是result屬性而是error屬性
{
"jsonrpc": "2.0",
"error": {
"code": -32602,
"message": "Invalid params.",
"data": "No groups for host \"Linux server\"."
},
"id": 3
}

對於擷取監控資料來說,比較關心的應該是history.get這個方法。這種方式實際上最終還是由後台資料庫擷取的。方法提供了豐富的參數,使用非常靈活。但對於一次性大規模的取出大量主機大量監控項的大批資料不太適合。


2.zabbix_get:
命令列工具,可從遠端zabbix agent擷取資料
zabbix_get [-hV] [-s <host name or IP>] [-p <port number>] [-I <IP address>] [-k <item key>]
-s, --host <host name or IP>
-p, --port <port number>
-I, --source-address <IP address>
-k, --key <item key>
-h, --help
-V, --version.
如:zabbix_get -s 127.0.0.1 -p 10050 -k system.cpu.load[all,avg1]
zabbix api擷取到的是資料庫中的曆史資料,zabbix_get可獲得即時的資料。可根據工具的特點選擇適合的情境。

3.zabbix databases:
直接由zabbix後台資料庫擷取曆史資料。適用於一次性大規模的取出大量主機大量監控項的大批資料。

*相關表
history系列表分別儲存不同資料類型的曆史資料
表中資料以update interval為時間間隔
zabbix.history -numeric(float)
zabbix.history_log -log
zabbix.history_str -character(up to 255 bytes)
zabbix.history_text -text
zabbix.history_unit -numeric(unsigned intergers)

trends_系列表格儲存體不同類型的曆史資料統計結果
表中資料以小時為時間間隔,儲存每小時的最小、最大和平均值
zabbix.trends -numeric(float)
zabbix.trends_unit -numeric(unsigned intergers)
character\log\text\類型無曆史統計結果

history系列的表只包含itemid、clock、value等資料
trends系列的表只包含itemid、clock、value_min、value_avg、value_max等資料
history、trends需與items、hosts、hosts_groups、groups表關聯來擷取item名稱、host名稱、組別等。

*表及重要的表欄位
hosts
hosts.hostid 主機id
hosts.host 主機名稱
hosts.status 主機狀態 0為正常監控,1為關閉,3表示是個Template,5尚不不清楚。

hosts_group
hosts_group.hostid 主機id
hosts_group.groupid 所屬組id

groups
groups.groupid 組id
groups.name 組名

items
items.itemid 監控項id
items.hostid 監控項所在主機id
items.name 監控項別名
items.key_ 監控項標準名稱
items.value_type實值型別
items.delay 取數時間間隔
items.history 曆史表資料保留天數
items.trends 曆史統計表資料保留天數
item.units 資料單位

items表中value_type與history的對應關係
(主要為了存取效率將不同實值型別存在不同的history表中)
value_type history表
0 history
1 history_str
2 history_log
3 history_uint
4 history_text

history
hisrtory.itemid 監控項id

trends
trends.itemid 監控項id

zabbix後台系統的涉及到大量的表,取曆史資料的話關心這幾個即可
 

*監控項規則解讀
zabbix.items表中存在類似於如下的配置項(如網路網卡監控、磁碟監控等):
name key_
Free disk space on $1 vfs.fs.size[/,free]
Free disk space on / (percentage) vfs.fs.size[/,pfree]
Free disk space on $1 vfs.fs.size[/boot,free]
Free disk space on /boot (percentage) vfs.fs.size[/boot,pfree]
Free disk space on $1 vfs.fs.size[/data,free]
Free disk space on /data (percentage) vfs.fs.size[/data,pfree]
Free disk space on $1 vfs.fs.size[{#FSNAME},free]
Free disk space on {#FSNAME} (percentage) vfs.fs.size[{#FSNAME},pfree]

其中類似於如下的配置是zabbix提供的low level discovery配置方式,用於自動建立監控項適用於有多塊磁碟、多個目錄、多塊網卡等類型情形下監控項的自動探索
可以把{#FSNAME}看做是模板可以匹配配置好的所有的相關項目比如:
Free disk space on {#FSNAME} (percentage) vfs.fs.size[{#FSNAME},pfree]
Free disk space on /data (percentage) vfs.fs.size[/data,pfree]
Free disk space on /boot (percentage) vfs.fs.size[/boot,pfree]
Free disk space on / (percentage) vfs.fs.size[/,pfree]

類似的還有:
Incoming network traffic on $1 net.if.in[{#IFNAME}]
Outgoing network traffic on $1 net.if.out[{#IFNAME}]
IO.util.{#DISK_NAME} IO.util[{#DISK_NAME}]
等等

而上邊例子中的$1、$2等對應key_的參數位置,例如
Free disk space on $1 vfs.fs.size[/,free]
中$1就代表/ ,Free disk space on $1相當於Free disk space on /依次類推

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.