我有如下的logstash.conf
input {
tcp {
port => 5000
# codec => json { charset=> "UTF-8" }
}
stdin {}
}
過濾器 {
如果 "userId "不在 [contextMap] 中 {
洗掉 {}。
}
json {
來源 => "訊息"
}
}
輸出 {
elasticsearch {
hosts => ["localhost:9200"]
index => "logs"
user => "用戶"
password => "密碼"
}
stdout {}.
}
并且我在logstash中列印了json請求
{
"message" => " testing ,essage",
"瞬間" => {
"nanoOfSecond" => 267000000,
"epochSecond" => 1631632671
},
"執行緒" => "http-nio-8080-exec-1"。
"級別" => "INFO",
"loggerFqcn" => "org.apache.logging.slf4j.Log4jLogger" 。
"loggerName" => ""。
"endOfBatch" => false,
"@version" => "1",
"@timestamp" => 2021-09-14T15: 17: 51.504Z,
"threadPriority" => 5,
"hostname" => "主機名"。
"contextMap" => {
"requestId" => "f6f65bab-bdd1-4cca-ba09-ff0d06d16e41" 。
"userId" => "bc1289cd-d3ed-43ec-87ba-9c5ff9c5f205",
"moduleName" => "LOGGER_SERVICE",
},
"host" => "hostname",
"threadId" => 139,
"埠" => 55555
}
我想實作的是,如果contextMap欄位沒有userId欄位,那么日志應該被洗掉。
誰能告訴我我做錯了什么嗎?
uj5u.com熱心網友回復:
if "userId" not in [contextMap]如果[contextMap]是一個字串,可以用于子字串匹配,如果[contextMap]是一個陣列,可以用于陣列成員測驗。它不能被用來測驗一個鍵是否存在于哈希中。也就是說,你可以使用
if ! [contextMap][userId] { drop {} }
uj5u.com熱心網友回復:
我設法解決了這些問題。問題是我不希望某些日志被加載到只有特定欄位的彈性搜索,所以我把過濾器移到了輸出部分。
input {
tcp {
port => 5000
# codec => json { charset=> "UTF-8" }
}
stdin {}
}
過濾器 {
json {
source => "message"
}
}
輸出 {
如果 [contextMap][requestId]{
elasticsearch {
hosts => ["localhost:9200"]
index => "logs"
user => "用戶"
password => "密碼"
}
}
stdout {}
}
在家幫助別人
。轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/315178.html
標籤:
上一篇:提交表單后重新啟動Servlet
下一篇:春季資料彈性嵌套關系的檔案
