Zurück zur Startseite

Loki

Loki ermöglicht es Ihnen, die Logs Ihrer Container mit Grafana Loki anzusehen und abzufragen.

Details

Loki ist ein von Prometheus inspiriertes System zur Log-Zusammenstellung. Es listet nicht die Inhalte der Logs auf, sondern ein Set an Labels für jeden Log-Stream. Die Logs werden standardmässig 30 Tage gespeichert, aber Sie können diesen Zeitraum beliebig anpassen.

Verfügbarkeit

Loki ist als optionaler Service für NKE verfügbar und kann im Cockpit erstellt
werden.

Nutzung

Auf Loki kann über die Grafana Web UI zugegriffen werden.
Die Nutzungsanleitung zu Grafana finden Sie hier.

Ihren Pods Labels zuweisen

Wenn Ihr Pod Teil eines Deployments, Statefulsets oder eines anderen Controllers ist, wird er von Loki automatisch aufgenommen, unabhängig der zugewiesenen Labels. Wir empfehlen die Nutzung dieser gebräuchlichen Labels, um Ihre Logs leicht zu finden.

Wenn Sie einen einzelnen Pod betreiben, werden Sie eines dieser Labels verwenden müssen, um sicherzustellen, dass Loki Ihre Logs aufnimmt:

  • app
  • name

Abfrage von Logs mit LogQL

Die in Loki verwendete Query-Sprache ist LogQL. Um mit der Abfrage Ihrer Logs zu beginnen, gehen Sie zur Grafana UI und klicken Sie im Seitenmenü auf Explore.

Eine LogQL-Abfrage besteht aus zwei Teilen: dem Log Stream Selector und der Search Expression. Ein Stream wird ausgewählt, in dem ein oder mehr Labels vorgegeben werden, zum Beispiel:

{app="nginx", name=~"frontend.+"}

Um in den Ergebnissen nach einer bestimmten Zeichenfolge zu suchen, können Sie einen Suchausdruck (Search Expression) verwenden. Dabei kann es sich um eine einfache Text-Übereinstimmung mit |= oder einen regex-Ausdruck mit |~ handeln. Wenn Sie statt des Striches ! verwenden, kann der Ausdruck umgekehrt werden. Es folgen einige Beispiele:

{app="nginx"} |= "GET"
{app="nginx"} |~ "200|201|202"
{app="nginx"} != "GET"
{app="nginx"} !~ "200|201|202"

Für mehr Details schauen Sie sich bitte die Loki Dokumentation an.

Pushen eigener Logs

Wenn Sie Pods haben, die Dateien in Logs speichern, statt sie zu STDOUT hinzuzufügen, können Sie jeden Loki Client verwenden, um Logs dorthin zu pushen. Im Folgenden finden Sie ein Beispiel dafür, wie dies aussehen könnte. In dem Beispiel nutzen wir fluent-bit mit dem Loki-Plugin als Zusatz zu einem Nginx-Container, um Logs zu Loki zu senden. Bitte stellen Sie sicher, dass Sie
<LOKI_SERVICE_ADDRESS> mit Ihrer spezifischen Adresse ersetzen. Der Log Path, das Format und die Labels werden als Umgebungsvariablen an fluent-bit weitergereicht. Diese Variablen werden in den Pod Spezifikationen definiert. Mehr Informationen zum Fluent Bit Loki Plugin.

apiVersion: v1
kind: ConfigMap
metadata:
  name: fluent-bit-loki
data:
  fluent-bit.conf: |-
    [INPUT]
        Name tail
        Path ${LOG_PATH}
    [Output]
        Name loki
        Match *
        Url http://<LOKI_SERVICE_ADDRESS>:3100/loki/api/v1/push
        BatchWait 1
        BatchSize 1001024
        Labels {app="${APP_LABEL}",pod="${POD_NAME}",namespace="${POD_NAMESPACE}"}
        LineFormat ${LOG_FORMAT}
        LogLevel info
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      volumes:
      - name: fluent-bit-config
        configMap:
          name: fluent-bit-loki
      - name: logs
        emptyDir: {}
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80
        volumeMounts:
        - name: logs
          mountPath: /var/log/nginx
      - name: fluent-bit-loki
        image: grafana/fluent-bit-plugin-loki:2.5.0-amd64
        volumeMounts:
        - name: fluent-bit-config
          mountPath: /fluent-bit/etc
        - name: logs
          mountPath: /var/log/nginx
        env:
        - name: APP_LABEL
          value: nginx
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: LOG_PATH
          value: /var/log/nginx/*.log
        - name: LOG_FORMAT
          value: key_value

Pushen externer Logs

Wenn Sie Logs von externen Systemen (z. B. von einem externen Kubernetes Cluster) zu Ihrer Loki-Instanz pushen wollen, erstellen Sie bitte ein neues Ticket im Nine Helpdesk. Wir stellen Ihnen dann die benötigten Daten bereit.

Haben Sie die gewünschten Informationen nicht gefunden?

Kontaktieren Sie unseren Support:

+41 44 637 40 40 Support Portal support@nine.ch