什么是Netdata
簡單一句話,Netdata是一個分布式的實(shí)時健康監(jiān)測系統(tǒng)。
| 說明 | |
|---|---|
| 對象 | 針對系統(tǒng)和應(yīng)用程序的分布式,實(shí)時,性能和運(yùn)行狀況監(jiān)視 |
| 可視化 | Netdata使用高度互動的Web儀表板實(shí)時提供無與倫比的洞察力,以實(shí)時了解其運(yùn)行的系統(tǒng)(包括Web服務(wù)器,數(shù)據(jù)庫,應(yīng)用程序)上發(fā)生的一切 |
| 自動化與集成化 | 它可以自動運(yùn)行,無需任何第三方組件,也可以集成到現(xiàn)有的監(jiān)視工具鏈(Prometheus,Graphite,OpenTSDB,Kafka,Grafana等) |
| 高效 | Netdata快速高效,旨在永久在所有系統(tǒng)(物理和虛擬服務(wù)器,容器,IoT設(shè)備)上運(yùn)行,而不會中斷其核心功能 |
| 分布式 | 可以針對多個節(jié)點(diǎn)進(jìn)行統(tǒng)一管理 |
| 開源 | Netdata是免費(fèi)的開源軟件,目前可在Linux,F(xiàn)reeBSD和MacOS上運(yùn)行。 |
Netdata誕生的背景,有興趣的同學(xué)可以看看:使用Netdata重新定義監(jiān)視
快速啟動
參考:https://docs.netdata.cloud/zh/packaging/installer/#install-netdata-on-linux-manually
Netdata插件
以下插件,在安裝時可以選擇啟用或禁用
| 軟件包名 | 描述 |
|---|---|
bash |
用于Shell插件和警報通知 |
curl |
用于Shell插件和警報通知 |
iproute 或 iproute2
|
用于監(jiān)控** Linux流量QoS **<br />如果iproute提示不可用或已過時,請使用iproute2
|
python |
這對于大多數(shù)外部插件來說都是必須的 |
python-yaml |
用于監(jiān)控beanstalkd |
python-beanstalkc |
用于監(jiān)控beanstalkd |
python-dnspython |
用于監(jiān)控DNS的查詢時間 |
python-ipaddress |
用于監(jiān)控** DHCPd **<br />只有Python V2才需要此軟件包。Python V3已經(jīng)嵌入了此功能 |
python-mysqldb<br />或<br />python-pymysql
|
用于監(jiān)控mysql或mariadb 數(shù)據(jù)庫<br />python-mysqldb會運(yùn)行地更快,所以它是首選 |
python-psycopg2 |
用于監(jiān)控postgresql數(shù)據(jù)庫 |
python-pymongo |
用于監(jiān)控mongodb數(shù)據(jù)庫 |
nodejs |
用于node.js插件來監(jiān)控named和SNMP設(shè)備 |
lm-sensors |
用于監(jiān)控hardware sensors |
libmnl |
用于收集netfilter指標(biāo) |
netcat |
用于從遠(yuǎn)程系統(tǒng)中收集指標(biāo)的Shell插件 |
如果安裝了上述軟件包,Netdata功能將大大增加,但如果沒有它們,Netdata仍然可以正常工作
自動安裝
要在任何Linux系統(tǒng)(物理,虛擬,容器,IoT,邊緣)上從源代碼安裝Netdata并使其與最新的版本自動保持最新,請運(yùn)行以下命令
# make sure you run `bash` for your shell
bash
# install Netdata directly from GitHub source
bash <(curl -Ss https://my-netdata.io/kickstart.sh)
自動安裝后,netdata默認(rèn)的配置文件放在/etc/netdata/netdata.conf中
如果自動安裝不順利的同學(xué), 可以采用手動安裝的方式。
手動安裝
安裝Netdata所需的軟件包<br />
基本安裝
系統(tǒng)監(jiān)控和許多應(yīng)用程序監(jiān)控,它沒有mysql /mariadb,postgres,named,硬件監(jiān)控和SNMP。
curl -Ss 'https://raw.githubusercontent.com/netdata/netdata-demo-site/master/install-required-packages.sh' >/tmp/kickstart.sh && bash /tmp/kickstart.sh -i netdata
完整安裝
curl -Ss 'https://raw.githubusercontent.com/netdata/netdata-demo-site/master/install-required-packages.sh' >/tmp/kickstart.sh && bash /tmp/kickstart.sh -i netdata-all
安裝Netdata
# 下載Netdata(同時創(chuàng)建netdata目錄)
git clone https://github.com/netdata/netdata.git --depth=1
cd netdata
# 運(yùn)行具有root權(quán)限的腳本來編譯安裝Netdata并啟動它
./netdata-installer.sh
注意
- 如果不想安裝完后啟動Netdata,加上
--dont-start-it參數(shù) - 如果不想安裝在默認(rèn)目錄,則可以這樣,
./netdata-installer.sh --install /opt,即可安裝到/opt/netdata中 - 安裝完后,
/opt/netdata/etc/netdata/netdata.conf配置文件會自動被創(chuàng)建,可以編輯此文件以更改設(shè)置首選項(xiàng)。一個最常見被調(diào)整選項(xiàng)是history,它控制Netdata將使用的內(nèi)存數(shù)據(jù)庫大小。其默認(rèn)情況下應(yīng)為“3600”秒(圖表中一小時的數(shù)據(jù)),這使得Netdata將使用大約10-15MB的RAM(取決于系統(tǒng)檢測到的圖表數(shù)量)。請檢查內(nèi)存要求。 當(dāng)修改配置后,需要重啟
相關(guān)命令
啟動,停止和重新啟動Netdata
service netdata start
service netdata stop
service netdata restart
當(dāng)使用service(系統(tǒng)首選基于系統(tǒng)啟動或停止的方法)無法實(shí)現(xiàn)的時候,可以嘗試對systemd和init.d使用等效命令
systemctl start netdata
systemctl stop netdata
systemctl restart netdata
/etc/init.d/netdata start
/etc/init.d/netdata stop
/etc/init.d/netdata restart
訪問Netdata儀表盤
打開http://YOUR-HOST:19999<br />當(dāng)出現(xiàn)無法訪問的時候,檢查下防火墻的狀態(tài),測試環(huán)境下將它關(guān)閉即可(生產(chǎn)環(huán)境不建議)?;蛘卟榭窗踩M是否屏蔽了該端口
# 查看防火墻狀態(tài)
firewall-cmd --state
# 關(guān)閉,或者指定開啟某個端口的入站
systemctl stop firewalld.service
目錄
| 路徑 | 所有者 | 權(quán)限 | Netdata | 注釋 |
|---|---|---|---|---|
/etc/netdata |
用戶 root<br />組 netdata
|
目錄0755<br />文件0640
|
讀 |
Netdata配置文件<br />可能包含敏感信息,因此netdata允許組讀取它們。 |
/usr/libexec/netdata |
用戶 root<br />組 root
|
任何人都可以執(zhí)行<br />dirs 0755<br />文件0644或0755
|
執(zhí)行 |
Netdata插件<br />權(quán)限取決于文件-并非所有插件都應(yīng)具有可執(zhí)行標(biāo)志。<br />有一些帶有升級權(quán)限(Linux功能或setuid)的插件-這些插件應(yīng)該僅按組可執(zhí)行netdata。 |
/usr/share/netdata |
用戶 root<br />組 netdata
|
任何人的<br />目錄0755<br />文件都可讀0644
|
通過網(wǎng)絡(luò)讀取和發(fā)送 |
Netdata Web靜態(tài)文件<br />這些文件通過網(wǎng)絡(luò)發(fā)送給有權(quán)訪問Netdata Web服務(wù)器的任何人。Netdata會檢查這些文件的所有權(quán)(使用的[web]部分的設(shè)置netdata.conf),如果文件所有權(quán)不正確,則拒絕提供這些文件。不支持符號鏈接。Netdata也拒絕提供..名稱中的URL 。 |
/var/cache/netdata |
用戶 netdata<br />組 netdata
|
目錄0750<br />文件0660
|
讀取,寫入,創(chuàng)建,刪除 | Netdata臨時數(shù)據(jù)庫文件<br />Netdata在此處存儲其臨時實(shí)時數(shù)據(jù)庫。 |
/var/lib/netdata |
用戶 netdata<br />組 netdata
|
目錄0750<br />文件0660
|
讀取,寫入,創(chuàng)建,刪除 | Netdata永久數(shù)據(jù)庫文件<br />Netdata在此處存儲注冊表數(shù)據(jù),運(yùn)行狀況警報日志db等。 |
/var/log/netdata |
用戶 netdata<br />組 root
|
目錄0755<br />文件0644
|
寫,創(chuàng)造 | Netdata日志記錄<br />所有Netdata應(yīng)用程序,將它們的錯誤或其他參考消息記錄到此目錄中的文件中。這些文件應(yīng)進(jìn)行日志輪換。 |
<a name="wvtdc"></a>
配置
<a name="5aT8C"></a>
netdata.conf
參考https://docs.netdata.cloud/daemon/config/<br />可通過http://YOUR-HOST:19999/netdata.conf 查看netdata的配置信息,注釋的配置使用對應(yīng)的默認(rèn)值<br />包含了很多配置項(xiàng),如global、web、plugins、health、registry、cloud、backend、statsd等。每一個配置項(xiàng)下,有key-value的配置,通過key我們能比較快速地知道其含義。
修改端口
默認(rèn)端口為19999
[web]
# default port = 19999
修改左上角hostname

[global]
hostname = localhost-1
當(dāng)配置多個節(jié)點(diǎn)后,修改注冊節(jié)點(diǎn)的名稱

[registry]
registry hostname = local192.168.2.57
修改內(nèi)存使用
Netdata使用history標(biāo)簽作為配置內(nèi)存使用的key,默認(rèn)為3996秒,即在圖表中你能看到的條目數(shù)。
參考以下估算標(biāo)準(zhǔn),條目數(shù)與對應(yīng)使用的內(nèi)存
- 3600秒(圖表數(shù)據(jù)保留1小時)使用15 MB RAM
- 7200秒(圖表數(shù)據(jù)保留2小時)使用30 MB RAM
- 14400秒(圖表數(shù)據(jù)保留4小時)使用60 MB RAM
- 28800秒(圖表數(shù)據(jù)保留8小時)使用120 MB RAM
- 43200秒(圖表數(shù)據(jù)保留12小時)使用180 MB RAM
- 86400秒(24小時圖表數(shù)據(jù)保留)使用360 MB RAM
假設(shè)我想讓Netdata保留2個小時的圖表數(shù)據(jù),則可以配置為
[global]
history = 7200
設(shè)置代理
參考https://docs.netdata.cloud/docs/step-by-step/step-10/#required-before-you-start<br />為了提高性能和安全性,Netdata官方十分建議在Netdata前面添加一個代理。在這里,我們通常使用Nginx作為代理工具,并結(jié)合Cerbot來使用。
什么是Cerbot?
Certbot是一種工具,可幫助您為您的域創(chuàng)建和續(xù)訂證書+密鑰對,注意,它是免費(fèi)的!
Nginx
怎么安裝和配置Nginx就不說了,這里貼一下官方建議的代理Netdata的配置<br />創(chuàng)建一個文件/etc/nginx/sites-available/netdata,內(nèi)容如下
upstream backend {
server 127.0.0.1:19999;
keepalive 64;
}
server {
listen 80;
# Change `example.com` to match your domain name.
server_name netdata.example.com;
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://backend;
proxy_http_version 1.1;
proxy_pass_request_headers on;
proxy_set_header Connection "keep-alive";
proxy_store off;
}
}
運(yùn)行測試配置文件是否正常
sudo nginx -t
如果沒返回錯誤,再運(yùn)行以下命令,在sites-enabled目錄中創(chuàng)建軟鏈接,重啟以生效
sudo ln -s /etc/nginx/sites-available/netdata /etc/nginx/sites-enabled/netdata
Certbot
Netdata還建議我們盡可能最大化地使用好代理:加密的HTTPS連接。所以Netdata給我們提供了一個免費(fèi)的證書生成工具Certbot,使用它,我們將能自動生成證書,并能夠支持自動地更新證書,運(yùn)行以下命令
sudo certbot --nginx
系統(tǒng)會提示您一些問題。在Which names would you like to activate HTTPS for?提問時,點(diǎn)擊 Enter。接下來是這個問題:
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
如果確定想要強(qiáng)制使用HTTPS的話,則選擇2,并且確定。
這樣,我們就真正完成了代理的配置。
密碼保護(hù)
當(dāng)我們把代理設(shè)置完后,我們可能還需要一個密碼驗(yàn)證,運(yùn)行以下命令
# 指定用戶名為user,添加到.htpasswd文件中
sudo sh -c "echo -n 'user:' >> /etc/nginx/.htpasswd"
# 創(chuàng)建密碼,系統(tǒng)將提示您創(chuàng)建一個密碼
sudo sh -c "openssl passwd -apr1 >> /etc/nginx/.htpasswd"
打開Nginx配置文件,添加權(quán)限校驗(yàn)的配置嗎,授權(quán)用戶文件指向剛才創(chuàng)建的.htpasswd
location / {
auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd;
...
}
接著再重啟nginx,即可開啟密碼校驗(yàn)功能。
使用
儀表板區(qū)域
Netdata的儀表板主要分為了三個區(qū)域:欄目、菜單、節(jié)點(diǎn)菜單
欄目
分為多個部分,例如系統(tǒng)概述,CPU,磁盤,內(nèi)存等<br />例如下面的內(nèi)存欄目
菜單
菜單顯示在標(biāo)準(zhǔn)儀表板的右側(cè),Netdata為每個部分生成一個菜單,菜單鏈接到它們所關(guān)聯(lián)的部分。

