文档使用工具:
图形化: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"
}
]
}
结果显示:

最终结果显示就是完美展现了个性需求,截取需要的字段,过滤掉无用的信息,但这样对资源消耗也比较大,根据自己的实际情况就行取舍。
本文档介绍了使用ELK Stack(Elasticsearch、Logstash、Kibana)进行日志采集,特别是针对log4j错误日志的处理。通过Kibana的Dev Tools测试自定义规则,并在filebeat中配置日志收集,实现对特定字段的过滤和信息提取,以优化日志展示和资源利用。
1138

被折叠的 条评论
为什么被折叠?



