Zabbix 監控MySQL、Apache、Nginx應用監控

zabbix對第三方應用軟件的監控,主要有兩個工做難點,一個是編寫自定義監控腳本,另外一個是在編寫模板並導入zabbix web中,編寫腳本這個要根據mysql

監控需求定製便可,而編寫模板文件有些難度,不過網上已經有不少已經寫好的模板,咱們能夠直接拿來直接使用,因此,zabbix對應用軟件的監控其實並不難。nginx

1、zabbix 監控 mysql應用實戰
本文首先要介紹的是zabbix對mysql的監控,這個是最簡單的,由於zabbix已經自帶了mysql監控的模板,咱們只須要編寫一個監控mysql的腳本便可,因此對mysql的監控能夠分紅兩個步驟完成。web

一、zabbix添加自定義監控mysql腳本sql

這裏給出咱們一個線上運行的mysql監控腳本check_mysql,內容以下:shell

#!/bin/bash # 主機地址/IP MYSQL_HOST='127.0.0.1' # 端口 MYSQL_PORT='3306' # 數據鏈接 MYSQL_CONN="/usr/local/mysql/bin/mysqladmin -h${MYSQL_HOST} -P${MYSQL_PORT}" # 參數是否正確 if [ $# -ne "1" ];then echo "arg error!" fi # 獲取數據 case $1 in Uptime) result=`${MYSQL_CONN} status|cut -f2 -d":"|cut -f1 -d"T"` echo $result ;; Com_update) result=`${MYSQL_CONN} extended-status |grep -w "Com_update"|cut -d"|" -f3` echo $result ;; Slow_queries) result=`${MYSQL_CONN} status |cut -f5 -d":"|cut -f1 -d"O"` echo $result ;; Com_select) result=`${MYSQL_CONN} extended-status |grep -w "Com_select"|cut -d"|" -f3` echo $result ;; Com_rollback) result=`${MYSQL_CONN} extended-status |grep -w "Com_rollback"|cut -d"|" -f3` echo $result ;; Questions) result=`${MYSQL_CONN} status|cut -f4 -d":"|cut -f1 -d"S"` echo $result ;; Com_insert) result=`${MYSQL_CONN} extended-status |grep -w "Com_insert"|cut -d"|" -f3` echo $result ;; Com_delete) result=`${MYSQL_CONN} extended-status |grep -w "Com_delete"|cut -d"|" -f3` echo $result ;; Com_commit) result=`${MYSQL_CONN} extended-status |grep -w "Com_commit"|cut -d"|" -f3` echo $result ;; Bytes_sent) result=`${MYSQL_CONN} extended-status |grep -w "Bytes_sent" |cut -d"|" -f3` echo $result ;; Bytes_received) result=`${MYSQL_CONN} extended-status |grep -w "Bytes_received" |cut -d"|" -f3` echo $result ;; Com_begin) result=`${MYSQL_CONN} extended-status |grep -w "Com_begin"|cut -d"|" -f3` echo $result ;; *) echo "Usage:$0(Uptime|Com_update|Slow_queries|Com_select|Com_rollback|Questions|Com_insert|Com_delete|Com_commit|Bytes_sent|Bytes_received|C om_begin)" ;; esac

此腳本很簡單,就是經過mysqladmin命令獲取mysql的運行狀態參數,由於要獲取mysql運行狀態,因此須要登陸到mysql中獲取狀態值,但這個腳本中並無添加登陸數據庫的用戶名和密碼信息,緣由是密碼添加到腳本中很不安全,另外一個是在mysql5.7版本後,在命令行輸入明文密碼的話,都會提示以下信息:數據庫

mysqladmin: [Warning] Using a password on the command line interface can be insecure.

對待這個問題的解決方法是,將登陸數據庫的用戶名和密碼信息寫入/etc/my.cnf文件中,相似以下:apache

[mysqladmin] user=root password=xxxxxx

這樣,經過mysqladmin在命令行執行操做的話,會自動經過root用戶和對應的密碼登陸到數據庫中。後端

二、zabbix agent端修改配置安全

要監控mysql,就須要在mysql服務器上安裝zabbix agent,而後開啓agent的自定義監控模式,將上面腳本放到zabbix agent端的/etc/zabbix/shell目錄下,而後進行受權:bash

chmod o+x check_mysql chown zabbix.zabbix check_mysql

