Serverio stebėsena su Netdata: diegimas ir konfigūravimas

Paleiskite serveryje viena komanda (pirmiausia patikrinkite skripto turinį žemiau):

curl -sSL https://cp.lv/scripts/monitoring-servera-netdata.sh | sudo bash

…arba su wget:

wget -qO- https://cp.lv/scripts/monitoring-servera-netdata.sh | sudo bash

Skripto turinys monitoring-servera-netdata.sh:

#!/usr/bin/env bash
# Install Netdata and expose it through nginx with basic auth
set -euo pipefail
export DEBIAN_FRONTEND=noninteractive

# 1. Install Netdata (official kickstart, stable channel)
wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh
sudo sh /tmp/netdata-kickstart.sh --stable-channel --disable-telemetry --non-interactive

# 2. Bind the agent to localhost only
sudo tee /etc/netdata/netdata.conf > /dev/null << 'EOF'
[web]
    bind to = 127.0.0.1
EOF
sudo systemctl restart netdata

# 3. nginx reverse proxy with basic auth
sudo apt-get update -y
sudo apt-get install -y nginx apache2-utils openssl
PASS="$(openssl rand -base64 12)"
sudo htpasswd -bc /etc/nginx/.netdata-htpasswd admin "$PASS"

# quoted 'EOF' keeps nginx variables ($host) from being expanded
sudo tee /etc/nginx/sites-available/netdata > /dev/null << 'EOF'
server {
    listen 80;
    server_name monitor.example.com;
    auth_basic "Netdata";
    auth_basic_user_file /etc/nginx/.netdata-htpasswd;
    location / {
        proxy_pass http://127.0.0.1:19999;
        proxy_set_header Host $host;
        proxy_http_version 1.1;
        proxy_set_header Connection "keep-alive";
    }
}
EOF

sudo ln -sf /etc/nginx/sites-available/netdata /etc/nginx/sites-enabled/netdata
sudo nginx -t && sudo systemctl reload nginx
echo "Done. Dashboard is served on the domain. Login: admin, password: $PASS"

Netdata įdiegiamas viena komanda ir iš karto pateikia žiniatinklio skydelį su realaus laiko serverio metrikomis: procesoriaus apkrova, atmintis, diskas, tinklas, procesai — sekundės tikslumu. Žemiau — diegimas, prieigos apsauga ir įspėjimų konfigūravimas.

Kodėl Netdata

Skirtingai nuo sunkių derinių, tokių kaip Prometheus ir Grafana, Netdata įdiegiamas per minutę, nereikalauja konfigūravimo ir iš karto rodo šimtus metrikų. Idealiai tinka, kai reikia greitai pamatyti, kas su serveriu vyksta būtent dabar.

Reikalavimai: bet kuris VPS su 512 MB RAM ar daugiau. Agentas sunaudoja mažai resursų.

1 žingsnis. Diegimas

Oficialus diegimo skriptas (kickstart) pats nustatys distributyvą:

wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh
sh /tmp/netdata-kickstart.sh --stable-channel --disable-telemetry

Vėliava --disable-telemetry išjungia anoniminės statistikos siuntimą.

Po diegimo tarnyba pasileis automatiškai:

systemctl status netdata

2 žingsnis. Prieiga prie skydelio

Netdata klauso prievado 19999. Atverkite naršyklėje:

http://<jusu_VPS_IP>:19999

Pamatysite gyvą skydelį. Pagal nutylėjimą prievadas pasiekiamas visiems — tai nesaugu, todėl prieigą apribosime.

3 žingsnis. Uždarykite tiesioginę prieigą

Susiekite Netdata tik su localhost. Faile /etc/netdata/netdata.conf:

[web]
    bind to = 127.0.0.1

Paleiskite iš naujo:

systemctl restart netdata

Dabar skydelis pasiekiamas tik iš paties serverio — iš išorės jį atversime per reverse proxy su slaptažodžiu.

4 žingsnis. Reverse proxy su autorizacija (nginx)

Įdiekite įrankius ir sukurkite slaptažodį:

apt install -y nginx apache2-utils
htpasswd -c /etc/nginx/.netdata-htpasswd admin

Atverkite konfigūraciją redaktoriuje (sudo nano /etc/nginx/sites-available/netdata) ir įrašykite turinį:

server {
    listen 80;
    server_name monitor.example.com;

    auth_basic "Netdata";
    auth_basic_user_file /etc/nginx/.netdata-htpasswd;

    location / {
        proxy_pass http://127.0.0.1:19999;
        proxy_set_header Host $host;
        proxy_http_version 1.1;
        proxy_set_header Connection "keep-alive";
    }
}

Arba sukurkite konfigūraciją iš karto viena komanda (kabutės 'EOF' svarbios — nginx kintamasis $host liks toks, koks yra):

