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

Поиск и регистрация сервисов с Consul

Consul logoДопустим, есть у нас распределённое приложение, в которое входят два вида сервисов: web и db. Для большей надёжности они запускаются сразу в нескольких экземплярах, на разных хостах, иногда приходят в онлайн, иногда уходят, какие-то подвисли, какие-то ещё нет… В общем, хаос. Как в таком случае отдельно взятому сервису web отыскать себе живой db?

Самое очевидное решение — придумать какое-нибудь отдельное хранилище типа ключ-значение, в котором сервисы будут себя регистрировать при запуске: кто такой и куда слать запросы. Правда, сервисы иногда будут выключаться… Значит, перед выключением они должны себя «разрегистрировать».

А если сервис «упал», или сети не стало, он же тогда не сможет себя удалить из списков… Ну тогда можно ввести ещё один сервис, который будет проверять, живы ли ещё все остальные. А если..

Всего два абзаца текста, а решение с выделенным хранилищем уже превращается в отдельный проект. Всё-таки, поиск и регистрация сервисов — это нетривиальная задача.

Но её и не обязательно решать самому, когда для этого уже есть инструменты. Например, Consul. Читать далее Поиск и регистрация сервисов с Consul

Конфигурация сервисов c Consul Key-Value Store

consul logoКак люди обычно конфигурируют приложения? Некоторые, например, передают аргументы через командную строку. Ещё можно задать переменные окружения или просто указать на файл с настройками. Да чего уж там, пока никто не видит, опцию-другую можно и прямо в код прошить.

Но как быть с такой ситуацией. Есть у нас распределённое приложение: куча хостов, сервисы создаются, приходят в онлайн, уходят, и все с разными версиями и непонятными адресами. И вдруг нам нужно их всех переконфигурировать. Ничего такая задачка? С монолитным приложением можно было бы просто зайти на хост и поколдовать там. А как быть с распределённым?

Читать далее Конфигурация сервисов c Consul Key-Value Store

Как хранить данные в Docker volumes

docker volumes

Если полистать какой-нибудь Докер гайдлайн, то скорее всего в нём скажут, что контейнеры должны быть маленькими, с одним процессом, легко удаляемыми и так же легко заменяемыми на более новый. Прекрасная концепция. О чём в гайдлайнах пишут немного реже, так это что же делать с данными внутри таких контейнеров. Я же не могу легко удалить тот же mysql контейнер и заменить его на новый, но пустой внутри. Он ведь мне только ради данных и нужен был.

Но, оказывается, проблема вполне решаема. Docker volumes, которые существовали в Докере с момента сотворения мира, начиная с версии 1.8 получили обновлённый API, и теперь справляются с хранением данных не только технически, но и эстетически прекрасно.

Читать далее Как хранить данные в Docker volumes

Как создать overlay сеть без Docker Swarm

В Docker, среди его разнообразия типов сетей, есть один особенно интересный — overlay. Overlay сеть может охватывать сразу несколько хостов таким образом, что, например, контейнер веб-приложения на хосте 1 может общаться по имени с контейнером базы данных на хосте 2, как если бы они были на одной машине.

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

Конечно, Докер можно запустить в Swarm режиме, и тогда проблема исчезнет сама собой. Но и без Swarm, как оказалось, это очень легко устроить.

Читать далее Как создать overlay сеть без Docker Swarm

Kibana: окно в Elasticsearch

Kibana - логотипСегодня мы поговорим о последнем компоненте ELK стэка от Elastic — Kibana. Хотя Logstash отлично справляется обработкой логов и прочих потоков данных, а Elasticsearch поможет их сохранить, проиндексировать и запустить парочку поисковых запросов, ни у одного их них нету пользовательского интерфейса. А анализировать данные и искать закономерности из командной строки — удовольствие для любителей. Очень странных любителей…

И тут на помощь приходит Kibana.

Читать далее Kibana: окно в Elasticsearch

Обрабатываем логи в 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