接着,將以下內容添加到/etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf文件中,注意,userparameter_mysql.conf文件以前內容所有刪除或者註釋掉。

UserParameter=mysql.status[*],/etc/zabbix/shell/check_mysql.sh $1 UserParameter=mysql.ping,HOME=/etc /usr/local/mysql/bin/mysqladmin ping 2>/dev/null| grep -c alive UserParameter=mysql.version,/usr/local/mysql/bin/mysql -V

這裏實際上是自定義了三個監控項,分別是mysql.status、mysql.ping和mysql.version,注意自定義監控的寫法。這三個自定義監控項鍵值在zabbix web中須要添加進去的。

配置完成後,最後,重啓zabbix agent服務使配置生效。

三、Zabbix web界面引入模板

zabbix自帶了mysql監控的模板,所以只需將模板連接到對應的主機便可。
點擊web界面「配置」,選擇「主機」,點擊右上角「建立主機」,添加一臺mysql主機,以下圖所示:

這裏先添加一臺mysql主機172.16.213.236,而後點擊圖中「模板」選項,點擊「連接指示器」後面的選擇按鈕,選擇「Template DB MySQL」模板,以下圖所示:

最後點擊上圖中紅框標註的」添加」按鈕,完成模板的連接。

接着,點擊web上面的「設置」選項,而後選擇「模板」,找到「Template DB MySQL」模板,能夠看到此模板已經添加了14個監控項,1個觸發器,2個圖形,1個應用集,而後點 「監控項」,便可顯示監控項的名稱和鍵值信息,以下圖所示:

這裏重點須要關注的是每一個監控項名稱對應的「鍵值」一列的配置,這裏的鍵值,必須和agent端自定義的監控鍵值保持一致。另外,能夠看到,「mysql status」這個監控項有一個觸發器,用來檢查mysql的運行狀態,最後,還須要關注的是這些監控項的監控類型是「zabbix客戶端」,全部監控項都存放在了「MySQL」應用集中。

全部設置完成後,監控mysql的172.16.213.236主機已經添加完成了。

四、查看監控狀態數據

點擊web上面的「監測中」選項,而後選擇「最新數據」,便可看到監控項是否獲取到了最新數據,以下圖所示:

經過過濾器進行過濾,便可查看mysql監控項返回的數據,能夠看到「最新數據」一列中,已經獲取到了mysql的狀態數據,此外,在「名稱」一列中,還能夠看到「Template DB MySQL」模板中每一個監控項對應的鍵值,例如mysql.status[Com_begin]、mysql.status[Bytes_received]、mysql.status[Bytes_sent],這些監控項鍵值與zabbix agent端自定義監控項的名稱是徹底對應的。

有時候因爲agent端配置的問題,或者網絡、防火牆等問題,可能致使server端沒法獲取agent端的數據,此時在web界面上就會出現以下圖信息:

在此圖中,能夠從「最近檢查記錄」一列中查看最近一次的檢查時間,若是監控項沒法獲取到數據,那麼這個檢查時間確定不是最新的,此外,最後一列「信息」中也會給出錯誤提示,咱們能夠從錯誤提示中找到沒法獲取數據的緣由,這將很是有助於排查問題。在沒有獲取到數據時,能夠看到每列信息都是灰色的。

五、測試觸發器告警功能

MySQL加入zabbix監控後,咱們還須要測試一下,觸發器告警動做是否正常,點擊web上面的「監測中」選項,而後選擇「問題」,便可看到有問題的監控項,以下圖所示:

在這個界面中,能夠看到哪一個主機出現了什麼問題,以及問題持續的時間,還有問題的嚴重性,當觸發器觸發後,會激活觸發器動做,也就是發送告警消息的操做,在上面的介紹中,咱們配置了郵件告警,那麼就來看看是否發送了告警郵件,接下來,點擊web導航上面的「報表」選項,而後選擇「動做日誌」,便可看到動做事件的日誌,以下圖所示:

此界面顯示了監控項在發生故障後,觸發器動做發送的消息事件,其中,「類型」一列指定是發送郵件信息,「接收者」一列是消息收件人的地址,「消息」一列是發送消息的詳細內容,「狀態」一列顯示了告警郵件是否發送成功,若是發送不成功,最後一列「消息」會給出錯誤信息,咱們根據錯誤提示進行排錯便可。

