Skip to content

Grafana

Grafana ist ein Dienst, welcher zur Datenvisualisierung und Überwachung verwendet wird.

version: '3.9'

services:
  grafana:
    image: grafana/grafana
    restart: always
    #volumes:
    #  - "/srv/grafana/lib:/var/lib/grafana"
    #  - "/srv/grafana/etc:/etc/grafana"
    ports:
      - "[::1]:8000:3000"

Da der Container die, in den Volumes liegenden Daten, nicht kopiert müssen wir das zuvor manuell erledigen:

sudo mkdir -p /srv/grafana

sudo docker-compose up -d grafana

sudo docker cp grafana-grafana-1:/var/lib/grafana \
  /srv/grafana/lib

sudo docker cp grafana-grafana-1:/etc/grafana \
  /srv/grafana/etc

sudo chown -R 472:472 /srv/grafana/

Entfernen Sie anschließend die Kommentarzeichen vor den Volumes in der Containerdefinition (docker-compose.yml).

    ports:
      - "[::1]:8000:3000"
# /etc/nginx/sites-available/grafana.domain.de
# https://ssl-config.mozilla.org/#server=nginx&version=1.17.7&config=modern&openssl=1.1.1d&guideline=5.6
server {
    server_name grafana.domain.de;
    listen 0.0.0.0:443 ssl http2;
    listen [::]:443 ssl http2;

    ssl_certificate /root/.acme.sh/grafana.domain.de_ecc/fullchain.cer;
    ssl_certificate_key /root/.acme.sh/grafana.domain.de_ecc/grafana.domain.de.key;
    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;  # about 40000 sessions
    ssl_session_tickets off;

    # modern configuration
    ssl_protocols TLSv1.3;
    ssl_prefer_server_ciphers off;

    # HSTS (ngx_http_headers_module is required) (63072000 seconds)
    add_header Strict-Transport-Security "max-age=63072000" always;

    # OCSP stapling
    ssl_stapling on;
    ssl_stapling_verify on;

    location / {
        proxy_pass http://[::1]:8000/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header X-Real-IP $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}
    labels:
      - "traefik.enable=true"
      - "traefik.http.services.srv_grafana.loadbalancer.server.port=3000"
      - "traefik.http.routers.r_grafana.rule=Host(`grafana.domain.de`)"
      - "traefik.http.routers.r_grafana.entrypoints=websecure"

Anschließend können wir den Container starten und uns unter der angegebene Domain mit den Zugangsdaten admin:admin anmelden.

Die nächsten Schritte sind die Einrichtung von Data Sources (z. B. InfluxDB, Prometheus, Loki) und das Hinzufügen/Erstellen von Dashboards (z. B. Node Exporter Full) (siehe: officially supported datasources).

Über die Umgebungsvariable GF_INSTALL_PLUGINS kann eine Liste von Plugins angegeben werden, welche für die Grafana Instanz aktiviert werden.

LDAP Auth

Du kannst den ldap auth in /srv/main/grafana/etc/grafana.ini und /srv/main/grafana/etc/ldap.toml konfigurieren:

#################################### Auth LDAP ##########################
[auth.ldap]
enabled = true
;config_file = /etc/grafana/ldap.toml
;allow_sign_up = true

[log]
filters = "ldap:debug"

[[servers]]
host = "ldap"
port = 389
use_ssl = false
start_tls = false
ssl_skip_verify = false

bind_dn = "cn=admin,dc=domain,dc=de"
bind_password = 'S3cr3T'

search_filter = "(&(objectclass=person)(&(memberof=cn=grafana,ou=groups,dc=domain,dc=de))(uid=%s))"
search_base_dns = ["dc=domain,dc=de"]

[servers.attributes]
name = "givenName"
surname = "sn"
username = "cn"
member_of = "memberOf"
email =  "email"

[[servers.group_mappings]]
group_dn = "cn=admin,cn=grafana,ou=groups,dc=domain,dc=de"
org_role = "Admin"

[[servers.group_mappings]]
group_dn = "cn=editor,cn=grafana,ou=groups,dc=domain,dc=de"
org_role = "Editor"

[[servers.group_mappings]]
group_dn = "*"
org_role = "Viewer"

Alle Mitglieder von cn=grafana,ou=groups,dc=domain,dc=de bekommen die Leser Rolle, Mitglieder welche auch in der cn=editor,cn=grafana,ou=groups,dc=domain,dc=de bekommen die Bearbeitungs Rolle...

OpenID / KeyCloak

Siehe: janikvonrotz.ch/2020/08/27/grafana-oauth-with-keycloak-and-how-to-validate-a-jwt-token