Zum Hauptinhalt springen

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.