...

Node Exporter correct configureren: praktische handleiding voor Prometheus-servermonitoring op Linux

Node Exporter correct configureren betekent: ik stel de dienst zo in dat Prometheus betrouwbare Linux-servermetriek verzamelt met duidelijke poorten, gerichte collector-instellingen en een degelijke beveiliging. In deze praktische handleiding laat ik je zien hoe je de installatie, de systemd-configuratie, het afstemmen van de collector, beveiliging, Prometheus-integratie, prestatietips en handige controles voor dagelijks gebruik uitvoert.

Centrale punten

  • Installatie en het opstarten van de dienst met een eigen systemd-unit
  • Collector doelgericht kiezen, de metrische belasting verlagen
  • Beveiliging via poortopeningen en proxy’s
  • Prometheus Scrapes, waarschuwingen en opslag
  • Prestaties via intervallen, sharding, opschoning

Wat is de Node Exporter?

Ik heb de Knooppunt Installeer Exporter op elke Linux-host om systeemstatistieken in Prometheus-formaat beschikbaar te maken. De daemon levert gegevens over CPU-belasting, systeembelasting, werkgeheugen, swap, bestandssystemen, netwerk en, optioneel, systemd- en procesgegevens. Ik maak via HTTP verbinding met het eindpunt /metrics en zie leesbare tijdreeksen die Prometheus cyclisch ophaalt. Deze aanpak is geschikt voor heterogene serverparken en blijft dankzij het pull-model transparant. Ik profiteer van een duidelijke scheiding: de exporter verzamelt, Prometheus slaat op en analyseert.

Architectuuroverzicht: zo werken Node Exporter en Prometheus samen

Ik start de exporter op poort 9100, beheer ik de Collectors en laat ik Prometheus periodiek gegevens verzamelen. Het pull-principe maakt het gebruik van firewalls eenvoudiger, omdat ik alleen de toegang van Prometheus naar de host openstel. Grafana of soortgelijke visualisatieoplossingen maken vervolgens gebruik van Prometheus en geven de waarden overzichtelijk weer. In productieomgevingen gebruik ik meerdere Prometheus-servers voor afzonderlijke verantwoordelijkheden. Zo houd ik de paden kort, de rollen duidelijk en het beheer overzichtelijk.

Installatie onder Linux: netjes en reproduceerbaar

Ik download het juiste binaire bestand voor linux-amd64 of de doelarchitectuur en pas deze aan /usr/local/bin/. Vervolgens maak ik een systeemgebruiker aan zonder inloggegevens, bijvoorbeeld node_exporter, en stel de eigendomsrechten voor het binaire bestand in. Voor het automatisch opstarten maak ik een systemd-unit aan in de map /etc/systemd/system/ met een eenvoudige ExecStart en een herstartbeleid. Na systemctl daemon-reload Ik activeer en start de dienst, controleer de status en roep curl http://localhost:9100/metrics . Zo zie ik meteen of de statistieken correct beschikbaar zijn en of de dienst naar behoren functioneert.

Node Exporter als systemd-service: de belangrijkste instellingen

Ik definieer in de unit Gebruiker en Group als toegewijde account, stel in Type=eenvoudig en een duidelijke ExecStart. Een herstartstrategie zoals Herstart=op-faillissement helpt bij plotselinge uitval. Voor updates bewerk ik de unit of maak ik een drop-in-bestand aan, zodat wijzigingen traceerbaar blijven. Na elke aanpassing voer ik een daemon-reload en start de dienst opnieuw op. Ik zorg ervoor dat de unit compact, gedocumenteerd en herbruikbaar is voor alle serverklassen.

Poort en lijstadres: consistent en veilig

Ik luister standaard op poort 9100, maar pas de poort per project aan als er overlappingen zijn. De optie --web.listen-address maakt het mogelijk om de host en poort aan te passen, bijvoorbeeld 127.0.0.1:9200 bij lokale proxy-offloading. Een uniform poortschema voorkomt verwarring in grote teams. Ik voer poortwijzigingen centraal in, zodat firewalls en beveiligingslijsten correct zijn ingesteld. De poort blijft beperkt tot de Prometheus-servers en heeft geen vrije toegang tot het internet.

Collector doelgericht configureren: alleen wat er echt toe doet

Ik kies voor de Collector bewust, om de hoeveelheid gegevens en de rekentijd te beheersen. Standaardmodules voor CPU, geheugen, bestandssystemen en netwerk blijven meestal actief. Indien nodig activeer ik speciale modules zoals --collector.systemd of --collector.processes, om diensten en processen nauwkeuriger te volgen. Ongewenste modules schakel ik uit met --no-collector.X, zodat Prometheus minder tijdreeksen hoeft te verwerken. Ik leg de gemaakte keuze per serverrol vast, zodat het team consistent blijft.

Textfile Collector: eigen statistieken correct invoeren

Ik gebruik de Textfile Collector voor individueel Kerncijfers die standaardmodules niet leveren. Een lijst zoals /var/lib/node_exporter/textfile_collector verzamelt .promBestanden in Prometheus-formaat. Scripts schrijven op een atomaire manier door tijdelijke bestanden aan te maken en deze aan het einde te vervangen, zodat er geen halfafgewerkte waarden verschijnen. Zo voer ik bedrijfsstatistieken, batchstatussen of wachtrijlengtes rechtstreeks in Prometheus in. Ik houd me aan naamgevingsconventies om analyses en dashboards overzichtelijk te houden.

Beveiliging in de productieve omgeving: toegang alleen voor bevoegde personen

Ik beperk de poorttoegang via Firewall consequent op de scrape-bronnen. Een upstream reverse proxy zorgt indien nodig voor TLS of mTLS en neemt de authenticatie voor zijn rekening. Ik laat de dienst zonder root-rechten draaien en wijs minimale bestandsrechten toe voor log- en tekstbestandspaden. In afzonderlijke netwerken zorg ik bovendien voor extra beveiliging via VPN of privé-subnetten. Zo blijft gedetailleerde systeeminformatie beschermd en is deze alleen zichtbaar voor de monitoringinfrastructuur.

Integratie in Prometheus: scrapes, labels, waarschuwingen

Ik leg in de prometheus.yml een baan zoals job_name: node , voeg een zinvolle scrape_interval (vaak 15 seconden) en voer ik targets of service discovery in. Uniforme labels (bijv. omgeving, rol, locatie) maken het filteren en het gebruik van dashboards eenvoudiger. Voor veelvoorkomende analyses definieer ik opnameregels en ontlast ik daarmee ad-hoc-query’s. Waarschuwingen worden gegenereerd op basis van geaggregeerde statistieken, zoals CPU-belasting, RAM, swap, schijfruimtegebruik en netwerkfouten. Voor een eerste inzicht in de belasting en piekbelastingen verwijs ik naar mijn beknopte CPU- en belastinganalyse, waarin de typische kengetallen op een praktijkgerichte manier worden uitgelegd.

Monitoring van de Node Exporter zelf: vertrouwen is goed, controle is beter

Ik kijk naar de Status van de vacature in Prometheus en laat ik waarschuwingen activeren als een host gedurende langere tijd niet wordt gescraped. Ik controleer regelmatig de versies van de exporters om zo snel mogelijk gebruik te kunnen maken van bugfixes en nieuwe modules. Daarnaast meet ik het aantal tijdreeksen per host om in een vroeg stadium te detecteren wanneer een wijziging in de collector de belasting doet stijgen. Dashboards krijgen meldingen in de panelen over de laatst succesvolle ophaling. Zo herken ik storingen snel en kan ik direct reageren.

Prestatieoptimalisatie en schaalbaarheid: de belasting onder controle houden

Ik regel de Intervallen afhankelijk van de omvang en het doel van de omgeving: 15 seconden voor kernsystemen, 30–60 seconden voor minder kritieke servers. Door selectief collectors te kiezen, beperk ik het aantal metrics en verkort ik de opvraagtijden. Ik houd mijn eigen tekstbestandsmetrieken overzichtelijk, verwijder verouderde gegevens en hanteer een consistente naamgeving. Als het aantal servers sterk toeneemt, verdeel ik de belasting over meerdere Prometheus-instanties en scheid ik de verantwoordelijkheden. De volgende tabel toont beproefde instellingsopties en hun effect in de praktijk.

Onderwerp Instelling Effect Tip
Scrape-interval 15 s / 30 s / 60 s Minder schrammen verminderen Belasting Rekening houden met de kritikaliteit per hostklasse
Collector-selectie alleen de benodigde modules Tijdreeksen verkorten Lijst per rol vastleggen
Tekstbestandverzamelaar compacte .prom-bestanden Minder kosten voor het parseren Kort en bondig schrijven, duidelijk benoemen
Label-cardinaliteit Labels controleren Voorkomt Explosie van de series Vermijd ID’s en sterk variërende waarden
Sharding Prometheus opsplitsen Scrapes en queries schalen Verantwoordelijkheden scheiden

