Мониторинг облака с использованием Datadog в Apache APISIX

API7.ai

November 12, 2021

Ecosystem

Обложка

С увеличением сложности ИТ-продуктов и разработки приложений для конечных пользователей, мониторинг становится неотъемлемой частью доставки любого приложения. Кроме того, для удовлетворения бесконечного спроса на быстрые циклы обновлений при обеспечении стабильности, оптимизированной производительности и поддержания идеального баланса между показателями уровня обслуживания (SLI), целями уровня обслуживания (SLO) и соглашениями об уровне обслуживания (SLA) — эффективный мониторинг чрезвычайно важен.

Как продукт для управления облачными API, Apache APISIX отделяет задачи наблюдаемости от приложения, что дает разработчикам преимущество в создании приложений, сосредоточенных исключительно на бизнес-логике, в то время как Apache APISIX берет на себя заботу о наблюдаемости для платформы их выбора.

Apache APISIX недавно выпустил новый плагин: APISIX-Datadog, чтобы обеспечить более глубокую интеграцию с Datadog. В этой статье представлен плагин APISIX-Datadog и его возможности.

Как работает плагин APISIX-Datadog

Архитектура плагина APISIX-Datadog

Плагин APISIX-Datadog отправляет свои пользовательские метрики на сервер DogStatsD, который поставляется вместе с агентом Datadog через UDP-соединение. DogStatsD по сути является реализацией протокола StatsD. Он собирает пользовательские метрики для агента Apache APISIX, агрегирует их в одну точку данных и отправляет на настроенный сервер Datadog. Чтобы узнать больше о DogStatsD, посетите документацию DogStatsD.

Когда APISIX-Datadog активирован, агент Apache APISIX экспортирует следующие метрики на сервер DogStatsD для каждого цикла запроса-ответа:

Название метрикиТип StatsDОписание
Счетчик запросовСчетчикКоличество полученных запросов.
Задержка запросаГистограммаВремя, затраченное на обработку запроса (в миллисекундах).
Задержка апстримаГистограммаВремя с момента проксирования запроса на сервер апстрима до получения ответа (в миллисекундах).
Задержка APISIXГистограммаВремя, затраченное агентом APISIX на обработку запроса (в миллисекундах).
Размер входящих данныхТаймерРазмер тела запроса в байтах.
Размер исходящих данныхТаймерРазмер тела ответа в байтах.

Метрики будут отправлены на агент DogStatsD с использованием следующих тегов. Если для какого-либо тега нет подходящего значения, тег будет просто опущен.

Название метрикиОписание
route_nameИмя, указанное в определении схемы маршрута. Если отсутствует, будет использовано значение route id.
service_idЕсли маршрут был создан с абстракцией сервиса, будет использован идентификатор конкретного сервиса.
consumerЕсли маршрут имеет связанного потребителя, имя пользователя потребителя будет добавлено как тег.
balancer_ipIP-адрес балансировщика апстрима, который обработал текущий запрос.
response_statusКод статуса HTTP-ответа.
schemeСхема, использованная для выполнения запросов, например HTTP, gRPC, gRPCs и т.д.

Плагин поддерживает буфер с таймером. Когда таймер истекает, плагин APISIX-Datadog отправляет буферизованные метрики пакетом на локально запущенный сервер dogstatsd. Этот подход менее ресурсоемкий (хотя это может быть незначительно, так как UDP-сокеты очень легковесны) за счет повторного использования одного и того же UDP-сокета и не перегружает сеть постоянно, так как таймер можно настроить.

Шаги для запуска агента Datadog

  1. Если вы уже используете Datadog в своей инфраструктуре, у вас должен быть установлен агент datadog в ваших системах. Это может быть либо docker-контейнер, либо pod, либо бинарный файл для соответствующего пакетного менеджера. В этом случае вы готовы к работе. Просто убедитесь, что порт 8125/udp разрешен через брандмауэр (если есть), т.е. более конкретно, агент Apache APISIX может достичь порта 8125 агента datadog. Вы можете пропустить этот подраздел.

