Add OpenTelemetry Collector configuration for log ingestion
- Introduced a new OpenTelemetryCollector resource in the Helm chart. - Configured filelog receiver to ingest logs based on specified patterns. - Added processors for Kubernetes attributes and resource metadata. - Set up Loki exporter for log forwarding with appropriate labels. - Configured logging verbosity and defined log processing pipelines. Signed-off-by: zhenyus <zhenyus@mathmast.com>
This commit is contained in:
parent
842f811767
commit
a0d88d9507
File diff suppressed because it is too large
Load Diff
@ -1,111 +0,0 @@
|
||||
---
|
||||
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: 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"
|
||||
---
|
||||
File diff suppressed because it is too large
Load Diff
@ -25,6 +25,9 @@ spec:
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
annotations:
|
||||
app.kubernetes.io/config-checksum: {{ include (print $.Template.BasePath "/authentication/authentication-config.yaml") . | sha256sum }}
|
||||
{{- if .Values.logIngest.enabled }}
|
||||
sidecar.opentelemetry.io/inject: "true"
|
||||
{{- end }}
|
||||
spec:
|
||||
containers:
|
||||
- name: "authentication"
|
||||
|
||||
@ -1,39 +0,0 @@
|
||||
{{- if .Values.fluentbit.enabled }}
|
||||
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-parser
|
||||
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-output
|
||||
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:
|
||||
outputSelector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/name: {{ .Release.Name }}-log-output
|
||||
parserSelector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/name: {{ .Release.Name }}-log-parser
|
||||
{{- end }}
|
||||
@ -0,0 +1,87 @@
|
||||
{{- if .Values.logIngest.enabled }}
|
||||
apiVersion: opentelemetry.io/v1beta1
|
||||
kind: OpenTelemetryCollector
|
||||
metadata:
|
||||
name: {{ .Release.Name }}-opentelemetry-collector
|
||||
namespace: {{ .Release.Namespace }}
|
||||
spec:
|
||||
mode: sidecar
|
||||
image: ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-contrib:latest
|
||||
config: |
|
||||
receivers:
|
||||
filelog:
|
||||
include:
|
||||
- {{ .Values.logIngest.logPathPattern }}
|
||||
start_at: beginning
|
||||
include_file_path: true
|
||||
include_file_name: true
|
||||
operators:
|
||||
- type: json_parser
|
||||
timestamp:
|
||||
parse_from: record.time.timestamp
|
||||
layout: unix_float
|
||||
- type: move
|
||||
from record.level.name
|
||||
to: severity
|
||||
- type: move
|
||||
from: record.message
|
||||
to: message
|
||||
|
||||
processors:
|
||||
k8sattributes:
|
||||
auth_type: "serviceAccount"
|
||||
passthrough: false
|
||||
extract:
|
||||
- k8s.pod.name
|
||||
- k8s.pod.ip
|
||||
- k8s.pod.uid
|
||||
- k8s.deployment.name
|
||||
- k8s.deployment.uid
|
||||
- k8s.namespace.name
|
||||
- k8s.node.name
|
||||
pod_association:
|
||||
- sources:
|
||||
- from: resource_attribute
|
||||
name: k8s.pod.ip
|
||||
- sources:
|
||||
- from: resource_attribute
|
||||
name: k8s.pod.uid
|
||||
resource:
|
||||
attributes:
|
||||
- key: service.name
|
||||
value: "{{ .Release.Name }}"
|
||||
action: upsert
|
||||
- key: service.namespace
|
||||
value: "{{ .Release.Namespace }}"
|
||||
action: upsert
|
||||
batch:
|
||||
send_batch_size: 1000
|
||||
timeout: 10s
|
||||
|
||||
exporters:
|
||||
loki:
|
||||
endpoint: {{ .Values.logIngest.lokiEndpoint }}
|
||||
labels:
|
||||
resource:
|
||||
service.name: "service.name"
|
||||
service.namespace: "service.namespace"
|
||||
k8s.pod.name: "k8s.pod.name"
|
||||
k8s.namespace.name: "k8s.namespace.name"
|
||||
k8s.node.name: "k8s.node.name"
|
||||
k8s.deployment.name: "k8s.deployment.name"
|
||||
record:
|
||||
severity: "severity"
|
||||
|
||||
logging:
|
||||
verbosity: detailed
|
||||
|
||||
service:
|
||||
telemetry:
|
||||
logs:
|
||||
level: "info"
|
||||
pipelines:
|
||||
logs:
|
||||
receivers: [filelog]
|
||||
processors: [k8sattributes, resource, batch]
|
||||
exporters: [loki, logging]
|
||||
{{- end }}
|
||||
@ -4,20 +4,10 @@ global:
|
||||
nodeSelector: {}
|
||||
dashboard:
|
||||
enabled: false
|
||||
fluentbit:
|
||||
logIngest:
|
||||
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
|
||||
lokiEndpoint: http://loki-gateway.freeleaps-logging-system/loki/api/v1/push
|
||||
logPathPattern: /app/log/authentication/*.log
|
||||
authentication:
|
||||
replicas: 1
|
||||
image:
|
||||
|
||||
@ -7,6 +7,10 @@ dashboard:
|
||||
name: freeleaps-prod-authentication-dashboard
|
||||
title: Authentication Service Dashboard
|
||||
metricsPrefix: freeleaps_authentication
|
||||
logIngest:
|
||||
enabled: false
|
||||
lokiEndpoint: http://loki-gateway.freeleaps-logging-system/loki/api/v1/push
|
||||
logPathPattern: /app/log/authentication/*.log
|
||||
fluentbit:
|
||||
enabled: false
|
||||
resources:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user