Назад | Перейти на главную страницу

Агрегирование статистики старых и новых событий

Мы хотели бы загружать журналы 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. Это отдельное дело.

С упорядочением по дате проблема не возникает, если вы заботитесь о сохранении временных меток и не используете что явно не сохранить их. Если вы еще этого не сделали, Logstash может взять дату из файла журнала и сделать ее меткой даты / времени события.

filter {
  date {
    match => [ "cdndate", "ISO8601" ]
  }
}

Это получает отметку даты / времени журнала как отметку времени события. Круто, а теперь перейдем к чему-нибудь полезному.

Стандартное хранилище данных Logstash , который Elastic (компания) пытается выставить на счет столь же качественного хранилища данных таймсерий, как и специализированные инструменты, такие как InfluxDB или OpenTSDB. Может быть, хотя, по моему опыту, специализированные работают лучше. Все они могут, при условии, что вы вводите их правильно, могут сохранять неупорядоченные события в правильном порядке, чтобы последующие запросы могли ассимилировать новую информацию.

В graphite {} вывод Logstash будет сохранять временные метки, что позволяет вам использовать графит в качестве резервного хранилища для этого, если хотите.

В influxdb {} и opentsdb {} Существуют плагины вывода, которые будут передавать ваши данные в настоящую базу данных временных рядов.

Оттуда агрегирование / резюмирование краткосрочных данных (через несколько дней после вашего объяснения) должно выполняться во время запроса. Инструмент вроде может быть перед несколькими из этих хранилищ данных и упрощает отображение. После того, как вы выйдете из зоны риска для поступления журналов, вы сможете запустить более поздний процесс ETL для создания агрегатов / сводок в базе данных на основе полный набор данных. А затем очистите полные журналы по мере необходимости.

Если коротко, то метод:

  1. Загружает файлы с помощью Logstash.
  2. Использует фильтрацию для извлечения полей из файлов журнала CDN.
  3. Использует то date {} фильтр чтобы вставить метку времени журнала в метку времени события.
  4. Экспортирует данные во что-то (эластичная, графитовая или другая база данных временных рядов)
  5. Инструменты отображения используют агрегирование в реальном времени запросы для отображения данных потребителям, по крайней мере, для краткосрочных данных.
  6. По прошествии определенного периода времени, возможно, пары дней, сценарий или другой автоматизированный процесс генерирует агрегаты и вводит их в хранилище данных.
  7. По прошествии большего времени данные с полным разрешением удаляются, оставляя только агрегированные данные.