Add Fluent Bit configuration for log collection

- Introduced Fluent Bit resources including FluentBit, Parser, Output, FluentBitConfig, and ClusterInput.
- Configured default resource requests and limits for Fluent Bit.
- Set up JSON parser with customizable time key and format.
- Established output forwarding to Fluentd service in the logging system.
- Enabled conditional deployment based on the `fluentbit.enabled` value in Helm chart.

Signed-off-by: zhenyus <zhenyus@mathmast.com>
This commit is contained in:
zhenyus 2025-04-16 00:18:16 +08:00
parent 0de22b2623
commit 358f131809
7 changed files with 44119 additions and 0 deletions

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,126 @@
---
apiVersion: fluentd.fluent.io/v1alpha1
kind: ClusterOutput
metadata:
name: freeleaps-logging-system-loki
labels:
fluentd-default-output: "true"
spec:
outputs:
- loki:
url: http://loki-gateway.freeleaps-logging-system
lineFormat: json
insecure: true
extractKubernetesLabels: true
---
apiVersion: fluentd.fluent.io/v1alpha1
kind: Fluentd
metadata:
name: fluentd
namespace: freeleaps-logging-system
spec:
globalInputs:
- forward:
bind: "0.0.0.0"
port: 24224
fluentdCfgSelector:
matchLabels:
fluentd-default-config: "true"
replicas: 2
workers: 1
image: kubesphere/fluentd:v1.17
resources:
requests:
cpu: 500m
memory: 1Gi
limits:
cpu: 1
memory: 2Gi
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app.kubernetes.io/name
operator: In
values:
- fluentd
topologyKey: "kubernetes.io/hostname"
envVars:
# Node information
- name: K8S_NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: K8S_NODE_IP
valueFrom:
fieldRef:
fieldPath: status.hostIP
# Pod information
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
buffer:
disableBufferVolume: true
---
apiVersion: fluentd.fluent.io/v1alpha1
kind: ClusterInput
metadata:
name: fluentd-receiver
labels:
fluentd-default-input: "true"
spec:
inputs:
- forward:
bind: 0.0.0.0
port: 24224
---
apiVersion: fluentd.fluent.io/v1alpha1
kind: ClusterFilter
metadata:
name: fluentd-metadata-appender
labels:
fluentd-default-filter: "true"
spec:
filters:
- recordTransformer:
enableRuby: true
records:
- key: fluentd_pod_name
value: ${ENV["POD_NAME"] || "unknown"}
- key: fluentd_pod_ip
value: ${ENV["POD_IP"] || "unknown"}
- key: fluentd_pod_namespace
value: ${ENV["POD_NAMESPACE"] || "unknown"}
- key: fluentd_node_name
value: ${ENV["K8S_NODE_NAME"] || "unknown"}
- key: fluentd_node_ip
value: ${ENV["K8S_NODE_IP"] || "unknown"}
---
apiVersion: fluentd.fluent.io/v1alpha1
kind: FluentdConfig
metadata:
name: freeleaps-logging-fluentd-pipeline
namespace: freeleaps-logging-system
labels:
fluentd-default-config: "true"
spec:
clusterFilterSelector:
matchLabels:
fluentd-default-filter: "true"
clusterOutputSelector:
matchLabels:
fluentd-default-output: "true"
clusterInputSelector:
matchLabels:
fluentd-default-input: "true"
---

File diff suppressed because it is too large Load Diff

View File

@ -11,3 +11,4 @@ azure-disk-csi-driver,https://raw.githubusercontent.com/kubernetes-sigs/azuredis
descheduler,https://kubernetes-sigs.github.io/descheduler/,force-update descheduler,https://kubernetes-sigs.github.io/descheduler/,force-update
kubernetes-dashboard,https://kubernetes.github.io/dashboard/,force-update kubernetes-dashboard,https://kubernetes.github.io/dashboard/,force-update
grafana,https://grafana.github.io/helm-charts,force-update grafana,https://grafana.github.io/helm-charts,force-update
fluent,https://fluent.github.io/helm-charts,force-update

