Мы хотели бы загружать журналы CDN в Graphite и агрегировать числа, найденные там (количество различных кодов состояния HTTP, средний размер ответа, средний коэффициент попадания в кеш и т. Д.)
Однако журналы загружаются к нам лишь изредка, а иногда даже не работает - время от времени утренний журнал может загружаться вечером, через несколько часов после загрузки и обработки дневного журнала. Кроме того, поскольку CDN (очевидно) имеет несколько серверов и дата-центров, разные журналы могут охватывать перекрытие периоды.
Это означает, что любой агрегатор должен поддерживать доступ к все предыдущей статистики, чтобы иметь возможность увеличивать агрегаты при обработке нового журнала ...
Что - если что - может это сделать? И как мне настроить logstash для подачи в него? Спасибо!
Как вам хорошо известно, это сложная проблема. Вы отметили Logstash в своем вопросе, поэтому я предполагаю, что он у вас есть.
Получение журналов - это то, что делает Logstash. Оно имеет а file {}
входной плагин только для этого:
input {
file {
path => [ '/opt/export/cdn_logs/*.csv'
tags => [ 'cdnlogs' ]
}
}
И а csv {}
фильтр для упрощения приема данных CSV.
filter {
if 'cdnlogs' in [tags] {
csv {
source => "message"
columns => [
'cdndate',
'host_server',
[...]
'response_time' ]
}
}
}
Если у вас нет данных CSV, возможно, эти строки находятся в довольно нормальном формате Apache, еще не все потеряно. Вероятно, вам нужно будет провести время с Grok. Это отдельное дело.
С упорядочением по дате проблема не возникает, если вы заботитесь о сохранении временных меток и не используете statsd что явно не сохранить их. Если вы еще этого не сделали, Logstash может взять дату из файла журнала и сделать ее меткой даты / времени события.
filter {
date {
match => [ "cdndate", "ISO8601" ]
}
}
Это получает отметку даты / времени журнала как отметку времени события. Круто, а теперь перейдем к чему-нибудь полезному.
Стандартное хранилище данных Logstash эластичный поиск, который Elastic (компания) пытается выставить на счет столь же качественного хранилища данных таймсерий, как и специализированные инструменты, такие как InfluxDB или OpenTSDB. Может быть, хотя, по моему опыту, специализированные работают лучше. Все они могут, при условии, что вы вводите их правильно, могут сохранять неупорядоченные события в правильном порядке, чтобы последующие запросы могли ассимилировать новую информацию.
В graphite {}
вывод Logstash будет сохранять временные метки, что позволяет вам использовать графит в качестве резервного хранилища для этого, если хотите.
В influxdb {}
и opentsdb {}
Существуют плагины вывода, которые будут передавать ваши данные в настоящую базу данных временных рядов.
Оттуда агрегирование / резюмирование краткосрочных данных (через несколько дней после вашего объяснения) должно выполняться во время запроса. Инструмент вроде графана может быть перед несколькими из этих хранилищ данных и упрощает отображение. После того, как вы выйдете из зоны риска для поступления журналов, вы сможете запустить более поздний процесс ETL для создания агрегатов / сводок в базе данных на основе полный набор данных. А затем очистите полные журналы по мере необходимости.
Если коротко, то метод:
date {}
фильтр чтобы вставить метку времени журнала в метку времени события.