logstash java 日志过滤拆分规则

该文章详细描述了使用Logstash从Kafka中读取以JSON编码的日志,然后通过Grok过滤器解析特定格式的Java日志,区分Feign请求和Controller请求。解析后的数据进一步处理并添加自定义字段,最后将结果发送到Elasticsearch进行存储和索引。

logstash java 日志过滤拆分规则

input {
  kafka{
     bootstrap_servers => "127.0.0.1:9092"
     auto_offset_reset => "latest"
     topics_pattern => "index.*"
     consumer_threads => 5
     codec => "json"
  }

}
filter {
        grok {
            match => { "message" => "(?m)^%{TIMESTAMP_ISO8601:createTime}%{SPACE}#%{IP:ip_address}#%{SPACE}#%{DATA:service}#%{SPACE}%{DATA}%{SPACE}\[%{DATA:thread}\]%{SPACE}%{LOGLEVEL:level}%{SPACE}%{DATA:logger}%{SPACE}-%{SPACE}(?<msg>.*)" }
            }
        mutate {
            remove_field => ["message"]
        }

        if [msg] =~ /FeignRequestInterceptor/ {
            grok {
                match => { "msg" => "(?m).*请求方式 : %{WORD:http_method}.*访问地址 : %{URIPATHPARAM:uri_path}.*请求参数 : (?<uri_param>[A-Za-z0-9$.+!*'|(){},~@#%&/=:;_?\-\[\]<>]*).*\{current_id=\[%{NUMBER:uid}\].*traceId=\[%{DATA:traceId}\].*" }
                add_field => { "log_type" => "feign" }
                remove_field => ["msg"]
            }
        }
}
filter {
    if [msg] =~ /ControllerRequestLog/ {
        grok {
            match => { "msg" => "(?m).*URL:\[%{WORD:http_method}-%{DATA:uri_path}\]\$Method.*?\.%{WORD:method}\]\$Args:\[%{DATA:args}\]$" }
            add_field => { "log_type" => "controller" }
            remove_field => ["msg"]
        }
    } 
}


output {
       elasticsearch{  
            hosts => "127.0.0.1:9200" 
            index => "%{service}"  
        }
        stdout {
            codec => rubydebug
        }

### 配置 Logstash 收集多个 Java 微服务日志 为了实现高效的日志收集,在微服务环境中通常会采用集中式的日志管理系统。Logstash 是 ELK (Elasticsearch, Logstash, Kibana) 或 EFK (Elasticsearch, Fluentd, Kibana) 堆栈的一部分,用于统一收集、解析并传输来自不同源的日志数据。 #### 日志格式标准化 确保所有 Java 微服务产生的日志遵循一致的结构化格式非常重要。这可以通过设置合适的日志框架来完成,比如 Log4j2 提供了强大的配置选项支持自定义日志输出模式[^1]。推荐使用 JSON 格式作为日志记录的标准形式之一,因为其良好的可读性和易于被后续工具处理的特点。 #### 安装与配置 Filebeat 或其他轻量级 shipper 考虑到性能因素,建议在每台运行着微服务的应用服务器上部署一个轻量级的日志转发组件如 Filebeat 来负责本地日志文件到 Logstash 的传递工作。Filebeat 可以监视指定路径下的日志文件变化,并将新增加的内容发送给远程的 Logstash 实例进行进一步加工。 #### 编写 Logstash 输入插件配置 针对每个要监听的服务实例创建相应的 input 插件配置项,这里假设已经安装好了 JDK 并设置了 JAVA_HOME 环境变量: ```ruby input { beats { port => "5044" } } ``` 此段落描述了一个基本的 Beats 类型输入插件设定,它会在本机开放 TCP/5044 端口等待接收由 Filebeat 发送过来的数据包。 #### 解析和过滤日志条目 利用 filter 插件可以从原始文本中提取有用的信息片段,转换成更易查询的形式存储于 Elasticsearch 中。对于上述提到的正则表达式样式的非结构化日志行,则可通过 grok 进行匹配分析: ```ruby filter { if [logsource][type] == "java-microservice" { grok { match => { "message" => "%{TIMESTAMP_ISO8601:timestamp}\s+%{LOGLEVEL:level}\s+%{NUMBER:thread}\s±–\s+\[%{DATA:thread_name}\]\s+%{JAVACLASS:java_class}\s+:\s+%{GREEDYDATA:log_message}" } } } } ``` 这段脚本展示了怎样运用 Grok 对特定类型的日志消息执行字段拆分操作,从而使得最终存入 ES 数据库里的文档具备更好的语义含义[^3]。 #### 输出至目标系统 最后一步是指定 logstash 处理后的事件应该送往哪里保存下来以便日后检索查阅。最常见的方式莫过于直接推送到 elasticsearch cluster 当中去了: ```ruby output { elasticsearch { hosts => ["http://localhost:9200"] index => "microservices-%{+YYYY.MM.dd}" } } ``` 以上就是关于如何配置 Logstash 来收集多处来源 java 应用程序所产生的日志信息的大致流程概述[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值