Я пытаюсь разобрать события SendGrid Webhook с помощью Logsta sh. Проблема в том, что вывод Logsta sh - это не массив JSON, а только JSON. Квадратные скобки отсутствуют.
Причина, по которой я это делаю, - это местоположение GeoIP и синтаксический анализ UserAgent для аналитики.
Я отправляю сообщение на 127.0.0.1:3000, затем я хочу переслать вывод на 127.0.0.1:8080. 8080 - это просто базовый c Express сервер, который печатает запросы / ответы и отправляет окончательные данные в ElasticSearch.
Это входные данные:
[
{
"email": "email@domain.com",
"event": "click",
"ip": "8.8.8.8",
"sg_event_id": "WS1wXXhERnefBsqEt5FSFA",
"sg_message_id": "mk4Msf8nQvycsZIAHQPOrw.filter0321p1iad2-30191-5E686C57-5D.0",
"timestamp": 1596484698,
"url": "http://10.0.0.6/ServiceCenter/view",
"url_offset": { "index": 1, "type": "html" },
"useragent": "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"
}
]
Это результат:
{
sg_event_id: 'WS1wXXhERnefBsqEt5FSFA',
event: 'click',
email: 'email@domain.com',
sg_message_id: 'mk4Msf8nQvycsZIAHQPOrw.filter0321p1iad2-30191-5E686C57-5D.0',
timestamp: 1596484698,
useragent: 'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko',
ip: '8.8.8.8',
url: 'http://10.0.0.6/ServiceCenter/view',
url_offset: { index: 1, type: 'html' }
}
Это мой конфиг:
input {
http {
host => "127.0.0.1"
port => "8080"
}
}
filter {
mutate {
remove_field => [ "@version", "@timestamp", "headers", "host" ]
}
}
output {
http {
http_method => "post"
url => "http://127.0.0.1:3000"
}
stdout {
codec => rubydebug
}
}