Временная метка logtoash на смену года
Мы используем logstash для хранения / поиска логов с наших почтовых серверов. Сегодня я заметил, что у нас не было никаких показателей с этого года (2015). Быстрое расследование показало, что текущие журналы хранятся по состоянию на 2014.01.05 (то есть в тот же день, но в прошлом году), и эти индексы удаляются заданием cron, которое ищет старые индексы.
Перезапуск logstash исправил некоторые вещи, поэтому я предполагаю, что logstash заполняет информацию о году в зависимости от времени его запуска.
Мы запускаем Logstash 1.4.1 с Elasticsearch 1.2.4. Так что не последняя версия Elasticsearch, но я не вижу ничего релевантного в журнале изменений для 1.4.2.
Записи журнала отправляются в logstash с помощью syslog - config ниже, вместе с примером строки ввода и анализируемого вывода.
Есть ли лучшее решение для этого, чем просто забыть перезапустить Logstash на Новый год?
Пример строки ввода
Jan 5 15:03:35 cheviot22 exim[15034]: 1Y89Bv-0003uU-DD <= redmine@ncl.ac.uk H=adudeviis.ncl.ac.uk (campus) [10.8.232.56] P=esmtp S=2548 id=redmine.journal-1487.20150105150334@ncl.ac.uk
{
"_index": "logstash-2014.01.05",
"_type": "mails",
"_id": "HO0TQs66SA-1QkQBYd9Jag",
"_score": null,
"_source": {
"@version": "1",
"@timestamp": "2014-01-05T15:03:35.000Z",
"type": "mails",
"priority": 22,
"timestamp": "Jan 5 15:03:35",
"logsource": "cheviot22",
"program": "exim",
"pid": "15034",
"severity": 6,
"facility": 2,
"facility_label": "mail",
"severity_label": "Informational",
"msg": "1Y89Bv-0003uU-DD <= redmine@ncl.ac.uk H=adudeviis.ncl.ac.uk (campus) [10.8.232.56] P=esmtp S=2548 id=redmine.journal-1487.20150105150334@ncl.ac.uk",
"tags": [
"grokked",
"exim_grokked",
"dated"
],
"xid": "1Y89Bv-0003uU",
"exim_rcpt_kv": "redmine@ncl.ac.uk H=adudeviis.ncl.ac.uk (campus) [10.8.232.56] P=esmtp S=2548 id=redmine.journal-1487.20150105150334@ncl.ac.uk",
"H": "adudeviis.ncl.ac.uk",
"P": "esmtp",
"S": "2548",
"id": "redmine.journal-1487.20150105150334@ncl.ac.uk"
},
"sort": [
1388934215000,
1388934215000
]
}
Конфигурация Logstash (с удалением ненужных битов) ...
input {
syslog {
codec => "plain"
debug => false
port => 514
type => "mails"
}
}
filter {
mutate {
remove_field => [ "path", "host" ]
}
if [type] == "mails" {
grok {
patterns_dir => [ "/etc/logstash/patterns" ]
match => [ "message", "(?<msg>.*)" ]
add_tag => [ "grokked" ]
break_on_match => true
remove_field => [ "message" ]
}
}
date {
match => [ "timestamp", "ISO8601", "MMM dd HH:mm:ss", "MMM d HH:mm:ss"]
add_tag => [ "dated" ]
}
}
output {
elasticsearch {
cluster => "logstash"
host => "iss-logstash01"
flush_size => 1000
index => "logstash-%{+YYYY.MM.dd}"
}
}
1 ответ
Нашел указатель для ответа в группе пользователей logstash-Google (которая мне в голову пришла). Недавнее обсуждение указывало на https://logstash.jira.com/browse/LOGSTASH-1744 который (а) подтверждает, что другие люди видят то же, что и я, и (б) предлагает пару возможных решений.
Вариант 1 представляет собой патч для Elasticsearch (не входит в стандартный дистрибутив), который обновляет представление Logstash о текущем году.
Вариант 2 состоит в том, чтобы не анализировать метку времени из строки системного журнала, а просто полагаться на время, когда сообщение приходит с Logstash. Это, вероятно, приемлемое для нас решение, поскольку порядок строк важнее точного времени (если оно близко).