本文將介紹一套在開源碼社群中頗富盛名的監控軟體Netdata,來即時監控系統上的資源使用情況,並可輕鬆地透過Web方式,使用網頁瀏覽器程式就能夠取得系統資源的監控資訊,讓系統管理員隨時都可以得知所掌管系統資源的使用狀況。
相信每個系統管理員都希望能夠即時地得知所掌管系統資源的使用狀況,例如系統上CPU的使用率,磁碟空間使用容量等資訊,以便能夠儘早發現系統的問題。因此一套能夠即時監控系統資源的軟體,對於系統管理員的日常作業將有莫大的幫助。因此,本文將介紹一套在開源碼社群中頗富盛名的監控軟體Netdata(官方網站:https://www.netdata.cloud/),不但可以即時(Real Time)監控系統上的資源使用情況,並可方便地利用Web方式以瀏覽器來取得系統資源的監控資訊。
Netdata簡介
Netdata是一種即時監控系統效能的軟體,通常被用來針對如網站伺服器、資料庫等重要應用網路服務或CPU、硬碟等硬體資源提供即時的效能監控。除此之外,更可應用SNMP(Simple Network Management Protocol)協定來延伸其監控範圍。而Netdata另一個令人讚賞的特性,是利用豐富的圖形化介面來顯示相關的監控資訊,便於使用者清楚地知道目前系統服務的執行情況。甚至提供相關的整合架構,可與其他著名的監控解決方案如Prometheus(一種開放式原始碼社群中著名的系統監控警報框架)、OpenTSDB(Time Series Database,時序型的資料庫)進行整合,來提供不同面向的功能。
Netdata以系統架構來區分,可分為Agent(單個節點,Single-node)和Cloud(基礎架構,Infrastructure)兩種不同的架構,簡而言之,可將Agent視為取得單一節點資料,而Cloud則可取得多個節點資料再進行處理。而不論採用何種架構來建置,均會使用如下的主要元件。相關說明,簡述如下。
Collect
用來收集欲監控的系統資源,如系統上的CPU、記憶體及磁碟等硬體或如程序(Process)等軟體之使用狀況的程式,在此稱為資料收集器(Collectors)。如果不確定自己的系統是否可被資料收集器所支援,可參考「https://github.com/netdata/netdata/blob/master/collectors/COLLECTORS.md」網址的說明,依據Netdata官方網站上的說明,目前約提供300餘種的資料收集器來收集不同的系統資源。
Visualize
相較於文字的說明,Netdata提供更豐富的圖形資訊如儀表板(DashBoard)的方式來呈現所收集到的資訊,讓管理者能更簡便地取得相關的資訊。
Monitor
除了靜態地收集相關資源的資訊外,Netdata更提供系統監控的的功能,透過使用者所設定的門檻值(Thresholds),一旦所監控的資源符合,即以適當的方式來通知管理者,例如設定當系統的磁碟可用容量低於10%時就以電郵通知管理者。
Store
Netdata使用了高效能的資料庫解決方案,可有效地用來儲存及運用所收集到的監控資料,並提供不同的資料庫類型,讓使用者可依據實際情況來設定適當的資料庫類型。
Export
Netdata提供了將即時收到的資料,匯出至InfluxDB、TimescaleDB等支援時序型資料(Time-series)的資料庫。
一般來說,時序型資料庫可以更有效率,用來儲存及查詢系統的監控數據或是一些具有時間序特性且必須即時運用資料的用途上。
Stream
這通常用於基礎架構(Infrastructure)上,可用來收集多個節點(Nodes)上的資料,並進行深入分析。
在簡單說明完Netdata架構後,接著示範如何安裝Netdata。
安裝Netdata
安裝的過程很簡單,在此以CentOS8 Stream為例,首先安裝所需的相依套件,執行如下的指令:
yum install libuuid-devel yum install json-c-devel dnf --enablerepo=powertools install libuv-devel
接著,以git指令取得最新的程式碼:
git clone https://github.com/netdata/ netdata.git
在取得完整的程式碼後,即可利用Netdata所提供的安裝程式(名稱為netdata-installer.sh)進行安裝,以下的安裝指令表示將相關檔案安裝在「/usr/local」目錄下並每日進行更新:
netdata-installer.sh --install /usr/local -u
了解netdata.conf
成功安裝Netdata後,就會在該安裝目錄「/usr/local」下產生一個主要的執行檔(名稱為netdata)及主要組態檔(名稱為netdata.conf)。其餘相關的檔案位置資訊,會在安裝過程中顯示。
接下來,說明netdata.conf常用組態的意義,就如同一般組態檔案架構,netdata.conf採用下列格式,如圖1所示。
[Section] #區段名稱 組態名稱=值
其中,常用的區段及組態說明如下:
global區段
此區段主要是設定給主要執行檔(netdata)使用的組態值。常用的組態設定如下所述:
‧run as user:在執行netdata時所使用的使用者權限,為了系統安全起見,通常都不建議使用root權限來執行,預設會以netdata使用者來執行。
‧update every:設定資料收集器重新取得監控資料的時間區間,其單位為秒。例如設定為10,表示每隔10秒即重新取得新的監控資料,此數值通常須考量實際系統的情況而定。如果數值設定過低,太頻繁地存取,可能會造成系統的負擔。
‧log directory:設定Netdata在執行時所產生稽核紀錄(Log)的儲存目錄。
‧error.log:設定儲存執行錯誤等相關稽核記錄的檔案位置。
‧debug log:設定儲存相關偵錯訊息,此為最詳盡的資訊,使用者可利用此檔案來追蹤執行之相關錯誤的原因。
‧access.log:設定Netdata在執行時,存取相關節點資料的相關稽核記錄所儲存的檔案位置。
‧plugins directory:設定資料收集器所在的目錄位置。
‧memory mode:設定Netdata在處理資料時,所須使用的資料庫型式,Netdata主要的目標在於即時利用資料收集器來收集相關節點的監控資料,並以人性化的圖形介面來顯示資料。因此,通常會在短時間內會取得大量的監控資料,在這種情況下,選擇一種適當的資料庫型式來處理資料,對於處理效能來講是相當有幫助的。
相關資料庫型式
Netdata所提供的相關資料庫型式,說明如下:
‧dbengine:此為預設使用的資料庫型式,主要是利用記憶體(RAM)及磁碟來處理相關資料。若使用此資料庫型式,同時需要設定page cache size和dbengine disk space。page cache size用來設定能夠使用的最大記憶體容量(單位為MB),而dbengine disk space則設定能夠使用的最大磁碟容量(單位為MB)。使用者可依據實際的情況,適當地設定上述的組態來取得較佳的處理效能。
‧save:表示使用循環型式(Round Robin)的資料庫型式,這通常用於處理時間序列的資料,就像現實生活中的監控攝影機一樣,如果設定僅保存一天的資料,即每天均會重新覆蓋原先的錄影資料。若使用此資料庫型式,同時需要設定要儲存的時間長度,因此須設定相關的組態,如history表示設定要儲存多久的資料,其單位為秒。例如設定為60,代表僅會儲存一分鐘的資料。
‧ram:表示使用暫時性的循環型式(Round Robin)的資料庫型式,就像記憶體具有揮發的特性一樣,一旦Netdata停止執行,所有的監控資料便會消失。
‧none:表示不使用任何的資料庫型式,但這也就表示不儲存任何的監控資料。
Web區段
Netdata提供一個網站伺服器讓使用者以Web方式取得相關的監控資料,此區段即是設定該網站伺服器執行時所參考的組態,其常用的組態說明如下:
‧ssl key:如果網站伺服器需要支援SSL/TLS連線加密,即可使用此組態來設定伺服器金鑰檔案的所在位置。
‧ssl certificate:此組態用來設定伺服器數位憑證檔案的所在位置。
‧tls version:設定SSL/TLS連線所使用的版本(目前支援1、1.1、1.2、1.3),基於傳輸安全的考量,在啟用SSL/TLS加密連線的情況下,建議設定為1.3(表示選擇使用1.3版本)。
‧tls ciphers:設定SSL/TLS連線所使用的相關加密演算法,例如SHA256。
‧default port:設定網站伺服器運作時,所使用的通訊埠資訊,預設為19999。
‧bind to:設定運作時所綁定的主機IP及相關參數資料,使用者可依實際需求,綁定不同的IP,在一般的情況下,通常都設為Netdata所在的主機IP。
‧allow connections from:基於安全的理由,不希望所有人都可連線至網站伺服器來取得相關監控資料,因此可利用此組態來設定允許連線的來源IP,只有符合的來源IP,才能進行連線。
‧allow connections by dns = heuristic:設定允許連線的來源主機名稱,只有符合的來源主機名稱,才能進行連線。
plugins區段
此區段主要是設定資料收集器的相關組態,例如資料收集器的所在路徑或相關參數等資訊:
‧PATH environment variable:設定搜尋資料收集器所在的路徑,就如同系統上的PATH設定,Netdata會依據此組態所設定的路徑找尋相關的資料收集器。
‧proc:設定是否(yes/no)要啟用監控程序(Process)的資料收集器,來收集系統上程序的運作資料。
‧diskspace:設定是否(yes/no)啟用監控磁碟空間的的資料收集器,來收集系統上磁碟空間使用狀況的資料。
‧enable running new plugins:設定是否要自動啟用偵測到的資料收集器,如果設定為yes,即表示當Netdata偵測到新的資料收集器時,即使並沒有設定適當的參數,也會直接啟用相關的資料收集器功能。
‧check for new plugins every:設定要檢查是否有新的資料收集器時間間隔(單位為秒),例如當設定為60時,就表示每隔60秒即檢查一次是否有新的資料收集器。
使用Netdata
Netdata另一個特色是易裝易用,在安裝好Netdata之後,使用者不需要更改太多的預設組態,甚至不必更改任何預設組態,即可成功地執行,但為了完全起見,建議最好還是設定allow connections from組態來限定能夠連線的來源。
在設定完成後,接著可再執行Netdata。成功執行後,就能夠利用瀏覽器來瀏覽「http://Netdata主機:19999/」,即可取得系統上的CPU、記憶體等系統資源的使用狀況等相關資訊,如圖2所示。
進行到這裡,即已完成Netdata系統的建置了!
<本文作者:吳惠麟,多年資安經驗,喜好利用開源碼建構相關解決方案,著有「資訊安全原理與實驗」等書。>