■ 北京 趙琳
編者按:作為一個(gè)Linux的系統(tǒng)管理員,很有必要掌握一個(gè)專門的系統(tǒng)監(jiān)控工具,以便能隨時(shí)了解系統(tǒng)資源的占用情況。下面就介紹下一款Linux性能實(shí)時(shí)監(jiān)測(cè)工具—Netdata,它是Linux服務(wù)器系統(tǒng)實(shí)時(shí)性能監(jiān)測(cè)工具,以Web的可視化方式展示系統(tǒng)及應(yīng)用程序的實(shí)時(shí)運(yùn)行狀態(tài)。
N e t d a t a的Web前端響應(yīng)很快,而且不需要Flash插 件。UI很整潔,保持著Netdata應(yīng)有的特性。第一眼看上去,你能夠看到很多圖表,幸運(yùn)的是絕大多數(shù)常用的圖表數(shù)據(jù)(像CPU、RAM、網(wǎng)絡(luò)和硬盤)都在頂部。如果你想深入了解圖形化數(shù)據(jù),你只需要下滑滾動(dòng)條,或者點(diǎn)擊在右邊菜單的項(xiàng)目。通過(guò)每個(gè)圖表的右下方的按鈕,Netdata還能控制圖表的顯示、重置、縮放。
1.安裝Netdata需要的基本編譯環(huán)境安裝
yum install zlibdevel gcc make git autoconf autogen automake pkgconfig
2.下載和安裝Netdata(需要root權(quán)限)
cd /usr/local/src/(可以自己建目錄,不一定在這個(gè)目錄下面)
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.直接用瀏覽器訪問(wèn)http://your domain name or ip:19999 即可進(jìn)入主界面。(19999是軟件默認(rèn)的端口,可以在配置文件中進(jìn)行相關(guān)配置)
4.配置文件/etc/netdata/netdata.conf里面有端口配置等。
5.啟動(dòng)關(guān)閉服務(wù)命令(在安裝成功之后也會(huì)出來(lái)英文說(shuō)明)
關(guān) 閉(安裝成功默認(rèn)開(kāi)啟)k i l l a l l netdata
開(kāi) 啟 /user/sbin/netdata
1.安裝前的準(zhǔn)備
(1)Ubuntu 16.04服 務(wù)器,包括具有sudo權(quán)限的非root用戶。
(2)服務(wù)器上安裝Git。
(3)在服務(wù)器上安裝Nginx。這不是強(qiáng)制性的,但比Linux內(nèi)置的Web服務(wù)器有更多的功能和安全性。
2.安裝Netdata
(1)在安裝前,請(qǐng)確保系統(tǒng)包索引是最新的。
$ sudo apt-get update
(2)安裝Netdata的依賴項(xiàng),其中包括gcc(一個(gè)C編 譯 器),GNU Autoconf工具,GUID管理和Netdata內(nèi)部Web服務(wù)器的壓縮庫(kù)。
$ 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存儲(chǔ)庫(kù)
將Netdata存儲(chǔ)庫(kù)克隆到您的主目錄中。
$ g i t c l o n e https://github.com/firehol/netdata.git--depth=1 ~/netdata
(5)移至新克隆的目錄
$ cd ~/netdata
(6)使用此目錄中的netdata-installer.sh腳本構(gòu)建和安裝應(yīng)用程序。確保在這里附加sudo,否則Netdata收集系統(tǒng)數(shù)據(jù)的方式將無(wú)法正常運(yùn)行。
圖1 Netdata存儲(chǔ)組件位置信息圖
圖2 Netdata頁(yè)面圖
$ sudo ./netdatainstaller.sh
(7)安裝過(guò)程中出現(xiàn)下面包含有關(guān)Netdata存儲(chǔ)其所有組件位置的信息。可以通讀這些內(nèi)容來(lái)熟悉程序在安裝后如何在文件系統(tǒng)上展開(kāi)。如圖1所示,按ENTER繼續(xù)安裝。
(8)安裝完成之后,創(chuàng)建一個(gè)配置文件/etc/netdata/netdata.conf。
也可以使用下面的url查看配置文件http://your domain name or ip:19999/netdata.conf
(9)如果啟用了UFW,需要為Netdata的內(nèi)部Web服務(wù)器打開(kāi)端口19999。
$ sudo ufw allow 19999/tcp
(10)安裝完畢后可以通過(guò)瀏覽器訪問(wèn)http://your domain name or ip:19999來(lái)查看默認(rèn)儀表板,可以看到系統(tǒng)實(shí)時(shí)指標(biāo)的概述,如圖2所示。
1.通過(guò)在瀏覽器中訪問(wèn)http://your domain name or ip:19999/netdata.conf可以查看Netdata的當(dāng)前配置。
在此處可以看到所有可配置選項(xiàng)都已注釋掉(即以#開(kāi)頭)。這是因?yàn)镹etdata的配置使用一組假定的默認(rèn)值。任何禁用的設(shè)置都使用Netdata的默認(rèn)值;如果取消注釋某個(gè)設(shè)置,則指定的值將覆蓋默認(rèn)值,這樣配置文件將包含修改的內(nèi)容。
2.在Linux服務(wù)器上,配置文件本身就是/etc/netdata/netdata.conf。我們通過(guò)定義history的參數(shù),它控制Netdata使用的內(nèi)存數(shù)據(jù)庫(kù)的大小。
在這里,需要確定要為Netdata提供多少RAM,或者在丟失之前將記錄的圖表數(shù)據(jù)保留多長(zhǎng)時(shí)間。
如表1所示的估算是基于庫(kù)存儀表板使用的圖表數(shù)量進(jìn)行的,如果刪除或添加自定義圖表將會(huì)影響這些估算值。
3.使用nano文本編輯器打開(kāi)Netdata的主配置文件。
$ sudo nano /etc/netdata/netdata.conf
找到[global]部分中的history選項(xiàng)。
[global]
# glibc malloc arena max for plugins= 1
. . .
# hostname = netdata
# history = 3600
# update every = 1
將3600值替換為需要的值。在這里,我們使用14400,這將為我們提供4小時(shí)的數(shù)據(jù)保留。確保通過(guò)去除#符號(hào)來(lái)取消注釋該行,以便Netdata不再忽略此選項(xiàng)
表1 估算RAM數(shù)
。
[global]
# glibc malloc arena max for plugins= 1
. . .
# hostname = netdata
history =14400
# update every = 1
進(jìn)行此項(xiàng)更改后保存并關(guān)閉文件。
1.啟用后,KSM守護(hù)程序會(huì)定期掃描內(nèi)存,查找可由單個(gè)寫保護(hù)頁(yè)替換的相同內(nèi)容的頁(yè)面,在此上下文中,KSM守護(hù)程序允許在系統(tǒng)上運(yùn)行的不同進(jìn)程或程序間共享相同的內(nèi)存頁(yè),從而減少重復(fù)內(nèi)存內(nèi)容的創(chuàng)建。
2.要永久啟用Linux系統(tǒng)內(nèi)核的此方面KSM守護(hù)程序,使用文本編輯器打開(kāi)/etc/rc.local文件。
$ sudo nano
/etc/rc.local
在啟動(dòng)所有其他正常Linux系統(tǒng)服務(wù)和進(jìn)程之后,將執(zhí)行/etc/rc.local文件或運(yùn)行控制文件。
將下面顯示的兩個(gè)命令添加到文件末尾,在最后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內(nèi)核文件中,啟用該功能。
echo 1000 > /sys/kernel/mm/ksm/sleep_millisecs 命令告訴KSM守護(hù)程序每秒運(yùn)行一次并評(píng)估100個(gè)頁(yè)面以進(jìn)行重復(fù)數(shù)據(jù)刪除。
保存并關(guān)閉文件后,KSM將在下次服務(wù)器重新啟動(dòng)時(shí)啟用,并在將來(lái)重新啟動(dòng)時(shí)保留。要在此服務(wù)器的當(dāng)前正常運(yùn)行時(shí)間內(nèi)啟用它,需要在命令行上手動(dòng)運(yùn)行添加到rc.local的這兩個(gè)命令。
首先,通過(guò)在sudo中使用-s標(biāo)志,啟動(dòng)并輸入新的shell會(huì)話作為服務(wù)器的root用戶。
$ sudo -s
現(xiàn)在輸入之前的兩個(gè)命令:
echo 1 > /sys/kernel/mm/ksm/run
echo 1000 > /sys/kernel/mm/ksm/sleep_millisecs
然后,保留root shell并返回正常的shell會(huì)話。
$ exit
如果應(yīng)用在此步驟以及此前的步驟中執(zhí)行的所有更改,就必須重新啟動(dòng)Netdata。
$ sudo systemctl restart netdata
通過(guò)Nginx托管Netdata可以更輕松地保護(hù)對(duì)儀表板的訪問(wèn),此外還可以在將來(lái)指向其他服務(wù)器的Netdata儀表板。
1.安裝apache2-utils軟件包。該軟件包包含htpasswd程序,我們需要該程序來(lái)保護(hù)對(duì)儀表板頁(yè)面的訪問(wèn)。
$ sudo apt-get install apache2-utils
2.創(chuàng)建一個(gè)新的Nginx主機(jī)配置文件。
$ sudo nano /etc/nginx/conf.d/default.conf
此配置文件將告訴Nginx代理儀表板頁(yè)面的傳入請(qǐng)求。此外,我們還將添加一個(gè)簡(jiǎn)單的身份驗(yàn)證提示,以便只有具有正確用戶名和密碼的人才能訪問(wèn)它。
以下是需要復(fù)制和粘貼的整個(gè)配置文件。將listen和server_name指令的兩個(gè)相關(guān)顯示項(xiàng)分別更改為服務(wù)器的IP地址和分配的域名,注意在每個(gè)末尾包括;。如果沒(méi)有域名,可以將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主機(jī)配置文件說(shuō)明
第一部分:
upstream netdatabackend {
server 127.0.0.1:19999;
keepalive 64;
}
名為netdata-backend的upstream模塊使用服務(wù)器的環(huán)回地址127.0.0.1和Netdata的端口19999來(lái)定位內(nèi)置的Netdata Web服務(wù)器。
keepalive指令設(shè)置在任何給定時(shí)間可以保持打開(kāi)的上游空閑連接的最大數(shù)量。
第二部分:
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在客戶端嘗試連接時(shí)應(yīng)該listen的外部IP地址。第二行server_name定義了Nginx在客戶端使用指定的域名時(shí)運(yùn)行此服務(wù)器塊。
最后兩行設(shè)置了簡(jiǎn)單的HTTP用戶名和密碼身份驗(yàn)證。它使用auth_basic模塊顯示用戶名和密碼提示。我們也可以自定義提示消息;在這里,設(shè)置為Authentication Required。auth_basic_user_file定義了用于存儲(chǔ)身份驗(yàn)證提示的登錄憑據(jù)文件名和位置。
第三部分:
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;
}
}
主要是通過(guò)apache2-utils包中的htpasswd程序幫助我們?yōu)閮x表板登錄提示創(chuàng)建用戶登錄憑據(jù)的地方。
首先,創(chuàng)建用戶名和密碼。運(yùn)行以下命令,將sammy替換為需要在Netdata中使用的用戶名,出現(xiàn)提示時(shí),輸入需要使用的密碼。
$ sudo htpasswd -c/etc/nginx/netdata-access sammy
將在/etc / nginx /netdata-access中創(chuàng)建一個(gè)包含我們提供的用戶名和密碼的文件。
重新啟動(dòng)Nginx以使添加的新配置處于活動(dòng)狀態(tài)。
$ sudo systemctl restart nginx
4.測(cè)試Nginx配置
使用Web瀏覽器訪問(wèn)http://your_server_ip。您將看到身份驗(yàn)證提示。