Nagios中的插件就是腳本寫的程序,來獲取數據使用的:前端
Zabbix中設置item收集數據就是用key完成的,現有的鍵不能知足需求時就須要本身定義key,監控項就是item,在建立監控項時須要輸入鍵值,鍵值就是key. Key就是客戶端agent收集好數據————> 傳給server————>而後繪圖,因此Key應該在客戶端.ios
定義Key的語法nginx
UserParameter=<key>,<command>;[<command>..] command只能有一個返回值(UserParameter=key1,who |wc -l)
此處本身定義那個key1的名字能夠自定義,能經過看到這個名字知道是幹什麼的就好了,可是這個名字,後面的命令必定要是/usr/bin下面的命令,若是是/usr/sbin下面的命令會報錯,數據過不去,除非將zabbix用戶提權到管理員.web
咱們首先分析一下怎麼作自定義Key,以及當中數據流向shell
當看到這種需求,首先咱們想到的是在須要被監控的那臺主機上裝上zabbix-agent,以便收取數據,能夠理解爲ELKB當中的filebeat,logstash,就是收集數據到zabbix-server上,而後進行存儲並根據須要作圖表或者觸發器報警等等.因此咱們先把zabbix-agent理解爲一個filebeat,logstash收集數據/日誌的服務.vim
而後咱們應該想的是怎麼將有用的數據傳給zabbix-agent,這點zabbix-agent上有自定義的函數UserParameter,經過他咱們能夠將有用的數據經過傳參傳給這個函數,而後這個函數發往zabbix-server,或者zabbix-server過來取,至於怎麼作分析,作存儲,作圖表跟agent一點關係都沒有.bash
接下來就是咱們怎麼去對UserParameter傳參,這裏咱們經過下面兩個例子來講明,先說明一種簡單的,而後再將上面圖的監控作一下.網絡
# 一、解註釋,支持寫鍵值的時候可使用特殊字符 vim /etc/zabbix/zabbix_agentd.conf UnsafeUserParameters=1 # 2.建立一個文件,並定義key名,命令或腳本,(位置參數下面這種不須要) vim /etc/zabbix/zabbix_agentd.d/userparameter_user.conf UserParameter=key1,who |wc -l systemctl restart zabbix-agent # 3.檢測key能不能傳參過來 [root@zabbix ~]# zabbix_agentd -t key1 key1 [t|1] [root@zabbix ~]# zabbix_get -s 39.108.140.0 -k key1 1 # 4.至此咱們就能夠到zabbix的web界面去建立監控項了, # 只不過不用填寫官方自定義的key了, # 而是你本身起名的key,等示例二在進入web界面操做
若是出現一條命令傳參到UserParameter沒法知足需求,須要用到case或者命令比較長能夠考慮使用腳本,可讀性強也能知足需求,case等監控rabbitmq在介紹.函數
1 . 解開註釋就不說了,先建立一個文件,定義一下key名,至因而命令仍是腳本根據需求來,此處先用腳本,此處須要用到位置參數.測試
cat /etc/zabbix/zabbix_agentd.d/userparameter_nginx.conf UserParameter=nginx[*],/etc/zabbix/key/nginx.sh $1 # 此處的nginx能夠是自定義的名字, # [*] 爲腳本里面的位置參數 # /etc/zabbix/key/nginx.sh爲你寫的自定義Key的腳本 # $1爲位置參數,還記得咱們用zabbix官方自帶的key時候裏面填網卡名之類的嗎,此處的位置參數跟那個差很少. # 正常來講,若是是簡單的key能夠直接把命令放到這裏來,值就直接傳過去了,但此處用到了腳本,咱們看下腳本內容.
建立與zabbix_agent.d下配置文件中定義的腳本路徑
這個腳本做用就是將查看nginx狀態的關鍵取證信息提取出來,而後經過位置參數傳給在userparameter_nginx.conf中的$1,而後傳給zabbix-serverWEB中的監控項中的鍵值.
mkdir /etc/zabbix/key cat /etc/zabbix/key/nginx.sh #!/usr/bin/env bash # ******************************************************************************* # Author: ZhouJian # Mail: 18621048481@163.com # Data: 2019-11-12 # Describe: CentOS 7 Zabbix Monitor Nginx Server Status port=`systemctl status nginx |grep running|awk -F"(" '{print $2}'|awk -F")" '{print $1}'` if [ "$port" == "running" ];then port=1 else port=0 fi if [ $1 = "port" ];then echo $port fi chmod +x nginx.sh # 檢測下腳本能不能傳參成功 # 先重啓服務 systemctl restart zabbix-agent zabbix_agentd -t nginx[port] nginx[port] [t|0] 接着咱們切換到zabbix監控主機上看能不能經過get獲取值 zabbix_get -s 116.196.83.113 -k nginx[port] 0
若是此項能獲取到值,說明咱們能夠到zabbix-server上去建立監控項了,就跟建立官方自定義的key監控項同樣,只不過到了鍵值哪裏換成配置文件本身取的key名而已.
接下來咱們到zabbix的web前端去配置監控項
咱們能夠看到此處有了最新數據,咱們接下來就能夠去建立圖形了,可是此處就先不作了,建立圖形和前面步驟差很少,下面來一個稍微複雜一點的自定義Key監控腳本.
# 在/etc/zabbix/zabbix_agent.d/目錄下建立一個配置文件,或者跟其餘配置文件共用,配置文件裏面經過UserParameter函數傳參給zabbix-server,具體都有什麼做用請看示例二. # 1.到這個目錄下建立一個userparameter_cpu.conf文件,必定要以conf結尾. cat /etc/zabbix/zabbix_agentd.d/userparameter_cpu.conf UserParameter=nginx[*],/etc/zabbix/key/cpu.sh $1 # 2.建立userparameter_cpu.conf中定義的腳本路徑,到這個路徑寫好腳本,並經過位置傳輸傳給UserParameter。 cat /etc/zabbix/key/cpu.sh #!/usr/bin/env bash # ******************************************************************************* # Author: ZhouJian # Mail: 18621048481@163.com # Data: 2019-11-12 # Describe: CentOS 7 Zabbix Monitor CPU load Status m1load=`uptime |awk -F",| +" '{print $14}'` m5load=`uptime |awk -F",| +" '{print $16}'` m15load=`uptime |awk -F",| +" '{print $18}'` case $1 in m1load) echo $m1load ;; m5load) echo $m5load ;; m15load) echo $m15load ;; esac chmod +x cpu.sh # 3.重啓服務而後測試下參數能不能傳過去. systemctl restart zabbix-agent zabbix_agentd -t cpu[m1load] cpu[m1load] [t|0.32] # 咱們切換到zabbix-server機器用get命令,看能不能獲得. zabbix_get -s 116.196.83.113 -k cpu[m1load] 0.10 # 咱們看到值是能夠get到的,接下來咱們到zabbix的web頁面上進行建立一個一分鐘負載CPU的監控項,並建立觸發器.
接下來咱們去看下有不有新數據,有的話咱們去建立一個圖形
item(監控項)只負責收集數據,而一般收集數據的目的還包括在某指標對應的數據超出合理範圍時給相關人員發送告警信息,"觸發器"正是用於爲監控項所收集的數據定義的閾值,靠動做來完成的。每個觸發器僅能關聯至一個監控項,但能夠爲一個監控項同時使用多個觸發器.事實上,爲一個監控項定義多個具備不一樣閾值的觸發器,能夠實現不一樣級別的報警功能。如:一個監控網絡的觸發器是不能用在監控cpu上的;而一個item能夠設置達到一個值作什麼動做,達到另一個值作什麼動做,因此能夠設置多個觸發器。可是觸發器只是觸發一個事件,並不會報警,報警 須要靠後續的動做來完成
一個觸發器由一個表達式構成,它定義了監控項所採起的數據的一個閾值,一旦某次採集的數據超出了此觸發器定義的閾值,觸發器狀態將會轉換爲"problem";而當採起的數據再次迴歸至合理範圍內時,其狀態將從新返回"ok"。
觸發器表達式
https://www.zabbix.com/documentation/3.2/manual/config/triggers/prediction
觸發器表達式高度靈活,能夠建立出很是複雜的測試條件,基本的觸發器表達式以下所示
{<server>:<key><function>{<parameter>}}<operator><constant>
註釋
server: 主機名
key: 監控項對應的監控腳本就叫key
function: 評估採集到的數據是否在合理範圍內所使用的函數,其評估過程能夠根據採集的數據,當前時間及其餘因素進行。目前觸發器所支持的函數有:avg count change date dayofweek delta diff iregexp(正則表達是匹配) last max min nodata now sum等
parameter:函數參數,大多數數值函數能夠接受秒數爲其參數,而若是在數值參數以前使用"#"做爲前綴,則表示爲最近幾回的取值,如sum(300)表示300秒內全部的取值之和,而sum(#10)則表示最近10次取值之和。此外avg count last min max還支持使用第二個參數用於完成時間限定:例如 max(1h,7d)將返回一週以前1小時內的最大值
operator操做符:/、*、-、+、<、>、# 不等於、=、& 邏輯與、| 邏輯或 constant:常數,不能超過多少,或者不能低於多少
接下來咱們先大概知道一下觸發器怎麼建立,具體怎麼結合報警.
至此一個觸發器就完成了
咱們能夠看到下圖有一個觸發線,咱們嘗試着將CPU負載弄上去,而後看有什麼變化.
咱們經過dd命令看下cpu的負載能不能到達觸發器.
dd if=/dev/zero of=test bs=1M count=1000
隨機生成1百萬個1K的文件
seq 1000000 | xargs -i dd if=/dev/zero of={}.dat bs=1024 count=1