- 发布于
使用EFK收集集群日志,支持多行日志合并
3772-–
- 作者
- 姓名
- zhli
- Elasticsearch
- 一个开源分布式搜索和数据分析引擎,底层是Apache Lucene
- 一个分布式的实时文档存储,每个字段都可以被索引和搜索
- 支持PB级别的结构化或非结构化数据
- Fluent-bit
- 一个针对日志的收集、处理、转发系统
- 通过丰富的插件,可以收集处理来自于各种系统的日志
- 相比Fluentd,资源占用小了很多
- Kibana
- 分析、可视化平台,用于和Elasticsearch一起工作
这里重点介绍下Fluent-bit的多行合并配置:
- 首先增加一个Filter,用于处理多行日志
[FILTER]
name multiline
match *
multiline.key_content log
multiline.parser go, multiline-regex-test
- parsers.conf增加一个PARSER节点
[MULTILINE_PARSER]
name multiline-regex-test
type regex
flush_timeout 1000
#
# Regex rules for multiline parsing
# ---------------------------------
#
# configuration hints:
#
# - first state always has the name: start_state
# - every field in the rule must be inside double quotes
#
# rules | state name | regex pattern | next state
# ------|---------------|--------------------------------------------
rule "start_state" "/\[\d{2}:\d{2}:\d{2} ERR\](.*)/" "cont"
rule "cont" "/^\s+at.*/" "cont"
rule "cont" "^\s*$" "cont"
rule "cont" "/exception/i" "cont"
rule用于匹配多行文本,需要根据实际日志格式做调整。
ps:如果用的ES8以上,需要注意将Suppress_Type_Name
设置为On
,(https://docs.fluentbit.io/manual/pipeline/outputs/elasticsearch)
output-elasticsearch.conf: |
[OUTPUT]
Name es
Match *
Host ${FLUENT_ELASTICSEARCH_HOST}
Port ${FLUENT_ELASTICSEARCH_PORT}
HTTP_User ${FLUENT_ELASTICSEARCH_USER}
HTTP_Passwd ${FLUENT_ELASTICSEARCH_PASSWORD}
Logstash_Format On
Replace_Dots On
Retry_Limit False
Suppress_Type_Name On