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(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所示的純文字輸出資訊。
而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所示。而其輸出資訊,簡單說明如下:
‧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)等資訊。
在完成使用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所示。
其中包括資料庫表格的開啟及使用等情況,但其中最值得關注的,應該是使用者查詢(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的資訊。
以查詢指令的類別來統計
若以查詢指令的類別來統計,其輸出如圖7所示,提供了查詢(Select)及寫入(Insert)、更新(Update)等類別的統計資訊。
至此,已完成相關的監控實作。
<本文作者:吳惠麟,多年資安經驗,喜好利用開源碼建構相關解決方案,著有「資訊安全原理與實驗」等書。>