2、zabbix 監控 apache應用實戰
zabbix對apache的監控,稍微複雜一些,但基本流程仍是兩個步驟,第一個是編寫監控apache的腳本,第二個是建立apache監控模板。

一、開啓apache狀態頁

要監控apache的運行狀態,須要在apache的配置中開啓一個apache狀態頁面,而後再經過編寫腳本獲取這個狀態頁面的數據便可達到監控apache的目的,這裏咱們以apache2.4版本爲例,如何安裝httpd不作介紹,主要介紹下如何打開apache的Server Status頁面,要打開狀態頁面,只需在apache配置文件httpd.conf文件最下邊加入以下代碼段:

ExtendedStatus On <location /server-status> SetHandler server-status Order Deny,Allow Deny from all Allow from 127.0.0.1 172.16.213.132 </location> 或者 ExtendedStatus On <location /server-status> SetHandler server-status Require ip 127.0.0.1 172.16.213.132 </location>

其中:

ExtendedStatus On: 表示開啓或關閉擴展的status信息,設置爲On後,經過ExtendedStatus指令能夠查看更爲詳細的status信息。但啓用擴展狀態信息將會致使服務器運行效率下降。

第二行的/server-status表示之後能夠用相似http://ip/server-status來訪問, 同時也能夠經過http://ip/server-status?refresh=N 方式動態訪問,此url表示訪問狀態頁面能夠每N秒自動刷新一次。

Require是apache2.4版本的一個新特效,能夠對來訪的IP或主機進行訪問控制。 「Require host www.abc.com」表示僅容許www.abc.com訪問apache的狀態頁面。「Require ip 172.16.213.132」表示僅容許172.16.213.132主機訪問apache的狀態頁面。Require相似的用法還要以下幾種:

 容許全部主機訪問:Require all granted
 拒絕全部主機訪問:Require all denied
 容許某個IP訪問:Require ip ip地址
 禁止某個IP訪問: Require not ip ip地址
 容許某個主機訪問:Require host 主機名
 禁止某個主機訪問 Require not host 主機名

最後,重啓apache服務便可完成httpd狀態頁面的開啓。

二、編寫apache的狀態監控腳本和zabbix模板

apache狀態頁面配置完成後,接下來就須要編寫獲取狀態數據的腳本了,腳本代碼較多,你們可直接從以下地址下載便可:

[root@iivey /]# wget https://www.ixdba.net/zabbix/zabbix-apache.zip

接着,就是編寫apache的zabbix監控模板了,zabbix默認沒有自帶apache的監控模板,須要本身編寫,這裏咱們直接將編寫好的模板供你們下載,能夠從以下地址下載apache zabbix模板:

[root@iivey /]# wget https://www.ixdba.net/zabbix/zabbix-apache.zip

獲取監控數據的腳本文件和監控模板都編寫完成後,接下來,還須要在要監控的apache服務器上(須要安裝zabbix agent)上作兩個步驟的操做,第一個步驟是將apache監控腳本放到須要監控的apache服務器上的/etc/zabbix/shell目錄下,若是沒有shell目錄,自行建立一個便可。而後執行受權:

[root@iivey shell]#chmod 755 zapache

固然,zabbix_agentd.conf也是須要配置的,這個文件的配置方式前面已經介紹過,這裏就不在多說了。

第二個步驟是在apache服務器上的/etc/zabbix/zabbix_agentd.d目錄下建立userparameter_zapache.conf文件,內容以下:

UserParameter=zapache[*],/etc/zabbix/shell/zapache $1

注意這裏/etc/zabbix/shell/zapache的路徑。

最後,重啓zabbix-agent服務完成agent端的配置:

[root@localhost zabbix]# systemctl start zabbix-agent

三、Zabbix圖形界面導入模板

點擊web導航上面的「配置」選項,而後選擇「模板」,點擊右上角「導入」按鈕,開始導入apache模板到zabbix中,以下圖所示:

在此界面下,在「導入文件」選項中點擊「瀏覽」,導入apache的模板文件,接着點擊最下面的「導入」按鈕便可將apache模板導入zabbix中。

模板導入後,還須要將此模板關聯到某個主機下,這裏咱們仍然選擇將此模板關聯到172.16.213.236這個主機下,點擊web導航上面的「配置」選項,而後選擇「主機」,接着點開172.16.213.236主機連接,而後選擇「模板」這個二級選項,連接一個新的模板,以下圖所示:

在此界面下點擊「連接指示器」後面的「選擇」按鈕,選擇剛剛上傳上來的模板,這樣就把apache模板連接到了172.16.213.236主機上了。這樣172.16.213.236主機已經連接了兩個模板了,以下圖所示:

點擊「更新」按鈕,完成模板的連接。

點擊web上面的「設置」選項,而後選擇「模板」,找到「Template App Apache Web Server zapache」模板,能夠看到此模板已經添加了23個監控項,1個觸發器,5個圖形,1個應用集,而後點 「監控項」,便可顯示監控項的名稱和鍵值信息。請注意一下監控項中每一個鍵值的名稱。

四、查看apache狀態數據

點擊web上面的「監測中」選項,而後選擇「最新數據」,根據過濾器指定條件,便可看到「Apache Web Server」這個應用集下每一個監控項是否獲取到了最新數據,以下圖所示:

今後圖中能夠看出,已經獲取到了apache的監控狀態數據,重點關注監控項對應的鍵值名稱,每一個監控項最後的檢查時間以及最新數據信息。

3、zabbix 監控 nginx應用實戰
Zabbix對Nginx的監控,與監控apache的方式徹底同樣,基本流程仍是兩個步驟,第一個是編寫監控Nginx的腳本,第二個是建立Nginx監控模板。這裏咱們以監控遠程主機172.16.213.236上的Nginx服務爲例,詳細介紹下如何對nginx進行狀態監控。

一、 開啓nginx狀態頁

這個操做是在Nginx服務器172.16.213.236上完成的。Nginx跟Apache同樣,也提供了狀態監控頁面,因此,第一步也是開啓Nginx的狀態監控頁面,而後再經過腳本去狀態頁面獲取監控數據便可,這裏咱們以Nginx1.14版本爲例,首先在nginx的配置文件的server段(想監控哪一個虛擬主機,就放到哪一個server段中)中添加以下配置:

location /nginx-status { stub_status on; access_log off; allow 127.0.0.1; allow 172.16.213.132; deny all; }

這段location是打開nginx的狀態監控頁面,「stub_status」爲「on」表示開啓狀態監控模塊,「access_log off」表示關閉這個頁面的訪問日誌,接下來的「allow」表示這個狀態監控頁面容許哪些客戶端訪問,通常容許本機(127.0.0.1)和你的客戶端電腦就行,這裏172.16.213.132就是個人客戶端電腦,爲了調試方便,我容許本身電腦訪問nginx的狀態頁面,除了容許訪問的客戶端外,其它都經過「deny all」禁止訪問便可。這樣,nginx狀態頁面就設置好了。

二、訪問設置好的nginx-status連接

要訪問nginx狀態頁面,可經過以下方式獲取nginx狀態頁面信息:http://172.16.213.236/nginx-status, 其中,172.16.213.236就是nginx服務器,訪問這個頁面後,會輸出以下信息:

Active connections: 22
server accepts handled requests
502254 502254 502259
Reading: 0 Writing: 2 Waiting: 20
對上面輸出中每一個參數含義詳細說明以下:

 Active connections:對後端發起的活動鏈接數;
 accepts:nginx總共處理了多少個鏈接;
 handled:nginx成功建立了幾回握手;
 requests:nginx總共處理了多少請求。
 Reading:nginx讀取客戶端的header數;
 Writing: nginx 返回給客戶端的header數;
 Waiting: nginx 請求處理完成,正在等待下一請求指令的鏈接。

三、編寫nginx狀態監控腳本

編寫nginx狀態監控腳本的思路,主要是對狀態頁面獲取的信息進行抓取,下面是經過shell編寫的一個抓取nginx狀態數據的腳本文件nginx_status.sh,內容以下:

