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

В моем понимании мониторинг должен быть:

  • Хорошо визуализированным;

  • Максимально удобным в использовании;

  • Гибким по различным настройкам; 

  • Надежным в плане отказоустойчивости, обновлений;

  • Адаптированным к нагрузкам.

Немного бекграунда: в основном я занимаются разработкой новых фич, выпуском обновлений, поиском и устранением ошибок. Как и вам, мне важно понимать, как ведет себя разрабатываемая система в контексте ресурсов и нагрузок. Именно поэтому нужна грамотная и качественно настроенная система мониторинга. Одной из таких, на мой взгляд, как раз и является система Datadog, о преимуществах и возможностях которой я хотел бы рассказать подробнее. 

Очевидные бенефиты Datadog:

  1. Различные возможности интеграции с системами на разных уровнях.

  1. Достаточно хорошая документация по настройке интеграций к различным сервисам. 

Итак, используемый стек технологий: Azure Services, Azure Kubernetes Service (AKS), MSSQL, MongoDB, Rabbitmq, ASP .Net Core 5. 

Так что, дорогие читатели, в тексте расскажу о возможности мониторинга Datadog на различных уровнях. А о том, как развернуть проект в AKS, настроить CI/CD и прочие DevOps фишки оставлю на сладкое до следующего материала.

В статье хотел бы разложить по полочкам следующие блоки:

  • мониторинг Azure 

  • мониторинг Kubernetes

  • мониторинг баз данных и rabbitmq

  • мониторинг приложений 

  • мониторинг сервисов

Как и в любой системе мониторинга, в Datadog хотелось бы видеть всё структурированно, поэтому рекомендую создавать для проекта отдельную организацию (неймспейс) в личном кабинете Datadog. 

Уровни и интеграции мониторинга (а также тонкости настроек) 

При разработке проектов на Azure существует возможность интеграции с подпиской Azure.

Для интеграции необходимо знать:

  • Tenant_name

  • Client_id

  • Client_secret

Шаги интеграции с Azure хорошо описаны тут.

Отталкиваясь от информации по ссылке на github сразу устанавливаем через Helm в кубернейтс агента Datadog для мониторинга самих сущностей Kubernetes, указывая в качестве параметра DD_API_KEY который сгенерирован в личном кабинете для организации (Integrations → Agent).

Следующий наш шаг - установка соответствующих модулей в меню Integrations Datadog для Azure и для Kubernetes. 

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

Успешно настроив предыдущее шаги и подождав некоторое время сразу “из коробки” видим огромное количество готовых дашбордов в личном кабинете Datadog. Наблюдаем мониторинг сервисов подписки Azure и мониторинг нашего AKS кластера. 

Присутствует мониторинг хостов в AKS по всем ресурсам.

Мониторинг Kubernetes позволяет максимально детально мониторить всё необходимое (Pods, Deployments, Services…):

Все графики выглядят как и описано в блоге Datadog и даже лучше!

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

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

Для мониторинга баз данных использовали схему работы через агента Datadog. 

Настраиваются конфигурации мониторингов БД достаточно просто:

1) Для MSSQL предварительно создается пользовать.

Пример запроса в БД по созданию пользователя при установке интеграции модуля в системе Datadog.
Пример запроса в БД по созданию пользователя при установке интеграции модуля в системе Datadog.

2) Далее в на хосте агента в директории Datadog агента (etc/datadog) создается конфигурация в файл - conf.d/sqlserver.d/mssql-conf.yaml

Ниже приведу пример самых базовых настроек, более углубленная конфигурация будет зависеть от настроек вашего SQL сервера:

init_config:

instances:

  - host: IP,PORT

    username: datadog

    password: password

При необходимости подключения нескольких хостов их можно добавить в конфиг по аналогии. Кстати, также возможно добавление тегов к хостам.

При необходимости указываются дополнительные настройки для подключений к БД (например connector: odbc  с указанием конкретного driver) и различные специфические метрики.

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

 “Из коробки” для SQLServer сразу доступно 2 дашборда: Overview и Metrics
“Из коробки” для SQLServer сразу доступно 2 дашборда: Overview и Metrics

Для MongoDB, как и для MSSQL, предварительно создается пользователь на основе инструкций при установке модуля интеграции на портале Datagog, а затем по примеру можно сделать  конфигурационный файл на агенте: conf.d/mongo.d/mongo-conf.yaml.

При интеграции создается 1 дашборд “из коробки”
При интеграции создается 1 дашборд “из коробки”

Для мониторинга RabbitMQ указывается api_url имя пользователя и пароль в базовой конфигурации. Из коробки создается 2 дашборда: Overview и Metrics.

Далее перейдём к самому интересному - мониторингу самих приложений и сервисов.

Для мониторинга приложений и сервисов также используется агент. В основном конфигурационном файле агента включается модуль  DogStatsD и указывается порт (по умолчанию 8125).

Для данных, отправленных с внешнего хоста, агенту Datadog требуется следующая конфигурация: dogstatsd_non_local_traffic: true и apm_non_local_traffic: true. Это также можно настроить в файле конфигурации datadog.yaml

В настройках приложений указывается адрес агента через который слать метрики в Datadog.

А вот дашборды для мониторинга самих приложений по используемым внутренним метрикам приходится создавать  самостоятельно.

Лично мне для настройки мониторинга ASP.Net сервисов помогла официальная документации по этой ссылке. Агент уже был, но необходимо было только добавить в сборку образов соответствующие строки и в системе CI/CD передавать переменные: DD_ENV, DD_SERVICE, DD_AGENT_HOST, соответственно для указания: энвайрмента, имени сервиса и адреса агента. 

После всего этого в Datadog в разделе APM → Services стали поступать данные, с максимально подробными метриками всех сервисов и отобразились автоматически графики. 

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

Теперь о перспективах: сейчас рассматривается возможное конфигурирование Datadog для сбора логов, пока используется другая система.

Немного затрагивая систему оповещений, хотелось бы отметить что она удобная в Datadog и интуитивно понятная.

повещения создаются в разделе “Monitors->Manage Monitors”
повещения создаются в разделе “Monitors->Manage Monitors”

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

Стоит отметить, что Datadog также возможно интегрировать с различными системами оповещений.

Лично у меня остались только позитивные впечатления от Datadog: в процессе настройки системы на различных уровнях оперативно удавалось выявить те или иные проблемы. Так что да, мы с командой нашли оптимальный уровень ресурсов для нашего окружения. Меняя такие параметры как количество нод в кластере, распределение сервисов по нодам, ресурсы самих пулов узлов в кластере, а также используя различное количество потоков и количество параллельных запусков в тестировании и одновременное тестирование различных модулей системы, мы пришли к наиболее оптимальной конфигурации в нашем случае. 

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

И, на последок, небольшой список того, что мне удалось прокачать благодаря  Datadog:

  1. Сформировалось более детальное понимание работы разрабатываемой системы и реакции на те или иные изменения;

  2. Да, теперь у моей команды есть стабильная многоуровневая систему мониторинга;

  3. Улучшились процессы в команде и коммуникации между командами;

  4. Ускорилось время нахождения багов и конкретизировать влияние этих багов на систему;

  5. Оптимизировались сервисы по работе с базами данных;

  6. Улучшилось скорость разработки системы, а разрабатываемые сервисы стали лучше.

Комментарии (0)