Как парсить лог с помощью Logstash?

Есть лог:
{«message»:»1353480: CORE-DSS: Mar 10 06:22:06.711: %SEC-6-IPACCESSLOGP: list inside_DSS denied udp 10.22.110.61(60980) -> 255.255.255.255(1947), 1 packet «,»@version»:»1″,»@timestamp»:»2015-03-10T07:11:31.697Z»,»type»:»all_log»,»host»:»10.23.0.200″}

На выходе надо получить хотя бы:
denied udp 10.22.110.61(60980) -> 255.255.255.255(1947)

В идеале так:
2015-03-10T07:11:31 denied udp 10.22.110.61(60980) -> 255.255.255.255(1947) host 10.23.0.200

Пишу простой конфиг:
input {
udp {
type => «all_log»
port => 3000
}
}
filter {
grok {
type => «all_log»
pattern => «%{WORD} %{PROG} %{NOTSPACE} -> %{NOTSPACE}»
}
}
output {
elasticsearch {
embedded => «true»
host => «localhost»
}
file {
path => «/srv/LOG/LOG_all/all.oblast.log»
}
}


И не работает- Kibana виснет! Что не так? И как сделать второй вариант? Подскажите пожалуйста! Решение данной задачи будет мне хорошим примером! И ещё, какие надо подтянуть знания, чтобы писать фильтры. Есть книга по logstash, но она не бесплатна. Заранее спасибо за ответ!
  • Вопрос задан
  • 6067 просмотров
Пригласить эксперта
Ответы на вопрос 3
Я советовал бы вам через фильтр разбить message на части полностью, как привет вот так делают для IIS логов
grok {
    # check that fields match your IIS log settings
    match => ["message", "%{TIMESTAMP_ISO8601:log_timestamp} %{IPORHOST:site} %{WORD:method} %{URIPATH:page} %{NOTSPACE:querystring} %{NUMBER:port} %{NOTSPACE:username} %{IPORHOST:clienthost} %{NOTSPACE:useragent} %{NUMBER:response} %{NUMBER:subresponse} %{NUMBER:scstatus} %{NUMBER:time_taken}"]
  }

Вы отправляйте в базу всё сообщение, но поля сделайте какие вам нужно, и по которым потом будете делать фильтр и дашборды. Написак сам grok - советовал бы воспользовашись дебаггером https://grokdebug.herokuapp.com/
Также сразу НЕ смотреть в кибану, а разобраться с elasticsearch. Для начало идем смотреть ролик https://www.youtube.com/watch?v=7FLXjgB0PQI а также поставить себе Sense в хром и научиться писать запросы.
Также я вижу вы все сообщения отправляете не только в базу но и в файл:
file {
path => «/srv/LOG/LOG_all/all.oblast.log»
}

Он пустой или в нем есть сообщения?
Ответ написан
Комментировать
@zorruch
Онлайн дебаггер для паттернов:

https://grokdebug.herokuapp.com/
Ответ написан
@Usversys Автор вопроса
Сообщение для примера взято из файла. Сообщения в файл идут только тогда, когда закоментированы строчки относящиеся к filter (т.е. когда фильтр отключен). Видео посмотрел, но не понял о чем речь. Вашу мысль по поводу разбить message на части полностью, я уловил. Для своего фильтра я как раз использовал указанный вами сайт и могу разбить всё лог-сообщение на части. Но опять же вопрос, что потом делать с этим разбиением, как получить требуемый результат?
Установил Sense для Crome в строке SERVER localhost:9200 пишу вместо localhost IP-адрес сервера и указываю порт 9200, но ничего не происходит. Строка возвращается в localhost:9200.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы