我正在開發一個 Spring Boot 專案并使用 ELK 堆疊進行日志記錄和審計。我需要一個 logstash.conf 檔案來處理日志,并且輸出可以有動態的鍵值對。此輸出資料將用于審計。
添加示例以提高清晰度
例子:
示例日志:
[INFO] [3b1d04f219fc43d18ccb6cb22db6cff4] 2021-10-13_13:43:09.074 Audit_ key1:value1| key2:value2| key3:value3| keyN:valueN
所需的logstash輸出:
{
"logLevel": [
[
"INFO"
]
],
"threadId": [
[
"3b1d04f219fc43d18ccb6cb22db6cff4"
]
],
"timeStamp": [
[
"2021-10-13_13:43:09.074"
]
],
"class": [
[
"Audit_"
]
],
"key1": [
[
"value1"
]
],
"key2": [
[
"value2"
]
],
"key3": [
[
"value3"
]
],
"keyN": [
[
"valueN"
]
]
}
筆記:
- “key”將始終是一個單詞或字串值
- “值”可以是單詞、數字或句子(帶空格的字串)
- ":" 是鍵和值之間的分隔符
- “|” 是鍵值對之間的分隔符
- 鍵值對的數量可能會有所不同。
有人可以建議/幫助我在這里使用匹配模式嗎?我只被允許使用 grok 過濾器。
uj5u.com熱心網友回復:
感謝 Filip 和 Leandrojmp 的指導!
僅為此使用 grok 過濾器會使其變得非常復雜,并且它也不會支持動態鍵值對。
所以我結合了 grok 和 kv 過濾器。這種方法對我有用。
示例日志:
[INFO] [3b1d04f219fc43d18ccb6cb22db6cff4] 2021-10-13_13:43:09.074 _Audit_ key1:value1| key2:value2| key3:value3| keyN:valueN
logstash.conf 檔案:
input {
beats {
port => "5044"
}
}
filter {
grok {
match => {"message" => "\[%{LOGLEVEL:logLevel}\]\ \[%{WORD:traceId}\]\ (?<timestamp>[0-9\-_:\.]*)\ %{WORD:class}\ %{GREEDYDATA:message}"]}
overwrite => [ "message" ]
}
if [class] == "_Audit_" {
kv {
source => "message"
field_split => "&"
value_split => "="
remove_field => ["message"]
}
}
}
output {
if [class] == "_Audit_" {
elasticsearch {
hosts => ["localhost:9200"]
index => "audit-logs-%{ YYYY.MM.dd}"
}
}
else {
elasticsearch {
hosts => ["localhost:9200"]
index => "normal-logs-%{ YYYY.MM.dd}"
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/330908.html
標籤:弹性搜索 日志存储 logstash-grok 麋鹿