View File

@ -0,0 +1,72 @@
{{- if .Values.fluentbit.enabled }}
apiVersion: fluentbit.fluent.io/v1alpha2
kind: FluentBit
metadata:
name: {{ .Release.Name }}-log-collector
namespace: {{ .Release.Namespace | quote }}
spec:
image: {{ .Values.fluentbit.image | quote }}
imagePullPolicy: {{ .Values.fluentbit.imagePullPolicy | quote }}
fluentBitConfigName: {{ .Release.Name }}-log-collector-config
resources:
{{- if .Values.fluentbit.resources }}
{{- toYaml .Values.fluentbit.resources | nindent 4 }}
{{- else }}
requests:
cpu: 50m
memory: 128Mi
limits:
cpu: 200m
memory: 512Mi
{{- end }}
---
apiVersion: fluentbit.fluent.io/v1alpha2
kind: Parser
metadata:
name: {{ .Release.Name }}-log-parser
namespace: {{ .Release.Namespace | quote }}
labels:
app.kubernetes.io/name: {{ .Release.Name }}-log-collector
spec:
json:
timeKey: {{ .Values.fluentbit.timeKey | quote }}
timeFormat: {{ .Values.fluentbit.timeFormat | quote }}
---
apiVersion: fluentbit.fluent.io/v1alpha2
kind: Output
metadata:
name: {{ .Release.Name }}-log-output
namespace: {{ .Release.Namespace | quote }}
labels:
app.kubernetes.io/name: {{ .Release.Name }}-log-collector
spec:
match: "*"
forward:
host: fluentd.freeleaps-logging-system
port: 24224
---
apiVersion: fluentbit.fluent.io/v1alpha2
kind: FluentBitConfig
metadata:
name: {{ .Release.Name }}-log-collector-config
namespace: {{ .Release.Namespace | quote }}
spec:
inputSelector:
matchLabels:
app.kubernetes.io/name: {{ .Release.Name }}-log-collector
outputSelector:
matchLabels:
app.kubernetes.io/name: {{ .Release.Name }}-log-collector
parserSelector:
matchLabels:
app.kubernetes.io/name: {{ .Release.Name }}-log-collector
---
apiVersion: fluentbit.fluent.io/v1alpha2
kind: ClusterInput
metadata:
name: {{ .Release.Name }}-log-collector-input
spec:
tail:
path: {{ .Values.fluentbit.logPath | quote }}
parser: {{ .Release.Name }}-log-parser
{{- end }}

View File

@ -4,6 +4,20 @@ global:
nodeSelector: {} nodeSelector: {}
dashboard: dashboard:
enabled: false enabled: false
fluentbit:
enabled: true
resources:
requests:
cpu: 50m
memory: 128Mi
limits:
cpu: 200m
memory: 512Mi
image: kubesphere/fluent-bit:v4.0-debug
imagePullPolicy: IfNotPresent
timeKey: record.repr
timeFormat: "%Y-%m-%dT%H:%M:%S.%LZ"
logPath: /app/log/authentication/*.log
authentication: authentication:
replicas: 1 replicas: 1
image: image:

View File

@ -7,6 +7,20 @@ dashboard:
name: freeleaps-prod-authentication-dashboard name: freeleaps-prod-authentication-dashboard
title: Authentication Service Dashboard title: Authentication Service Dashboard
metricsPrefix: freeleaps_authentication metricsPrefix: freeleaps_authentication
fluentbit:
enabled: false
resources:
requests:
cpu: 50m
memory: 128Mi
limits:
cpu: 200m
memory: 512Mi
image: kubesphere/fluent-bit:v4.0-debug
imagePullPolicy: IfNotPresent
timeKey: record.repr
timeFormat: "%Y-%m-%dT%H:%M:%S.%LZ"
logPath: /app/log/authentication/*.log
authentication: authentication:
replicas: 1 replicas: 1
image: image: