■ 北京 趙琳
編者按:作為一個Linux的系統管理員,很有必要掌握一個專門的系統監控工具,以便能隨時了解系統資源的占用情況。下面就介紹下一款Linux性能實時監測工具—Netdata,它是Linux服務器系統實時性能監測工具,以Web的可視化方式展示系統及應用程序的實時運行狀態。
N e t d a t a的Web前端響應很快,而且不需要Flash插 件。UI很整潔,保持著Netdata應有的特性。第一眼看上去,你能夠看到很多圖表,幸運的是絕大多數常用的圖表數據(像CPU、RAM、網絡和硬盤)都在頂部。如果你想深入了解圖形化數據,你只需要下滑滾動條,或者點擊在右邊菜單的項目。通過每個圖表的右下方的按鈕,Netdata還能控制圖表的顯示、重置、縮放。
1.安裝Netdata需要的基本編譯環境安裝
yum install zlibdevel gcc make git autoconf autogen automake pkgconfig
2.下載和安裝Netdata(需要root權限)
cd /usr/local/src/(可以自己建目錄,不一定在這個目錄下面)
wget http://firehol.org/download/netdata/releases/v1.0.0/netdata-1.0.0.tar.gz
tar -xf netdata-1.0.0.tar.gz
cd netdata-1.0.0
./netdata-installer.sh
3.直接用瀏覽器訪問http://your domain name or ip:19999 即可進入主界面。(19999是軟件默認的端口,可以在配置文件中進行相關配置)
4.配置文件/etc/netdata/netdata.conf里面有端口配置等。
5.啟動關閉服務命令(在安裝成功之后也會出來英文說明)
關 閉(安裝成功默認開啟)k i l l a l l netdata
開 啟 /user/sbin/netdata
1.安裝前的準備
(1)Ubuntu 16.04服 務器,包括具有sudo權限的非root用戶。
(2)服務器上安裝Git。
(3)在服務器上安裝Nginx。這不是強制性的,但比Linux內置的Web服務器有更多的功能和安全性。
2.安裝Netdata
(1)在安裝前,請確保系統包索引是最新的。
$ sudo apt-get update
(2)安裝Netdata的依賴項,其中包括gcc(一個C編 譯 器),GNU Autoconf工具,GUID管理和Netdata內部Web服務器的壓縮庫。
$ sudo apt-get install zlib1g-dev uuid-dev libmnl-dev gcc make autoconf a u t o c o n f-a r c h i v e autogen automake pkg-config curl
(3)Netdata可 選 軟件包的安裝,包括一些Python軟件包和Node.JS。
$ s u d o a p tget install python python-yaml pythonmysqldb pythonpsycopg2 nodejs lmsensors netcat
(4)GitHub存儲庫
將Netdata存儲庫克隆到您的主目錄中。
$ g i t c l o n e https://github.com/firehol/netdata.git--depth=1 ~/netdata
(5)移至新克隆的目錄
$ cd ~/netdata
(6)使用此目錄中的netdata-installer.sh腳本構建和安裝應用程序。確保在這里附加sudo,否則Netdata收集系統數據的方式將無法正常運行。

圖1 Netdata存儲組件位置信息圖

