CPU定位分析
CPU利用率大於50%,需要注意;大於70%,需要密切關注;高於90%,情況比較嚴重。
監控命令:vmstat、sar、dstat、mpstat、top、ps
類型 |
度量方法 |
衡量標准 |
利用率 |
1、vmstat 統計1-%idle 2、sar -u 統計1-%idle 3、dstat 統計1-%idl 4、mpstat -P ALL 統計1-%idle |
注意>=50% 告警>=70% 嚴重>=90% |
滿載 |
1、vmstat的r值> cpu邏輯顆數 2、sar -q ,“runq-sz”>cpu邏輯顆數
|
運行隊列大於1時,證明已經有一定的負載 |
內存定位分析
當物理內存不夠時,會使用swap分區,所以性能測試過程中需要關注swap和mem的使用情況。
物理內存不夠,大量的內存置換到swap空間,可能導致CPU和I/O的瓶頸。
監控命令:vmstat、sar、dstat、free、top、ps等
類型 |
度量方法 |
衡量標注 |
占用率 |
1、free 查看使用情況 2、vmstat 3、sar -r 4、ps |
注意>=50% 告警>=70% 嚴重>=80% |
滿載 |
1、vmstat的si/so比例,swapd占比 2、sar -W 查看次缺頁數 3、dmesg | grep killed |
1、so數值大,且swapd已經占比很高,內存已經飽和 2、sar命令次缺頁多意味內存已經飽和 3、內存不夠用會觸發內核的OOM機制 |
網絡定位分析
監控命令:sar、ifconfig、netstat,以及查看net的dev速率。
通過查看發現收發包的吞吐率達到網卡的最大上限,網絡數據報文有因為這類原因而引起的丟包、阻塞等現象都證明當前網絡可能存在瓶頸。
為了減小網絡對性能測試的影響,一般我們都在局域網中進行測試執行。
類型 |
度量方法 |
衡量標准 |
使用情況 |
1、sar -n DEV 的收發計數大於網卡上限 2、ifconfig RX/TX寬帶超過網卡上限 3、cat /proc/net/dev的速率超過上限 4、nicstat的util基本滿負荷 |
1、收發包的吞吐率達到網卡上限 2、有延遲 3、有丟包 4、有阻塞 |
滿載 |
1、ifconfig dropped 有計數 2、netstat -s "segments retransmited"有計數 3、sar -n EDEV,rxdrop/s txdrop/s有計數 |
有丟包統計 |
錯誤 |
1、ifconfig,“errors” 2、netstat -i,RX-ERR TX-ERR 3、sar -n EDEV,rxerr/s txerr/s 4、ip -s link, “errors” |
錯誤有計數 |
IO定位分析
I/O讀寫頻繁的時候,如果I/O得不到滿足會導致應用的阻塞。
需要考慮I/O的TPS、平均I/O數據、平均隊列長度、平均服務時間、平均等待時間、IO利用率(磁盤Busy Time%)等指標
監控命令:sar、iostat、iotop
類型 |
度量方法 |
衡量標准 |
使用情況 |
1、iostat -xz,“%util” 2、sar -d,“%util” 3、cat /proc/pid/sched | grep iowait |
注意>=40% 告警>=60% 嚴重>=80% |
滿載 |
1、iostat -xnz,“avgqu-sz ”>1 2、iostat await>70 |
IO疑似滿載 |
錯誤 |
1、dmseg 查看io錯誤 2、smartctl /dev/sda |
有錯誤信息 |
nmon監控
一、檢查安裝環境
# uname –a (查看操作系統信息,所檢查服務器為64位操作系統)
# lsb_release –a (查看linux發行商版本,所檢查服務器linux版本為:CentOS6.5)
二、安裝
1、手動下載解壓安裝
nmon: 下載命令 wget http://sourceforge.net/projects/nmon/files/download/nmon_x86_12a.zip/download
安裝位置:/home/nmon (任意目錄)
1、 在home 目錄下創建nmon文件夾:# mkdir nmon
2、 上傳nmon_linux_14i.tar.gz 到nmon目錄
3、 解壓:# tar –zxvf nmon_linux_14i.tar.gz
4、 賦權限:# chmod –R 755 nmon
5、 啟動nmon:# ./nmon_x86_64_sles11(在nmon目錄下執行命令)
2、yum自動安裝
首先安裝第三方yum源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
wget -P /target/path http://192.168.1.1:3333/file/to/download.gz 下載文件時若需要指定目錄則使用 -P 參數,如果指定的目錄不存在,則會自動創建
wget http://192.168.1.1:3333/file/to/download.gz -O /path/to/rename.gz 下載的文件進行重命名則使用 -O 參數,如果重命名中包含路徑則該路徑必須事先創建好
更新yum源
yum makecache
安裝nmon
yum -y install nmon
安裝成功顯示以下界面:
四、實時監控
輸入以下命令:
c 可顯示CPU的信息
m 對應內存
n 對應網絡
d 可以查看磁盤信息
t 可以查看系統的進程信息
五、配置環境變量
1、修改啟動文件名稱:
# mv nmon_x86_64_sles11 nmon
# ./nmon
2、 添加到環境變量中:
# vim /etc/profile (在profile中寫入以下兩行內容)
PATH=PATH:/home/nmon/nmon(PATH:/home/nmon/nmon(PATH:后為命令的路徑)
export PATH
3、 保存退出
4、 使配置文件立即生效
# source /etc/profile
# nmon (在任何目錄下執行nmon命令啟動nmon)
六、采集監控數據
在實際的性能測試中我們需要把一段時間之內的數據記錄下來,如:
1、采集數據
# nmon -s1 -c60 -f -m /home/nmon
參數說明:
-s1 每隔n秒抽樣一次,這里為1秒
-c60 取出多少個抽樣數量,這里為60,即監控=1*60/60=1分鍾
-f 按標准格式輸出文件名稱:<hostname>_YYMMDD_HHMM.nmon
-m 指定監控文件的存放目錄,-m后跟指定目錄
七、生成圖形化報表
nmonanalyser:
版本:nmon_analyser_v47.zip
1、將.nmon文件轉化成.csv文件
# sort chen _151014_1659.nmon > chen _151014_1659.csv
2、將.csv文件下載到本地
3、打開nmon analyser工具
在本地解壓nmon_analyser_v47.zip
雙擊打開:nmon analyser v47.xlsm
點擊Analyse nmon data按鈕,加載之前下載的chen_151014_1659.csv文件。
八、結果分析
開源工具介紹
1、Zabbix
Zabbix是一個基於WEB界面的提供分布式系統監控以及網絡監控功能的企業級開源運維平台,也是目前國內互聯網用戶中使用最廣的監控軟件,雲智慧遇到的85%以上用戶在使用Zabbix做監控解決方案。入門容易、上手簡單、功能強大並且開源免費是雲智慧對Zabbix的最直觀評價。Zabbix易於管理和配置,能生成比較漂亮的數據圖,其自動發 現功能大大減輕日常管理的工作量,豐富的數據采集方式和API接口可以讓用戶靈活進行數據采集,而分布式系統架構可以支持監控更多的設備。理論上,通過 Zabbix提供的插件式架構,可以滿足企業的任何需求。
優點:
1. 支持多平台的企業級分布式開源監控軟件
2. 安裝部署簡單,多種數據采集插件靈活集成
3. 功能強大,可實現復雜多條件告警,
4. 自帶畫圖功能,得到的數據可以繪成圖形5. 提供多種API接口,支持調用腳本6. 出現問題時可自動遠程執行命令(需對agent設置執行權限)
缺點:
1. 項目批量修改不方便2. 入門容易,能實現基礎的監控,但是深層次需求需要非常熟悉Zabbix並進行大量的二次定制開發,難度較大;3. 系統級別報警設置相對比較多,如果不篩選的話報警郵件會很多;並且自定義的項目報警需要自己設置,過程比較繁瑣(但是網上的模板比較,也可以使用模板導入的方法);4. 缺少數據匯總功能,如無法查看一組服務器平均值,需進行二次開發;5. 數據報表需要特殊二次開發定義;
2、Open-falcon
Open-falcon是小米運維團隊從互聯網公司的需求出發,根據多年的運維經驗,結合SRE、SA、DEVS的使用經驗和反饋,開發的一套面向互聯網的企業級開源監控產品。
Open-falcon架構
用戶群:目前有幾十家企業用戶不同程度使用。
優點:
1. 自動發現,支持falcon-agent、snmp、支持用戶主動push、用戶自定義插件支持
2. 支持每個周期上億次的數據采集、告警判定、歷史數據存儲和查詢
3. 高效的portal、支持策略模板、模板繼承和覆蓋、多種告警方式、支持callback調用
4. 單機支撐200萬metric的上報、歸檔、存儲
5. 采用rrdtool的數據歸檔策略,秒級返回上百個metric一年的歷史數據
6. 多維度的數據展示,用戶自定義Screen
7. 通過各種插件目前支持Linux、Windows、Mysql、Redis、Memache、RabbitMQ和交換機監控。
缺點:
由於發布時間較短,很多基礎的服務監控插件(如Tomcat、apache等)還不支持,很多功能還在不斷完善中,另外由於缺少專門的支持,雖然有開放社區,但是解決問題的效率相對較低。
zabbix監控
Zabbix 是由 Alexei Vladishev 開發的一種網絡監視、管理系統,基於CS架構。可用於監視各種網絡服務、服務器和網絡機器等狀態。使用MySQL, PostgreSQL, SQLite, Oracle 或 IBM DB2 等數據庫儲存資料。Server 端基於C語言、Web 管理端則是基於 PHP 所制作的。Zabbix 可以使用多種方式監視。可以只使用 Simple Check 不需要安裝 Client 端,亦可基於 SMTP 或 HTTP ... 各種協定做死活監視。在客戶端如 UNIX, Windows 中安裝 Zabbix Agent 之后,可監視 CPU Load、網絡使用狀況、硬盤容量等各種狀態。而就算沒有安裝 Agent 在監視對象中,Zabbix 也可以經由 SNMP、TCP、ICMP、利用 IPMI、SSH、telnet 對目標進行監視。另外,Zabbix 包含 XMPP 等各種 Item 警示功能。
zabbix官網: https://www.zabbix.com
zabbix 主要由2部分構成 zabbix server和 zabbix agent
zabbix proxy是用來管理其他的agent,作為代理
zabbix監控范疇
² 硬件監控 :Zabbix IPMI Interface
² 系統監控 :Zabbix Agent Interface
² Java 監控:ZabbixJMX Interface
² 網絡設備監摶:Zabbix SNMP Interface
² 應用服務監控:Zabbix Agent UserParameter
² MySQL 數據庫監控:percona-monitoring-pldlgins
² URL監控:Zabbix Web監控
1、實驗准備
centos系統服務器3台、 一台作為監控服務器, 兩台台作為被監控節點, 配置好yum源、 防火牆關閉、 各節點時鍾服務同步、 各節點之間可以通過主機名互相通信。
2、Zabbix的安裝
1)關閉selinux和iptables
[root@linux-node2 ~]# systemctl stop firewalld.service
[root@linux-node2 ~]# setenforce 0
setenforce: SELinux is disabled
init的發展:
CentOS 5: SysV init,串行
CentOS 6:Upstart,並行,借鑒ubantu
CentOS 7:Systemd,並行,借鑒MAC
Systemd是由紅帽公司開發,systemd是Linux系統中最新的初始化系統(init),它主要的設計目的是克服Sys V 固有的缺點,提高系統的啟動速度,systemd和upstart是競爭對手,ubantu上使用的是upstart的啟動方式,centos7上使用systemd替換了Sys V
開機啟動chkconfig name on–>systemctl enable name.service
開機禁止啟動chkconfig name off –>systemctl disable name.service
查看所有服務的開機自啟狀態chkconfig –list–>systemctl list-unit-files -t service
啟動:service name start –>systemctl start name.service
停止:service name stop –>systemctl stop name.service
重啟:service name restart–>systemctl restart name.service
狀態:service name status–>systemctl status name.service
2)刪除舊版本MySQL5.1數據庫
[root@localhost ~]# rpm -qa mysql* #查看已安裝的 [root@localhost ~]# yum remove mysql [root@localhost ~]# yum remove mysql-connector-java-5.1.17-6.el6.noarch [root@localhost ~]# yum remove mysql-libs-5.1.73-8.el6_8.x86_64 ##刪除MySQL物理存儲位置 [root@localhost mysql]# cd /var/lib/mysql [root@localhost mysql]# rm -rf ./*
3)安裝MySQL 5.6數據庫
1.下載mysql源安裝包
shell> wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm
2.安裝mysql源
shell> yum localinstall mysql57-community-release-el7-8.noarch.rpm
3.檢查mysql源是否安裝成功
shell> yum repolist enabled | grep "mysql.*-community.*"
4.修改 vim /etc/yum.repos.d/mysql-community.repo源 ,改變默認安裝的mysql版本。比如要安裝5.6版本,將5.7源的enabled=1改成enabled=0。然后再將5.6源的enabled=0改成enabled=1即可。
5.安裝MySQL
shell> yum install mysql-community-server
6.啟動MySQL服務
shell> systemctl start mysqld
7.開機啟動
shell> systemctl enable mysqld
shell> systemctl daemon-reload
8.修改root本地登錄密碼
1)連接mysql
shell> mysql -uroot -p
3)修改密碼
a、在mysql中該
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';
或者:
mysql> set password for 'root'@'localhost'=password('MyNewPass4!');
b、安裝后通過初始化該
shell# mysql_secure_installation #初始化
4)安裝Zabbix rpm包倉庫
[root@linux-node2 ~]# rpm -vhi http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
5)安裝zabbix-server-mysql和zabbix-web-mysql
[root@linux-node2 ~]# yum install -y zabbix-server-mysql zabbix-web-mysql #系統會自動安裝php依賴
創建數據庫並授權賬號
mysql> create database zabbix character set 'utf8';
mysql> grant all privileges on zabbix.* to 'zabbix'@'localhost' identified by 'zabbix'; #用戶名和密碼都是zabbix
mysql> flush privileges; #刷新授權
導入表
[root@server ~]# rpm -ql zabbix-server-mysql #查看
zabbix-server-mysql包提供的文件
[root@server ~]# gzip -d
/usr/share/doc/zabbix-server-mysql-3.0.28/create.sql.gz
#使用這個文件生成我們所需要的表
[root@server ~]# mysql -uzabbix -hlocalhost -pzabbix < create.sql #
直接把這個表導入至我們的數據庫即可
進去數據庫查看一下:
[root@server ~]# mysql -uzabbix -h
localhost -pzabbix
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | test | | zabbix | +--------------------+ mysql> use zabbix; Database changed mysql> show tables; +----------------------------+ | Tables_in_zabbix | +----------------------------+ | acknowledges | | actions | | alerts | …… | usrgrp | | valuemaps | +----------------------------+ 127 rows in set (0.00 sec)
可以看出來,我們的數據已經導入成功了。
3、配置 server 端
修改server端的配置文件zabbix_server.conf
[root@server ~]# cd /etc/zabbix/ [root@server zabbix]# ls web zabbix_agentd.conf zabbix_agentd.d zabbix_server.conf [root@server zabbix]# cp zabbix_server.conf.bak #為了方便我們以后恢復,我們把配置文件備份一下 [root@server zabbix]# vim zabbix_server.conf ListenPort=10051 #默認監聽端口 SourceIP=192.168.37.111 #發采樣數據請求的IP
若是server和agent在同一台機器上,則如下修改zabbix_server.conf文件
[root@linux-node2 ~]# grep ^DB /etc/zabbix/zabbix_server.conf DBHost=localhost DBName=zabbix DBUser=zabbix DBPassword=zabbix
修改配置文件/etc/httpd/conf.d/zabbix.conf,時區改成 Asia/Shanghai
php_value max_execution_time 300 php_value memory_limit 128M php_value post_max_size 16M php_value upload_max_filesize 2M php_value max_input_time 300 php_value always_populate_raw_post_data -1 php_value date.timezone Asia/Shanghai
時區是一定要設置的,這里的是可以被注釋掉,因為我們也可以在php的配置文件中設置時區,如果我們在php配置文件中設置時區,則對所有的php服務均有效,如果我們在zabbix.conf
中設置時區,則僅對zabbix服務有效。所以,我們去php配置文件中設置我們的時區:
vim /etc/php.ini
[Date] ; Defines the default timezone used by the date functions ; http://php.net/date.timezone date.timezone = Asia/Shanghai
開啟服務:
[root@server zabbix]# systemctl start httpd #開啟web服務器 [root@server zabbix]# systemctl enable httpd #設置為開機啟動
[root@server zabbix]# netstat -an |grep 80 #查看端口
[root@server zabbix]# systemctl start zabbix-server.service #開啟zabbix服務
[root@server zabbix]# systemctl enable zabbix-server.service #設置zabbix服務開啟啟動
[root@server zabbix]# ss -nutl |grep 10051 #查看端口
tcp LISTEN 0 128 *:10051 *:* tcp LISTEN 0 128 :::10051 :::*
server端的進程已啟動,可以訪問網站了,例如:http://本機IP/zabbix,如下圖所示:
4、瀏覽器訪問並進行初始化設置
我們使用瀏覽器訪問192.168.37.111/zabbix
,第一次訪問時需要進行一些初始化的設置,我們按照提示操作即可:
點擊Finish以后,我們就會跳轉到登錄頁面,使用我們的賬號密碼登錄即可:
默認用戶名為:admin ,密碼為:zabbix 。
登陸進來就可以看到我們的儀表盤了:
5、配置 agent 端
當我們把監控端配置啟動以后,我們需要來設置一下我們的監控端,我們在被監控的主機安裝好agent,設置好他的server,並把他添加到server端,就能將其納入我們的監控系統中去了。
1)安裝zabbix
[root@node1 ~]# yum install zabbix-agent
2)修改配置文件
[root@node1 zabbix]# rpm -ql zabbix-agent #先查一下包內容
[root@node1 ~]# cd /etc/zabbix/
[root@node1 zabbix]# ls
zabbix_agentd.conf zabbix_agentd.d
[root@node1 zabbix]# cp zabbix_agentd.conf{,.bak} #備份配置文件
[root@node1 zabbix]# vim zabbix_agentd.conf
Server=192.168.37.111 #指明服務器是誰的 ListenPort=10050 #自己監聽的端口 ListenIP=0.0.0.0 #自己監聽的地址,0.0.0.0表示本機所有地址 StartAgents=3 #優化時使用的 ServerActive=192.168.37.111 #主動監控時的服務器 Hostname=node1.keer.com #自己能被server端識別的名稱 若是server和agernt在同一台機器上則無需改。
[root@node1 zabbix]# systemctl start zabbix-agent.service #修改完后保存,啟動服務
[root@node1 zabbix]# ss -ntul |grep 10050 查看端口
tcp LISTEN 0 128 *:10050 *:*
已經開啟成功。我們可以去server端添加了。node2也進行同樣的操作,唯一不同的就是配置文件中的Hostname
要設為node2.keer.com
。
6、監控過程詳解
1)修改密碼及中文版
按如上操作即可,選擇中文以后,點擊下面的update即可更新成功,同樣的,為了安全起見,我們把密碼改掉:
2)創建主機及主機群組
我們先來定義一個主機群組:
然后我們就可以去添加主機了:
設置完成后,點擊添加。我們就可以看到,我們添加的這個主機已經出現在列表中了:
同樣的,我們把node2節點也添加進來:
3)監控項(items)
我們點擊上圖中node1的監控項,即可創建我們的監控項,首先,我們創建三個應用集:
然后我們來定義監控項:
任何一個被監控項,如果想要能夠被監控,一定要在zabbix-server端定義了能夠連接至zabbix-agent端,並且能夠獲取命令。或者在agent端定義了能夠讓server端獲取命令。一般都是內建的命令,都對應的有其名字,被我們稱之為key
。
示例:我們來定義一個不帶參數的監控項
設置完以后,點擊更新,即可加入,並會自動跳轉至下圖頁面:
定義完成,我們回到所有主機,等待5秒,我們可以看到,我們node1節點后面的選項已經有變成綠色的了:
我們也可以回到我們的儀表盤,可以看到,我們的監控項有一個處於啟用狀態:
那么,我們的數據在哪里呢?可以點擊最新數據
,把我們的node1節點添加至主機,應用一下,就可以看到下面的狀態了:
可以看到,我們還有一個圖形頁面,點進去則可以看圖形的分布:
剛剛我們定義的監控項是很簡單的,指定一個key
即可,但是有些監控項是帶有參數的,這樣一來,我們的監控項就有更多的靈活性。接下來,我們來簡單說明一個需要帶參數的監控項:
③ 定義一個帶參數的監控項
圖中的[]
就是需要參數的意思,里面的值即為參數,帶<>
為不可省略的。我們就以這個例子來說明:
if
表示是接口名;<mode>
表示是那種模式,包括但不限於:packets(包)、bytes(字節)、errors(錯誤)、dropped(丟包)、overuns等等(上述內容通過ifconfig
查看)
我們來設置一下這個監控值:
我們來看看網頁的顯示情況:檢測中 ---> 最新數據 ---> Network Interface Stats(圖形)
可以看一下,我們現在已經定義的指標:
我們來到 檢測中 ---> 最新數據,可以看到,我們定義的監控項都已經有值了:
4)觸發器(trigger)
① 簡介
當我們的采集的值定義完了以后,就可以來定義觸發器了。
我們觸發器的定義是:界定某特定的item采集到的數據的非合理區間或非合理狀態。通常為邏輯表達式。
邏輯表達式(閾值):通常用於定義數據的不合理區間,其結果如下:
OK
(不符合條件):正常狀態 --> 較老的zabbix版本,其為FALSE;
PROBLEM
(符合條件):非正常狀態 --> 較老的zabbix版本,其為TRUE;
一般,我們評定采樣數值是否為合理區間的比較穩妥的方法是——根據最后N次的平均值來判定結果;這個最后N次通常有兩種定義方式:
- 最近N分鍾所得結果的平均值
- 最近N次所得結果的平均值
而且,我們的觸發器存在可調用的函數:
nodata() #是否采集到數據,采集不到則為異常
last() #最近幾次的平均值
date()
time()
now()
dayofmonth()
...
注:能用數值保存的就不要使用字符串
② 觸發器表達式
基本的觸發器表達式格式如下所示
{<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)將返回一周之前的最大值;
表達式所支持的運算符及其功能如下圖所示:
③ 定義一個觸發器
我們可以查看一下rate of packets(in)
的值,並以其為標准確定我們的非正常的值:
圖中我們可以看出,我們的最大值為74,最小值為4,平均值為24。這樣的話,我們可以定義50以上的都是非正常的值。
下面我們來定義一個觸發器:
進入:配置 ---> 主機 ---> node1 ---> 觸發器 ---> 創建觸發器
我們的表達式可以直接點擊右側的添加,然后定義自己所需的內容,即可自動生成:
生成完畢后,我們就點擊頁面下方的添加,即成功定義了一個觸發器,同時頁面自動跳轉:
然后我們去看一下我們剛剛定義了觸發器的那個監控項:
我們可以看出,這個里面就有了一根線,就是我們剛剛定義的值,超過線的即為異常狀態,看起來非常直觀。
但是,現在即使超過了這根線,也僅僅會產生一個觸發器事件而不會做其他任何事。因此,我們就需要去定義一個動作(action)。
④ 觸發器的依賴關系
我們的觸發器彼此之間可能會存在依賴關系的,一旦某一個觸發器被觸發了,那么依賴這個觸發器的其余觸發器都不需要再報警。
我們可以來試想一下這樣的場景:
我們的多台主機是通過交換機的網絡連接線來實現被監控的。如果交換機出了故障,我們的主機自然也無法繼續被監控,如果此時,我們的所有主機統統報警……想想也是一件很可怕的事情。要解決這樣的問題,就是定義觸發器之間的依賴關系,當交換機掛掉,只它自己報警就可以了,其余的主機就不需要在報警了。這樣,也更易於我們判斷真正故障所在。
注意:目前zabbix不能夠直接定義主機間的依賴關系,其依賴關系僅能通過觸發器來定義。
我們來簡單舉一個例子,示范一下如何定義一個依賴關系:
打開任意一個觸發器,上面就有依賴關系,我們進行定義即可:
由於當前我們只定義了一個觸發器,就不演示了,過程就是這樣~添加以后點擊更新即可。
觸發器可以有多級依賴關系,比如我們看下面的例子:
5)定義動作(action)
① 簡介
我們需要去基於一個對應的事件為條件來指明該做什么事,一般就是執行遠程命令或者發警報。
我們有一個告警升級的機制,所以,當發現問題的時候,我們一般是先執行一個遠程操作命令,如果能夠解決問題,就會發一個恢復操作的訊息給接收人,如果問題依然存在,則會執行發警報的操作,一般默認的警報接收人是當前系統中有的zabbix用戶,所以當有人需要收到警報操作的話,我們則需要把它加入我們的定義之中。
其次,每一個用戶也應該有一個接收告警信息的方式,即媒介,就像我們接收短信是需要有手機號的一樣。
我們的每一個監控主機,能夠傳播告警信息的媒介有很多種,就算我們的每一種大的媒介,能夠定義出來的實施媒介也有很多種。而對於一個媒介來說,每一個用戶都有一個統一的或者不同的接收告警信息的端點,我們稱之為目標地或者目的地。
綜上,為了能夠發告警信息,第一,我們要事先定義一個媒介,第二,還要定義這個媒介上用戶接收消息的端點(當然,在用戶上,我們也稱之為用戶的媒介)。
我們可以去看一下系統內建的媒介類型:
這只是大的媒介類型,里面還有更多的細分,我們以Email
為例:
同樣的,同一個類型我們也可以定義多個,還是以Email
為例,我們可以定義一個騰訊的服務器,一個網易的服務器,一個阿里的服務器等等。
② 定義一個媒介(media)
我們還是以Email
為例。來簡單的定義一個媒介:
這樣定義以后,我們去更新一下就可以了。
媒介定義好了,那么我們怎么才能夠然后用戶接收到郵件呢?比如讓我們的Admin用戶接收郵件,我們應該怎么操作呢?具體步驟如下:
進入 管理 ---> 用戶 ---> Admin ---> 報警媒介
我們來添加一條進來:
添加過后是這樣的:
然后我們更新就可以了。
一個用戶可以添加多個接收的媒介類型。
③ 定義一個動作(action)
我們之前說過了,動作是在某些特定條件下觸發的,比如,某個觸發器被觸發了,就會觸發我們的動作。
現在,我么基於redis來定義一個動作。
首先,我們在agent端使用yum安裝一下redis
:
[root@node1 ~]# yum install redis -y
修改一下配置文件:
[root@node1 ~]# vim /etc/redis.conf bind 0.0.0.0 #不做任何認證操作
修改完成以后,我們啟動服務,並檢查端口:
[root@node1 ~]# systemctl start redis [root@node1 ~]# ss -nutlp | grep redis tcp LISTEN 0 128 *:6379 *:* users:(("redis-server",pid=5250,fd=4))
接着,我們就可以去網站上來定義相關的操作了:
1.定義監控項
進入 配置 ---> 主機 ---> node1 ---> 監控項(items)---> 創建監控項
填寫完畢以后,我們點擊下方的添加。
該監控項已成功添加。
我們可以去查看一下他的值:
檢測中 ---> 最新數據
2.定義觸發器
定義好了監控項以后,我們亦可來定義一個觸發器,當服務有問題的時候,我們才能及時知道:
進入 配置 ---> 主機 ---> node1 ---> 觸發器(trigger)---> 創建觸發器
填寫完畢以后,我們點擊下方的添加。
該觸發器已成功添加。
我們去查看一下:
監測中 ---> 最新數據
我們來手動關閉redis服務來檢測一下:
[root@node1 ~]# systemctl stop redis.service
進入 監測中 ---> 問題
可以看到,現在已經顯示的是問題了。並且有持續的時間,當我們的服務被打開,會轉為已解決狀態:
[root@node1 ~]# systemctl start redis.service
3.定義動作(action)
現在我們就可以去定義action了。
進入 配置 ---> 動作 ---> 創建動作(注意選擇事件源為觸發器)
我們可以進行操作添加:
我們可以看出,還需要在虛擬機上進行兩項操作,一是修改sudo配置文件使zabbix用戶能夠臨時擁有管理員權限;二是修改zabbix配置文件使其允許接收遠程命令。我們進行如下操作:
[root@node1 ~]# visudo #相當於“vim /etc/sudoers” ## Allow root to run any commands anywhere root ALL=(ALL) ALL zabbix ALL=(ALL) NOPASSWD: ALL #添加的一行,表示不需要輸入密碼 [root@node1 ~]# vim /etc/zabbix/zabbix_agentd.conf EnableRemoteCommands=1 #允許接收遠程命令 LogRemoteCommands=1 #把接收的遠程命令記入日志 [root@node1 ~]# systemctl restart zabbix-agent.service
我們添加了第一步需要做的事情,也就是重啟服務,如果重啟不成功怎么辦呢?我們就需要來添加第二步:
添加完成以后,我們可以看一下:
操作添加完了,如果服務自動恢復了,我們可以發送消息來提示:
至此,我們的動作設置完畢,可以點擊添加了,添加完成會自動跳轉至如下頁面:
現在我們可以手動停止服務來進行測試:
[root@node1 ~]# systemctl stop redis.service
然后我們來到問題頁面來查看,發現確實有問題,並且已經解決:
我們可以去server端查看是否收到郵件:
也可以去agent端查看端口是否開啟:
[root@node1 ~]# systemctl stop redis.service [root@node1 ~]# ss -ntl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:6379 *:* LISTEN 0 128 *:111 *:* LISTEN 0 5 192.168.122.1:53 *:* LISTEN 0 128 *:22 *:* LISTEN 0 128 127.0.0.1:631 *:* LISTEN 0 128 *:23000 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 *:10050 *:* LISTEN 0 128 :::111 :::* LISTEN 0 128 :::22 :::* LISTEN 0 128 ::1:631 :::* LISTEN 0 100 ::1:25 :::*
可以看出端口正常開啟,我們的動作觸發已經完成。
補充:我們也可以使用腳本來發送警報,我們的腳本存放路徑在配置文件中可以找到,定義為:
AlterScriptsPath=/usr/lib/zabbix/alertscripts
接下來,我們來一波徹底一點的操作,我們來手動修改一下redis服務的監聽端口,這樣,我們就不能通過重啟服務恢復了:
[root@node1 ~]# vim /etc/redis.conf #port 6379 port 6380 #注釋掉原來的端口,更換為新的端口 [root@node1 ~]# systemctl restart redis
然后,我們來網頁查看一下狀態:
進入 監測中 ---> 問題,可以看到是報錯的:
這樣,在經過了重啟服務以后還是沒能把解決問題,就會發郵件告警:
我們再把服務端口改回來,然后重啟服務。這樣,等到問題自動解決了以后,我們會再次收到郵件:
這樣,我們的動作設定已經全部測試完成。
6)zabbix可視化
① 簡介
數據日積月累,如果我們想要更直觀的了解到各項數據的情況,圖形無疑是我們的最佳選擇。
zabbix提示了眾多的可視化工具提供直觀展示,如graph、screen及map等。上文中我們也看到過一些簡單的圖形展示。
如果我們想要把多個相關的數據定義在同一張圖上去查看,就需要去自定義圖形了~
② 自定義圖形(Graphs)
自定義圖形中可以集中展示多個時間序列的數據流。支持“線狀圖(normal)”、“堆疊面積圖(stacked)”、“餅圖(pie)” 和“分離型餅圖(exploded)”四種不同形式的圖形。
具體的設置過程如下:
進入 配置 ---> 主機 ---> node1 ---> 圖形,選擇右上角創建圖形:
我們來看一看四種狀態:
包括我們的主機都可以自定義,不過一般來說,線型是看的最清晰的,我們通常會使用這個。
我們也可以克隆一個packets來更改為bytes用~同樣的,我們如果想添加別的內容,也都可以添加的。
我們一共添加了三個圖形,我們可以在 監測中 ---> 圖形 來查看
③ 聚合圖形(Screens)
我們創建的自定義圖形也可以放在一個聚合圖里顯示,具體的設置方法如下:
進入 監測中 ---> 聚合圖形 ---> 選擇右上角創建聚合圖形
我們還可以選擇分享:
定義好了添加即可。
定義完成以后,我們需要編輯一下,來指定保存哪些圖:
依次添加即可,添加完成之后是這樣嬸兒的~:
因為我們只有三張圖,所以添加的有重復的,通常情況下是不需要這樣的。
④ 幻燈片演示(Slide shows)
如果我們有多個聚合圖形想要按順序展示的話,我們就可以定義一個幻燈片。
具體步驟如下:
進入 監測中 ---> 聚合圖形 ---> 右上角選擇幻燈片演示 ---> 創建幻燈片
然后我們打開即可。打開以后顯示的是圖片1,5s以后會自動切換為圖片2。
這樣就可以實現幻燈片演示,我們就不需要去手動切換了。
⑤ 定義拓撲圖(Maps)
在拓撲圖中,我們可以定義成一個復雜的網絡連接圖,我們可以使用一台主機來連接另一台主機,這樣的話,我們就可以查看出到底是哪個鏈接出了問題。
我們就不來演示了,看一下過程即可:
進入 監測中 ---> 拓撲圖 ---> 所有地圖 ---> Local network(默認就有的)
通過 Ping 和 Traceroute 就可以實驗我們上述的功能。
7)模板
① 創建模板
之前我們說過,每一個主機的監控項都很多,我們一個一個的添加實在是太頭疼了,更何況,可能不止一個主機。
但是我們可以把一個redis的監控項添加進一個模板里,這樣更方便於我們以后的添加。
具體操作如下:
進入 配置 ---> 模板 ---> 選擇右上角創建模板
填寫完以后,我們點擊下方的添加即可。
我們可以基於組過濾一下,就能看到我們剛剛定義的模板:
一樣的,我們可以向里面添加應用集、監控項、觸發器、圖形等等,添加完成以后,后期我們再有主機需要添加就直接套用模板即可。
需要注意的一點是,我們現在添加的是模板,所以不會立即采用數據,只有鏈接到主機上以后,才會真正生效。
② 模板的導入與導出
我們也可以直接導入一個模板,在互聯網上可以找到很多,導入的步驟如下:
同樣的,我們創建好的模板也可以導出為文件:
我們任意選中一個准備好的模板,然后頁面的最下方就有導出按鈕:
因此,我們就可以非常方便的進行應用了~
③ 模板的應用
我們的軟件已經創建了許多模板,我們可以使用一個模板來看看效果。
進入 配置 ---> 主機 ---> node1 ---> 模板
我們就可以選擇要添加的模板了:
到這里我們就可以點擊更新了。一旦我們成功鏈接至模板,我們的主機數據就會更新了:
注意:1、一個主機可以鏈接多個模板,但盡量不要讓一個指標被采樣兩次。
2、如果我們有多個主機,同時這些主機也在一個主機組里,這樣的話,我們只需要在這個主機組里添加模板,就能夠讓在主機組里的所有主機進行tongb
④ 移除模板鏈接
當我們一個主機的模板不想要用了,我們就可以移除模板鏈接,具體操作步驟如下:
進入 配置 ---> 主機 ---> node1 ---> 模板
我們就可以把不需要的模板移除:
我們來刪除掉試試看,移除並清理以后,我們點擊更新。就會自動跳轉至如下界面:
可以看出,我們的模板已經被移除了。
8)宏(macro)
① 簡介
宏是一種抽象(Abstraction),它根據一系列預定義的規則替換一定的文本模式,而解釋器或編譯器在遇到宏時會自動進行這一模式替換。
類似地,zabbix基於宏保存預設文本模式,並且在調用時將其替換為其中的文本。
zabbix有許多內置的宏,如{HOST.NAME}、{HOST.IP}、{TRIGGER.DESCRIPTION}、{TRIGGER.NAME}、{TRIGGER.EVENTS.ACK}等。
詳細信息請參考官方文檔
② 級別
宏一共有三種級別,分別是全局宏、模板宏、主機宏。
不同級別的宏的適用范圍也不一樣。
全局宏也可以作用於所有的模板宏和主機宏,優先級最低。
模板宏則可以作用於所有使用該模板的主機,優先級排在中間。
主機宏則只對單個主機有效,優先級最高。
③ 類型
宏的類型分為系統內建的宏和用戶自定義的宏。
為了更強的靈活性,zabbix還支持在全局、模板或主機級別使用用戶自定義宏(user macro)。
系統內建的宏在使用的時候需要{MACRO}
的語法格式,用戶自定義宏要使用{$MACRO}
這種特殊的語法格式。
宏可以應用在item keys和descriptions、trigger名稱和表達式、主機接口IP/DNS及端口、discovery機制的SNMP協議的相關信息中……
宏的名稱只能使用大寫字母、數字及下划線。
進一步信息請參考官方文檔。
④ 定義一個宏
如果我們想要在我們的監控項(items)上使用宏,我們就要先去定義一個宏,然后去創建監控項,直接引用定義好的宏即可。具體操作步驟如下:
1.定義全局宏
進入 管理 ---> 一般 ---> 右上角選擇宏
這樣,我們的全局宏就添加好了。
2.定義監控項,調用宏
進入 配置 ---> 主機 ---> 所有主機 ---> 監控項 ---> 右上角創建監控項
填寫完成以后,點擊添加。然后我們就可以看到這個調用宏的監控項已經添加成功:
我們可以來查看一下這個監控項現在的狀態:
進入 監測中 ---> 最新數據
如果我們把服務停掉。就會變成down
的狀態:
[root@node1 ~]# systemctl stop redis
發現我們的監控項是可以正常使用的。
3.修改宏
如果我們把node1節點上的redis服務監聽端口手動改掉的話,我們剛剛定義的監控項就不能正常使用了,這樣的話,我們就需要去修改宏。
但是,這畢竟只是個例,所以我們不需要去修改全局宏,只用修改模板宏或者主機宏就可以了。
下面分別說一下,模板宏和主機宏的不同修改操作:
模板宏
模板宏的修改,我們需要進入:配置 ---> 模板 ---> redis stats(相應的模板) ---> 宏
在這里點擊添加就可以了。
主機宏
主機宏的修改,我們需要進入:配置 ---> 主機 ---> 所有主機 ---> node1 ---> 宏
在這里點擊添加就可以了。