Zum Hauptinhalt springen

Log Forwarding

Mit Log Forwarding können alle Ihre GKE Container Logs an eine bestehende zentralisierte Logging-Lösung gesendet werden.

Details

Wir erstellen eine Fluent Bit Instanz um alle Ihre Pod Logs an eine vordefinierte Adresse zu senden. Auf dieser Adresse erstellen Sie einen Empfänger, welcher das Fluentd Forward Protocol unterstützt. Im Normalfall ist diese eine Fluent Bit Instanz für einfache use-cases oder Fluentd für mehr Flexibilität. Normalerweise sollte dieser Empfänger im GKE Cluster laufen. Sofern der Empfänger ausserhalb des Clusters laufen soll, bitte kontaktieren Sie uns um die Optionen zu evaluieren.

Verfügbarkeit

Log Forwarding ist ein zusätzlicher Dienst von nine Managed GKE.

Nutzung

Lassen Sie uns wissen, auf welche Adresse wir die Logs senden sollen. Nachdem wir die Installation abgeschlossen haben, werden die Details auf runway angezeigt.

Beispiel-Empfänger mit Fluentd

Hier ein einfaches Beispiel eines möglichen Empfängers mit Fluentd. Die Logs werden von Fluentd empfangen und an stdout ausgegeben. Diese Konfiguration ist nur für debugging geeignet, um aufzuzeigen, dass die Logs korrekt empfangen werden. In einem echten Szenario sollten die Logs z.B. an eine Elasticsearch Instanz gesendet werden.

Dieses Beispiel erstellt eine ConfigMap, einen Service und ein Deployment im Namespace logging. Alle Logs, die wir senden beginnen mit dem Tag kube., somit muss ein match kube.** erstellt werden, damit alle Logs ausgewählt werden. Mit dieser Konfiguration lautet die resultierende Empfänger-Adresse fluentd.logging.svc:24224. Diese Adresse müssten Sie uns nun mitteilen, damit wir die Logs darauf senden können.

apiVersion: v1
kind: ConfigMap
metadata:
name: fluentd-config
namespace: logging
data:
fluent.conf: |-
<source>
@type forward
port 24224
bind 0.0.0.0
</source>

<match kube.**>
# here you would usually configure something like elasticsearch
@type stdout
</match>
---
apiVersion: v1
kind: Service
metadata:
name: fluentd
namespace: logging
spec:
selector:
app: fluentd
ports:
- protocol: TCP
port: 24224
targetPort: 24224
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: fluentd
namespace: logging
spec:
replicas: 1
selector:
matchLabels:
app: fluentd
template:
metadata:
labels:
app: fluentd
annotations:
# we exclude this pod so we don't create a logging loop
fluentbit.io/exclude: "true"
spec:
volumes:
- name: fluentd-config
configMap:
name: fluentd-config
containers:
- name: fluentd
image: fluent/fluentd:v1.9
ports:
- containerPort: 24224
volumeMounts:
- name: fluentd-config
mountPath: /fluentd/etc
$ kubectl create ns logging
$ kubectl create -f fluentd.yaml
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
fluentd-5465bb48d7-x5lbt 1/1 Running 0 1m
## check if logs are being received. It might take a minute for the first logs to arrive.
$ kubectl logs fluentd-5465bb48d7-x5lbt -n logging