Files
devops-infra-helm-charts-gcp/helm-overrides/k8s-dataengg-prd-ase1/fluentd/custom-values.yaml
T
2026-08-26 03:39:42 +05:30

731 lines
20 KiB
YAML

nameOverride: ""
fullnameOverride: ""
# DaemonSet, Deployment or StatefulSet
kind: "DaemonSet"
# azureblob, cloudwatch, elasticsearch7, elasticsearch8, gcs, graylog , kafka, kafka2, kinesis, opensearch
variant: gcs
# # Only applicable for Deployment or StatefulSet
# replicaCount: 1
image:
repository: "asia-southeast1-docker.pkg.dev/meesho-devops-admin-0622/admin/sre/fluentd-v2"
pullPolicy: "Always"
tag: "edge-debian"
## Optional array of imagePullSecrets containing private registry credentials
## Ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
imagePullSecrets: []
serviceAccount:
create: true
annotations: {
iam.gke.io/gcp-service-account: sa-deng-desre-fluentd-prd@meesho-dataengg-prd-0622.iam.gserviceaccount.com
}
name: null
rbac:
create: true
# from Kubernetes 1.25, PSP is deprecated
# See: https://kubernetes.io/blog/2022/08/23/kubernetes-v1-25-release/#pod-security-changes
# We automatically disable PSP if Kubernetes version is 1.25 or higher
podSecurityPolicy:
enabled: true
annotations: {}
## Security Context policies for controller pods
## See https://kubernetes.io/docs/tasks/administer-cluster/sysctl-cluster/ for
## notes on enabling and using sysctls
##
podSecurityContext: {}
# seLinuxOptions:
# type: "spc_t"
securityContext: {}
# capabilities:
# drop:
# - ALL
# readOnlyRootFilesystem: true
# runAsNonRoot: true
# runAsUser: 1000
# Configure the livecycle
# Ref: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/
lifecycle: {}
# preStop:
# exec:
# command: ["/bin/sh", "-c", "sleep 20"]
# Configure the livenessProbe
# Ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
#livenessProbe:
# httpGet:
# path: /metrics
# port: metrics
# initialDelaySeconds: 0
# periodSeconds: 10
# timeoutSeconds: 1
# successThreshold: 1
# failureThreshold: 3
# Configure the readinessProbe
# Ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
#readinessProbe:
# httpGet:
# path: /metrics
# port: metrics
# initialDelaySeconds: 0
# periodSeconds: 10
# timeoutSeconds: 1
# successThreshold: 1
# failureThreshold: 3
resources:
requests:
cpu: 100m
memory: 50Mi
limits:
memory: 2000Mi
cpu: 2000m
## only available if kind is Deployment
autoscaling:
enabled: false
minReplicas: 1
maxReplicas: 100
targetCPUUtilizationPercentage: 80
# targetMemoryUtilizationPercentage: 80
## see https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-multiple-metrics-and-custom-metrics
customRules: []
# - type: Pods
# pods:
# metric:
# name: packets-per-second
# target:
# type: AverageValue
# averageValue: 1k
## see https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/#support-for-configurable-scaling-behavior
# behavior:
# scaleDown:
# policies:
# - type: Pods
# value: 4
# periodSeconds: 60
# - type: Percent
# value: 10
# periodSeconds: 60
priorityClassName: "system-node-critical"
nodeSelector: {}
## Node tolerations for server scheduling to nodes with taints
## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
##
tolerations:
- operator: Exists
## Affinity and anti-affinity
## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
##
affinity: {}
## Annotations to be added to fluentd DaemonSet/Deployment
##
annotations: {}
## Labels to be added to fluentd DaemonSet/Deployment
##
labels:
bu: dataengg
team: sre
type: fluentd
service: fluentd-dataengg-prd
priority: p0
env: prd
## Annotations to be added to fluentd pods
##
podAnnotations: {}
## Labels to be added to fluentd pods
##
podLabels:
bu: dataengg
team: sre
type: fluentd
service: fluentd-dataengg-prd
priority: p0
env: prd
## How long (in seconds) a pods needs to be stable before progressing the deployment
##
minReadySeconds:
## How long (in seconds) a pod may take to exit (useful with lifecycle hooks to ensure lb deregistration is done)
##
terminationGracePeriodSeconds:
## Deployment strategy / DaemonSet updateStrategy
##
updateStrategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 25%
maxSurge: 0
## Additional environment variables to set for fluentd pods
## Additional environment variables to set for fluentd pods
env:
- name: APP_NAME
value: namespace_name
- name: SUB_SYSTEM
value: container_name
# - name: FLUENTD_CONF
# value: "../../etc/fluent/fluent.conf"
- name: APP_NAME_SYSTEMD
value: systemd
- name: SUB_SYSTEM_SYSTEMD
value: kubelet.service
- name: ENDPOINT
value: ingress.coralogixsg.com
- name: LOG_LEVEL
value: error
- name: TZ
value: "Asia/Kolkata"
- name: K8S_NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
externalSecret:
secretStoreRef:
name: vault-backend
path: meesho/prd/cntr/devop/coralogix-keys
# externalSecret:
# enabled: true
# key: dev/devops/coralogix
# secretStoreRef:
# name: vault-backend
envFrom:
- secretRef:
name: integrations-privatekey
- secretRef:
name: es-password
initContainers: []
## Name of the configMap containing a custom fluentd.conf configuration file to use instead of the default.
# mainConfigMapNameOverride: ""
## Name of the configMap containing files to be placed under /etc/fluent/config.d/
## NOTE: This will replace ALL default files in the aforementioned path!
# extraFilesConfigMapNameOverride: ""
mountVarLogDirectory: true
mountDockerContainersDirectory: true
volumes: []
# - name: varlog
# hostPath:
# path: /var/log
# - name: varlibdockercontainers
# hostPath:
# path: /var/lib/docker/containers
# - name: etcfluentd-main
# configMap:
# name: fluentd-main
# defaultMode: 0777
# - name: etcfluentd-config
# configMap:
# name: fluentd-config
# defaultMode: 0777
volumeMounts: []
# - name: varlog
# mountPath: /var/log
# - name: varlibdockercontainers
# mountPath: /var/lib/docker/containers
# readOnly: true
# - name: etcfluentd-main
# mountPath: /etc/fluent
# - name: etcfluentd-config
# mountPath: /etc/fluent/config.d/
## Only available if kind is StatefulSet
## Fluentd persistence
##
persistence:
enabled: false
storageClass: ""
accessMode: ReadWriteOnce
size: 10Gi
## Fluentd service
##
service:
enabled: true
type: "ClusterIP"
annotations: {}
# loadBalancerIP:
# externalTrafficPolicy: Local
ports: []
# - name: "forwarder"
# protocol: TCP
# containerPort: 24224
## Prometheus Monitoring
##
metrics:
serviceMonitor:
enabled: false
additionalLabels:
release: prometheus-operator
namespace: ""
namespaceSelector: {}
## metric relabel configs to apply to samples before ingestion.
##
metricRelabelings: []
# - sourceLabels: [__name__]
# separator: ;
# regex: ^fluentd_output_status_buffer_(oldest|newest)_.+
# replacement: $1
# action: drop
## relabel configs to apply to samples after ingestion.
##
relabelings: []
# - sourceLabels: [__meta_kubernetes_pod_node_name]
# separator: ;
# regex: ^(.*)$
# targetLabel: nodename
# replacement: $1
# action: replace
## Additional serviceMonitor config
##
# jobLabel: fluentd
# scrapeInterval: 30s
# scrapeTimeout: 5s
# honorLabels: true
prometheusRule:
enabled: false
additionalLabels: {}
namespace: ""
rules: []
# - alert: FluentdDown
# expr: up{job="fluentd"} == 0
# for: 5m
# labels:
# context: fluentd
# severity: warning
# annotations:
# summary: "Fluentd Down"
# description: "{{ $labels.pod }} on {{ $labels.nodename }} is down"
# - alert: FluentdScrapeMissing
# expr: absent(up{job="fluentd"} == 1)
# for: 15m
# labels:
# context: fluentd
# severity: warning
# annotations:
# summary: "Fluentd Scrape Missing"
# description: "Fluentd instance has disappeared from Prometheus target discovery"
## Grafana Monitoring Dashboard
##
dashboards:
enabled: "true"
namespace: ""
labels:
grafana_dashboard: '"1"'
## Fluentd list of plugins to install
##
plugins: []
# - fluent-plugin-out-http
## Add fluentd config files from K8s configMaps
##
configMapConfigs:
- fluentd-prometheus-conf
# - fluentd-systemd-conf
## Fluentd configurations:
##
fileConfigs:
01_sources.conf: |-
<source>
@type systemd
path /var/log/journal
tag sys-log
read_from_head true
</source>
<source>
@id fluentd-containers.log
@type tail
encoding utf-8
from_encoding "utf-8"
path /var/log/containers/*.log
pos_file /var/log/containers.log.pos
exclude_path ["/var/log/containers/*telegraf*.log","/var/log/containers/*opentelemetry*.log","/var/log/containers/*fluentbit*.log","/var/log/containers/*gke-metrics*.log","/var/log/containers/*event-exporter-gke*.log","/var/log/containers/*metadata-server*.log","/var/log/containers/*metrics-server*.log","/var/log/containers/*filestore-node*.log"]
path_key filename
tag raw.containers.*
read_from_head true
<parse>
@type multi_format
<pattern>
format json
time_key time
time_format %Y-%m-%dT%H:%M:%S.%NZ
keep_time_key true
</pattern>
<pattern>
format /^(?<time>.+) (?<stream>stdout|stderr) [^ ]* (?<log>.*)$/
time_format %Y-%m-%dT%H:%M:%S.%N%:z
keep_time_key true
</pattern>
<pattern>
format /^(?<log>fsp\s+.+)$/
ignorecase false
multiline false
</pattern>
</parse>
</source>
<match raw.containers.**>
@id raw.containers
@type detect_exceptions
remove_tag_prefix raw
message log
stream stream
multiline_flush_interval 5
max_bytes 500000
max_lines 1000
</match>
<filter containers.**>
@type kubernetes_metadata
</filter>
<filter containers.**>
@type record_transformer
enable_ruby true
<record>
container_id ${record.dig("docker", "container_id")}
</record>
</filter>
<match containers.**>
@type rewrite_tag_filter
<rule>
key $.kubernetes.namespace_name
pattern ^(.+)$
tag $1.${tag}
</rule>
</match>
02_filters.conf: |-
03_dispatch.conf: |-
<match {kube**,**coredns**,**external-secrets**,**keda**,**gke-mcs**,**os-trino-shared-bk1**,**os-prismsdk-backend-bk3**,sys-log,**victoriametrics**}>
@type "relabel"
@label @NOCONCATDISPATCH
</match>
<match {**prd**,**int**}>
@type "relabel"
@label @CONCATDISPATCH
</match>
<label @CONCATDISPATCH>
<filter {**prd**,**int**}>
@type concat
key log
stream_identity_key container_id
multiline_start_regexp /^.+\d{2}\:\d{2}\:\d{2}\.\d{3}/
separator "\n"
flush_interval 30
timeout_label @DISPATCH
</filter>
<match **>
@type "relabel"
@label @DISPATCH
</match>
</label>
<label @DISPATCH>
<match {**prd**,**int-spark-operator**}>
@type copy
<store>
@type "gcs"
bucket "gcs-infr-dvps-meesho-logs-prd"
path "dataengg/${tag[0]}/dt=%d.%m.%Y/hr=%H/${tag[5]}"
time_slice_format %Y%m%d%H
object_key_format "%{path}/%{time_slice}_%{index}.%{file_extension}"
store_as "gzip"
<format>
@type "json"
localtime true
</format>
<buffer tag,time>
timekey 30m
@type "file"
path "/tmp/td-agent/buffer/"
flush_thread_count 8
timekey_wait 10m
chunk_limit_size 50m
flush_at_shutdown true
</buffer>
</store>
<store>
@type "relabel"
@label @PRD
</store>
</match>
<match {**int**}>
@type copy
<store>
@type "relabel"
@label @PREPROD
</store>
</match>
</label>
<label @PRD>
<filter {**prd**}>
@type grep
<regexp>
key log
pattern /ERROR|WARN|error|warn/
</regexp>
</filter>
<filter {**prd**} >
@type parser
key_name log
reserve_time true
reserve_data true
<parse>
@type multi_format
<pattern>
format regexp
expression /(?<timestamp>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}) - \[(?<log_level>[A-Z\s]{1,6})\] - \[(?<logger>[^\]]+):(?<method>[^\]:]+)?:(?<line_number>\d+)?\] - \[(?<pid>\d+)?, (?<thread>[^\]]+)?\] - \((?<x3_trace_id>[^,]*)?,(?<x3_span_id>[^)]*)?\)\|\((?<trace_id>[^,]*)?,(?<span_id>[^)]*)?\) - \[(?<user_id>[^\]]*)?\] - \((?<extras>[^)]*)?\) - (?<log>[^\n]*)\n?(?<throwable>[^|]*)$/
</pattern>
<pattern>
format /^(?<log>.*)$/
</pattern>
</parse>
</filter>
<filter {**prd**}>
@type record_transformer
enable_ruby true
auto_typecast true
renew_record true
<record>
log_level ${record.dig("log_level")}
logger ${record.dig("logger")}
method ${record.dig("method")}
line_number ${record.dig("line_number")}
pid ${record.dig("pid")}
thread ${record.dig("thread")}
x3_trace_id ${record.dig("x3_trace_id")}
x3_span_id ${record.dig("x3_span_id")}
trace_id ${record.dig("trace_id")}
span_id ${record.dig("span_id")}
user_id ${record.dig("user_id")}
extras ${record.dig("extras")}
message ${record.dig("log")}
throwable ${record.dig("throwable")}
application_name ${record.dig("kubernetes", "namespace_name")}
service_name ${record.dig("kubernetes", "container_name")}
host ${record.dig("kubernetes", "host")}
pod_name ${record.dig("kubernetes", "pod_name")}
pod_ip ${record.dig("kubernetes", "pod_ip")}
</record>
</filter>
<filter {**prd**}>
@type prometheus
<metric>
name fluentd_log_count_total
type counter
desc Total number of log entries processed by Fluentd (prd namespace breakdown)
<labels>
application_name $.application_name
log_level $.log_level
pod_name $.pod_name
</labels>
</metric>
</filter>
<match {**prd**}>
@type elasticsearch
host eck-observability-prd-es-hot-warm.eck-observability-prd.svc.clusterset.local
port 9200
scheme http
compression_level best_speed
ssl_verify false
emit_error_for_missing_id true
id_key request_id
user elastic
password "#{ENV['ECK_ES_PASSWORD']}"
index_name gcp-prd
reload_on_failure true
reconnect_on_error true
include_timestamp true
request_timeout 60s
</match>
</label>
<label @NOCONCATDISPATCH>
<filter sys-log >
@type record_transformer
enable_ruby true
auto_typecast true
renew_record true
renew_time_key ${record.dig("SYSLOG_TIMESTAMP")}
<record>
cluster_name "dataengg-prd"
application_name "systemd"
node_name ${record.dig("_HOSTNAME")}
text ${record.to_json}
</record>
</filter>
<filter {kube**,**coredns**,**external-secrets**,**keda**,**gke-mcs**,**os-trino-shared-bk1**,**os-prismsdk-backend-bk3**,**victoriametrics**}>
@type record_transformer
enable_ruby true
auto_typecast true
renew_record true
<record>
application_name ${record.dig("kubernetes", "namespace_name")}
service_name ${record.dig("kubernetes", "container_name")}
host ${record.dig("kubernetes", "host")}
pod_name ${record.dig("kubernetes", "pod_name")}
pod_ip ${record.dig("kubernetes", "pod_ip")}
text ${record.dig("log")}
</record>
</filter>
<match {**gke-mcs**}>
@type elasticsearch
host eck-observability-prd-es-hot-warm.eck-observability-prd.svc.clusterset.local
port 9200
scheme http
compression_level best_speed
ssl_verify false
emit_error_for_missing_id true
id_key request_id
user elastic
index_name gke-mcs
password "#{ENV['ECK_ES_PASSWORD']}"
reload_on_failure true
reconnect_on_error true
include_timestamp true
request_timeout 60s
</match>
<match {**kube-events**,**kube-system**,**external-secrets**,**keda**,sys-log,**victoriametrics**}>
@type elasticsearch
host eck-observability-prd-es-hot-warm.eck-observability-prd.svc.clusterset.local
port 9200
scheme http
compression_level best_speed
ssl_verify false
emit_error_for_missing_id true
id_key request_id
user elastic
index_name gcp-kubeevents
password "#{ENV['ECK_ES_PASSWORD']}"
reload_on_failure true
reconnect_on_error true
include_timestamp true
request_timeout 60s
</match>
<match **>
@type elasticsearch
host eck-observability-prd-es-hot-warm.eck-observability-prd.svc.clusterset.local
port 9200
scheme http
compression_level best_speed
ssl_verify false
emit_error_for_missing_id true
id_key request_id
user elastic
index_name gcp-prd
password "#{ENV['ECK_ES_PASSWORD']}"
reload_on_failure true
reconnect_on_error true
include_timestamp true
request_timeout 60s
</match>
</label>
<label @PREPROD>
<filter {**int**}>
@type grep
<regexp>
key log
pattern /INFO|ERROR|WARN|info|error|warn/
</regexp>
</filter>
<filter {**int**} >
@type parser
key_name log
reserve_time true
reserve_data true
<parse>
@type multi_format
<pattern>
format regexp
expression /(?<timestamp>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}) - \[(?<log_level>[A-Z\s]{1,6})\] - \[(?<logger>[^\]]+):(?<method>[^\]:]+)?:(?<line_number>\d+)?\] - \[(?<pid>\d+)?, (?<thread>[^\]]+)?\] - \((?<x3_trace_id>[^,]*)?,(?<x3_span_id>[^)]*)?\)\|\((?<trace_id>[^,]*)?,(?<span_id>[^)]*)?\) - \[(?<user_id>[^\]]*)?\] - \((?<extras>[^)]*)?\) - (?<log>[^\n]*)\n?(?<throwable>[^|]*)$/
</pattern>
<pattern>
format /^(?<log>.*)$/
</pattern>
</parse>
</filter>
<filter {**int**}>
@type record_transformer
enable_ruby true
auto_typecast true
renew_record true
<record>
log_level ${record.dig("log_level")}
logger ${record.dig("logger")}
method ${record.dig("method")}
line_number ${record.dig("line_number")}
pid ${record.dig("pid")}
thread ${record.dig("thread")}
x3_trace_id ${record.dig("x3_trace_id")}
x3_span_id ${record.dig("x3_span_id")}
trace_id ${record.dig("trace_id")}
span_id ${record.dig("span_id")}
user_id ${record.dig("user_id")}
extras ${record.dig("extras")}
message ${record.dig("log")}
throwable ${record.dig("throwable")}
application_name ${record.dig("kubernetes", "namespace_name")}
service_name ${record.dig("kubernetes", "container_name")}
host ${record.dig("kubernetes", "host")}
pod_name ${record.dig("kubernetes", "pod_name")}
pod_ip ${record.dig("kubernetes", "pod_ip")}
</record>
</filter>
<match {**int**}>
@type elasticsearch
host eck-observability-prd-es-hot-warm.eck-observability-prd.svc.clusterset.local
port 9200
scheme http
compression_level best_speed
ssl_verify false
emit_error_for_missing_id true
id_key request_id
user elastic
index_name gcp-int
password "#{ENV['ECK_ES_PASSWORD']}"
reload_on_failure true
reconnect_on_error true
include_timestamp true
request_timeout 60s
</match>
</label>
04_outputs.conf: |-