【ELK日志采集】ELK log4j error日志采集

本文档介绍了使用ELK Stack(Elasticsearch、Logstash、Kibana)进行日志采集,特别是针对log4j错误日志的处理。通过Kibana的Dev Tools测试自定义规则,并在filebeat中配置日志收集,实现对特定字段的过滤和信息提取,以优化日志展示和资源利用。

文档使用工具:

 

        图形化:kibana_6.7.1 

        数据存储:elasticsearch-6.7.1

        日志采集:filebeat-6.7.1 

 以下模拟日志数据采集使用工具是:

    Kibana   >> Dev Tools >> Console

1、错误日志样例:

[2022-02-28 09:02:54] [ERROR] [DubboServerHandler-192.168.1.12:2880-thread-185] {com.test.query.test001.test001query:175}-getTest 查询数据错误!
java.lang.Exception: 查询数据错误!!
        at com.test.query.dcws60.test001query.query(test001query.java:155) [longcredit-interface-service-plugin-dcws60-1.0.0-SNAPSHOT.jar:?]
        at com.test.query.module.core.plugins.query.AbstractQueryPlugin.execute(AbstractQueryPlugin.java:122) [test-3.0.5-SNAPSHOT.jar:?]
        at com.test.query.module.core.plugins.query.QueryMetaDataCombine.execute(QueryMetaDataCombine.java:42) [test-3.0.5-SNAPSHOT.jar:?]
 

2、GET参数说明:

GET _ingest/pipeline/_simulate? #直接输出测试数据结果

GET _ingest/pipeline/_simulate?verbose #处理过程及最后结果输出

3、自定义规则并模拟数据测试

GET _ingest/pipeline/_simulate?verbose
{
  "pipeline": {
    "processors" : [
      {
        "grok" : {
          "field" : "_source.message",
          "patterns" : [
            "\\[%{MY_DATETIME:times}\\] \\[%{DATA:ERROR}\\] \\[%{DATA:DubboServer}\\] {%{GREEDYDATA:query}}-%{GREEDYDATA:查询错误}[\\s\\S]*?\n(?<错误参数>[\\s\\S]+?)$",
            "\\[%{MY_DATETIME:times}\\] \\[%{DATA:ERROR}\\] \\[%{DATA:DubboServer}\\] {%{GREEDYDATA:query}}-%{GREEDYDATA:查询错误}!%{GREEDYDATA:错误参数}"
          ],
          "pattern_definitions" : {
            "MY_DATE" : "%{YEAR}[/-]%{MONTHNUM}[/-]%{MONTHDAY}",
            "MY_TIME" : "[0-9][0-9]:[0-9][0-9]:[0-9][0-9]",
            "MY_DATETIME" : "%{MY_DATE} %{MY_TIME}"
          }
        }
      },
      {
        "date" : {
          "field" : "times",
          "target_field" : "@timestamp",
          "formats" : [
            "yyyy-MM-dd HH:mm:ss"
          ],
          "timezone" : "Asia/Shanghai"
        }
      }
    ]
  },
  "docs": [
    {
      "_source": {
        "message": """
        [2022-02-28 09:02:54] [ERROR] [DubboServerHandler-192.168.1.12:2880-thread-185] {com.test.query.test001.test001query:175}-getTest 查询数据错误!
java.lang.Exception: 查询数据错误!!
        at com.test.query.dcws60.test001query.query(test001query.java:155) [longcredit-interface-service-plugin-dcws60-1.0.0-SNAPSHOT.jar:?]
        at com.test.query.module.core.plugins.query.AbstractQueryPlugin.execute(AbstractQueryPlugin.java:122) [test-3.0.5-SNAPSHOT.jar:?]
        at com.test.query.module.core.plugins.query.QueryMetaDataCombine.execute(QueryMetaDataCombine.java:42) [test-3.0.5-SNAPSHOT.jar:?]
"""
      },
      "_index": "test_index"
    }
  ]
}

4、展示测试结果:

