Netdata Docker Installation

Aus Laub-Home Wiki

Netdata Monitoring ist ein geniales Tool um Linux Systeme was Performance Daten angeht zu Monitoren. Es erlaubt ebenfalls eine Alarmierung auf alle Performance Daten. Es bietet ein gut aufgeräumtes Dashboard, in dem man alle Daten zum System findet. Ähnlich wie auch bei Grafana lässt sich einstellen von wann man die Daten sehen möchte. Ein Live Monitoring inklusive. Das Ganze Tool ist sehr schlank gehalten und benötigt nur wenig Ressourcen. Ich nutze es als Docker Container und Monitore damit meinen kompletten Docker Node inklusive der laufenden Docker Container.

Mehr Informationen findet ihr auf der Homepage:

Docker Compose Projekt

Ich habe hier auch wie schon Watchtower, Smokeping und Portainer, Netdata in mein Compose Projekt tools integriert.

Der Projekt Ordner ist deshalb /opt/tools

Wir legen hier als erstes ein Config Directory an, in welches wir die Konfigurationsdateien aus dem Container kopieren:

mkdir -p /opt/tools/data
docker run -d --name netdata_tmp netdata/netdata
docker cp netdata_tmp:/etc/netdata/ /opt/tools/data/
docker rm -f netdata_tmp

Nun fügen wir den Netdata Service dem Tools docker-compose.yml hinzu: /opt/tools/docker-compose.yml

...

  netdata:
    image: netdata/netdata
    ports:
      - ${NETDATA_HTTP_PORT}:19999
    restart: always
    hostname: vs.laub-home.de # set to fqdn of host
    cap_add:
      - SYS_PTRACE
    security_opt:
      - apparmor:unconfined
    volumes:
      - ./data/netdata:/etc/netdata
      - data_netdata_lib:/var/lib/netdata
      - data_netdata_cache:/var/cache/netdata
      - /etc/passwd:/host/etc/passwd:ro
      - /etc/group:/host/etc/group:ro
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /etc/os-release:/host/etc/os-release:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
    environment:
      - TZ=${TZ}
      - DOCKER_USR=root
      # If running on a virtual Machin you can get it with:
      # # systemd-detect-virt -v
      #- VIRTUALIZATION=xen
    labels:
      - com.centurylinklabs.watchtower.enable=true
    networks:
      frontend-nw:
        
...

in unser .env Datei müssen wir folgendes integrieren: /opt/tools/.env

...

# Netdata Exposed Port Configuration
NETDATA_HTTP_PORT=19999

# Timezone
TZ=Europe/Berlin

...

Nun können wir das Ganze deployen:

cd /opt/tools
docker-compose up -d

Das Dashboard ist nun direkt unter

  • http://YOURFQDN:19999

erreichbar

Konfiguration

Im Normall Fall bedarf es keinerlei Konfiguration, da Netdata, das System komplett Scannt und automatisch alle verfügbaren Monitore einrichtet. Reicht einem das schon, ist keine Konfiguration mehr nötig.

Es gibt jedoch die Möglichkeit, den schon Ressourcen schonenden Netdata Agent noch schlanker zu machen. Dazu muss man die Konfigurationsdateien editieren. Dies geschieht mit dem eigens gebauten Shell Script edit-config. Diese muss man allerdings im Container selbst ausführen:

docker exec -it tools_netdata_1 /etc/netdata/edit-config KONFIGDATEI

Doch zu allererst habe ich mir die aktuell laufenden netdata.conf Datei aus dem System heruntergeladen:

wget -O /opt/tools/data/netdata/netdata.conf http://localhost:19999/netdata.conf

Nun können wir diese editieren:

docker exec -it tools_netdata_1 /etc/netdata/edit-config netdata.conf

Hier habe ich aus Performance Gründen folgendes angepasst:

[global]
         update every = 5
         dbengine multihost disk space = 128
         debug log = none
         error log = none
         access log = none
[plugins]
         enable running new plugins = no
[plugin:apps]
         update every = 10


Zum Aktivieren der Änderungen muss der Container neu gestartet werden:

docker-compose restart netdata

Hier ist ein sehr guter Artikel darüber, wie man diese Performance Anpassungen vornimmt:

Netdata hinter NGINX Proxy

Als Voraussetzung ist hier ein Laufender NGINX Reverse Proxy:

Als erstes editieren wir den web Part von der netdata.conf:

docker exec -it tools_netdata_1 /etc/netdata/edit-config netdata.conf

wir deaktivieren die GZIP Compression, da diese vom NGINX übernommen wird. Und wir erhöhen den IDLE Timeout.

[web]
         disconnect idle clients after seconds = 3600
         enable gzip compression = no

dann starten wir den Container neu um die Änderungen zu aktivieren:

docker-compose restart netdata

Die NGINX Konfiguration sieht dann wie folgt aus: /opt/nginxproxy/data/nginx/conf/yourdomain.tld.conf

server {
  listen 80;
  listen [::]:80;
  server_name yourdomain.tld;

  return 301 https://$host$request_uri;
}
server {
  listen 443 ssl;
  listen [::]:443 ssl;
  server_name yourdomain.tld;

  ssl_certificate /etc/letsencrypt/live/yourdomain.tld/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/yourdomain.tld/privkey.pem;

  include /etc/nginx/conf.d/includes/site-defaults.conf;
  include /etc/nginx/conf.d/includes/cert_bot.conf;
  expires $expires;

  # BASIC AUTH vor den gesamten vhost
  auth_basic 'Restricted Area';
  auth_basic_user_file /etc/nginx/conf.d/.htpasswd.pwd;

  location / {
      proxy_pass http://127.0.0.1:19999/;
      proxy_set_header Host $http_host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
      client_max_body_size 0;
      include /etc/nginx/conf.d/includes/proxy_cache.conf;
  }
  # security headers
  add_header X-Robots-Tag none;
  add_header Strict-Transport-Security "max-age=15768000;";
  add_header X-Content-Type-Options nosniff;
  add_header X-XSS-Protection "1; mode=block";
  add_header X-Download-Options noopen;
  add_header X-Frame-Options "sameorigin";
  add_header X-Permitted-Cross-Domain-Policies none;
  add_header Referrer-Policy strict-origin;
}

Netdata hat hierzu ebenfalls einen sehr guten Artikel:

Netdata Cloud Anbindung

Wer möchte kann seinen Agent auch an die Netdata Cloud anbinden. Dies hat zum einen den Vorteil, das man direkt bei Alarmen ohne Konfiguration E-Mail Alerts bekommt. Des Weiteren kann man so direkt alle Nodes in einem Dashboard überwachen. Probiert es einfach aus.

Updaten

Ein Update erfolgt entweder manuell via:

cd /opt/tools
docker-compose pull netdata
docker-compose restart netdata

oder man lässt Watchtower seinen Dienst machen.

Backup

Ein Backup kann entweder händisch oder aber Script gesteuert gemacht werden. Schaut einfach die folgenden Artikel durch: