Zum Inhalt springen
hanse-computing.de
  • Moin
  • Über uns
  • Leistungen
  • Projekte
  • Neuigkeiten
  • Wissen
    • Netzwerktechniken
    • Systemadministration
    • Hardware-Spezifikationen
    • KI & Automatisierung
    • Glossar
      • Fachbegriffe
      • Programmiersprachen-Befehle
    • Datenbanken
    • IT-Grundlagen
    • Python: Grundlagen
    • Python: Datenstrukturen
    • Python: Dateien & IO
    • Python: Web & Frameworks
    • Python: Fehler & Debugging
    • Webentwicklung
    • Linux & Betriebssysteme
    • IT-Sicherheit
    • Cloud & Container
    • Tools & Software
    • Netzwerk: TCP/IP
    • Netzwerk: DNS & Dienste
    • Netzwerk: Sicherheit
    • Netzwerk: Tools
    • KI: Grundlagen
    • KI: Praxis
    • KI: LLM & Agenten
    • Hardware: Server
    • Hardware: Netzwerkgeräte
    • Hardware: Peripherie
    • Wiki-Startseite
    • Letzte Änderungen
    • Kategorie-Browser
    • Zufallsartikel
  • Infrastruktur
  • AI Easy Start
  • Test-Drive
  • Kontakt
  • Impressum
  • Datenschutz

Sprache auswählen

  • Deutsch (Deutschland)
  • English (United Kingdom)
  1. Aktuelle Seite:  
  2. Startseite
  3. Wissen
  4. Glossar
  5. Programmiersprachen-Befehle

RabbitMQ-Befehle: Queues, Benutzer und Policies verwalten

rabbitmqctl, rabbitmqadmin und rabbitmq-plugins sind die Verwaltungswerkzeuge für RabbitMQ. Sie steuern Knoten, Queues, Exchanges, Bindings und Benutzer – teils direkt auf dem Host, teils über die Verwaltungs-API. Diese Referenz zeigt die wichtigen Aufrufe.

Knoten und Status

rabbitmqctl status                 # Übersicht: Version, Ports, Speicher
rabbitmqctl cluster_status         # Cluster-Mitglieder und Partitionen
rabbitmqctl node_health_check      # Erreichbarkeit der Erlang VM
rabbitmqctl environment | head -40 # effektive Umgebung
rabbitmqctl version

# Dienste
systemctl status rabbitmq-server
rabbitmq-diagnostics ping
rabbitmq-diagnostics listeners

Verwaltungs-Plugin und HTTP-API

rabbitmq-plugins enable rabbitmq_management
rabbitmq-plugins list -m -e         # aktivierte Plugins

# Oberfläche läuft dann auf Port 15672
# API-Beispiel mit curl
curl -u admin:pw http://localhost:15672/api/overview | jq .
curl -u admin:pw http://localhost:15672/api/queues | jq '.[] | {name, messages}'

Benutzer und Rechte

rabbitmqctl add_user app 'geheim'
rabbitmqctl set_user_tags app monitoring
rabbitmqctl set_permissions -p / app "^app-.*" "^app-.*" "^app-.*"
rabbitmqctl list_users
rabbitmqctl list_permissions -p /
rabbitmqctl change_password app 'neu'
rabbitmqctl delete_user gast

Die drei Muster bei set_permissions sind reguläre Ausdrücke für configure, write und read. .* gibt Vollzugriff; ein enges Muster wie ^app-.* beschränkt eine Anwendung auf ihre eigenen Ressourcen – der richtige Weg in Mehrbenutzerumgebungen.

Virtual Hosts

rabbitmqctl add_vhost staging
rabbitmqctl list_vhosts
rabbitmqctl set_permissions -p staging app ".*" ".*" ".*"
rabbitmqctl delete_vhost staging

Queues und Nachrichten

rabbitmqctl list_queues name messages consumers
rabbitmqctl list_queues -p / name messages_ready messages_unacknowledged

# Detailliert inklusive Wartenden
rabbitmqctl list_queues name messages consumers memory

# Queue löschen (auch mit Nachrichten)
rabbitmqctl delete_queue aufgaben

# Purge: Nachrichten entfernen, Queue behalten
rabbitmqctl purge_queue aufgaben

# Nachricht testweise einstellen (Plugin rabbitmq_management nötig)
rabbitmqadmin publish exchange=amq.default routing_key=aufgaben payload='{"id":1}'

Consumer und Kanäle

rabbitmqctl list_consumers
rabbitmqctl list_channels name consumer_count messages_unacknowledged
rabbitmqctl list_connections name user peer_host state
rabbitmqctl close_connection "<name>" "Wartung"

messages_unacknowledged ist der wichtigste Wert bei Problemen: Wächst er, verarbeitet ein Consumer zu langsam oder bestätigt er Nachrichten nicht. Ein häufiger Fehler ist aktiviertes Auto-Ack zusammen mit einer Ausnahme im Verarbeitungscode – die Nachricht ist dann verloren, obwohl die Verarbeitung scheiterte.

Policies, Exchanges und Bindings

# Wartezeiten und Ablauf je Muster setzen
rabbitmqctl set_policy ttl "aufgaben.*" '{"message-ttl":3600000}' --apply-to queues

# Spiegelung über Queues (klassische HA)
rabbitmqctl set_policy ha-all "^ha\." \
  '{"ha-mode":"all","ha-sync-mode":"automatic"}' --priority 1

rabbitmqctl list_policies
rabbitmqctl list_exchanges
rabbitmqctl list_bindings

# Alles als Definition exportieren und wieder einspielen
rabbitmqctl export_definitions /tmp/definitions.json
rabbitmqctl import_definitions /tmp/definitions.json

export_definitions und import_definitions sind das praktischste Werkzeug überhaupt: Sie sichern Benutzer, Rechte, Exchanges, Queues, Bindings und Policies in einer JSON-Datei und stellen sie auf einem anderen Knoten wieder her.

Betrieb und Diagnose

rabbitmqctl list_queues name messages messages_ready messages_unacknowledged \
  | sort -k2 -n -r | head -20          # die größten Queues

rabbitmq-diagnostics memory_breakdown
rabbitmq-diagnostics check_running
rabbitmq-diagnostics check_local_alarms
rabbitmq-queues rebalance all           # Queue-Leader verteilen

# Sicher stoppen
rabbitmqctl stop_app
rabbitmqctl start_app
rabbitmqctl stop

Praxis-Tipps

  • Warteschlangenlänge überwachen: Eine Queue, die dauerhaft wächst, ist die früheste Anzeige eines Problems – früher als jeder Fehler im Log.
  • Keine unbegrenzten Queues: max-length oder max-length-bytes mit einer toten Briefkasten-Queue (dead-letter) verhindert, dass ein Speicherproblem aus einem Ausfall entsteht.
  • Definitionen exportieren: In einem automatisierten Betrieb lässt sich die gesamte Topologie aus einer versionierten JSON-Datei aufbauen – das ist reproduzierbarer als Handarbeit in der Oberfläche.
  • Auto-Ack sparsam: Nur wo Verlust unproblematisch ist. Sonst manuell bestätigen und idempotente Verarbeitung vorsehen, damit ein Wiederholen nichts kaputt macht.

Verwandte Grundlagen: Message Queue, Dead-Letter-Queue, Message Broker, NATS-Befehle.

NATS-Befehle: Subjects, JetStream-Streams und Consumer

nats, nats-server und nats-top sind die Werkzeuge rund um NATS, ein schlankes Nachrichtensystem für Cloud- und Edge-Umgebungen. Kernthemen sind Subjects, Publish/Subscribe, JetStream und Monitoring.

Server starten und prüfen

# Einfacher Start
nats-server

# Mit JetStream und Monitoring
nats-server -js -m 8222 -c /etc/nats/server.conf

# Verbindung und Zustand prüfen
curl -s http://localhost:8222/varz | jq .
curl -s http://localhost:8222/connz | jq '.num_connections'
curl -s http://localhost:8222/jsz | jq '.streams, .consumers'

Subjects und Publish/Subscribe

# Zuhören (Subscribe)
nats sub "bestellungen.>"

# Publish
nats pub bestellungen.neu '{"id":1,"summe":42.90}'

# Mit Antwort erwarten (Request/Reply)
nats request service.rechnen '{"a":1,"b":2}'

# Subject-Hierarchie
#   bestellungen.*      genau eine Ebene
#   bestellungen.>      beliebig viele Ebenen

Das Subject-Modell ist der Kern: Punkte trennen Ebenen, * passt auf genau ein Token, > auf beliebig viele. Ein Abonnement auf bestellungen.*.bezahlt erhält Nachrichten für jede Region, aber nicht für Unterebenen.

JetStream: Persistenz und Zustellung

# Stream anlegen: Subjects, Aufbewahrung, Speicher
nats stream add BESTELLUNGEN \
  --subjects "bestellungen.>" \
  --storage file --retention limits \
  --max-age 7d --max-msgs 1000000 --replicas 3

nats stream ls
nats stream info BESTELLUNGEN
nats stream report

# Nachricht in einen Stream schreiben
nats pub bestellungen.neu '{"id":2}'

# Nachrichten ansehen
nats stream view BESTELLUNGEN --last 5

# Consumer anlegen
nats consumer add BESTELLUNGEN ARBEITER \
  --deliver all --pull --ack explicit --max-deliver 5 --filter "bestellungen.*"

nats consumer ls BESTELLUNGEN
nats consumer info BESTELLUNGEN ARBEITER

Für den Betrieb sind drei Parameter entscheidend: --ack explicit verlangt eine ausdrückliche Bestätigung, --max-deliver begrenzt Zustellversuche und --filter schränkt den Consumer auf einen Teil der Subjects ein. Wird die Anzahl der Zustellversuche überschritten, kann eine Nachricht in einen eigenen Fehler-Stream (dead letter) wandern – das ist die Stelle, an der verlorene Nachrichten sichtbar werden.

Konsumieren und Nachrichten verwalten

# Mit dem CLI-Client konsumieren
nats consumer next BESTELLUNGEN ARBEITER --count 10

# Nachricht wiederherstellen/erneut zustellen
nats stream get BESTELLUNGEN 5
nats consumer rm BESTELLUNGEN ARBEITER

# Stream sichern und wiederherstellen
nats stream backup BESTELLUNGEN /backup/nats --check
nats stream restore /backup/nats

# Nachrichten löschen
nats stream purge BESTELLUNGEN --keep 1000   # nur die letzten 1000 behalten
nats stream purge BESTELLUNGEN --subject bestellungen.test

Accounts, Benutzer und Rechte

nats account add APP
nats account info APP

nats user add arbeiter --account APP
nats user info APP arbeiter

# Rechte über Konfigurationsdatei (Auszug)
# authorization {
#   users = [
#     { user: "arbeiter", password: "geheim"
#       permissions: { publish: "bestellungen.>", subscribe: "aufgaben.>" } }
#   ]
# }

Monitoring

nats-top                      # interaktive Übersicht
nats server ls
nats server info
nats server report connections
nats server ping

# Endpunkte der Monitoring-Schnittstelle
# /varz   Variablen und Statistik
# /connz  aktive Verbindungen
# /subsz  Abonnements
# /jsz    JetStream-Status

Praxis-Tipps

  • Reihenfolge und Verlust klären: Ohne JetStream ist NATS reines Pub/Sub – ist kein Abonnent angemeldet, ist die Nachricht weg. Für dauerhafte Aufgaben, Verarbeitung mit Wiederholung und Zustellgarantien braucht es JetStream.
  • nats server report connections ist die erste Diagnose: Es zeigt, welcher Client wie viele Verbindungen hält und wie viel Datenverkehr erzeugt. Ein Client mit tausenden Verbindungen ist meist ein Fehler in der Ressourcenverwaltung.
  • Streams mit Replikation anlegen: --replicas 3 in einem Cluster, sonst ist ein Knotenausfall ein Datenverlust.
  • Aufbewahrung bewusst wählen: limits (Zeit, Anzahl, Größe), interest (nur solange Interesse besteht) und workqueue (jede Nachricht genau einmal) haben sehr unterschiedliches Verhalten. Die Wahl entscheidet über Datenhaltung und Zustellmuster.

Verwandte Grundlagen: Message Queue, Ereignisgesteuerte Architektur, Message Broker, RabbitMQ-Befehle.

Mosquitto-Befehle: MQTT-Broker betreiben und absichern

mosquitto, mosquitto_pub und mosquitto_sub sind die Werkzeuge des MQTT-Brokers Eclipse Mosquitto. MQTT ist ein leichtes Publish/Subscribe-Protokoll für Geräte mit wenig Bandbreite und Energie – der Standard in IoT und Gebäudeautomation.

Broker starten und prüfen

mosquitto -c /etc/mosquitto/mosquitto.conf -v
systemctl status mosquitto
systemctl enable --now mosquitto

# Läuft der Port?
ss -lntp | grep 1883
ss -lntp | grep 8883        # TLS

Publizieren und abonnieren

# Zuhören
mosquitto_sub -h localhost -t 'haus/+/temperatur' -v
mosquitto_sub -h localhost -t 'haus/#' -v -q 1

# Nachricht senden
mosquitto_pub -h localhost -t 'haus/wohnzimmer/temperatur' -m '21.5'
mosquitto_pub -h localhost -t 'haus/wohnzimmer/temperatur' -m '21.5' -q 1 -r

# Mit Benutzer und Passwort
mosquitto_pub -h broker.example.org -u sensor -P geheim \
  -t 'fabrik/presse/druck' -m '4.2' -q 2

# TLS
mosquitto_sub -h broker.example.org -p 8883 \
  --cafile /etc/ssl/certs/ca.pem -t 'haus/#'

Das Topic-Modell ist hierarchisch: + passt auf genau eine Ebene, # auf alle folgenden. haus/+/temperatur erhält also haus/wohnzimmer/temperatur, aber nicht haus/og/schlafzimmer/temperatur.

Quality of Service und letzte Nachricht

  • QoS 0: höchstens einmal – schnell, Verlust möglich.
  • QoS 1: mindestens einmal – Bestätigung, dafür Duplikate möglich.
  • QoS 2: genau einmal – aufwendiger Handshake, langsamer.
  • Retained Message (-r): Der Broker speichert die letzte Nachricht eines Topics und liefert sie jedem neuen Abonnenten sofort aus. Damit erhält ein neu gestartetes Gerät den aktuellen Zustand, ohne zu warten.
  • Last Will: Beim Verbinden kann ein Gerät festlegen, welche Nachricht der Broker verschickt, wenn die Verbindung unerwartet abbricht – die übliche Art, „Gerät offline“ zu melden.
# Letzte Nachricht löschen
mosquitto_pub -h localhost -t 'haus/wohnzimmer/temperatur' -r -n

# Will-Nachricht setzen
mosquitto_sub -h localhost -t 'haus/keller/temperatur' \
  --will-topic 'status/keller' --will-payload 'offline' --will-qos 1 -v

Benutzer und Zugriffskontrolle

# Passwortdatei anlegen
mosquitto_passwd -c /etc/mosquitto/passwd sensor
mosquitto_passwd /etc/mosquitto/passwd arbeiter

# Konfiguration (Auszug)
# listener 1883
# allow_anonymous false
# password_file /etc/mosquitto/passwd
# acl_file /etc/mosquitto/acl
#
# acl-Datei:
# user sensor
# topic write fabrik/presse/#
# user arbeiter
# topic read fabrik/#

Der wichtigste Sicherheitshinweis: Ohne allow_anonymous false und eine ACL darf jedes Gerät im Netz jedes Topic lesen und schreiben – auch die Steuerbefehle der Heizung. Ein offener MQTT-Broker im Internet ist eine der häufigsten IoT-Schwachstellen überhaupt. Für Produktionsbetrieb gehören TLS mit Zertifikaten, Benutzer je Gerät und eng gefasste ACLs dazu.

Diagnose

# Alle Topics beobachten (Vorsicht: viel Ausgabe)
mosquitto_sub -h localhost -t '#' -v

# Verbindungszustand im Broker-Log
journalctl -u mosquitto -f

# Topics auflisten – MQTT kennt keine Topic-Liste!
# Hilfsmittel: Nachrichten mitschneiden und Topics sammeln
mosquitto_sub -h localhost -t '#' -v | awk '{print $2}' | sort -u

Praxis-Tipps

  • Kein Topic-Verzeichnis: MQTT kennt nur Topics, die gerade benutzt werden. Ein Schema gehört in die Dokumentation, sonst entsteht Wildwuchs, den niemand mehr überblickt.
  • Retained Messages bewusst nutzen: Für Zustandswerte sinnvoll, für Ereignisse („Tür geöffnet“) falsch – ein später Abonnent bekäme sonst eine alte Meldung als aktuell.
  • QoS 2 sparsam: Es kostet vier Pakete pro Nachricht. In den meisten Fällen genügt QoS 1 mit idempotenter Verarbeitung.
  • Testablauf mit -v: Die Option zeigt Topic und Nutzlast – unverzichtbar, um zu prüfen, ob ein Gerät überhaupt sendet.

Verwandte Grundlagen: Message Queue, IoT, Message Broker, TLS 1.3.

OpenTelemetry-Collector: Konfiguration, Pipelines und Betrieb

otelcol (OpenTelemetry Collector) und das Werkzeug otel-cli gehören zum OpenTelemetry-Ökosystem. Der Collector ist das zentrale Element: Er nimmt Telemetriedaten entgegen, verarbeitet sie und leitet sie an ein oder mehrere Backends weiter. Diese Referenz zeigt Konfiguration, Prüfung und Diagnose.

Start und Prüfung

# Mit Konfigurationsdatei starten
otelcol --config /etc/otelcol/config.yaml

# Konfiguration vor dem Start prüfen
otelcol validate --config /etc/otelcol/config.yaml

# Als Dienst
systemctl status otelcol
systemctl enable --now otelcol

# Endpunkte: OTLP gRPC 4317, OTLP HTTP 4318, interne Metriken 8888

Aufbau der Konfiguration

receivers:
  otlp:
    protocols:
      grpc:
        endpoint: 0.0.0.0:4317
      http:
        endpoint: 0.0.0.0:4318
  prometheus:
    config:
      scrape_configs:
        - job_name: node
          static_configs:
            - targets: ["web01:9100"]

processors:
  batch:
    timeout: 5s
    send_batch_size: 1000
  memory_limiter:
    check_interval: 1s
    limit_percentage: 75
    spike_limit_percentage: 20
  resourcedetection:
    detectors: [env, system]

exporters:
  otlphttp/tempo:
    endpoint: http://tempo:4318
  prometheusremotewrite:
    endpoint: http://mimir:9009/api/v1/push
  debug:
    verbosity: basic

service:
  pipelines:
    traces:
      receivers: [otlp]
      processors: [memory_limiter, batch]
      exporters: [otlphttp/tempo]
    metrics:
      receivers: [otlp, prometheus]
      processors: [memory_limiter, batch]
      exporters: [prometheusremotewrite]
  telemetry:
    metrics:
      readers:
        - pull:
            exporter:
              prometheus:
                host: 0.0.0.0
                port: 8888

Drei Bausteintypen sind zu unterscheiden: Receivers nehmen Daten an, Processors verändern sie, Exporters geben sie weiter. Die service-Sektion verbindet sie zu Pipelines pro Signalart (traces, metrics, logs).

Zwei wichtige Prozessoren

  • memory_limiter: gehört an den Anfang jeder Pipeline. Bei Speicherdruck verwirft der Collector Daten, statt selbst abzustürzen – ein abgestürzter Collector verliert alles, ein überlasteter nur einen Anteil.
  • batch: gehört ans Ende. Es bündelt Datensätze und reduziert die Anzahl der Netzwerkaufrufe an das Backend erheblich.

Konfiguration prüfen und testen

# Gültigkeit prüfen
otelcol validate --config config.yaml

# Mit Debug-Ausgabe starten: zeigt Datensätze auf der Konsole
# exporter "debug" in die Pipeline aufnehmen
otelcol --config config.yaml | grep -i "Resource"

# Testdaten erzeugen
otel-cli exec --service demo --name "test-span" --attribute key=value true
otel-cli span --service demo --name "mein-span" --endpoint localhost:4317

# Direkt per curl testen (OTLP/HTTP, Protobuf)
# Praktischer: ein SDK-Beispielprogramm senden lassen

Betrieb und Skalierung

# Collector als DaemonSet auf jedem Knoten (Konfiguration in Kubernetes)
# kubectl get pods -n observability -l app=otelcol