Bij opslagsystemen let ik vooral op de IO-waarden en de latentie per apparaat en per bestandssysteem. Mijn handleiding biedt een goed uitgangspunt Schijfvertragingen controleren, waarin de typische symptoomketens en statistieken zijn samengevat. Ik koppel deze waarden aan CPU-wachttijd en -belasting om knelpunten nauwkeurig te kunnen opsporen. Query’s verwerk ik in opnameregels, zodat dashboards snel laden. Zo blijven analyse en beheer vlot en overzichtelijk.

Visualisatie met Grafana: een duidelijk beeld, snel handelen

Ik gebruik kant-en-klare dashboards voor CPU, RAM, schijf, netwerk en systemd, maar pas ze aan mijn labels aan. Een overzichtsdashboard toont de status, belasting en opvallende hosts, terwijl detailpagina’s dieper ingaan op de gegevens. Ik beschrijf de panelen kort, zodat iedereen de betekenis van de kengetallen begrijpt. Met variabelenselectors kun je snel schakelen tussen hosts of rollen. Wie een volledig overzicht wil, vindt onder Monitoringstack met Grafana Tips voor het samenstellen van een krachtige stack.

Nette pakketvorming en versiebeheer: reproduceerbaar blijven

Ik zorg ervoor dat installaties reproduceerbaar blijven door versies expliciet vast te pinnen en checksums te controleren. Voor fleet-configuraties verpak ik de Node Exporter als een intern pakket (bijv. DEB/RPM) met een vaste padstructuur en een vaste systeemgebruiker. Updates rol ik gefaseerd uit en documenteer ik de gebruikte versie per omgeving. Waar mogelijk sla ik de startparameters op in een EnvironmentFile, zodat wijzigingen niet rechtstreeks in het unit-bestand worden aangebracht en de versiebeheer netjes blijft. Ik test nieuwe releases eerst in de staging-omgeving voordat ik ze op grote schaal uitrol.

Voorbeeldconfiguratie: systemd-unit en beveiligingsversterking

Ik gebruik een eenvoudige, maar degelijke unit en pas de uithardingsinstellingen indien nodig aan:

[Unit]
Description=Prometheus Node Exporter
After=network-online.target
Wants=network-online.target

[Service]
Gebruiker=node_exporter
Groep=node_exporter
ExecStart=/usr/local/bin/node_exporter \
  --web.listen-address=0.0.0.0:9100 \
  --collector.systemd \
  --collector.processes \
  --collector.filesystem.fs-types-exclude='^(tmpfs|devtmpfs|overlay|squashfs)$' \
  --collector.filesystem.mount-points-exclude='^/(sys|proc|dev|run)($|/)'
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target

Voor productieve hosts maak ik de dienst extra beveiligd, zonder de leesrechten ervan te beperken tot /proc en /sys te breken. Dat zet ik als drop-in (/etc/systemd/system/node_exporter.service.d/hardening.conf) om:

[Service]
NoNewPrivileges=true
PrivateTmp=true
PrivateDevices=true
ProtectSystem=strict
ProtectHome=true
ProtectControlGroups=true
ProtectKernelTunables=true
ProtectKernelModules=true
LockPersonality=true
MemoryDenyWriteExecute=true
CapabilityBoundingSet=
AmbientCapabilities=
RestrictNamespaces=true
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6
SystemCallFilter=@system-service

Na elke wijziging: systemctl daemon-reload en een schone herstart. Voor debugdoeleinden schakel ik tijdelijk een hoger logniveau in via --log.level=debug, om de details van de verzamelaar en de parser te bekijken.

Collector-finetuning voor praktijkomgevingen

Ik zoek een evenwicht tussen zichtbaarheid en belasting met behulp van gerichte filters:

  • Bestandssystemen: Ik sluit pseudo-bestandssystemen en tijdelijke koppelingen uit (--collector.filesystem.fs-types-exclude en --collector.filesystem.mount-points-exclude), om onzinnige series te vermijden.
  • Processen: --collector.processes levert nuttige totalen op, maar genereert extra reeksen. Ik schakel deze functie alleen in op hosts waar het aantal processen een signaal geeft (bijv. batch- of workerknooppunten).
  • Netwerk: De netstat-Collector kan, afhankelijk van de kernel en de verbindingen, veel labels genereren. Ik controleer de cardinaliteit in Staging en schakel hem anders doelgericht uit.
  • Druk/PSI: Moderne kernels leveren drukstatistieken (--collector.druk, vaak standaard ingeschakeld). Ik gebruik deze om knelpunten bij de CPU, I/O en het geheugen vroegtijdig te herkennen.
  • NVMe/RAID: specifieke collector (bijv. NVMe) activeer ik alleen op die plaatsen waar de hardware aanwezig is – zo blijven de dashboards zinvol.

Ik test verzamelaars selectief via de zoekparameter collect[], zonder de startparameters te wijzigen. Een voorbeeld: curl 'http://localhost:9100/metrics?collect[]=systemd&collect[]=processes'. Zo zie ik meteen welke invloed afzonderlijke Collectors hebben.

Textfile Collector: beste praktijken uit de praktijk

Ik schrijf statistieken op atomaire basis: scripts genereren eerst .tmp-bestanden en vervang deze uiteindelijk met mv. Elk bestand bevat slechts één logische groep en is maximaal enkele kilobytes groot. Het beheer van tijdstempels laat ik over aan Prometheus; de bestanden zelf hebben geen tijdstempels nodig. Als ik een .prom-bestand, verdwijnen de bijbehorende series na de volgende scrape. Ik documenteer naamruimten (bijv. business_*) en houd labelwaarden stabiel om de cardinaliteit te beheersen. Wanneer waarden sterk schommelen, egaliseer ik ze al in scripts (bijvoorbeeld door het gemiddelde te berekenen), zodat dashboards soepeler werken.

Beveiliging: soorten firewalls en proxyservers

Ik zet eerst in op netwerksegmentatie: de exporter luistert alleen intern, en de firewall laat uitsluitend de Prometheus-IP’s door. Een voorbeeld met nftables op een host:

table inet filter {
  chain input {
    type filter hook input priority 0;
    ct state established,related accept
    iif lo accept
    tcp dport 9100 ip saddr { 10.0.0.10, 10.0.0.11 } accept
    tcp dport 9100 drop
  }
}

Als versleuteling nodig is, plaats ik daar een lokale reverse proxy voor die TLS of mTLS afhandelt en alleen naar 127.0.0.1:9100 doorstuurt. Als alternatief gebruik ik – voor zover de versie dit ondersteunt – de native webconfiguratie van de exporter via een --web.config.file, zodat authenticatie en certificaten centraal blijven worden beheerd. In principe draait de dienst zonder speciale rechten, met minimale rechten op zijn map en schrijft hij alleen daar waar het echt nodig is (bijv. het pad naar een tekstbestand).

Prometheus-integratie in detail: herlabelen, limieten, waarschuwingen

Ik houd jobs compact en uniform. Een praktisch bruikbare job met limieten en labelonderhoud ziet er als volgt uit:

scrape_configs:
- job_name: node
  scrape_interval: 30s
  scrape_timeout: 10s
  sample_limit: 10000
  static_configs:
  - targets: ['host1:9100','host2:9100']
    labels:
 env: prod
 role: web
  relabel_configs:
  - source_labels: [__address__]
    target_label: instance
    regex: '([^:]+)(?::\d+)?'
    replacement: '$1'
  metric_relabel_configs:
  - source_labels: [device]
    regex: '^(ram|loop|zram|dm-).*'
    action: drop

Met metric_relabel_configs Ik verminder de cardinaliteit door apparaten met weinig informatie te verwijderen. Voor alarmen hanteer ik eenvoudige, maar robuuste regels:

groepen:
- naam: node_basic
  regels:
  - waarschuwing: NodeDown
    uitdrukking: up{job="node"} == 0
    voor: 5m
    labels: {ernst: kritiek}
  - alert: HighCPU
    expr: 1 - avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) > 0,9
    for: 10m
    labels: {severity: warning}

Voor het monitoren van de belasting gebruik ik scrape_duration_seconds en scrape_samples_scraped per doel. Zo kan ik zien of een extra geactiveerde collector de ophaaltijd of het serienummer onevenredig verhoogt.

Werking in containers en Kubernetes