圖2 Netdata頁面圖
$ sudo ./netdatainstaller.sh
(7)安裝過程中出現下面包含有關Netdata存儲其所有組件位置的信息。可以通讀這些內容來熟悉程序在安裝后如何在文件系統上展開。如圖1所示,按ENTER繼續安裝。
(8)安裝完成之后,創建一個配置文件/etc/netdata/netdata.conf。
也可以使用下面的url查看配置文件http://your domain name or ip:19999/netdata.conf
(9)如果啟用了UFW,需要為Netdata的內部Web服務器打開端口19999。
$ sudo ufw allow 19999/tcp
(10)安裝完畢后可以通過瀏覽器訪問http://your domain name or ip:19999來查看默認儀表板,可以看到系統實時指標的概述,如圖2所示。
1.通過在瀏覽器中訪問http://your domain name or ip:19999/netdata.conf可以查看Netdata的當前配置。
在此處可以看到所有可配置選項都已注釋掉(即以#開頭)。這是因為Netdata的配置使用一組假定的默認值。任何禁用的設置都使用Netdata的默認值;如果取消注釋某個設置,則指定的值將覆蓋默認值,這樣配置文件將包含修改的內容。
2.在Linux服務器上,配置文件本身就是/etc/netdata/netdata.conf。我們通過定義history的參數,它控制Netdata使用的內存數據庫的大小。
在這里,需要確定要為Netdata提供多少RAM,或者在丟失之前將記錄的圖表數據保留多長時間。
如表1所示的估算是基于庫存儀表板使用的圖表數量進行的,如果刪除或添加自定義圖表將會影響這些估算值。
3.使用nano文本編輯器打開Netdata的主配置文件。
$ sudo nano /etc/netdata/netdata.conf
找到[global]部分中的history選項。
[global]
# glibc malloc arena max for plugins= 1
. . .
# hostname = netdata
# history = 3600
# update every = 1
將3600值替換為需要的值。在這里,我們使用14400,這將為我們提供4小時的數據保留。確保通過去除#符號來取消注釋該行,以便Netdata不再忽略此選項

表1 估算RAM數
。
[global]
# glibc malloc arena max for plugins= 1
. . .
# hostname = netdata
history =14400
# update every = 1
進行此項更改后保存并關閉文件。
1.啟用后,KSM守護程序會定期掃描內存,查找可由單個寫保護頁替換的相同內容的頁面,在此上下文中,KSM守護程序允許在系統上運行的不同進程或程序間共享相同的內存頁,從而減少重復內存內容的創建。
2.要永久啟用Linux系統內核的此方面KSM守護程序,使用文本編輯器打開/etc/rc.local文件。
$ sudo nano
/etc/rc.local
在啟動所有其他正常Linux系統服務和進程之后,將執行/etc/rc.local文件或運行控制文件。
將下面顯示的兩個命令添加到文件末尾,在最后exit 0一行前,如下所示:
/etc/rc.local
#!/bin/sh -e
. . .
# By default this script does nothing.
echo 1 > /sys/kernel/mm/ksm/run
echo 1000 > /sys/kernel/mm/ksm/sleep_millisecs
exit 0
echo 1 > /sys/kernel/mm/ksm/run 命令將1添加到runKSM內核文件中,啟用該功能。
echo 1000 > /sys/kernel/mm/ksm/sleep_millisecs 命令告訴KSM守護程序每秒運行一次并評估100個頁面以進行重復數據刪除。
保存并關閉文件后,KSM將在下次服務器重新啟動時啟用,并在將來重新啟動時保留。要在此服務器的當前正常運行時間內啟用它,需要在命令行上手動運行添加到rc.local的這兩個命令。
首先,通過在sudo中使用-s標志,啟動并輸入新的shell會話作為服務器的root用戶。
$ sudo -s
現在輸入之前的兩個命令:
echo 1 > /sys/kernel/mm/ksm/run
echo 1000 > /sys/kernel/mm/ksm/sleep_millisecs
然后,保留root shell并返回正常的shell會話。
$ exit
如果應用在此步驟以及此前的步驟中執行的所有更改,就必須重新啟動Netdata。
$ sudo systemctl restart netdata
通過Nginx托管Netdata可以更輕松地保護對儀表板的訪問,此外還可以在將來指向其他服務器的Netdata儀表板。
1.安裝apache2-utils軟件包。該軟件包包含htpasswd程序,我們需要該程序來保護對儀表板頁面的訪問。
$ sudo apt-get install apache2-utils
2.創建一個新的Nginx主機配置文件。
$ sudo nano /etc/nginx/conf.d/default.conf
此配置文件將告訴Nginx代理儀表板頁面的傳入請求。此外,我們還將添加一個簡單的身份驗證提示,以便只有具有正確用戶名和密碼的人才能訪問它。
以下是需要復制和粘貼的整個配置文件。將listen和server_name指令的兩個相關顯示項分別更改為服務器的IP地址和分配的域名,注意在每個末尾包括;。如果沒有域名,可以將server_name指令保留為example.com。
/etc/nginx/conf.d/default.conf
upstream netdatabackend {
s e r v e r 127.0.0.1:19999;
keepalive 64;
}
server {
listen your_server_ip:80;
server_name example.com;
a u t h_b a s i c"A u t h e n t i c a t i o n Required";
auth_basic_user_file netdata-access;
location / {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://netdata-backend;
proxy_http_version 1.1;
proxy_pass_request_headers on;
proxy_set_header Connection "keep-alive";
proxy_store off;
}
}
一旦確定自己的文件與此代碼塊匹配,就可以保存并退出以返回到命令提示符。
3.Nginx主機配置文件說明
第一部分:
upstream netdatabackend {
server 127.0.0.1:19999;
keepalive 64;
}
名為netdata-backend的upstream模塊使用服務器的環回地址127.0.0.1和Netdata的端口19999來定位內置的Netdata Web服務器。
keepalive指令設置在任何給定時間可以保持打開的上游空閑連接的最大數量。
第二部分:
server {
listen your_server_ip:80;
server_name example.com;
a u t h_b a s i c"A u t h e n t i c a t i o n Required";
auth_basic_user_file netdata-access;
第一行定義了Nginx在客戶端嘗試連接時應該listen的外部IP地址。第二行server_name定義了Nginx在客戶端使用指定的域名時運行此服務器塊。
最后兩行設置了簡單的HTTP用戶名和密碼身份驗證。它使用auth_basic模塊顯示用戶名和密碼提示。我們也可以自定義提示消息;在這里,設置為Authentication Required。auth_basic_user_file定義了用于存儲身份驗證提示的登錄憑據文件名和位置。
第三部分:
location / {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://netdata-backend;
proxy_http_version 1.1;
proxy_pass_request_headers on;
proxy_set_header Connection "keep-alive";
proxy_store off;
}
}
主要是通過apache2-utils包中的htpasswd程序幫助我們為儀表板登錄提示創建用戶登錄憑據的地方。
首先,創建用戶名和密碼。運行以下命令,將sammy替換為需要在Netdata中使用的用戶名,出現提示時,輸入需要使用的密碼。
$ sudo htpasswd -c/etc/nginx/netdata-access sammy
將在/etc / nginx /netdata-access中創建一個包含我們提供的用戶名和密碼的文件。
重新啟動Nginx以使添加的新配置處于活動狀態。
$ sudo systemctl restart nginx
4.測試Nginx配置
使用Web瀏覽器訪問http://your_server_ip。您將看到身份驗證提示。