# Collector als Deployment für zentrale Aggregation
# - Agent-Modus: jede Node liefert an den zentralen Collector
# - Gateway-Modus: nur Export nach außen

# Mehrere Collectoren hintereinander: loadbalancing-Exporter
exporters:
  loadbalancing:
    routing_key: traceID          # oder service
    protocol:
      otlp:
        ttl: 30s
        timeout: 5s
    resolver:
      static:
        hostnames:
          - otelcol-0:4317
          - otelcol-1:4317

Der loadbalancing-Exporter ist die Antwort auf horizontale Skalierung: Er verteilt Spans desselben Traces immer an dieselbe Instanz, weil sonst Teile eines Traces in verschiedenen Collectoren landen und dort verworfen würden.

Wichtige Filter und Transformationen

processors:
  # Nicht benötigte Attribute entfernen (spart Volumen und Kosten)
  attributes/scrub:
    actions:
      - key: http.request.header.authorization
        action: delete
      - key: k8s.pod.uid
        action: delete

  # Nur bestimmte Dienste durchlassen
  filter/traces:
    error_mode: ignore
    traces:
      span:
        - 'attributes["service.name"] == "healthcheck"'

  # Attribute umbenennen
  transform:
    trace_statements:
      - context: span
        statements:
          - set(attributes["env"], "prod")

Praxis-Tipps

  • memory_limiter immer zuerst: Ohne ihn kann der Collector bei Lastspitzen den gesamten Knoten in Speichernot bringen.
  • Debug-Exporter nur kurzzeitig: Er schreibt jeden Datensatz auf die Konsole – bei realer Last ist das selbst eine Lastursache.
  • Sampling nicht vergessen: Vollständiges Tracing in großen Umgebungen erzeugt enormes Volumen. Sampling-Entscheidungen gehören in die Anwendung oder in den Collector, nicht ins Backend.
  • Auth für OTLP: Ein offener OTLP-Empfänger im Netz nimmt Daten von jedem an. Für den internen Betrieb genügt TLS plus ein Token-Header; nach außen gehört ein Reverse-Proxy mit Authentifizierung davor.

Verwandte Grundlagen: OpenTelemetry, Observability, promtool-Befehle, Jaeger.

Grafana-Befehle: Dashboards und Datenquellen automatisieren

grafana, grafana-cli und grafana-server sind die Verwaltungswerkzeuge für Grafana. Sie starten den Dienst, installieren Plugins, verwalten Dashboards und prüfen den Zustand. Diese Referenz zeigt die wichtigsten Aufrufe rund um Betrieb und Datasources.

Dienst und Prüfung

systemctl status grafana-server
systemctl restart grafana-server
journalctl -u grafana-server -f

# Standardport 3000
curl -s http://localhost:3000/api/health | jq .
ss -lntp | grep 3000

Plugins

grafana-cli plugins list-remote | head
grafana-cli plugins install grafana-clock-panel
grafana-cli plugins install grafana-piechart-panel
grafana-cli plugins ls

# Nach der Installation Dienst neu starten
systemctl restart grafana-server

# In aktuellen Versionen auch über die Umgebung
GF_INSTALL_PLUGINS="grafana-clock-panel,grafana-piechart-panel"

API-Zugriff und Authentifizierung

export GRAFANA_URL=http://localhost:3000
export GRAFANA_TOKEN=glsa_xxx

# Health und Version
curl -s -H "Authorization: Bearer $GRAFANA_TOKEN" $GRAFANA_URL/api/health | jq .

# Servicekonto anlegen (empfohlener Weg für Automatisierung)
curl -s -X POST -H "Authorization: Bearer $GRAFANA_TOKEN" \
  -H "Content-Type: application/json" \
  $GRAFANA_URL/api/serviceaccounts \
  -d '{"name":"provisioning","role":"Admin"}' | jq .

Dashboards über die API

# Alle Dashboards auflisten
curl -s -H "Authorization: Bearer $GRAFANA_TOKEN" \
  "$GRAFANA_URL/api/search?type=dash-db" | jq '.[] | {uid,title,folderTitle}'

# Ein Dashboard exportieren (JSON)
curl -s -H "Authorization: Bearer $GRAFANA_TOKEN" \
  "$GRAFANA_URL/api/dashboards/uid/abc123" | jq . > dashboard.json

