Мониторинг облака с использованием Datadog в Apache APISIX
API7.ai
November 12, 2021

С увеличением сложности ИТ-продуктов и разработки приложений для конечных пользователей, мониторинг становится неотъемлемой частью доставки любого приложения. Кроме того, для удовлетворения бесконечного спроса на быстрые циклы обновлений при обеспечении стабильности, оптимизированной производительности и поддержания идеального баланса между показателями уровня обслуживания (SLI), целями уровня обслуживания (SLO) и соглашениями об уровне обслуживания (SLA) — эффективный мониторинг чрезвычайно важен.
Как продукт для управления облачными API, Apache APISIX отделяет задачи наблюдаемости от приложения, что дает разработчикам преимущество в создании приложений, сосредоточенных исключительно на бизнес-логике, в то время как Apache APISIX берет на себя заботу о наблюдаемости для платформы их выбора.
Apache APISIX недавно выпустил новый плагин: APISIX-Datadog, чтобы обеспечить более глубокую интеграцию с 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_ip | IP-адрес балансировщика апстрима, который обработал текущий запрос. |
| response_status | Код статуса HTTP-ответа. |
| scheme | Схема, использованная для выполнения запросов, например HTTP, gRPC, gRPCs и т.д. |
Плагин поддерживает буфер с таймером. Когда таймер истекает, плагин APISIX-Datadog отправляет буферизованные метрики пакетом на локально запущенный сервер dogstatsd. Этот подход менее ресурсоемкий (хотя это может быть незначительно, так как UDP-сокеты очень легковесны) за счет повторного использования одного и того же UDP-сокета и не перегружает сеть постоянно, так как таймер можно настроить.
Шаги для запуска агента Datadog
- Если вы уже используете Datadog в своей инфраструктуре, у вас должен быть установлен агент datadog в ваших системах. Это может быть либо docker-контейнер, либо pod, либо бинарный файл для соответствующего пакетного менеджера. В этом случае вы готовы к работе. Просто убедитесь, что порт 8125/udp разрешен через брандмауэр (если есть), т.е. более конкретно, агент Apache APISIX может достичь порта 8125 агента datadog. Вы можете пропустить этот подраздел.
Чтобы узнать больше о том, как установить полноценный агент datadog, посетите здесь.
- Если вы новичок в Datadog
- Сначала создайте учетную запись, посетив www.datadoghq.com.
- Сгенерируйте API-ключ.

- Плагин 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 } } }'