Ik installeer de Node Exporter in containers dicht bij de host, zodat /proc en /sys zichtbaar blijven vanuit de host. Hiervoor koppel ik deze paden als-alleen-lezen aan de container en gebruik ik hostNetwork voor consistente poorten. In Kubernetes draai ik de exporter als een DaemonSet per node en houd ik de beveiligingscontexten restrictief (geen onnodige rechten). Bij de keuze van de collector houd ik rekening met cgroup-v2-omgevingen; belangrijke collectoren zoals meminfo, druk, bestandssysteem en cpu blijven de basis. Ik controleer na implementaties met een directe krul tegen de pod, of de verwachte hostmetriek-paden daadwerkelijk worden gelezen.

Probleemoplossing en kwaliteitsborging

  • Connectiviteit: Ik controleer curl -s http://localhost:9100/metrics | head op de doelhost en, vanuit het perspectief van Prometheus, de bereikbaarheid via de open poort.
  • Verzamelaartest: Over collect[] heb ik afzonderlijke Collectors getest, zonder de algemene configuratie te wijzigen.
  • Logs: Ik verhoog tijdelijk het logniveau (--log.level=debug), om parseerfouten of problemen met rechten aan /proc//sys zichtbaar.
  • Versiebeheer: Met node_exporter_build_info vergelijk ik versies en plan ik upgrades doelgericht.
  • Series in beeld: de statistieken scrape_samples_scraped{job="node"} Ik gebruik dit als een schatting van het aantal series per host. Een sprong omhoog duidt op nieuwe collectors of een explosieve toename van het aantal labels.
  • Time-outs: Ik wacht even scrape_timeout onder scrape_interval en kijk toe scrape_timeout_seconds, om knelpunten tijdig op te sporen.

Capaciteit en opslag: planning in plaats van verrassingen

Ik stel de gegevensbewaring in Prometheus in op basis van het gebruiksscenario: korte intervallen voor kernsystemen, langere bewaring voor trends. Als het aantal systemen toeneemt, schaal ik horizontaal door middel van sharding (bijvoorbeeld op locatie of team) en ontkoppel ik de query- en ingest-belasting. Indien nodig schrijf ik metrics bovendien via remote-write naar een langetermijncomponent. Ik houd de cardinaliteit actief in de gaten en ruim ongebruikte metrics of labels consequent op – vooral bij tekstbestandsmetrics, die snel kunnen toenemen.

Praktische tips voor heterogene wagenparken

  • Hosts die alleen IPv6 ondersteunen: ik doe mee [::]:9100 en zorg voor passende firewallregels.
  • Speciale hardware: ik schakel hardwarespecifieke collectoren alleen in wanneer dat zinvol is, en documenteer de verschillen in rolprofielen.
  • Geleidelijke updates: ik voer updates in batches uit en houd daarbij de situatie in de gaten omhoog, scrape_duration_seconds en scrape_samples_scraped, om regressies onmiddellijk te herkennen.
  • Documentatie: Ik noteer de daadwerkelijke startparameters per rol. Dat voorkomt discussies en maakt foutanalyses eenvoudiger.

Kort samengevat: mijn praktijkrooster

Ik installeer de Knooppunt Ik implementeer de exporter als een eigen systemd-service, stel de poort en het luisteradres in en beveilig de toegang streng. Ik kies bewust voor de collector, vul de benodigde waarden in via de tekstbestand-collector en houd het aantal metrieken beperkt. In Prometheus stel ik zinvolle intervallen in, onderhoud ik labels, definieer ik opnameregels en alarmen voor CPU, RAM, schijven en netwerk. Ik houd zelf toezicht op de exporter, plan updates in en controleer regelmatig het aantal series per host. Dankzij een duidelijke visualisatie kan ik sneller reageren, trends vroegtijdig herkennen en mijn Linux-servermonitoring in de dagelijkse praktijk robuust houden.

Huidige artikelen

Server in het datacenter met een geoptimaliseerde MariaDB-bufferpool
Databases

MariaDB-bufferpoolgrootte: praktische gids en vuistregels voor de InnoDB-bufferpool

Een praktijkgerichte handleiding voor het bepalen van de omvang van de MariaDB-bufferpool, met duidelijke vuistregels en voorbeeldwaarden. Ontdek hoe u de InnoDB-bufferpool optimaal kunt dimensioneren om de prestaties van uw MariaDB-database aanzienlijk te verbeteren. De nadruk ligt op het bepalen van de omvang van de bufferpool voor stabiele workloads.