開源碼 效能監控 資料庫 MySQL

善用特有資料收集器機制 收集各類系統網路服務使用狀態

啟動Netdata Collector 監控Apache/MySQL運作

2022-02-14
Netdata除了主機系統狀態監控外,更提供多達數百種的資料收集器機制,可收集不同種類的系統或網路服務的使用狀態,因此本文將實地示範如何使用Netdata來監控Apache網站伺服器和MySQL資料庫伺服器的資源使用狀況以及網站稽核紀錄。

 

挾其開源碼的特性及優異的性能表現,LAMP(Linux + Apache + MySQL + PHP)架構一直是網站解決方案的首選,這也是目前普遍使用的網站架構。

本刊191期已簡單說明過如何利用Netdata來監控主機系統上的資源使用狀況,其實除了主機系統狀態監控外,Netdata更提供多達數百種的資料收集器(Collector)機制,用以收集不同種類的系統或網路服務的使用狀態,因此本文將繼續說明如何利用Netdata來監控Apache網站伺服器和MySQL資料庫伺服器的資源使用狀況及網站稽核紀錄。

本文所使用到的資料收集器均會在Netdata安裝時就自動安裝,因此無須另外再手動安裝額外的程式。

設定Apache運作效能監控

由於Netdata必須利用Apache伺服器上的mod_status模組來取得Apache網站伺服器(以下簡稱網站伺服器)運作的即時相關資訊。在一般情況下,此功能通常都內建在網站伺服器中,因此可先利用下列指令來確認Apache是否有支援mod_status模組功能:

httpd -M | grep status

如果出現「status_module (shared)」字樣,就表示目前的網站伺服器已支援mod_status模組功能。

