Я привязываюсь к использованию logstash для выполнения преобразования данных json, которые записываются в текстовый файл.Фильтр мутанта 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"]
}
}
Педантичный, но важный вопрос: как Logstash получает эти данные, анализируется ли он в полях и подполях событий, или это строка JSON в одном плоском поле? – rutter
Я считаю, что он разбирает его как json. Вот входной секции: вход { # Чтение из файла журнала файл { кодек => "JSON" тип => "fireeye" путь => [ "/var/log/app/events.json"] } } –
Хм. К сожалению, документацию на кодеки довольно сложно найти. Мне посчастливилось читать строки за строкой с вводом файла, затем разбор одного поля в подполях с помощью [json filter plugin] (http://logstash.net/docs/1.2.2/filters/JSON). Я бы посоветовал запросить список [logstash-users] (https://groups.google.com/d/forum/logstash-users), если вы не можете найти помощь здесь. – rutter