【发布时间】:2013-12-05 21:33:24
【问题描述】:
我打算使用 logstash 对记录到文本文件的 json 数据执行转换。
Logstash 配置 sn-p:
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"]
}
}
【问题讨论】:
-
迂腐但重要的问题:当 Logstash 接收到这些数据时,它是被解析为事件字段和子字段,还是 JSON 是一个平面字段中的字符串?
-
我相信它会将其解析为 json。这是输入部分: input { # 从日志文件文件中读取 { codec => "json" type => "fireeye" path => ["/var/log/app/events.json"] } }
-
嗯。不幸的是,很难找到有关编解码器的文档。我有一点运气逐行读取文件输入,然后使用json filter plugin 将单个字段解析为子字段。如果您在此处找不到帮助,我建议您在 logstash-users 列表中提问。
-
你找到解决这个问题的方法了吗?