logstash 和 filebeat多行日志 合并

1 篇文章 0 订阅

多行日志合并问题

先来描述下碰到的问题哈:
从服务日志来看,由于 打印的时候,日志会有换行的情况,那么filebeat会把一行一行的日志写入到kafka中,这样的话,有换行的日志就没办法连在一起,对查找日志来说不方便。
而且,由于logstash中我们设置了过滤规则,因此匹配不到规则的 一行日志就会被忽略到,导致日志显示不全

INFO20221117.112041.606341 TID:d0ca49fe66297bc6 [middlewares/http_logger.go/Mylogger line:41] Start Request proto=HTTP/1.1|method=POST|ip=172.16.2.28|uri=/recommma/v1/triggering|queryString=|header=map[Accept:[*/*] Accept-Encoding:[gzip, deflate, br] Connection:[keep-alive] Content-Length:[110] Content-Type:[application/json] Postman-Token:[43420baad5f4df] User-Agent:[PostmanRuntime/7.29.2]]|body= {^M
    "productId": 521,^M
    "entityTyp": 1,^M
    "engineId": "zzz-33334",^M
    "uids": ["12","13","14"]^M
 }

再描述下 我们这边ELK架构:

filebeat kafka logstash es 从日志收集内容,输出到kafka logstash消费kafka队列消息 logstash将过滤后的数据推送到es中 filebeat kafka logstash es

解决的话,2个方式:

方法1:修改filebeat配置

需要修改filebeat.yml 配置,具体的配置应该是 你配置的每个输入,
举例:

- type: filestream
  id: recommend-manage
  paths:
    - /usr/local/code/recommend-manage/logs/*
  rotation.external.strategy.copytruncate:
    suffix_regex: \.\d{8}$
    dateformat: -20060102
  fields:
    service_name: recommend-manage
  parsers:
    - multiline:
        type: pattern
        pattern: '[\S]*.*([0-9]{8}\.[0-9]{6}\.*[0-9]{0,6})+.*'
        negate: true
        match: after

parsers:
- multiline:
type: pattern 使用正则表达式
pattern: ‘[\S].([0-9]{8}.[0-9]{6}.[0-9]{0,6})+.正则表达式规则(根据需要自己修改)
negate: true 匹配正则表达式
match: after 把下一行不符合匹配规则的内容进行合并

还有些 其他参数,可以参考官方文档

优点: 从日志源头就合并好了数据,这样无论是 filebeat 增加字段,或者 logstash中过滤规则,都不会对此造成影响
缺点: 每个input 日志都需要单独配置(目前我还没有找到可以全局配置的)

参考:

  1. https://www.elastic.co/guide/en/beats/filebeat/8.5/filebeat-input-filestream.html#filebeat-input-filestream-common-options

方法2:修改logstash配置

需要修改logstash配置文件
举例:

filter {
    ......
    multiline {
              pattern => "[\S]*.*([0-9]{8}\.[0-9]{6}\.*[0-9]{0,6})+.* "  ## 匹配一定包含有日期格式的内容
              negate => true                       ## 正则匹配成功
              what => "previous"                   ## 对下一个匹配出现前的内容进行合并
        }
}

优点:: 只需要在logstash配置1处就行,方便
缺点:: 一但filebeat上报日志时,增加了特殊字段,那么这里合并时,也会把内容都写进去,无法过滤掉filebeat中增加的字段内容

参考:

  1. https://www.codenong.com/cs106014866/
  2. https://blog.51cto.com/morrowind/2115129
  3. https://www.elastic.co/guide/en/logstash/7.15/plugins-codecs-multiline.html
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LogstashFilebeat是两个常用的开源工具,用于处理和传输日志数据。它们通常与Elasticsearch和Kibana一起使用,形成ELK堆栈,用于实时日志分析和可视化。 Logstash是一个用于收集、处理和转发日志和事件数据的工具。它可以从各种来源(如文件、网络、消息队列等)收集数据,并对数据进行过滤、换和增强,然后将其发送到目标位置(如ElasticsearchKafka等)。Logstash使用插件来实现各种功能,例如输入插件、过滤器插件和输出插件。通过配置Logstash的管道,可以定义数据的流动和处理方式。 Filebeat是一个轻量级的日志数据传输工具,用于将日志数据从服务器发送到中央存储或分析系统。它可以监视指定的日志文件或位置,将新的日志事件发送到指定的目标位置(如LogstashElasticsearch等)。Filebeat具有低资源消耗和高性能的特点,适用于在大规模分布式环境中收集和传输日志数据。 通过LogstashFilebeat的结合使用,可以实现以下功能: 1. 收集和传输日志数据:Filebeat负责监视和传输日志文件,Logstash负责接收和处理传入的日志数据。 2. 数据过滤和转换:Logstash可以使用各种过滤器插件对日志数据进行过滤、解析和转换,以便更好地理解和分析数据。 3. 数据增强和丰富:Logstash可以对日志数据进行增强,例如添加额外的字段、记事件等,以便更好地进行分析和可视化。 4. 数据存储和索引:Logstash可以将处理后的日志数据发送到Elasticsearch等目标位置,以便进行存储和索引,以供后续的搜索和分析。 下面是一个演示LogstashFilebeat的例子: 1. 配置Filebeat: ```yaml filebeat.inputs: - type: log paths: - /var/log/nginx/access.log output.logstash: hosts: ["localhost:5044"] ``` 2. 配置Logstash: ```conf input { beats { port => 5044 } } filter { grok { match => { "message" => "%{COMBINEDAPACHELOG}" } } } output { elasticsearch { hosts => ["localhost:9200"] index => "nginx-access-%{+YYYY.MM.dd}" } } ``` 3. 启动FilebeatLogstash: ``` # 启动Filebeat filebeat -e -c filebeat.yml # 启动Logstash logstash -f logstash.conf ``` 通过以上配置和命令,Filebeat将监视Nginx访问日志文件,并将新的日志事件发送到LogstashLogstash将使用Grok过滤器对日志数据进行解析和转换,然后将处理后的数据发送到Elasticsearch进行存储和索引。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值