#!/bin/bash # Set Variables HOST=127.0.0.1 PORT="80" if [ $# -eq "0" ];then echo "Usage:$0(active|reading|writing|waiting|accepts|handled|requests|ping)" fi # Functions to return nginx stats function active { /usr/bin/curl "http://$HOST:$PORT/nginx-status" 2>/dev/null| grep 'Active' | awk '{print $NF}' } function reading { /usr/bin/curl "http://$HOST:$PORT/nginx-status" 2>/dev/null| grep 'Reading' | awk '{print $2}' } function writing { /usr/bin/curl "http://$HOST:$PORT/nginx-status" 2>/dev/null| grep 'Writing' | awk '{print $4}' } function waiting { /usr/bin/curl "http://$HOST:$PORT/nginx-status" 2>/dev/null| grep 'Waiting' | awk '{print $6}' } function accepts { /usr/bin/curl "http://$HOST:$PORT/nginx-status" 2>/dev/null| awk NR==3 | awk '{print $1}' } function handled { /usr/bin/curl "http://$HOST:$PORT/nginx-status" 2>/dev/null| awk NR==3 | awk '{print $2}' } function requests { /usr/bin/curl "http://$HOST:$PORT/nginx-status" 2>/dev/null| awk NR==3 | awk '{print $3}' } function ping { /sbin/pidof nginx | wc -l } # Run the requested function $1

腳本內容很簡單,基本不須要修改便可使用,若是你要修改主機和端口,可修改腳本中的「HOST」和「PORT」變量。

四、在zabbix agent端修改配置

將編寫好的nginx_status.sh腳本放到172.16.213.236服務器上zabbix agent的一個目錄下,這裏是/etc/zabbix/shell,而後作以下操做:

[root@zabbix agent1 shell]#chmod o+x /etc/zabbix/shell/nginx_status.sh [root@ zabbix agent1 shell]#chown zabbix:zabbix /etc/zabbix/shell /nginx_status.sh

接着,建立一個名爲userparameter_nginx.conf的文件,放到/etc/zabbix/zabbix_agentd.d目錄下,內容以下:

UserParameter=nginx.status[*],/etc/zabbix/shell/nginx_status.sh $1

這個內容其實就是自定義了一個監控項nginx.status[], 其中,「[]」表明參數,這個參數是經過nginx_status.sh腳本的參數傳進來的。

全部配置完成,還須要重啓zabbix agent服務,以保證配置生效。

五、Nginx模板導入與連接到主機

zabbix默認沒有自帶Nginx的監控模板,須要本身編寫,這裏咱們直接將編寫好的模板供你們下載,能夠從以下地址下載Nginx zabbix模板:

[root@iivey /]# wget https://www.ixdba.net/zabbix/zabbix-nginx.zip

模板下載完成後,點擊zabbix web導航上面的「配置」選項,而後選擇「模板」,點擊右上角「導入」按鈕,開始導入Nginx模板到zabbix中。
模板導入後,點擊web上面的「設置」選項,而後選擇「模板」,找到「Template App NGINX」模板,能夠看到此模板包含8個監控項,1個觸發器,2個圖形,1個應用集,重點看一下監控項和鍵值信息,以下圖所示:

最後,還須要將此模板連接到須要監控的主機下,點擊web導航上面的「配置」選項,而後選擇「主機」,接着點開172.16.213.236主機連接,而後選擇「模板」這個二級選項,經過「連接指示器」選擇一個模板「Template App NGINX」,添加進去便可。

其實,要對主機的基礎信息(CPU、磁盤、內存、網絡等)作監控的話,只須要連接一個基礎模板「Template OS Linux」到此主機便可,這樣,172.16.213.236主機已經連接了四個模板了,以下圖所示:

模板添加後,172.16.213.236主機上的基礎信息、apache信息、nginx信息、MySQL信息都已經歸入到了zabbix監控中了。

六、zabbix server端獲取數據測試

在將主機加入zabbix過程當中,能夠會發生一些問題,例如Zabbix server一直沒有獲取到agent端數據的話,怎麼排查問題呢,這裏介紹一個簡單有效的方法,就是經過在zabbix server上執行zabbix_get手動測試,若是zabbix_get能獲取到數據,那說明zabbix server和zabbix agent之間通訊正常,若是獲取不到數據,那麼就會報錯,咱們能夠根據錯誤的提示進行有目的的排錯。

在本例中,能夠執行以下命令進行排錯:

[root@zabbix server ~]# /usr/local/zabbix/bin/zabbix_get -s 172.16.213.236 -p 10050 -k "nginx.status[active]" 16

其中,「nginx.status[active]」就是監控項的一個鍵值。注意,這個操做是在zabbix server上執行的,而後去zabbix agent上獲取數據的過程。

只要咱們在這裏測試正常後,通常都可以立刻在zabbix web上看到nginx的監控狀態數據。如何查看nginx監控狀態數據以及測試觸發器動做告警是否正常,這個以前已經詳細介紹過,這裏就再也不重複介紹了。

相關文章
相關標籤/搜索