節(jié)點(diǎn)菜單
節(jié)點(diǎn)菜單出現(xiàn)在標(biāo)準(zhǔn)儀表板的左上角,并標(biāo)有Netdata正在監(jiān)視的系統(tǒng)的主機(jī)名。<br />單擊它會顯示一個下拉菜單,其中包含您可能已通過Netdata注冊表連接的所有節(jié)點(diǎn)。<br />默認(rèn)情況下,“我的節(jié)點(diǎn)”標(biāo)題下沒有任何內(nèi)容,但是您可以嘗試使用任何演示Netdata節(jié)點(diǎn)來查看節(jié)點(diǎn)菜單的工作方式。

通過Netdata Cloud或?qū)S米员硖砑庸?jié)點(diǎn)后,您將看到它們出現(xiàn)在“我的節(jié)點(diǎn)”標(biāo)題下。
自定義儀表板
Netdata將有關(guān)各個圖表的信息存儲在/netdata/web/dashboard_info.js文件中。<br />例如,以下是dashboard_info.js如何定義“系統(tǒng)概述”部分的方式。
netdataDashboard.menu = {
'system': {
title: 'System Overview',
icon: '<i class="fas fa-bookmark"></i>',
info: 'Overview of the key system metrics.'
},
注意,不能直接更改dashboard_info.js,而是應(yīng)另外新建一個文件,Netdata已經(jīng)提供了一個示例文件:dashboard_info_custom_example.js
cd /netdata/web/
sudo cp dashboard_info_custom_example.js your_dashboard_info_file.js
自定義文件編寫完后,在/netdata/web的目錄下使用新建自定義文件的名稱即可。
[web]
custom dashboard_info.js = your_dashboard_info_file.js
使用Netdata Cloud監(jiān)視多個系統(tǒng)
在第一個節(jié)點(diǎn)的儀表板上右上角點(diǎn)擊登錄按鈕,此時Netdata將會發(fā)送一封驗(yàn)證郵件,點(diǎn)擊鏈接后,該節(jié)點(diǎn)將自動鏈接到Netdata Cloud的賬戶,并重定向回儀表板。<br />其他節(jié)點(diǎn)也按同樣的操作,即可。
特點(diǎn)
核心功能
無需配置
長期指標(biāo)存儲
使用我們的新數(shù)據(jù)庫引擎,您可以存儲每秒數(shù)天,數(shù)周或數(shù)月的歷史指標(biāo)?;蛘撸梢詫⒅笜?biāo)歸檔到另一個數(shù)據(jù)庫,例如MongoDB或Prometheus。
分布式,按系統(tǒng)安裝
您無需將度量標(biāo)準(zhǔn)集中在一個位置,而是在每個系統(tǒng)上安裝Netdata ,每個系統(tǒng)負(fù)責(zé)其度量標(biāo)準(zhǔn)。擁有分布式代理可以降低成本,并使Netdata可以在資源很少的設(shè)備(例如IoT和邊緣設(shè)備)上運(yùn)行,而不會影響其核心目的。
完善的健康監(jiān)控功能
可確保您始終知道異常發(fā)生的時間
高速,資源少的收集器
每秒可以收集數(shù)千個指標(biāo),同時僅使用系統(tǒng)CPU資源的一小部分和少量MiB RAM。
Netdata Cloud
可幫助Netdata用戶監(jiān)視整個基礎(chǔ)結(jié)構(gòu)的運(yùn)行狀況和性能,無論它們是兩千個(或兩千個(或更多)!)系統(tǒng)。<br />如果使用Netdata監(jiān)視多個系統(tǒng),則Netdata Cloud可以提供集中監(jiān)控解決方案的所有優(yōu)勢,同時又可以將工作負(fù)載分配給每個代理。<br />而且,更好的是,Netdata Cloud不存儲系統(tǒng)的任何指標(biāo)。它存儲有關(guān)系統(tǒng)IP,主機(jī)名和隨機(jī)創(chuàng)建的GUID的元數(shù)據(jù),僅此而已。指標(biāo)從系統(tǒng)直接流式傳輸?shù)絎eb瀏覽器。<br />本質(zhì)上,Web瀏覽器托管一個SaaS應(yīng)用程序,并將Netdata Cloud的所有功能直接嵌入到儀表板中。<br />**
安全性
祥見:https://docs.netdata.cloud/zh/docs/netdata-security/
數(shù)據(jù)安全性
Netdata連接的數(shù)據(jù)源獲取的原始數(shù)據(jù)只會保留在收集的主機(jī),暴露出去的數(shù)據(jù)是圖表元數(shù)據(jù)和度量標(biāo)準(zhǔn)值。
系統(tǒng)安全性
- Netdata守護(hù)程序,在收集系統(tǒng)以及因應(yīng)用程序的各項(xiàng)指標(biāo)時,以普通系統(tǒng)用戶身份運(yùn)行,沒有構(gòu)造特殊的特權(quán)。
- 從Netdata插件到Netdata守護(hù)程序,是通訊單向的,原始數(shù)據(jù)的不會離開收集過程,不會被保存;
只讀收集指標(biāo)
Netdata只可以讀取收集的指標(biāo),但是不能進(jìn)行其他操作,也不會公開敏感信息和業(yè)務(wù)數(shù)據(jù),如內(nèi)核版本、O/S版本,應(yīng)用程序版本等
身份驗(yàn)證
作為一個監(jiān)視系統(tǒng),查看者可以看到監(jiān)視器上的所有的指標(biāo)信息,此時應(yīng)當(dāng)受到保護(hù),否則會出現(xiàn)
- 根據(jù)視圖內(nèi)容,進(jìn)行探索測試DDOS攻擊的入口
什么是DDOS攻擊?
分布式拒絕服務(wù)。短時間內(nèi)發(fā)起大量請求,耗盡服務(wù)器的資源,無法響應(yīng)正常的訪問,造成網(wǎng)站實(shí)質(zhì)下線
- 使用Netdata本身來給服務(wù)器施加壓力,盡管只具有最低的進(jìn)程優(yōu)先級,仍可以導(dǎo)致OOM