但為了安全起見,mod_status模組通常預設為關閉,因此必須手動啟用該模組。可利用設定網站伺服器的組態檔(httpd.conf)中的相關組態來啟動mod_status模組功能,相關設定如下所述(其中#為註解):

LoadModule status_module modules/mod_ status.so #載入mod_status模組      ExtendedStatus On #設定啟動該模組功能    #設定可由/ server-status目錄取得相關的輸出資料      SetHandler server-status        Allow from all   #設定允許存取的來源範 圍,由於mod_status會提供大量的運作資訊, 因此建議可利用限制可存取來源的方式來控管 存取,其中all表示不限制存取來源  

完成設定後,即可重啟網站伺服器讓設定生效。接著使用瀏覽器連線至下列網址,即可取得如圖1所示的輸出(其內容為網站伺服器運作的相關資訊):

http://網站伺服器主機/server-status

在此,簡單說明mod_status模組的相關輸出資訊:

圖1(A)區段的內容主要用來描述網站伺服器的基本資訊,例如網站伺服器的版本(Server Version)、運作的工作模式(Server MPM)、網站伺服器建立的時間(Server Built)等資訊。

圖1  取得輸出結果。

圖1(B)區段則主要描述網站伺服器目前運作的情況,包括目前的時間(Current Time)、重新啟動伺服器的時間(Restart Time)、網站伺服器已運作的時間(Server Uptime,此時間並非為主機系統的運作時間,而是單指網站伺服器運作時間),以及相關的負載情況(如Server Load、Total Access等)。

除了上述一般的使用外,為因應特定的需求,mod_status模組也提供下列更有彈性的使用方式:

自動重新取得相關輸出資訊

在一般情況下,使用者必須利用手動重新整理(Refresh)的方式來重新取得網站伺服器相關輸出資訊,因此mod_status模組提供refresh參數來自動重新取得輸出資訊,用法如下所示:

http://網站伺服器主機/server-status? refresh=5

其中,refresh=5表示每5秒即會自動重新整理,以取得最新的輸出資訊。

輸出為文字型式的資訊

由於mod_status模組預設輸出的資訊為HTML格式,在程式取用輸出資訊後,在解析上會有相當的難度,因此mod_status模組也提供純文字的輸出,讓第三方程式能更方便地解析mod_status模組的輸出,用法如下(使用auto參數):

http://網站伺服器主機/server-status?auto

連結以上網址後,就會顯示如圖2所示的純文字輸出資訊。

圖2  純文字輸出資訊。

而Netdata資料收集器也是利用此模式來取得mod_status模組的文字輸出資訊,再加以解析。

在完成mod_status模組設定後,接著設定Netdata的資料收集器的組態,用來接收mod_status模組的輸出資訊。可設定Apache資料收集器的組態檔([Netdata安裝目錄]/conf.d/go.d/apache.conf),相關設定如下所述:

jobs:  - name: local  #設定顯示名稱   url: http://127.0.0.1/server-status?auto   #設定取得mod_status模組文字型式的輸出  - name: local   url: http://localhost/server-status?auto

在設定完成後,重啟Netdata,即可在其輸出資訊中找到名稱為Apache Local的區段,如圖3所示。而其輸出資訊,簡單說明如下:

圖3  顯示名稱為Apache Local的區段。

‧Requests:即時顯示網站伺服器的要求(Request)服務情況(每秒的要求數)。 ‧Connections:即時顯示網站伺服器目前的連接數(Connections)。 ‧Bandwidth in kilobits/s:即時顯示網站伺服器的頻寬使用情況,每秒所使用的頻寬數(kilobits/s)。

完成網站伺服器的監控後,接著設定解析網站稽核紀錄(Log)。

安裝監控網站伺器稽核紀錄

除了監控網站伺服器的運作狀態外,Netdata另外也提供解析網站伺器稽核紀錄內容的功能,並且提供CSV、JSON、LTSV等格式解析及正規表示法(RegExp)的方式解析。由於Apache所產生的網站稽核紀錄較類似CSV格式,因此將設定為以CSV格式來解析。

首先說明Netdata提供的網站稽核紀錄表示符號,如表1所示。

在簡單了解Netdata對於網站稽核紀錄的表示符號之後,接著繼續設定網站伺服器儲存稽核紀錄的格式,以Apache為例,其預設儲存格式為common格式,因此這裡也將以common格式來解析。

首先,確認httpd.conf的方式是否有如下的設定:

#設定common格式所儲存的欄位資訊 LogFormat "%h %l %u %t \"%r\" %>s  %b" common   #設定網站稽核紀錄檔(access_log)使用 common格式來儲存紀錄 CustomLog "logs/access_log" common

若有上述的設定,表示網站伺服器使用common格式來儲存稽核紀錄,在確認後,接下來即可設定Netdata的設定檔([Netdata安裝目錄]/conf.d/go.d/web_log.conf)。請新增下列設定:

jobs:   name: apache-common-csv #設定顯示的名稱   path: [Apache安裝目錄]/logs/access_   log #設定網站稽核紀錄檔位置,此檔案即為    Netdata的資訊來源   log_type: csv #設定採用CSV格式來解析   csv_config:       format: '%h %l %u %t \"%r\" %>s %b'  #設定要解析的格式,在此為common格式, 此格式要與Apache的網站稽核紀錄格式相符

設定完成後,重啟Netdata,在其輸出資訊中就能夠找到apache-common-csv區段的資料,如圖4所示,其輸出資訊包括網站伺服器回覆狀態(Response Status)統計情況及使用者所使用的HTTP方法(Method)等資訊。

圖4  找到apache-common-csv區段的資料。

在完成使用Netdata監控網站稽核紀錄後,最後再來設定如何監控MySQL的效能。

安裝監控MySQL伺服器

在筆者實作的過程中,在重新啟動Netdata時,曾經發生過在「section ‘client’ does not exist」等錯誤,這是因為未設定MySQL執行時所使用的來源端(Client)組態,因此須先確認MySQL是否有設定client區段的組態,可檢查MySQL組態檔(檔名為my.cnf)是否有如下的設定:

[client]     port=3306   #設定MySQL資料庫運作在通訊 埠3306   socket=/tmp/mysql.sock #設定MySQL運 作時,所使用的Socket檔案所在位置

設定完成後,必須重新啟動MySQL伺服器,以讓新的組態值生效。

接著,新建Netdata所需要的MySQL帳號,如下為新建帳號的相關SQL指令。首先,建立一個僅允許以本機連線且名稱為netdata的帳號:

CREATE USER 'netdata'@'localhost';

然後,再設定此帳號的權限,根據Netdata官方網站的說明,此帳號必須有usage,replication client,process的權限,因此可執行下列指令來設定:

grant usage,replication client,process on *.* to 'netdata'@'localhost';

最後,再以flush privilegs指令即時讓相關權限設定立即生效。

完成MySQL伺服器組態的設定後,即可設定Netdata的資料收集器組態檔([Netdata安裝目錄]/conf.d/go.d/ mysql.conf),設定內容如下:

jobs:   - name: localmysql  #設定顯示名稱   my.cnf: '/etc/my.cnf' #設定MySQL組態檔的 位置   #設定資料庫的資料來源(Data Source Name, DSN)   #其格式為[使用者名稱]@[通訊協定](資料 庫主機IP:使用的通訊埠)     dsn: netdata@tcp(127.0.0.1:3306)/

設定完畢,同樣重啟Netdata,在輸出資訊中就能夠發現MySQL伺服器監控的相關資訊,如圖5所示。

圖5  出現MySQL伺服器監控相關資訊。

其中包括資料庫表格的開啟及使用等情況,但其中最值得關注的,應該是使用者查詢(Query)的頻率及SQL指令分類的使用次數。可統計不同種類,例如查詢(Select)、寫入(Insert)或更新(Update)的SQL指令。

這些資訊對於MySQL效能調校而言,是相當重要的。因為,了解SQL指令分類使用狀態,才能了解工作是以查詢或更新為主,才可藉此類資訊來調整適當的資料庫組態。

Netdata應用示範

Netdata提供了總查詢量(Queries)來顯示MySQL資料庫執行SQL指令的總次數以及SQL指令分類的使用次數,相關說明如下所述:

總查詢量

關於總查詢量,提供了下列資料庫統計資訊:

queries:顯示執行MySQL預儲程序(Stored Procedure)的總次數。 questions:顯示使用要求執行SQL指令的次數。

slow queries:計算慢查詢(Slow Queries)的次數,MySQL允許讓使用者設定門檻時間(單位為秒),一旦執行超過此時間即列入慢查詢。

其輸出如圖6所示,由於本例並未有慢查詢的設定,因此僅有queries及questions的資訊。

圖6  查詢queries和questions資訊。

以查詢指令的類別來統計

若以查詢指令的類別來統計,其輸出如圖7所示,提供了查詢(Select)及寫入(Insert)、更新(Update)等類別的統計資訊。

圖7  以查詢指令的類別來統計。

至此,已完成相關的監控實作。

<本文作者:吳惠麟,多年資安經驗,喜好利用開源碼建構相關解決方案,著有「資訊安全原理與實驗」等書。>

 


追蹤我們Featrue us

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!