Определение новой метки времени в Logstash - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь определить новую метку времени в Logstash, чтобы использовать метку времени журналов в моих отчетах Kibana вместо метки времени Filebeat.

У меня было следующее, которое работало, но нене позволяю мне использовать временную метку журнала в качестве оси времени в Кибане:

grok {
    match => { "message" => "(?<timestamp>%{TIMESTAMP_ISO8601}) %{LOGLEVEL:loglevel} (?<class>[A-Za-z0-9$_.]+) %{NOTSPACE:method}\(%{JAVAFILE:class}:%{NONNEGINT:line}\) %{GREEDYDATA:message}$"
}

Поэтому я изменил ее так, но она не работает:

grok {
    match => { "message" => "(?<timestamp>%{TIMESTAMP_ISO8601:tstamp}) %{LOGLEVEL:loglevel} (?<class>[A-Za-z0-9$_.]+) %{NOTSPACE:method}\(%{JAVAFILE:class}:%{NONNEGINT:line}\) %{GREEDYDATA:message}$"
}

date {
    match => ["tstamp", "TIMESTAMP_ISO8601"]
}

Я пытался добавить чтоЯ думаю, что это наименование значения внутри шаблона Grok (часть ": tstamp"), которое я нашел здесь , и определение его как даты.Но когда я использую это, я больше не вижу никаких данных в Кибане.

Я стер все в Кибане, чтобы начать все сначала, и удалил файл реестра в Filebeat, чтобыон снова передает файл журнала.

Что мне не хватает?

Редактировать: Мне удалось восстановить поток данных, изменив мои фильтры следующим образом:

grok {
    match => { "message" => "%{TIMESTAMP_ISO8601:tstamp} %{LOGLEVEL:loglevel} (?<class>[A-Za-z0-9$_.]+) %{NOTSPACE:method}\(%{JAVAFILE:class}:%{NONNEGINT:line}\) %{GREEDYDATA:message}$" }
}

date {
    match => ["tstamp", "ISO8601"]
}

Но я все еще вижу только @timestamp в качестве фильтра времени.tstamp по-прежнему считается строкой.Я не понимаю ...

1 Ответ

0 голосов
/ 14 ноября 2018

На самом деле в том, что я сделал, было две разные проблемы.

Когда я указал свое редактирование вопроса, фильтр даты был неправильным.Мне пришлось использовать

match => ["tstamp", "ISO8601"]

с "ISO8601" вместо "TIMESTAMP_ISO8601".

. В тот момент все работало, даже если это было неочевидно, потому что по умолчаниюLogstash перезаписывает значение @timestamp результатом фильтра даты.Чтобы избежать этого, мне пришлось использовать опцию target:

target => "logdate"

Теперь у меня есть поле logdate в Кибане, типа date, и я могу выбрать его как временной фильтр при созданииpattern.

Итак, мои последние фильтры в Logstash выглядят так:

grok {
    match => { "message" => "%{TIMESTAMP_ISO8601:tstamp} %{LOGLEVEL:loglevel} (?<class>[A-Za-z0-9$_.]+) %{NOTSPACE:method}\(%{JAVAFILE:class}:%{NONNEGINT:line}\) %{GREEDYDATA:message}$" }
}

date {
    match => ["tstamp", "ISO8601"]
    target => "logdate"
}
...