# Ein Dashboard importieren
curl -s -X POST -H "Authorization: Bearer $GRAFANA_TOKEN" \
  -H "Content-Type: application/json" --data-binary @dashboard.json \
  "$GRAFANA_URL/api/dashboards/db" | jq .

# Ordner anlegen
curl -s -X POST -H "Authorization: Bearer $GRAFANA_TOKEN" \
  -H "Content-Type: application/json" \
  "$GRAFANA_URL/api/folders" -d '{"title":"Produktion"}' | jq .

Provisionierung statt Handarbeit

Dashboards und Datenquellen lassen sich als Dateien ablegen; Grafana liest sie beim Start. Das ist der Weg für reproduzierbare Umgebungen.

# /etc/grafana/provisioning/datasources/prometheus.yaml
apiVersion: 1
datasources:
  - name: Prometheus
    type: prometheus
    access: proxy
    url: http://prometheus:9090
    isDefault: true

# /etc/grafana/provisioning/dashboards/default.yaml
apiVersion: 1
providers:
  - name: Standard
    folder: Produktion
    type: file
    options:
      path: /var/lib/grafana/dashboards

Der Vorteil: Ein neu aufgesetzter Grafana-Server bekommt die komplette Konfiguration aus versionierten Dateien – kein Klicken, kein Export-Import, keine Abweichung zwischen Test und Produktion.

Monitoring von Grafana selbst

# Interne Metriken von Grafana
curl -s http://localhost:3000/metrics | grep -E '^grafana_(http|alerting)' | head

# Dashboard-Ladezeiten
# im Log oder über die eigene Metrik
journalctl -u grafana-server | grep -i "slow"

# Datenbankwartung (SQLite ist Standard, PostgreSQL für größere Setups)
grafana-cli admin reset-admin-password

Benutzer und Organisationen

# Benutzer anlegen
curl -s -X POST -H "Authorization: Bearer $GRAFANA_TOKEN" \
  -H "Content-Type: application/json" $GRAFANA_URL/api/admin/users \
  -d '{"name":"Max","email":"Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein.","login":"max","password":"geheim"}' | jq .

# Passwort zurücksetzen (CLI, auch ohne API-Zugang)
grafana-cli admin reset-admin-password --password geheim

# Datenbank sichern (SQLite)
cp /var/lib/grafana/grafana.db /backup/grafana-$(date +%F).db

Praxis-Tipps

  • Provisionierung vor Handarbeit: Über die Oberfläche erstellte Dashboards sind nicht reproduzierbar und gehen bei einem Neuaufbau verloren. Dateien im Repository sind die robuste Lösung.
  • Servicekonten statt Admin-Token: Für Automatisierung ein Konto mit minimal nötigen Rechten anlegen und ein Token mit Ablaufzeit verwenden.
  • Datenbank sichern: In der Standardinstallation liegt alles in grafana.db. Ein Backup dieses Datei plus der Provisionierungsdateien deckt die gesamte Konfiguration ab.
  • Alerting nicht doppelt: Wer Alarme aus Prometheus über den Alertmanager fährt, sollte in Grafana nicht dieselben Bedingungen erneut alarmieren – doppelte Meldungen erzeugen Alarmmüdigkeit.
  • Dashboard-Ordner nutzen: Ab einer Handvoll Dashboards ist eine Ordnerstruktur nach Team oder System die Voraussetzung dafür, dass jemand etwas findet.

Verwandte Grundlagen: Grafana, promtool-Befehle, Alertmanager, Monitoring mit Prometheus und Grafana.

  1. helm-Befehle: Charts installieren, aktualisieren und zurückrollen
  2. kustomize-Befehle: Base, Overlays und Patches anwenden
  3. podman-Befehle: Container, Pods und systemd-Integration
  4. restic-Befehle: Sichern, prüfen, aufbewahren, wiederherstellen

Seite 1 von 46

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
hanse-computing.de

hanse-computing.de – KI-gestützte Dienstleistungen aus Lübeck.

hanse-computing.de
IT-Dienstleistungen aus der Hansestadt
Über uns · Projekte · Neuigkeiten · Affiliate
Impressum · Datenschutz
© 2026 hanse-computing.de
© 2026 hanse-computing Impressum Datenschutz