sudo tee /etc/nginx/sites-available/netdata > /dev/null << 'EOF'
server {
    listen 80;
    server_name monitor.example.com;
    auth_basic "Netdata";
    auth_basic_user_file /etc/nginx/.netdata-htpasswd;
    location / {
        proxy_pass http://127.0.0.1:19999;
        proxy_set_header Host $host;
        proxy_http_version 1.1;
        proxy_set_header Connection "keep-alive";
    }
}
EOF

Aktyvuokite:

ln -s /etc/nginx/sites-available/netdata /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx

Dabar skydelis atsidaro domenu su prisijungimo vardu ir slaptažodžiu. Šifravimui pridėkite HTTPS per certbot.

5 žingsnis. Įspėjimų konfigūravimas

Netdata gali siųsti įspėjimus į Telegram, el. paštu ar į Slack. Telegram pavyzdys — redaguokite /etc/netdata/health_alarm_notify.conf:

SEND_TELEGRAM="YES"
TELEGRAM_BOT_TOKEN="<boto_zetonas>"
DEFAULT_RECIPIENT_TELEGRAM="<chat_id>"

Patikrinkite siuntimą:

/usr/libexec/netdata/plugins.d/alarm-notify.sh test

Naudingos kontroliuojamos metrikos

Metrika Į ką žiūrėti
CPU iowait Didelis — disko siaura vieta
RAM available Mažai — OOM rizika
Disk space Skirsnio užpildymas
Network errors Tinklo arba NIC problemos
Load average Procesoriaus perkrova

Ribų nustatymas

Įspėjimų taisyklės yra kataloge /etc/netdata/health.d/. Pavyzdžiui, disko užpildymo riba:

nano /etc/netdata/health.d/disk_space.conf

Po pakeitimų perskaitykite konfigūraciją iš naujo:

netdatacli reload-health

Prieigos šifravimas (HTTPS)

Basic autorizacija be HTTPS perduoda slaptažodį atviru tekstu. Pridėkite nemokamą Let’s Encrypt sertifikatą per certbot:

apt install -y certbot python3-certbot-nginx
certbot --nginx -d monitor.example.com

certbot pats sukonfigūruos peradresavimą į HTTPS ir automatinį sertifikato atnaujinimą. Patikrinkite atnaujinimo laikmatį:

systemctl status certbot.timer

Agento resursų ribojimas

Silpname VPS sumažinkite rinkimo dažnį, kad sumažintumėte apkrovą. Faile /etc/netdata/netdata.conf:

[db]
    update every = 2

Reikšmė 2 renka metrikas kartą per dvi sekundes vietoj vienos — tikslumas šiek tiek mažesnis, apkrova pastebimai mažesnė. Nereikalingus papildinius (pavyzdžiui, duomenų rinkimą iš neegzistuojančių tarnybų) galima išjungti skiltyje [plugins].

Naudingos skydelio skiltys

  • System Overview — procesoriaus, atminties, disko ir tinklo suvestinė.
  • Applications — resursų sunaudojimas pagal procesų grupes.
  • Disks — kiekvieno blokinio įrenginio vėlinimas ir apkrova.
  • Networking Stack — ryšiai, retransmits, TCP klaidos.

Skydelis visiškai interaktyvus: užveskite pelę ant grafiko, kad pamatytumėte tikslias reikšmes konkrečiu momentu, arba pele pažymėkite intervalą, kad jį priartintumėte.

Atnaujinimas ir šalinimas

Atnaujinti Netdata iki naujausios stabilios versijos:

netdata-updater.sh

Visiškai pašalinti agentą, jei jo nebereikia:

/usr/libexec/netdata/netdata-uninstaller.sh --yes --force

Dažni klausimai

Kiek resursų sunaudoja Netdata? Agentas lengvas, bet sekundės skiriamąja geba silpname VPS apkrova pastebima. Rinkimo intervalą galima padidinti faile netdata.conf.

Ar saugomi istoriniai duomenys? Taip, vietinėje duomenų bazėje (dbengine). Saugojimo gylis nustatomas konfigūracijos skiltyje [db].

Ar galima stebėti kelis serverius? Taip, per Netdata Cloud arba per tėvinį mazgą (streaming), kuris renka metrikas iš dukterinių.

Ar saugu laikyti prievadą 19999 atvirą? Ne. Susiekite jį su localhost ir proksinkite per nginx su slaptažodžiu ir HTTPS.

Ar Netdata pakeičia Prometheus? Greitai realaus laiko stebėsenai — taip. Ilgam saugojimui ir sudėtingoms užklausoms Prometheus ir Grafana derinys yra lankstesnis.


Stebėsena — privaloma eksploatacijos dalis. Talpinkite projektą VPS nuomoje arba VPS saugumui ir VPN. Stebėsenos ir įspėjimų konfigūravimą perims Serverių administravimas.

Laura Zariņa