{
  "docs" : [
    {
      "processor_results" : [
        {
          "doc" : {
            "_index" : "test_index",
            "_type" : "_type",
            "_id" : "_id",
            "_source" : {
              "DubboServer" : "DubboServerHandler-192.168.1.12:2880-thread-185",
              "times" : "2022-02-28 09:02:54",
              "query" : "com.test.query.test001.test001query:175",
              "查询错误" : "getTest 查询数据错误!",
              "ERROR" : "ERROR",
              "错误参数" : "java.lang.Exception: 查询数据错误!!",
              "message" : """
        [2022-02-28 09:02:54] [ERROR] [DubboServerHandler-192.168.1.12:2880-thread-185] {com.test.query.test001.test001query:175}-getTest 查询数据错误!
java.lang.Exception: 查询数据错误!!
        at com.test.query.dcws60.test001query.query(test001query.java:155) [longcredit-interface-service-plugin-dcws60-1.0.0-SNAPSHOT.jar:?]
        at com.test.query.module.core.plugins.query.AbstractQueryPlugin.execute(AbstractQueryPlugin.java:122) [test-3.0.5-SNAPSHOT.jar:?]
        at com.test.query.module.core.plugins.query.QueryMetaDataCombine.execute(QueryMetaDataCombine.java:42) [test-3.0.5-SNAPSHOT.jar:?]
"""
            },
            "_ingest" : {
              "timestamp" : "2022-03-02T03:42:51.215Z"
            }
          }
        },
        {
          "doc" : {
            "_index" : "test_index",
            "_type" : "_type",
            "_id" : "_id",
            "_source" : {
              "DubboServer" : "DubboServerHandler-192.168.1.12:2880-thread-185",
              "times" : "2022-02-28 09:02:54",
              "@timestamp" : "2022-02-28T09:02:54.000+08:00",
              "query" : "com.test.query.test001.test001query:175",
              "查询错误" : "getTest 查询数据错误!",
              "ERROR" : "ERROR",
              "错误参数" : "java.lang.Exception: 查询数据错误!!",
              "message" : """
        [2022-02-28 09:02:54] [ERROR] [DubboServerHandler-192.168.1.12:2880-thread-185] {com.test.query.test001.test001query:175}-getTest 查询数据错误!
java.lang.Exception: 查询数据错误!!
        at com.test.query.dcws60.test001query.query(test001query.java:155) [longcredit-interface-service-plugin-dcws60-1.0.0-SNAPSHOT.jar:?]
        at com.test.query.module.core.plugins.query.AbstractQueryPlugin.execute(AbstractQueryPlugin.java:122) [test-3.0.5-SNAPSHOT.jar:?]
        at com.test.query.module.core.plugins.query.QueryMetaDataCombine.execute(QueryMetaDataCombine.java:42) [test-3.0.5-SNAPSHOT.jar:?]
"""
            },
            "_ingest" : {
              "timestamp" : "2022-03-02T03:42:51.215Z"
            }
          }
        }
      ]
    }
  ]
}

5、定义pipeline规则:

PUT /_ingest/pipeline/module_error_pipeline?pretty
{
    "description" : "module_error_pipeline",
    "processors" : [
      {
        "grok" : {
          "field" : "message",
          "patterns" : [
            "\\[%{MY_DATETIME:times}\\] \\[%{DATA:ERROR}\\] \\[%{DATA:DubboServer}\\] {%{GREEDYDATA:query}}-%{GREEDYDATA:查询错误}[\\s\\S]*?\n(?<错误参数>[\\s\\S]+?)$",
            "\\[%{MY_DATETIME:times}\\] \\[%{DATA:ERROR}\\] \\[%{DATA:DubboServer}\\] {%{GREEDYDATA:query}}-%{GREEDYDATA:查询错误}!%{GREEDYDATA:错误参数}"
          ],
          "pattern_definitions" : {
            "MY_DATE" : "%{YEAR}[/-]%{MONTHNUM}[/-]%{MONTHDAY}",
            "MY_TIME" : "[0-9][0-9]:[0-9][0-9]:[0-9][0-9]",
            "MY_DATETIME" : "%{MY_DATE} %{MY_TIME}",
            "MY_TIME1" : "[0-9][0-9][0-9]",
            "MY_GETTIME" : "%{MY_TIME}-%{MY_TIME1}"
          }
        },
        "date" : {
          "field" : "times",
          "target_field" : "@timestamp",
          "formats" : [
            "yyyy-MM-dd HH:mm:ss"
          ],
          "timezone" : "Asia/Shanghai"
			}
		}
	]
}

6、filebeat收集日志配置文件

cat /usr/local/filebeat_module_error/filebeat.yml 
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /opt/module-error-3.0.3/logs/*-error.log 
#将所有不以 [ 开始的行与之前的行进行合并multiline:
  #multiline.pattern: '^\['
  multiline.pattern: '^\[20'
  multiline.negate: true
  multiline.match: after


  barvester_buffer_size: 163840
setup.template.name: "module_error_template"
setup.template.pattern: "module_error_template-*"
tags: ["80.200"]
xpack.monitoring:
  enabled: true

output.elasticsearch:
 hosts: ["192.168.0.103:9200"]
  pipeline: "module_error_pipeline"
  index: "module_error-%{+yyyy.MM.dd}"
  username: "admin"
  password: "admin"
  worker: 2
 

7、结果展示

8、特殊处理

8.1、过滤无用信息:

        "query" : "com.test.query.test001.test001query:175"

        截取需要的结果,过滤掉com.test.query.不显示

由原语句替换为:

         {%{GREEDYDATA:query}}替换为 {com.test.query.%{GREEDYDATA:query}}

"\\[%{MY_DATETIME:times}\\] \\[%{DATA:ERROR}\\] \\[%{DATA:DubboServer}\\] {com.test.query.%{GREEDYDATA:query}}-%{GREEDYDATA:查询错误}[\\s\\S]*?\n(?<错误参数>[\\s\\S]+?)$",
"\\[%{MY_DATETIME:times}\\] \\[%{DATA:ERROR}\\] \\[%{DATA:DubboServer}\\] {com.test.query.%{GREEDYDATA:query}}-%{GREEDYDATA:查询错误}!%{GREEDYDATA:错误参数}"

  得到结果:

8.2、只获取固定字段信息:

        "错误参数" : "java.lang.Exception: 查询数据错误!!"

   示例数据:

        [2022-02-28 09:02:54] [ERROR] [DubboServerHandler-192.168.1.12:2880-thread-185] {com.test.query.test001.test001query:175}-getTest 查询数据错误!
java.lang.Exception: 查询数据错误!!
错误详细信息:java.lang.IllegalArgumentException: java.net.ConnectException: Connection timed out (Connection timed out)
        at com.test.query.dcws60.test001query.query(test001query.java:155) [longcredit-interface-service-plugin-dcws60-1.0.0-SNAPSHOT.jar:?]

错误参数获取红色区域为结果:

GET _ingest/pipeline/_simulate
{
  "pipeline": {
    "processors" : [
      {
        "grok" : {
          "field" : "_source.message",
          "patterns" : [
            "\\[%{MY_DATETIME:times}\\] \\[%{DATA:ERROR}\\] \\[%{DATA:DubboServer}\\] {com.test.query.%{GREEDYDATA:query}}-%{GREEDYDATA:查询错误}[\\s\\S]*?\n(?<错误参数>错误详细信息[\\s\\S]+?)$",
            "\\[%{MY_DATETIME:times}\\] \\[%{DATA:ERROR}\\] \\[%{DATA:DubboServer}\\] {com.test.query.%{GREEDYDATA:query}}-%{GREEDYDATA:查询错误}!%{GREEDYDATA:错误参数2}"
          ],
          "pattern_definitions" : {
            "MY_DATE" : "%{YEAR}[/-]%{MONTHNUM}[/-]%{MONTHDAY}",
            "MY_TIME" : "[0-9][0-9]:[0-9][0-9]:[0-9][0-9]",
            "MY_DATETIME" : "%{MY_DATE} %{MY_TIME}"
          }
        }
      },
      {
        "date" : {
          "field" : "times",
          "target_field" : "@timestamp",
          "formats" : [
            "yyyy-MM-dd HH:mm:ss"
          ],
          "timezone" : "Asia/Shanghai"
        }
      }
    ]
  },
  "docs": [
    {
      "_source": {
        "message": """
	[2022-02-28 09:02:54] [ERROR] [DubboServerHandler-192.168.1.12:2880-thread-185] {com.test.query.test001.test001query:175}-getTest 查询数据错误!
java.lang.Exception: 查询数据错误!!
错误详细信息:java.lang.IllegalArgumentException: java.net.ConnectException: Connection timed out (Connection timed out)
        at com.test.query.dcws60.test001query.query(test001query.java:155) [longcredit-interface-service-plugin-dcws60-1.0.0-SNAPSHOT.jar:?]
        at com.test.query.module.core.plugins.query.AbstractQueryPlugin.execute(AbstractQueryPlugin.java:122) [test-3.0.5-SNAPSHOT.jar:?]
        at com.test.query.module.core.plugins.query.QueryMetaDataCombine.execute(QueryMetaDataCombine.java:42) [test-3.0.5-SNAPSHOT.jar:?]
"""
      },
      "_index": "test_index"
    }
  ]
}

结果显示:

 

 最终结果显示就是完美展现了个性需求,截取需要的字段,过滤掉无用的信息,但这样对资源消耗也比较大,根据自己的实际情况就行取舍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值