Closed qfframb closed 2 years ago
Can you provide some more details using the issue template please? What version, config, etc.?
This looks to be an issue with Go code rather than the core Fluent Bit so presumably you're using a custom Loki plugin, maybe the Grafana one? I think this is the key detail here, maybe there is some incompatibility in the various components?
It might be better on the dedicated repo: https://github.com/fluent/fluent-bit-go
version: fluent-bit: 1.8.7 fluent-bit-to-loki: v0.38.0 loki: 2.2.1
config: filter-kubernetes.conf: |-
[FILTER]
Name lua
Match kubernetes.*
script add_tag_to_record.lua
call add_tag_to_record
# Systemd Filters
[FILTER]
Name record_modifier
Match journald.docker
Record hostname ${NODE_NAME}
Record unit docker
[FILTER]
Name record_modifier
Match journald.containerd
Record hostname ${NODE_NAME}
Record unit containerd
[FILTER]
Name record_modifier
Match journald.kubelet
Record hostname ${NODE_NAME}
Record unit kubelet
[FILTER]
Name record_modifier
Match journald.cloud-config-downloader*
Record hostname ${NODE_NAME}
Record unit cloud-config-downloader
[FILTER]
Name record_modifier
Match journald.docker-monitor
Record hostname ${NODE_NAME}
Record unit docker-monitor
[FILTER]
Name record_modifier
Match journald.containerd-monitor
Record hostname ${NODE_NAME}
Record unit containerd-monitor
[FILTER]
Name record_modifier
Match journald.kubelet-monitor
Record hostname ${NODE_NAME}
Record unit kubelet-monitor
# Shoot controlplane filters
[FILTER]
Name parser
Match kubernetes.*kube-state-metrics*kube-state-metrics*
Key_Name log
Parser kubeapiserverParser
Reserve_Data True
[FILTER]
Name parser
Match kubernetes.*addons-kubernetes-dashboard*kubernetes-dashboard*
Key_Name log
Parser kubernetesdashboardParser
Reserve_Data True
# System components filters
[FILTER]
Name parser
Match kubernetes.*kube-proxy*kube-proxy*
Key_Name log
Parser kubeapiserverParser
Reserve_Data True
[FILTER]
Name parser
Match kubernetes.*addons-nginx-ingress-controller*nginx-ingress-controller*
Key_Name log
Parser kubeapiserverParser
Reserve_Data True
[FILTER]
Name parser
Match kubernetes.*vpn-shoot*vpn-shoot*
Key_Name log
Parser vpnshootParser
Reserve_Data True
[FILTER]
Name parser
Match kubernetes.*node-exporter*node-exporter*
Key_Name log
Parser nodeexporterParser
Reserve_Data True
[FILTER]
Name parser
Match kubernetes.*node-problem-detector*node-problem-detector*
Key_Name log
Parser kubeapiserverParser
Reserve_Data True
# Garden filters
[FILTER]
Name parser
Match kubernetes.*alertmanager*alertmanager*
Key_Name log
Parser alertmanagerParser
Reserve_Data True
[FILTER]
Name parser
Match kubernetes.*prometheus*prometheus*
Key_Name log
Parser alertmanagerParser
Reserve_Data True
[FILTER]
Name parser
Match kubernetes.*grafana*grafana*
Key_Name log
Parser grafanaParser
Reserve_Data True
[FILTER]
Name parser
Match kubernetes.*vpa-*
Key_Name log
Parser kubeapiserverParser
Reserve_Data True
[FILTER]
Name parser
Match kubernetes.*hvpa-controller*hvpa-controller*
Key_Name log
Parser kubeapiserverParser
Reserve_Data True
# Extension filters
[FILTER]
Name parser
Match kubernetes.*gardener-extension*
Key_Name log
Parser extensionsParser
Reserve_Data True
[FILTER]
Name modify
Match kubernetes.*gardener-extension*
Rename level severity
Rename msg log
Rename logger source
# Extensions
[FILTER]
Name parser
Match kubernetes.*dependency-watchdog*dependency-watchdog*
Key_Name log
Parser dependencyWatchdogParser
Reserve_Data True
[FILTER]
Name parser
Match kubernetes.*gardener-seed-admission-controller*gardener-seed-admission-controller*
Key_Name log
Parser gsacParser
Reserve_Data True
[FILTER]
Name parser
Match kubernetes.*gardener-resource-manager*gardener-resource-manager*
Key_Name log
Parser gardenerResourceManagerParser
Reserve_Data True
[FILTER]
Name modify
Match kubernetes.*gardener-resource-manager*gardener-resource-manager*
Rename level severity
Rename msg log
Rename logger source
[FILTER]
Name parser
Match kubernetes.*etcd*etcd*
Key_Name log
Parser etcdParser
Reserve_Data True
[FILTER]
Name parser
Match kubernetes.*etcd*backup-restore*
Key_Name log
Parser backupRestoreParser
Reserve_Data True
[FILTER]
Name parser
Match kubernetes.*cluster-autoscaler*cluster-autoscaler*
Key_Name log
Parser clusterAutoscalerParser
Reserve_Data True
[FILTER]
Name parser
Match kubernetes.*kube-apiserver*kube-apiserver*
Key_Name log
Parser kubeAPIServerParser
Reserve_Data True
[FILTER]
Name parser
Match kubernetes.*kube-apiserver*vpn-seed*
Key_Name log
Parser vpnSeedParser
Reserve_Data True
[FILTER]
Name parser
Match kubernetes.*kube-scheduler*kube-scheduler*
Key_Name log
Parser kubeSchedulerParser
Reserve_Data True
[FILTER]
Name parser
Match kubernetes.*kube-controller-manager*kube-controller-manager*
Key_Name log
Parser kubeControllerManagerParser
Reserve_Data True
[FILTER]
Name parser
Match kubernetes.*coredns*coredns*
Key_Name log
Parser coreDNSParser1
Parser coreDNSParser2
Reserve_Data True
[FILTER]
Name parser
Match kubernetes.*metrics-server*metrics-server*
Key_Name log
Parser metricsServerParser
Reserve_Data True
[FILTER]
Name modify
Match kubernetes.*
Condition Key_value_matches tag ^kubernetes\.var\.log\.containers\.(kube-apiserver|vpa-exporter|vpa-recommender|vpa-admission-controller|cluster-autoscaler|kube-scheduler|kube-controller-manager)-.+?_
Add __gardener_multitenant_id__ operator;user
[FILTER]
Name parser
Match kubernetes.*calico-node*calico-node*
Key_Name log
Parser caliconodeParser
Reserve_Data True
[FILTER]
Name parser
Match kubernetes.*cloud-controller-manager*alicloud-cloud-controller-manager*
Key_Name log
Parser kubeapiserverParser
Reserve_Data True
[FILTER]
Name parser
Match kubernetes.*machine-controller-manager*alicloud-machine-controller-manager*
Key_Name log
Parser kubeapiserverParser
Reserve_Data True
[FILTER]
Name parser
Match kubernetes.*machine-controller-manager*machine-controller-manager-provider-alicloud*
Key_Name log
Parser kubeapiserverParser
Reserve_Data True
[FILTER]
Name parser
Match kubernetes.*csi-plugin-controller*alicloud-csi*
Key_Name log
Parser kubeapiserverParser
Reserve_Data True
[FILTER]
Name modify
Match kubernetes.*
Condition Key_value_matches tag ^kubernetes\.var\.log\.containers\.(cloud-controller-manager-.+?_.+?_alicloud-cloud-controller-manager|csi-plugin-controller-.+?_.+?_alicloud-csi)
Add __gardener_multitenant_id__ operator;user
[FILTER]
Name modify
Match kubernetes.*
Condition Key_value_matches tag ^kubernetes\.var\.log\.containers\.machine-controller-manager-.+?_.+?_(alicloud-machine-controller-manager|machine-controller-manager-provider-alicloud)
Add __gardener_multitenant_id__ operator;user
# Scripts
[FILTER]
Name lua
Match kubernetes.*
script modify_severity.lua
call cb_modify
fluent-bit.conf: |-
[SERVICE]
Flush 30
Daemon Off
Log_Level info
Parsers_File parsers.conf
HTTP_Server On
HTTP_Listen 0.0.0.0
HTTP_PORT 2020
@INCLUDE input.conf
@INCLUDE filter-kubernetes.conf
@INCLUDE output.conf
input.conf: |-
[INPUT]
Name tail
Tag kubernetes.*
Path /var/log/containers/*.log
Exclude_Path *_garden_fluent-bit-*.log,*_garden_loki-*.log
Parser docker
DB /var/log/flb_kube.db
DB.sync full
read_from_head true
Skip_Long_Lines On
Mem_Buf_Limit 30MB
Refresh_Interval 10
Ignore_Older 1800s
[INPUT]
Name systemd
Tag journald.docker
Path %%JOURNALD_PATH%%
Read_From_Tail True
Systemd_Filter _SYSTEMD_UNIT=docker.service
[INPUT]
Name systemd
Tag journald.kubelet
Path %%JOURNALD_PATH%%
Read_From_Tail True
Systemd_Filter _SYSTEMD_UNIT=kubelet.service
[INPUT]
Name systemd
Tag journald.containerd
Path %%JOURNALD_PATH%%
Read_From_Tail True
Systemd_Filter _SYSTEMD_UNIT=containerd.service
[INPUT]
Name systemd
Tag journald.cloud-config-downloader
Path %%JOURNALD_PATH%%
Read_From_Tail True
Systemd_Filter _SYSTEMD_UNIT=cloud-config-downloader.service
[INPUT]
Name systemd
Tag journald.docker-monitor
Path %%JOURNALD_PATH%%
Read_From_Tail True
Systemd_Filter _SYSTEMD_UNIT=docker-monitor.service
[INPUT]
Name systemd
Tag journald.containerd-monitor
Path %%JOURNALD_PATH%%
Read_From_Tail True
Systemd_Filter _SYSTEMD_UNIT=containerd-monitor.service
[INPUT]
Name systemd
Tag journald.kubelet-monitor
Path %%JOURNALD_PATH%%
Read_From_Tail True
Systemd_Filter _SYSTEMD_UNIT=kubelet-monitor.service
kubernetes_label_map.json: |- { "kubernetes": {"container_name":"container_name","docker_id":"docker_id","namespace_name":"namespace_name","pod_name":"pod_name"} , "severity": "severity" } modify_severity.lua: |- function cb_modify(tag, timestamp, record) local unified_severity = cb_modify_unify_severity(record)
if not unified_severity then
return 0, 0, 0
end
return 1, timestamp, record
end
function cb_modify_unify_severity(record)
local modified = false
local severity = record["severity"]
if severity == nil or severity == "" then
return modified
end
severity = trim(severity):upper()
if severity == "I" or severity == "INF" or severity == "INFO" then
record["severity"] = "INFO"
modified = true
elseif severity == "W" or severity == "WRN" or severity == "WARN" or severity == "WARNING" then
record["severity"] = "WARN"
modified = true
elseif severity == "E" or severity == "ERR" or severity == "ERROR" or severity == "EROR" then
record["severity"] = "ERR"
modified = true
elseif severity == "D" or severity == "DBG" or severity == "DEBUG" then
record["severity"] = "DBG"
modified = true
elseif severity == "N" or severity == "NOTICE" then
record["severity"] = "NOTICE"
modified = true
elseif severity == "F" or severity == "FATAL" then
record["severity"] = "FATAL"
modified = true
end
return modified
end
function trim(s)
return (s:gsub("^%s*(.-)%s*$", "%1"))
end
output.conf: |-
[Output]
Name gardenerloki
Match kubernetes.*
Url http://loki.garden.svc:3100/loki/api/v1/push
LogLevel info
BatchWait 40s
BatchSize 30720
Labels {origin="seed"}
LineFormat json
SortByTimestamp true
DropSingleKey false
AutoKubernetesLabels false
LabelSelector gardener.cloud/role:shoot
RemoveKeys kubernetes,stream,time,tag,gardenuser
LabelMapPath /fluent-bit/etc/kubernetes_label_map.json
DynamicHostPath {"kubernetes": {"namespace_name": "namespace"}}
DynamicHostPrefix http://loki.
DynamicHostSuffix .svc:3100/loki/api/v1/push
DynamicHostRegex ^shoot-
DynamicTenant user gardenuser user
MaxRetries 3
Timeout 10s
MinBackoff 30s
Buffer true
BufferType dque
QueueDir /fluent-bit/buffers/seed
QueueSegmentSize 300
QueueSync normal
QueueName gardener-kubernetes-operator
FallbackToTagWhenMetadataIsMissing true
TagKey tag
DropLogEntryWithoutK8sMetadata true
SendDeletedClustersLogsToDefaultClient true
CleanExpiredClientsPeriod 1h
ControllerSyncTimeout 120s
NumberOfBatchIDs 5
TenantID operator
[Output]
Name gardenerloki
Match journald.*
Url http://loki.garden.svc:3100/loki/api/v1/push
LogLevel info
BatchWait 60s
BatchSize 30720
Labels {origin="seed-journald"}
LineFormat json
SortByTimestamp true
DropSingleKey false
RemoveKeys kubernetes,stream,hostname,unit
LabelMapPath /fluent-bit/etc/systemd_label_map.json
MaxRetries 3
Timeout 10s
MinBackoff 30s
Buffer true
BufferType dque
QueueDir /fluent-bit/buffers
QueueSegmentSize 300
QueueSync normal
QueueName seed-journald
NumberOfBatchIDs 5
parsers.conf: |-
[PARSER]
Name docker
Format json
Time_Key time
Time_Format %Y-%m-%dT%H:%M:%S.%L%z
Time_Keep On
# Command | Decoder | Field | Optional Action
# =============|==================|=================
Decode_Field_As escaped log
[PARSER]
Name kubeapiserverParser
Format regex
Regex ^(?<severity>\w)(?<time>\d{4} [^\s]*)\s+(?<pid>\d+)\s+(?<source>[^ \]]+)\] (?<log>.*)$
Time_Key time
Time_Format %m%d %H:%M:%S.%L
[PARSER]
Name alertmanagerParser
Format regex
Regex ^level=(?<severity>\w+)\s+ts=(?<time>\d{4}-\d{2}-\d{2}[Tt].*[zZ])\s+caller=(?<source>[^\s]*+)\s+(?<log>.*)
Time_Key time
Time_Format %Y-%m-%dT%H:%M:%S.%L
[PARSER]
Name vpnshootParser
Format regex
Regex ^(?<time>[^0-9]*\d{1,2}\s+[^\s]+\s+\d{4})\s+(?<log>.*)
Time_Key time
Time_Format %a %b%t%d %H:%M:%S %Y
[PARSER]
Name kubernetesdashboardParser
Format regex
Regex ^(?<time>\d{4}\/\d{2}\/\d{2}\s+[^\s]*)\s+(?<log>.*)
Time_Key time
Time_Format %Y/%m/%d %H:%M:%S
[PARSER]
Name nodeexporterParser
Format regex
Regex ^time="(?<time>\d{4}-\d{2}-\d{2}T[^"]*)"\s+level=(?<severity>\w+)\smsg="(?<log>.*)"\s+source="(?<source>.*)"
Time_Key time
Time_Format %Y-%m-%dT%H:%M:%S.%L
[PARSER]
Name grafanaParser
Format regex
Regex ^t=(?<time>\d{4}-\d{2}-\d{2}T[^ ]*)\s+lvl=(?<severity>\w+)\smsg="(?<log>.*)"\s+logger=(?<source>.*)
Time_Key time
Time_Format %Y-%m-%dT%H:%M:%S%z
[PARSER]
Name extensionsParser
Format json
Time_Key ts
Time_Format %Y-%m-%dT%H:%M:%S
[PARSER]
Name dependencyWatchdogParser
Format regex
Regex ^(?<severity>\w)(?<time>\d{4} [^\s]*)\s+(?<pid>\d+)\s+(?<source>[^ \]]+)\] (?<log>.*)$
Time_Key time
Time_Format %m%d %H:%M:%S.%L
[PARSER]
Name gsacParser
Format regex
Regex ^time="(?<time>\d{4}-\d{2}-\d{2}T[^"]*)"\s+level=(?<severity>\w+)\smsg="(?<log>.*)"
Time_Key time
Time_Format %Y-%m-%dT%H:%M:%S%z
[PARSER]
Name gardenerResourceManagerParser
Format json
Time_Key ts
Time_Format %Y-%m-%dT%H:%M:%S.%L
[PARSER]
Name etcdParser
Format regex
Regex ^(?<time>\d{4}-\d{2}-\d{2}\s+[^ ]*)\s+(?<severity>\w+)\s+\|\s+(?<source>[^ :]*):\s+(?<log>.*)
Time_Key time
Time_Format %Y-%m-%d %H:%M:%S.%L
[PARSER]
Name backupRestoreParser
Format regex
Regex ^time="(?<time>\d{4}-\d{2}-\d{2}T[^"]*)"\s+level=(?<severity>\w+)\smsg="(?<log>.*)"
Time_Key time
Time_Format %Y-%m-%dT%H:%M:%S%z
[PARSER]
Name clusterAutoscalerParser
Format regex
Regex ^(?<severity>\w)(?<time>\d{4} [^\s]*)\s+(?<pid>\d+)\s+(?<source>[^ \]]+)\] (?<log>.*)$
Time_Key time
Time_Format %m%d %H:%M:%S.%L
[PARSER]
Name kubeAPIServerParser
Format regex
Regex ^(?<severity>\w)(?<time>\d{4} [^\s]*)\s+(?<pid>\d+)\s+(?<source>[^ \]]+)\] (?<log>.*)$
Time_Key time
Time_Format %m%d %H:%M:%S.%L
[PARSER]
Name vpnSeedParser
Format regex
Regex ^(?<time>[^0-9]*\d{1,2}\s+[^\s]+\s+\d{4})\s+(?<log>.*)
Time_Key time
Time_Format %a %b%t%d %H:%M:%S %Y
[PARSER]
Name kubeSchedulerParser
Format regex
Regex ^(?<severity>\w)(?<time>\d{4} [^\s]*)\s+(?<pid>\d+)\s+(?<source>[^ \]]+)\] (?<log>.*)$
Time_Key time
Time_Format %m%d %H:%M:%S.%L
[PARSER]
Name kubeControllerManagerParser
Format regex
Regex ^(?<severity>\w)(?<time>\d{4} [^\s]*)\s+(?<pid>\d+)\s+(?<source>[^ \]]+)\] (?<log>.*)$
Time_Key time
Time_Format %m%d %H:%M:%S.%L
[PARSER]
Name coreDNSParser1
Format regex
Regex ^(?<time>\d{4}-\d{2}-\d{2}[Tt].*[zZ])\s+\[(?<severity>\w*[^\]])\]\s+(?<log>.*)
Time_Key time
Time_Format %Y-%m-%dT%H:%M:%S.%L
[PARSER]
Name coreDNSParser2
Format regex
Regex ^(?<severity>\w)(?<time>\d{4} [^\s]*)\s+(?<pid>\d+)\s+(?<source>[^ \]]+)\] (?<log>.*)$
Time_Key time
Time_Format %m%d %H:%M:%S.%L
[PARSER]
Name metricsServerParser
Format regex
Regex ^(?<severity>\w)(?<time>\d{4} [^\s]*)\s+(?<pid>\d+)\s+(?<source>[^ \]]+)\] (?<log>.*)$
Time_Key time
Time_Format %m%d %H:%M:%S.%L
[PARSER]
Name caliconodeParser
Format regex
Regex ^(?<time>\d{4}-\d{2}-\d{2}\s+[^ ]*)\s+\[(?<severity>\w*)\]\[(?<pid>\d+)\]\s+(?<source>[^:]*):\s+(?<log>.*)
Time_Key time
Time_Format %Y-%m-%d %H:%M:%S.%L
plugin.conf: |- [PLUGINS] Path /fluent-bit/plugins/out_loki.so
https://github.com/fluent/fluent-bit-go/issues/48 Issue also created on fluent-bit-go, please see above link for details.
issue solved by ourself.
What was the issue for anyone else who hits it? @qfframb
What was the issue for anyone else who hits it? @qfframb
It's caused by empty k8s cluster, issue is solved by delete them.
Bug Report
Describe the bug fluent-bit pod CrashLoopBackOff
To Reproduce