我想使用logstash对正在记录到文本文件的json数据执行转换。
Logstash配置代码段:
filter {
mutate {
gsub => [
# replace all '::~~' with '\r\n'
"alert.explanation.cnc-services.cnc-service.channel", "\:\:~~", "\\r\\n"
# "channel", "~~", "n"
]
}
}
输入json:
{
"alert": {
"explanation": {
"cnc-services": {
`enter code here`"cnc-service": {
"channel": "TEXT1 TEXT2::~~TEXT3::~~TEXT4::~~TEXT5::~~TEXT6::~~::~~"
}
}
}
}
}
期望的输出:
{
"alert": {
"explanation": {
"cnc-services": {
"cnc-service": {
"channel": "TEXT1 TEXT2\r\nTEXT3\r\nTEXT4\r\nTEXT5\r\nTEXT6\r\n\r\n"
}
}
}
}
}
输入数据只是整个json文档的一部分,可能还有其他字段,但我只需要修改这个。此数据由另一个应用程序生成,无法修改。我在logstash上看到的所有文章都没有谈到做这样的事情。
编辑:这是logstash配置的输入部分
input {
# Read from log file
file {
codec => "json"
type => "fireeye"
path => ["/var/log/app/events.json"]
}
}
答案 0 :(得分:1)
某些试验和错误表明gsub数组中的密钥应该具有格式。
first_level[second_level][third_level]...
所以在你的情况下:
filter {
mutate {
gsub => ["alert[explanation][cnc-services][cnc-service][channel]", "whatever"]
}
}
我不确切知道它背后的逻辑是什么,但它确实有效。