分佈式監控系統之Zabbix基礎使用
- 2020 年 11 月 20 日
- 筆記
- zabbix, Zabbix基礎使用, 分佈式監控系統
前文我們了解了分佈式監控系統zabbix的相關組件的作用和zabbix的部署,回顧請參考//www.cnblogs.com/qiuhom-1874/p/13997582.html;今天我們來了解下zabbix的基礎使用;
在開始使用zabbix之前,我們先來了解下zabbix的一些術語
1、監控項(item):什麼是監控項?
在zabbix中監控項(item)是一個核心的東西,所有監控都是圍繞監控項展開的,可以說沒有監控項就沒有我們想要的指標數據;所以簡單講監控項就是被監控對象的指標數據,通常這個被監控的對象我們稱為主機(host),它可以是一個網絡設備或一台服務器,用ip地址或dns域名指定;一台主機可以是屬於一個或多個主機組(host group),所謂主機組就是多台主機的相同集合,用來邏輯的將主機分組,方便統一標識和管理;比如一台server它可以是tomcat主機組,也可以是nginx主機組,不同主機組可能有不同的監控項;同時對於監控項來講也有類似組的概念,在zabbix中多個監控項邏輯的劃分在一起就是監控項組,但通常我們不叫監控項組,而是叫application;所以application就是多個監控項的邏輯組,一個監控項通常屬於一個或多個application,這個和主機組的邏輯是一樣的;
2、觸發器(trigger):什麼是觸發器?
所謂觸發器就是一個表達式,這個表達式主要用來評判我們採集的數據是否處於合理範圍內?如果我們採集的數據是一個非合理範圍,則該表達式就返回true;所以在zabbix中觸發器就是用來定義我們採集到的數據的非合理區間,用於評估某監控對象的某些特定item內所接收到的數據是否在合理範圍內(即閾值),如果接收到的數據大於指定的閾值,此時觸髮狀態就會從OK狀態轉變為problem狀態;當數據量再次回歸到合理範圍時,此時觸發器又會從problem狀態回歸ok狀態;簡單講觸發器就是用來評估某些監控項採集到數據是否合理,如果不合理,就生成一個觸發器事件(event),而這個事件會被其他組件監聽,一旦監聽到對應的事件產生,其他組件隨之就會採取一定的措施;比如發短訊、發郵件或者重啟服務等等操作;
3、動作(action):什麼是action?
action指當特定的事件產生時,對應該採取的措施,比如當我們監控到nginx服務宕機了,此時我們應該採取什麼措施?重啟服務,發送短訊通知管理員等等;所以action就是指對於特定事件事先定義的處理方法,通過包含操作(如發送通知)和條件(何時執行操作);
4、圖像(graphs):什麼是graph?
graph就是指把對應一個或多個監控項的歷史數據通過圖像的方式展示出來,主要方便我們來查看過去一段時間對應監控項的數據變化情況;我們把一個或多個監控項組合在一起顯示就叫做一個graph;多個graph組成一個屏幕(screen),多個screen組成一個slide show;
了解了以上術語,接下來我們來添加一個主機到zabbix上
複製zabbix yum倉庫文件到被監控主機之上
[root@node03 ~]# scp /etc/yum.repos.d/zabbix.repo node04:/etc/yum.repos.d/ zabbix.repo 100% 242 98.5KB/s 00:00 [root@node03 ~]#
在被監控主機之上安裝zabbix-agent
[root@node04 ~]# yum install -y zabbix-agent
配置zabbix-agent
[root@node04 ~]# grep -Ei ^[^#] /etc/zabbix/zabbix_agentd.conf PidFile=/var/run/zabbix/zabbix_agentd.pid LogFile=/var/log/zabbix/zabbix_agentd.log LogFileSize=0 Server=192.168.0.43 ListenPort=10050 ListenIP=0.0.0.0 StartAgents=3 ServerActive=192.168.0.43 HostnameItem=system.hostname Include=/etc/zabbix/zabbix_agentd.d/*.conf [root@node04 ~]#
啟動zabbix-agent
[root@node04 ~]# systemctl start zabbix-agent.service [root@node04 ~]# ss -tnl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 *:10050 *:* LISTEN 0 128 :::22 :::* LISTEN 0 100 ::1:25 :::* [root@node04 ~]#
提示:請確保10050正常監聽並能夠和zabbix正常通信;
創建主機組
提示:登錄zabbix web,找到configuration菜單—->Host groups —-> create host group;
提示:填寫對應要創建的主機組名稱,點擊add即可;
添加主機
提示:找到configuration菜單—->Hosts—->create host;默認zabbix把zabbixserver是添加了的,這個也是我們為什麼要在zabbixserver上裝zabbix agent的原因;
提示:填寫要添加主機的主機名,選擇要歸屬地主機組,以及使用哪種信道去採集數據;在zabbix支持4中信道去採集數據,第一種是agent,就是用zabbix agen採集數據;第二種是snmp,這種常用於那些不能安裝agent的場景中,比如監控網絡設備;第三種是jmx,這種專用於監控java虛擬機的專有信道;第四種是ipmi,這個必須得硬件支持ipmi協議;選擇對應的信道填寫對應的信息即可;當然一個主機也可以通過多個信道去採集數據;同一種類型的信道也可以添加多個;填寫好以上內容點擊add就把node04添加到zabbix監控系統中了;
提示:添加好主機以後,在hosts列表中就能看到我們剛才添加到主機,但是它上面的4個信道沒有顯示為綠色;這是因為在我們添加到主機上沒有任何的監控項,所以沒有數據採集,對應的信道也不會變綠,只有添加了監控項,有數據採集了,對應信道就會變綠;
添加item
提示:在configuration—>Hosts找到對應主機的items,然後點擊進去,找到create item;
提示:在zabbix中內置了很多item,每個item對應有一個key,這個key就是用來標識監控項的,不同的監控項對應使用的採集方式不同,所以監控項就是定義如何去採集數據,怎麼採集數據的一個函數,我們在應用時,只需要指定key名,以及傳遞必要的參數即可;內置監控項的使用說明請查看官方文檔//www.zabbix.com/documentation/4.0/manual/config/items/itemtypes/zabbix_agent;填寫了對應的信息以後,這裡需要注意對應監控項採集到數據到底是一個什麼數據,是一個不斷累加的值?還是變化值?我們要怎麼顯示它?對於cpu上下文切換次數這個監控項採集到的是一個不斷累加的值,相比我們不是想了解這個監控項採集到數據是多少,而是想要它顯示和上一次數據的變化值,所以我們還可設置監控項預處理方案;
點擊左上角的preprocessing
提示:選擇好對應預處理方式以後,點擊最下面的add就可以成功將對應監控項添加到對應主機上;
查看對應監控項是否採集到數據?
提示:在monitoring—->Latest data 選擇對應主機名稱點擊apply查找;如果對應主機上的監控項在指定時間內採集的有數據,則說明我們配置的監控項沒有問題;從上面圖片可以看到對應主機cpu上下文切換次數,最新一次數據是26次,比上一次少一次;
查看對應監控項圖形
點擊對應監控項後面的graph按鈕即可顯示對應監控項的圖像
到此,一個監控項就這樣定義好了;要添加第二個監控項也是以上的步驟;
克隆監控項
在對應主機的item列表中點擊要克隆的監控項
提示:找到最下面的clone點擊即可;
提示:修改對應名稱和key,點擊添加即可;
提示:監控項克隆主要針對監控同類數據的不同指標用到比較多,像上面就是監控ens33這張網卡的進站報文數和出站報文數;這也是一種快速添加監控項的方式;
添加觸發器
提示:在configuration—>Hosts找到對應主機的Triggers,點擊進去,然後找到create trigger按鈕,點擊進入創建觸發器的頁面;
提示:觸發器就是一個表達式,該表達式主要來評判對應item採集到數據是否在合理範圍,如果不在合理範圍該表達式返回true;書寫觸發器表達式可以點擊後面的add來選擇;如下
提示:這個主要用於輔助我們生存觸發器表達式;首先選擇一個item,然後選擇評判的函數,這個函數有很多,默認是last{}函數,這個函數表示取最近幾次或某個時間段的數據來做評判標準,如果是次數,在last of (T) 填寫對應的次數即可;如果是時間,在time shift填寫時間,默認是秒為單位;result是對應評判的標準,比如500,就表示對應觸發器表達式會把item採集的數據和500做對比,如果大於500 就會觸發一個觸發器事件;選擇好條件以後點擊inset 就可以自動生成我們定義的觸發器表達式,定義好觸發器以後,點擊最下面的add即可添加觸發器到指定主機上;
查看對應監控項的graph,看看是否有觸發器呢?
提示:可以看到對應的item上就可以看到有一個水平線,超過這個線就表示採集到數據不在合理區間,此時就會產生觸發器事件;
查看觸發器事件
提示:在Monitoring—>Problems中就能查看到對應觸發器事件,這裡顯示該事件已經恢復了;
添加action
為了演示能看出效果,先在node04上添加一個監控nginx是否存活的監控項
添加nginx down觸發器
提示:以上表達式表示監控nginx狀態最近3次都是down的狀態就生成觸發器事件;
添加action
提示:action是針對整個zabbix全局而設定的,只要有對應事件產生,監聽該事件的action就會執行相應的操作,常用的操作有發郵件和遠程執行命令;
zabbix監控nginx是否啟動,如果沒有啟動就遠程執行命令,讓其啟動
提示:action常用的操作有兩個,第一個是當觸發器從ok狀態到problem狀態,第二個是從problem到ok狀態
定義operations操作
提示:選擇remote command,添加targetlist為當前主機,type為ssh,填寫對應的ssh用戶密碼端口以及執行的命令,點擊add,最後點擊add;這裡需要注意一點,通常我們使用ssh遠程執行命令,不建議直接使用root執行,如果是其他普通用戶需要注意執行命令是否有權限,如果沒有還需要注意授權問題;
到此一個遠程執行命令的action就定義好了;
測試:在node04上把nginx停掉,看看它是否會自動執行命令將nginx啟動起來呢?
[root@node04 ~]# systemctl stop nginx [root@node04 ~]# ss -tnl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 *:10050 *:* LISTEN 0 128 :::22 :::* LISTEN 0 100 ::1:25 :::* [root@node04 ~]#
到zabbix上查看對應監控項的狀態
查看是否產生了觸發器事件呢?
提示:可以看到對應觸發器時間已經產生;我們等待3個檢查周期,看看它是否會觸發我們定義的action呢
提示:再次查看該事件已經恢復;
在node04上查看nginx是否啟動?
[root@node04 ~]# ss -tnl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:80 *:* LISTEN 0 128 *:22 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 *:10050 *:* LISTEN 0 128 :::80 :::* LISTEN 0 128 :::22 :::* LISTEN 0 100 ::1:25 :::* [root@node04 ~]#
提示:可以看到80端口已經正常處於監聽狀態;這說明我們剛才定義的action生效了;
定義action發送郵件
添加發送郵件的媒介
提示:默認有3個媒介,這三個媒介是zabbix默認的,建議不使用,直接自己添加;
提示:這個郵箱的密碼填寫開啟smtp後自動生成的密碼;填寫好對應的郵箱相關信息後點擊add即可;
編輯admin用戶,配置接收郵件地址
提示:這裡要選擇我們剛才添加媒介類型;
編輯nginx down action
提示:選擇send massage,添加郵件接收人,以及發送郵件的媒介點擊update,最後點擊最下面的update;
測試:在node04上把nginx服務停掉,看看是否會給[email protected]發送郵件呢?
[root@node04 ~]# systemctl stop nginx [root@node04 ~]# ss -tnl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 *:10050 *:* LISTEN 0 128 :::22 :::* LISTEN 0 100 ::1:25 :::* [root@node04 ~]#
查看是否產生了觸發器事件?
提示:可以看到對應的事件已經產生,也執行了郵件發送;
登錄對應接收郵件的郵箱,查看是否有收到郵件呢?
提示:可以看到在對應接收郵件里有一份[email protected]發送過來的郵件,告訴我們說node04上的nginx down掉了;我上面只是配置了觸發器從ok到problem狀態時發送郵件,從problem到ok狀態沒有配置發送郵件,生產中可以配置上;
除了以上通過配置媒介的方式使用互聯網郵箱發郵件,還可以使用腳本方式發郵件
查看zabbix server存放告警腳本路徑
提示:默認存放告警路徑為:/usr/lib/zabbix/alertscripts/目錄下
在zabbixserver的/usr/lib/zabbix/alertscripts/目錄下創建sendmail.py腳本
[root@node03 ~]# cat /usr/lib/zabbix/alertscripts/sendmail.py #!/usr/bin/python #coding:utf-8 import smtplib from email.mime.text import MIMEText from email.header import Header from email.utils import parseaddr,formataddr import sys def formatAddr(s): name,addr = parseaddr(s) return formataddr((Header(name,'utf-8').encode(),addr)) def send_mail(to_list,subject,content): mail_host = 'smtp.126.com' mail_user = '[email protected]' mail_pass = 'XIAEYNSCRHLYFADN' msg = MIMEText(content,'','utf-8') msg['Subject'] = Header(subject,'utf-8') msg['From'] = formatAddr('zabbix監控<%s>' %mail_user).encode() msg['to'] = to_list try: s = smtplib.SMTP() s.connect(mail_host) s.login(mail_user,mail_pass) s.sendmail(mail_user,to_list,msg.as_string()) s.close() return True except Exception,e: print str(e) return False if __name__ == "__main__": send_mail(sys.argv[1],sys.argv[2],sys.argv[3]) [root@node03 ~]#
提示:調用此腳本時需要傳遞三個參數給腳本,第一個參數是接收人的郵件地址,在zabbix中用內建宏{ALERT.SENDTO}表示,第二個參數是郵件標題,內建宏為{ALERT.SUBJECT};第三個參數是郵件正文,內建宏{ALERT.MESSAGE};
賦予腳本執行權限
[root@node03 alertscripts]# chmod +x sendmail.py [root@node03 alertscripts]# ll total 4 -rwxr-xr-x 1 root root 909 Nov 19 23:31 sendmail.py [root@node03 alertscripts]#
測試:手動傳遞參數,看看腳本是否能夠正常給我們發郵件?
[root@node03 alertscripts]# python sendmail.py '[email protected]' 'test' 'this is test mail' [root@node03 alertscripts]#
登錄[email protected],看看是否有收到郵件?
提示:在測試郵箱里能夠看到我們發送到郵件,說明腳本沒有問題;
創建腳本媒介
提示:創建媒介類型時,選擇script,寫上腳本名稱和腳本需要傳遞參數內建宏,然後點擊add即可;有關zabbix內建宏的說明請參考官方文檔說明//www.zabbix.com/documentation/4.0/manual/appendix/macros/supported_by_location;
編輯nginx down action,調用腳本來發送郵件
更改admin用戶的媒介類型為我們創建的sendmail_script
測試:停掉node04上的nginx,看看是否會產生觸發器事件?
[root@node04 ~]# systemctl stop nginx [root@node04 ~]# ss -tnl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 *:10050 *:* LISTEN 0 128 :::22 :::* LISTEN 0 100 ::1:25 :::* [root@node04 ~]#
查看是否有觸發器事件產生?
查看對應接收郵箱里是否收到郵件呢?
提示:這個郵件可能收到會有延遲,如果上面顯示已經發送成功,基本上都可以收到;
配置graph
提示:configuration—> Hosts找到對應主機中的Graphs,點擊進去,找到create graph按鈕進入graph創建界面
提示:選擇好對應item和其他顯示選項,點擊add即可;
預覽graph
添加多個item到一個graph中
預覽
添加多個graph為一個screen
提示:默認點擊Monitoring —>Screens它顯示的是zabbix server默認的屏幕,我們需要點擊allscreens回到上圖位置;點擊create screen進入創建屏幕頁面;
點擊創建好的屏幕,編輯screen,添加graph
提示:按照以上示例,添加其他graph到其他位置即可;
預覽screen
創建slide show
預覽
到此,zabbix基礎使用就到此結束了!!