logstash采集Java日志文本文件配合grok收集到elasticsearch简单示例

本文提供了一个logstash配置示例,用于采集Java日志文本文件,通过grok解析后将数据送入Elasticsearch。内容包括logstash配置、日志文件格式以及在kibana中查看结果的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里是引用

logstash采集Java日志文本文件配合grok收集到elasticsearch简单示例

logstash 配置

input {
  file {
    path => "C:/Users/Administrator/Desktop/info*.log"
    type => "log-info"
    start_position => "beginning"
    # 多行文本换行处理 (日志文件以日期时间格式开头,所以按日期处理换行)
    codec => multiline {
    pattern => "^\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}.\d{3}\s"
    negate => true
    what => "previous"
  }}
}
filter {
  grok {
  # 使用正则将日志拆分成多列,方便查询
  # 原日志文件使用log4j生成,格式为 : %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n
    match => { "message" => "(?<datetime>\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}.\d{3}) %{NOTSPACE:level} (?<className> (?:[a-zA-Z$_][a-zA-Z$_0-9]*\.)*[a-zA-Z$_][a-zA-Z$_0-9]*) %{NUMBER:line} %{NOTSPACE:method} - %{GREEDYDATA:msg}" }
	overwrite => ["message"]
  }
}
output {
	elasticsearch {
    hosts => "localhost:9200"
    index => "log4j-info-%{+YYYY.MM.dd}"
	codec => "json"
  }
}

日志文件示例

2020-08-10 14:47:56.204 INFO  org.springframework.boot.StartupInfoLogger 50 logStarting - Starting xxxxx on pc-111with PID 14520 (started by Administrator in E:\worker\XXXX\XXX\XXXX)
2020-08-10 14:47:56.214 INFO  org.springframework.boot.SpringApplication 679 logStartupProfileInfo - The following profiles are active: dev
2020-08-10 14:47:57.723 INFO  org.springframework.data.repository.config.RepositoryConfigurationDelegate 244 multipleStoresDetected - Multiple Spring Data modules found, entering strict repository configuration mode!
2020-08-10 14:47:57.733 INFO  org.springframework.data.repository.config.RepositoryConfigurationDelegate 126 registerRepositoriesIn - Bootstrapping Spring Data repositories in DEFAULT mode.
2020-08-10 14:47:57.803 INFO  org.springframework.data.repository.config.RepositoryConfigurationDelegate 182 registerRepositoriesIn - Finished Spring Data repository scanning in 50ms. Found 0 repository interfaces.
2020-08-10 14:47:57.813 INFO  org.springframework.data.repository.config.RepositoryConfigurationDelegate 244 multipleStoresDetected - Multiple Spring Data modules found, entering strict repository configuration mode!
2020-08-10 14:47:57.813 INFO  org.springframework.data.repository.config.RepositoryConfigurationDelegate 126 registerRepositoriesIn - Bootstrapping Spring Data repositories in DEFAULT mode.
2020-08-10 14:47:57.853 INFO  org.springframework.data.repository.config.RepositoryConfigurationDelegate 182 registerRepositoriesIn - Finished Spring Data repository scanning in 30ms. Found 0 repository interfaces.
2020-08-10 14:47:58.602 INFO  org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker 330 postProcessAfterInitialization - Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$da77a69e] is not eligible for getting processed by all BeanPo
### Logstash解析Java日志的配置方法 Logstash 是 Elastic Stack 的核心组件之一,主要用于数据的收集、处理和转发。通过配置文件(通常是 `.conf` 文件),可以定义如何从输入源读取数据、如何处理这些数据以及将结果输出到目标系统。对于 Java 应用程序的日志文件,通常使用 Log4j 或 Logback 作为日志框架,生成的日志文件具有特定的格式。以下是一个完整的配置示例,展示如何使用 Logstash 解析 Java 日志文件。 #### 配置文件结构 Logstash 配置文件分为三个主要部分:`input`、`filter` 和 `output`。 1. **Input 部分** 定义日志文件的来源。通常使用 `file` 插件来读取本地文件。 ```plaintext input { file { path => "/path/to/your/java/application.log" start_position => "beginning" sincedb_path => "/dev/null" # 确保每次重启时从头开始读取 } } ``` 2. **Filter 部分** 使用 Grok 插件解析日志内容。Grok 是一种强大的工具,能够将非结构化的日志数据转换为结构化数据。以下是针对 Java 日志格式的 Grok 模式[^4]: ```plaintext filter { grok { match => { "message" => "%{TIMESTAMP_ISO8601:log_timestamp} %{NOTSPACE:contextName} \[%{DATA:thread}\] %{DATA:sessionId} %{LOGLEVEL:log_level} %{NOTSPACE:logger_name} \[%{DATA:file}:%{NUMBER:line}\] - %{DATA:traceId} - %{GREEDYDATA:message_content}" } } date { match => [ "log_timestamp", "yyyy-MM-dd HH:mm:ss.SSS" ] target => "@timestamp" } } ``` 在此配置中: - `%{TIMESTAMP_ISO8601}` 用于匹配时间戳。 - `%{LOGLEVEL}` 匹配日志级别(如 INFO、DEBUG)。 - 其他字段根据实际日志格式进行调整。 3. **Output 部分** 将解析后的日志数据发送到 Elasticsearch 或其他目标系统。 ```plaintext output { elasticsearch { hosts => ["http://localhost:9200"] index => "java-logs-%{+YYYY.MM.dd}" } stdout { codec => rubydebug } } ``` #### 启动 Logstash 在启动 Logstash 之前,建议先验证配置文件是否正确。可以通过以下命令检查配置文件的语法: ```bash ./logstash -f /path/to/your/config.conf --config.test_and_exit ``` 如果没有错误信息,则可以正常启动 Logstash: ```bash ./logstash -f /path/to/your/config.conf ``` #### 注意事项 - 如果使用的是 Log4j 或 Logback,请确保日志格式与配置文件中的 Grok 模式一致。 - 如果日志文件路径或格式发生变化,需要相应调整配置文件。 - Logstash 的性能可能受到日志文件大小和复杂性的影响,因此建议定期监控其运行状态。 --- ### 示例代码 以下是一个完整的 Logstash 配置文件示例: ```plaintext input { file { path => "/path/to/your/java/application.log" start_position => "beginning" sincedb_path => "/dev/null" } } filter { grok { match => { "message" => "%{TIMESTAMP_ISO8601:log_timestamp} %{NOTSPACE:contextName} \[%{DATA:thread}\] %{DATA:sessionId} %{LOGLEVEL:log_level} %{NOTSPACE:logger_name} \[%{DATA:file}:%{NUMBER:line}\] - %{DATA:traceId} - %{GREEDYDATA:message_content}" } } date { match => [ "log_timestamp", "yyyy-MM-dd HH:mm:ss.SSS" ] target => "@timestamp" } } output { elasticsearch { hosts => ["http://localhost:9200"] index => "java-logs-%{+YYYY.MM.dd}" } stdout { codec => rubydebug } } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值