Чтобы узнать больше о том, как установить полноценный агент datadog, посетите здесь.

  1. Если вы новичок в Datadog
    1. Сначала создайте учетную запись, посетив www.datadoghq.com.
    2. Сгенерируйте API-ключ. Сгенерировать API-ключ
  2. Плагин APISIX-Datadog требует только компонент dogstatsd из datadog/agent, так как плагин асинхронно отправляет метрики на сервер dogstatsd, следуя протоколу statsd через стандартный UDP-сокет. Поэтому APISIX рекомендует использовать автономный образ datadog/dogstatsd вместо использования полного агента. Он чрезвычайно легковесный (всего ~11 МБ) по сравнению с ~2,8 ГБ образа datadog/agent.

Чтобы запустить его как контейнер:

# загрузите последний образ docker pull datadog/dogstatsd:latest # запустите контейнер в фоновом режиме docker run -d --name dogstatsd-agent -e DD_API_KEY=<Ваш API-ключ из шага 2> -p 8125:8125/udp datadog/dogstatsd

Если вы используете Kubernetes в своей производственной среде, вы можете развернуть dogstatsd как Daemonset или как Multi-Container Pod вместе с агентом Apache APISIX.

Как использовать Datadog с Apache APISIX

Активация плагина APISIX-Datadog

Ниже приведен пример того, как активировать плагин datadog для конкретного маршрута. Мы предполагаем, что ваш агент dogstatsd уже запущен и работает.

# включите плагин для конкретного маршрута curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "plugins": { "datadog": {} }, "upstream": { "type": "roundrobin", "nodes": { "127.0.0.1:1980": 1 } }, "uri": "/hello" }'

Теперь любые запросы к конечной точке /hello будут генерировать вышеуказанные метрики и отправлять их на локальный сервер DogStatsD агента datadog.

Пользовательская конфигурация

В конфигурации по умолчанию плагин ожидает, что служба dogstatsd будет доступна по адресу 127.0.0.1:8125. Если вы хотите обновить конфигурацию, обновите метаданные плагина:

Схема метаданных

НазваниеТипОбязательноПо умолчаниюОписание
hostsстрокаопционально"127.0.0.1"Адрес хоста сервера DogStatsD
portцелоеопционально8125Порт хоста сервера DogStatsD
namespaceстрокаопционально"apisix"Префикс для всех пользовательских метрик, отправляемых агентом APISIX. Полезно для поиска сущностей для графика метрик.
constant_tagsмассивопционально["source
"]
Статические теги, встроенные в генерируемые метрики. Полезно для группировки метрик по определенным сигналам.

Чтобы узнать больше о том, как эффективно писать теги, посетите здесь

Сделайте запрос к конечной точке /apisix/admin/plugin_metadata с обновленными метаданными следующим образом:

curl http://127.0.0.1:9080/apisix/admin/plugin_metadata/datadog -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "host": "127.0.0.1", "port": 8125, "constant_tags": [ "source:apisix", "service:custom" ], "namespace": "apisix" }'

Схема плагина

Аналогично, есть несколько атрибутов, которые можно изменить при включении плагина.

НазваниеТипОбязательноПо умолчаниюДопустимые значенияОписание
batch_max_sizeцелоеопционально5000[1,...]Максимальный размер буфера для каждого пакета
inactive_timeoutцелоеопционально5[1,...]Максимальный возраст в секундах, когда буфер будет сброшен, если он неактивен
buffer_durationцелоеопционально60[1,...]Максимальный возраст в секундах самой старой записи в пакете перед обработкой пакета
max_retry_countцелоеопционально1[1,...]Максимальное количество попыток, если одна запись не может достичь сервера dogstatsd

Поскольку все поля являются опциональными, и если никакие атрибуты не заданы, плагин datadog инициализируется со значениями по умолчанию. Чтобы обновить любой атрибут, просто обновите соответствующий маршрут, сервис или потребитель с обновленным значением атрибута. Например, код ниже изменяет максимальный размер буфера для каждого пакета:

'{ ... "plugins": { "datadog": { "batch_max_size": 10 } } ... }'

Деактивация плагина APISIX-Datadog

Теперь, чтобы деактивировать плагин, просто удалите соответствующую json-конфигурацию в конфигурации плагина, чтобы отключить datadog. Плагины APISIX перезагружаются на лету, поэтому нет необходимости перезапускать APISIX.

# отключите плагин для маршрута curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "uri": "/hello", "plugins": {}, "upstream": { "type": "roundrobin", "nodes": { "127.0.0.1:1980": 1 } } }'
Tags: