Архив рубрики: О программировании

Обрабатываем логи в Logstash

Logstash лого

Итак, с Elasticsearch, гибридом гугла и NoSQL базы данных, мы разобрались, самое время перейти к следующей букве ELK стэка от Elastic — Logstash.

Читать далее Обрабатываем логи в Logstash

Краткое введение в Elasticsearch

ElasticsearchНасколько замечательно Grafana, Graphite и Prometheus справляются с численными данными мониторинга, вроде загрузки процессора по времени, настолько же они бесполезны для работы с логами. А ведь с теми приходится работать даже чаще, чем с метриками.

Инструментов для работы с логами тоже навалом, но сегодня мы посмотрим в сторону ELK стека от Elastic. А именно: Elasticsearch, Logstash и Kibana — хранилище/поисковик, обработчик данных и тулза для их визуализации. А начнём, естественно, с первой буквы этого трёх-буквенного алфавита — «E».

Читать далее Краткое введение в Elasticsearch

Отслеживаем события приложения в Graphite

Не знаю, совпадение это, или нет, но обычно самые странные скачки в метриках приложения происходят сразу же после того, как его обновили. Это настолько часто происходит, что на проблемных серверах я иду в историю обновлений раньше, чем в логи. Поэтому хранить такие события рядом в метриками было бы очень удобно.

Предположим, наши метрики лежат в Graphite. Как бы мы хранили в нём еще и события?

Читать далее Отслеживаем события приложения в Graphite

Собираем метрики приложения с Prometheus

PrometheusЕсть два концептуально разных подхода к сбору метрик приложения. Есть PUSH подход, при котором хранилище тихо сидит где-нибудь и надеется, что случайный провайдер метрик в него что-нибудь да положит. Например, Graphite сам по себе не занимается сбором данных. Он ждёт, что их доставит прямо к порогу кто-нибудь вроде collectd.

С другой стороны, есть PULL подход. В этом случае агрегатор начинает проявлять инициативу и раз в икс секунд проходится по списку адресов, на которые подписан, чтобы самостоятельно собрать новую порцию данных.

Prometheus использует PULL подход. Читать далее Собираем метрики приложения с Prometheus

Визуализация данных мониторинга с Grafana

Хотя Graphite весьма неплохо рисует одиночные графики, с созданием дашбордов целиком он справляется так себе. Конечно, можно взять его Render URL API и сделать себе HTML-дашборд самостоятельно. С другой стороны, есть Grafana.

Дашборд в Grafana

Читать далее Визуализация данных мониторинга с Grafana

collectd: используем JavaScript для сбора метрик

Graphite-график, собранный из JavaScript-данных

Exec плагин

Среди всего разнообразия плагинов в collectd есть один особенный: если из-за какой-нибудь техногенной катастрофы у collectd останется только Exec, то им вполне можно заменить все остальные.

Как следует из названия, Exec запускает стороннее приложение или скрипт и интерпретирует её вывод в качестве данных для себя. Если быть точным, то он ищет строки вроде таких:

Что самое прекрасное, Exec абсолютно по барабану, на каком языке написан скормленный ему скрипт.  Хоть на JavaScript. В принципе, в некоторых сценариях использовать JavaScript было бы очень хорошей затеей. Например, когда приходится иметь дело с RESTful сервисом возвращающим JSON.

Но прежде чем мы попробуем скормить collectd данные из JavaScript приложения, стоит присмотреться поближе к формату PUTVAL-строк. Читать далее collectd: используем JavaScript для сбора метрик

Краткое введение в Graphite

Что такое Graphite

graphite-logo
Graphite
 — это приложение, которое здорово делает три вещи:

  1. принимает данные мониторинга от сторонних агентов,
  2. сохраняет их в базу, и
  3. показывает эти данные в виде графиков и дашбордов через веб-приложение

Читать далее Краткое введение в Graphite

Краткое введение в rrdtool

В прошлом посте я упомянул, что collectd по-умолчанию сохраняет собранные данные через rrdtool. На выходе получаются несколько .rrd файлов — по одному для каждой метрики — и их потом можно отрисовать при помощи той же rrdtool. RRD файлы не так часто вплывают в разговорах у кофеварки, да и сама rrdtool та еще tool, так что не сразу понятно, почему collectd использует именно её, а не какой-нибудь CSV.

Оказывается, причин хватает. Читать далее Краткое введение в rrdtool

Мониторинг серверов с collectd

collectdС распределёнными приложениями появляется проблема, которую обычно не приходится решать в монолитных: как узнать, что приложение работает нормально? Не в смысле выполняет бизнес задачи и радует сердца пользователей яркими иконками, а в принципе работает. Все ли ключевые сервисы запущены? Загрузка процессора и памяти в норме? Место на диске не закончилось? И так далее.

К счастью, во вселенной хватает инструментов, чтобы на такие вопросы отвечать, и collectd — один из них.

Читать далее Мониторинг серверов с collectd

Отказоустойчивый Kafka кластер в Docker

Kafka кластер в Docker

До сегодняшнего дня мы запускали Apache Kafka на одном хосте, в кластере из одного брокера и всего с одним монолитным топиком. Для платформы, которая проектировалась под распределенные сценарии, это, наверное, печально. Поэтому сегодня мы станем на шаг ближе к представлению о том, как Kafka работает в нагруженных системах.

Мы создадим кластер из нескольких брокеров, добавим туда разбитый на разделы топик и включим его резервное копирование. При такой конфигурации нужно будет очень постараться, чтобы с кластером случилось что-то неприятное.

Читать далее Отказоустойчивый Kafka кластер в Docker