FluentBit собирает, парсит и фильтрует сообщения из контейнеров, сохраняя их в хранилище Loki. Конфигурационные файлы fluent-bit.conf и parsers.conf расположены в папке /var/log/flb-storage/.
[INPUT] Name tail Tag tenant.* Path /var/log/containers/*_tenant2_webapp-*.log Docker_Mode On Docker_Mode_Flush 5 Docker_Mode_Parser container_firstline Parser docker DB /var/log/flb-storage/flb_container.db Mem_Buf_Limit 50MB Skip_Long_Lines On Refresh_Interval 10 Rotate_Wait 30 storage.type filesystem Read_from_Head ${READ_FROM_HEAD} [INPUT] Name tail Tag kube.* Path /var/log/containers/*.log Parser docker DB /var/log/flb_graylog.db DB.Sync Normal Docker_Mode On Buffer_Chunk_Size 512KB Buffer_Max_Size 5M Rotate_Wait 30 Mem_Buf_Limit 30MB Skip_Long_Lines On Refresh_Interval 10 [FILTER] Name kubernetes Match kube.* Merge_Log On Merge_Log_Key log Keep_Log Off K8S-Logging.Parser On K8S-Logging.Exclude Off Annotations Off Labels On
[INPUT[] Name tail Tag kube.* Path /var/log/containers/*.log DB /var/log/flb_kubernetes.db Parser docker Docker_Mode On Mem_Buf_Limit 64MB Skip_Long_Lines On Refresh_Interval 10 [INPUT] Name tail Tag application.* Exclude_Path /var/log/containers/cloudwatch-agent*, /var/log/containers/fluent-bit*, /var/log/containers/aws-node*, /var/log/containers/kube-proxy* Path /var/log/containers/*.log Docker_Mode On Docker_Mode_Flush 5 Docker_Mode_Parser container_firstline Parser docker DB /var/fluent-bit/state/flb_container.db Mem_Buf_Limit 50MB Skip_Long_Lines On Refresh_Interval 10 Rotate_Wait 30 storage.type filesystem [INPUT] Name tail Tag user-api.* Path /var/log/containers/user-api*.log Docker_Mode On Docker_Mode_Flush 5 Docker_Mode_Parser container_firstline_user Parser docker DB /var/fluent-bit/state/flb_user_api.db Mem_Buf_Limit 50MB Skip_Long_Lines On Refresh_Interval 10 Rotate_Wait 30 storage.type filesystem Read_from_Head ${READ_FROM_HEAD} [INPUT] Name tail Tag application.* Exclude_Path /var/log/containers/cloudwatch-agent*, /var/log/containers/fluent-bit*, /var/log/containers/aws-node*, /var/log/containers/kube-proxy* Path /var/log/containers/*.log Docker_Mode On Docker_Mode_Flush 5 Docker_Mode_Parser container_firstline Parser docker DB /var/fluent-bit/state/flb_container.db Mem_Buf_Limit 50MB Skip_Long_Lines On Refresh_Interval 10 Rotate_Wait 30 Read_from_Head Off [INPUT] Name tail Tag application.* Path /var/log/containers/fluent-bit* Parser docker DB /var/fluent-bit/state/flb_log.db Mem_Buf_Limit 5MB Skip_Long_Lines On Refresh_Interval 10 Read_from_Head Off [INPUT] Name tail Tag application.* Path /var/log/containers/cloudwatch-agent* Multiline.parser docker,cri # Docker_Mode On # Docker_Mode_Flush 5 # Docker_Mode_Parser cwagent_firstline #Parser docker DB /var/fluent-bit/state/flb_cwagent.db rotate_wait 15 Mem_Buf_Limit 5MB Skip_Long_Lines On Refresh_Interval 10 #Read_from_Head true [INPUT] Name tail Path /var/log/containers/abc-*.log, /var/log/containers/def-*.log, /var/log/containers/ghi-*.log, /var/log/containers/jkl-*.log, /var/log/containers/mno-*.log Exclude_Path /var/log/containers/aggregator-fluent-bit-*_logging_fluent-bit-*.log, /var/log/containers/aws-node*.log, /var/log/containers/collector-fluent-bit-*_logging_fluent-bit-*.log, /var/log/containers/kube-proxy*.log DB /var/fluent-bit/state/flb_container.db multiline.parser docker, cri Tag kube.* threaded on Mem_Buf_Limit 32MB Skip_Long_Lines On Skip_Empty_Lines On Refresh_Interval 10 Rotate_Wait 30 # Buffering & Storage (https://docs.fluentbit.io/manual/administration/buffering-and-storage#input-section-configuration) storage.type filesystem
[INPUT]
Name tail
Path /var/log/containers/*.log
Docker_Mode On
Docker_Mode_Parser python-multiline
[INPUT] Name tail Path /var/log/containers/*.log Parser docker Tag kube.* Refresh_Interval 5 Mem_Buf_Limit 5MB Skip_Long_Lines On DB /tail-db/tail-containers-state.db DB.Sync Normal Ignore_Older 2d Multiline On Multiline_Flush 5 Parser_Firstline first_line
[MULTILINE_PARSER] name multiline-docker-python type regex flush_timeout 3000 # fluent-bit is not looking at the log field to run the regex below key_content log # rules | state name | regex pattern | next state # ------|---------------|------------------------------------------------------- rule "start_state" "/(\d+-\d+-\d+ \d+:\d+:\d+,\d+):(.*)/" "cont" rule "cont" "^((?!\d+-\d+-\d+ \d+:\d+:\d+,\d+).*)" "cont"
[PARSER] Name python-multiline Format regex Regex /(?<time>\d+-\d+-\d+ \d+:\d+:\d+,\d+):(?<message>.*)/ Time_Key time Time_Format %F %H:%M:%S,%L Input:
[PARSER] Name springboot Format regex Regex (?<time>\d{4}-\d{1,2}-\d{1,2} \d{1,2}:\d{1,2}:\d{1,2}.\d{1,3}) (?<level>[^ ]*) (?<number>\d*) --- (?<thread>\[[^ ]*) (?<logger>[^ ]*) *: (?<message>[^ ].*)$ Time_Key time Time_Format %Y-%m-%d %H:%M:%S.%L [PARSER] Name docker Format json Time_Key time Time_Format %Y-%m-%dT%H:%M:%S.%L Time_Keep On # Command | Decoder | Field | Optional Action # =============|==================|================= Decode_Field_As escaped log
[FILTER] Name parser Match kube.* Key_Name log Parser parser_json Parser parser_logs [PARSER] Name parser_logs Format regex Regex ^(?<time_stamp>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}): (?<environment>.*?): (?<hostname>.*?): (?<module>.*?)::(?<line>\d+) (?<log_level>[A-Z]+): (?<message>[a-zA-Z0-9 _.,:()'"!¡]*)$ Time_Key time Time_Format %d/%b/%Y:%H:%M:%S %z [PARSER] Name parser_json Format regex Regex ^(?<time_stamp>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}): (?<environment>.*?): (?<hostname>.*?): (?<module>.*?)::(?<line>\d+) (?<log_level>[A-Z]+): (?<message>[^{]*)(?<message_additional>{.*)$ Time_Key time Time_Format %d/%b/%Y:%H:%M:%S %z Decode_Field_As escaped_utf8 message_additional do_next Decode_Field_As escaped message_additional do_next Decode_Field_As json message_additional [PARSER] Name container_firstline Format regex Regex (?<log>(?<="log":")\S(?!\.).*?)(?<!\\)".*(?<stream>(?<="stream":").*?)".*(?<time>\d{4}-\d{1,2}-\d{1,2}T\d{2}:\d{2}:\d{2}\.\w*).*(?=}) Time_Key time Time_Format %Y-%m-%dT%H:%M:%S.%LZ [PARSER] Name docker Format json Time_Key @timestamp Time_Format %Y-%m-%dT%H:%M:%S.%L Time_Keep Off
[MULTILINE_PARSER] name multiline-regex type regex flush_timeout 1000 # rules | state name | regex pattern | next state # ------|---------------|----------------------------------|----------- rule "start_state" "/(Dec \d+ \d+\:\d+\:\d+)(.*)/" "cont" rule "cont" "/^\s+at.*/" "cont"
[SERVICE] Flush 1 Daemon Off Log_Level info Parsers_File parsers.conf Parsers_File custom_parsers.conf HTTP_Server On HTTP_Listen 0.0.0.0 HTTP_Port 2020 [INPUT] Name tail Path /var/log/containers/*.log Parser docker Tag kube.* Mem_Buf_Limit 4MB Skip_Long_Lines On Skip_Empty_Lines On [FILTER] Name kubernetes Match kube.* Merge_Log On Keep_Log On K8S-Logging.Parser On K8S-Logging.Exclude On [OUTPUT] Name loki Match kube.* Host loki.logging.svc.cluster.local Port 3100 Labels job=fluent, namespace=$kubernetes['namespace_name'], pod=$kubernetes['pod_name'], container=$kubernetes['container_name'] Auto_kubernetes_labels off Line_format json
[SERVICE] Flush 2 Log_Level info Daemon Off Parsers_File parsers.conf Parsers_File custom_parsers.conf HTTP_Server On HTTP_Listen 0.0.0.0 HTTP_Port 2020 [INPUT] Name tail Tag application.* Exclude_Path /var/log/containers/cloudwatch-agent*, /var/log/containers/fluent-bit*, /var/log/containers/aws-node*, /var/log/containers/kube-proxy* Path /var/log/containers/*.log Docker_Mode On Docker_Mode_Flush 5 Docker_Mode_Parser container_firstline Parser docker DB /var/fluent-bit/state/flb_container.db Mem_Buf_Limit 50MB Skip_Long_Lines On Refresh_Interval 10 Rotate_Wait 30 Read_from_Head Off [INPUT] Name tail Tag application.* Path /var/log/containers/fluent-bit* Parser docker DB /var/fluent-bit/state/flb_log.db Mem_Buf_Limit 5MB Skip_Long_Lines On Refresh_Interval 10 Read_from_Head Off [INPUT] Name tail Tag application.* Path /var/log/containers/cloudwatch-agent* #Parser multiline Docker_Mode On Docker_Mode_Flush 5 Docker_Mode_Parser cwagent_firstline Parser docker DB /var/fluent-bit/state/flb_cwagent.db rotate_wait 15 Mem_Buf_Limit 5MB Skip_Long_Lines On Refresh_Interval 10 #Read_from_Head true [FILTER] Name kubernetes Match application.* Kube_URL https://kubernetes.default.svc:443 Kube_CA_File /var/run/secrets/kubernetes.io/serviceaccount/ca.crt Kube_Token_File /var/run/secrets/kubernetes.io/serviceaccount/token Kube_Tag_Prefix application.var.log.containers. Merge_Log On Merge_Log_Key pod_name K8S-Logging.Parser On K8S-Logging.Exclude Off Labels Off Annotations Off [FILTER] Name multiline Match application.* multiline.key_content log multiline.parser go, multiline-regex-test [OUTPUT] Name cloudwatch_logs Match application.* region ${REGION} log_group_name /aws/containerinsights/${CLUSTER_NAME}/application log_stream_prefix ${APP_POD_NAMESPACE}- auto_create_group true extra_user_agent container-insights [INPUT] Name systemd Tag dataplane.systemd.* Systemd_Filter _SYSTEMD_UNIT=docker.service Systemd_Filter _SYSTEMD_UNIT=kubelet.service DB /var/fluent-bit/state/systemd.db Path /var/log/journal Read_From_Tail Off [INPUT] Name tail Tag dataplane.tail.* Path /var/log/containers/aws-node*, /var/log/containers/kube-proxy* Docker_Mode On Docker_Mode_Flush 5 Docker_Mode_Parser container_firstline Parser docker DB /var/fluent-bit/state/flb_dataplane_tail.db Mem_Buf_Limit 50MB Skip_Long_Lines On Refresh_Interval 10 Rotate_Wait 30 Read_from_Head Off [FILTER] Name modify Match dataplane.systemd.* Rename _HOSTNAME hostname Rename _SYSTEMD_UNIT systemd_unit Rename MESSAGE message Remove_regex ^((?!hostname|systemd_unit|message).)*$ [FILTER] Name aws Match dataplane.* imds_version v1 [OUTPUT] Name cloudwatch_logs Match dataplane.* region ${REGION} log_group_name /aws/containerinsights/${CLUSTER_NAME}/dataplane log_stream_prefix ${APP_POD_NAMESPACE}-${APP_POD_NAME}- auto_create_group true extra_user_agent container-insights [INPUT] Name tail Tag host.dmesg Path /var/log/dmesg Parser syslog DB /var/fluent-bit/state/flb_dmesg.db Mem_Buf_Limit 5MB Skip_Long_Lines On Refresh_Interval 10 Read_from_Head Off [INPUT] Name tail Tag host.messages Path /var/log/messages Parser syslog DB /var/fluent-bit/state/flb_messages.db Mem_Buf_Limit 5MB Skip_Long_Lines On Refresh_Interval 10 Read_from_Head Off [INPUT] Name tail Tag host.secure Path /var/log/secure Parser syslog DB /var/fluent-bit/state/flb_secure.db Mem_Buf_Limit 5MB Skip_Long_Lines On Refresh_Interval 10 Read_from_Head Off [FILTER] Name aws Match host.* imds_version v1 [OUTPUT] Name cloudwatch_logs Match host.* region ${REGION} log_group_name /aws/containerinsights/${CLUSTER_NAME}/host log_stream_prefix ${APP_NODE_NAME}. auto_create_group true extra_user_agent container-insights