Мониторинг Ruby приложений с помощью Proto Observability
На этой странице:
Введение
Общий процесс подключения Ruby приложения на мониторинг:
- Установка ProtoOBP Агента.
- Установка Ruby трейсера.
- Конфигурирование трейсера.
Установка трейсера
Rails или Hanami
Добавьте
datadoggem в ваш Gemfile:source 'https://rubygems.org' gem 'datadog', require: 'datadog/auto_instrument'Установите gem с помощью
bundle installСоздайте файл
config/initializers/datadog.rbсодержащий:Datadog.configure do |c| c.remote.enabled = false # обязательно c.telemetry.enabled = false # обязательно c.tracing.contrib.global_default_service_name.enabled = true # обязательно c.service = 'my-app-name' # имя сервиса для отображения в интерфейсе ProtoOBP, необходимо задать c.env = ENV['RACK_ENV'] # окружение для отображения в интерфейсе ProtoOBP, необходимо задать # дополнительная конфигурация интеграций и трейсера может быть здесь endИспользуя этот блок можно:
- добавлять дополнительные параметры конфигурации
- активировать или реконфигурировать инструментацию
Этот вариант предназначен для миграции приложений, уже инструментированных агентом New Relic: их распределённые трейсы направляются в Proto Observability Platform без изменения кода. Для новых приложений он не рекомендуется — используйте один из трейсеров, рекомендованных на этой странице.
Подробнее: Подключение приложений с трейсерами New Relic.
Следуйте инструкциям из официальной документации OpenTelemetry для Ruby:
Конфигурирование трейсера
| Параметр | Переменная окружения | Тип | Значение по умолчанию | Описание |
|---|---|---|---|---|
| Глобальные | ||||
agent.host | DD_AGENT_HOST | String | 127.0.0.1 | Имя хоста Агента, куда будут отсылаться трейсы. |
agent.port | DD_TRACE_AGENT_PORT | Integer | 8126 | Порт Агента, куда будут отсылаться трейсы. |
diagnostics.debug | DD_TRACE_DEBUG | Bool | false | Включает или отключает debug режим. Выводит дополнительные логи. Не рекомендуется для продуктивного контура |
diagnostics.startup_logs.enabled | DD_TRACE_STARTUP_LOGS | Bool | nil | Выводит конфигурацию и диагностические сообщения в лог. |
env | DD_ENV | String | nil | Название окружения вашего приложения, например, production, staging, и тд |
service | DD_SERVICE | String | Ruby filename | Имя вашего приложения, например, billing-api |
tags | DD_TAGS | Hash | nil | Кастомные теги в виде пар ключ:значение разделенные , (например layer:api,team:intake) |
version | DD_VERSION | String | nil | Версия вашего приложения (например 2.5, 202503181415, 1.3-alpha и тд) |
telemetry.enabled | DD_INSTRUMENTATION_TELEMETRY_ENABLED | Bool | true | Отправка телеметрии в Datadog. Рекомендуемое значение false. При использовании Агент ProtoOBP телеметрия в Datadog не отправляется в любом случае, но при включении может засорять лог сообщения о недоступности эндпоинта приема телеметрии на агенте |
| Трейсинг | ||||
tracing.contrib.peer_service_mapping | DD_TRACE_PEER_SERVICE_MAPPING | Hash | nil | Переопределяет имена сервисов peer.service для всей инструментации. Принимает список вида old_value1:new_value1, old_value2:new_value2, ... |
tracing.contrib.global_default_service_name.enabled | DD_TRACE_REMOVE_INTEGRATION_SERVICE_NAMES_ENABLED | Bool | false | Изменяет дефолтное значение service_name для всей инструментации. Рекомендуемое значение true |
tracing.enabled | DD_TRACE_ENABLED | Bool | true | Включает или отключает трейсинг. Если установлено в false инструментация все еще будет работать, но трейсы не будут отсылаться в Агента |
tracing.header_tags | DD_TRACE_HEADER_TAGS | Array | nil | Позволяет записывать заданные HTTP заголовки как теги спанов. |
tracing.instrument(<integration-name>, <options...>) | Активирует инструментацию заданной библиотеки. | |||
tracing.log_injection | DD_LOGS_INJECTION | Bool | true | Инжектирует информацию о трейсах в лог Rails. Поддерживается дефолтный логгер. (ActiveSupport::TaggedLogging), lograge, и semantic_logger. |
tracing.sampling.default_rate | DD_TRACE_SAMPLE_RATE | Float | nil | Устанавливает рейт сбора трейсов между 0.0 (0%) and 1.0 (100%). |
tracing.sampling.rate_limit | DD_TRACE_RATE_LIMIT | Integer | 100 (в секунду) | Устанавливает максимальное количество трейсов для сбора в секунду. |
tracing.trace_id_128_bit_generation_enabled | DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED | Bool | true | true для генерации 128 битного trace ID и false для генерации 64 битного trace ID |
tracing.report_hostname | DD_TRACE_REPORT_HOSTNAME | Bool | false | Добавляет тег hostname к трейсам |
apm.tracing.enabled | DD_APM_TRACING_ENABLED | Bool | true | Включает или отключает APM трейсинг. Если false, инструментация будет запускаться, но только один APM трейс в минуту будет отправлен Агенту. |
Этот вариант предназначен для миграции приложений, уже инструментированных агентом New Relic: их распределённые трейсы направляются в Proto Observability Platform без изменения кода. Для новых приложений он не рекомендуется — используйте один из трейсеров, рекомендованных на этой странице.
Подробнее: Подключение приложений с трейсерами New Relic.
Следуйте инструкциям из официальной документации OpenTelemetry для Ruby:
Примеры конфигурации
Если приложение запускается в Docker контейнере
Выполните пункты по установке и настройке трейсера, указанные выше, и добавьте следующие переменные окружения:
DD_AGENT_HOST– адрес Агента, на который будет отсылать данные трейсер:- если Агент запущен в Docker контейнере, укажите имя Docker контейнера Агента:Убедитесь, что контейнер Агента и контейнер приложения находятся в одной Docker сети. Адрес агента должен быть доступен из Docker контейнера приложения.
ENV DD_AGENT_HOST="protoobp-agent" - если Агент запущен на хосте как сервис (не в контейнере):Убедитесь что в конфигурации Агента разрешен прием APM данных от контейнеров:
ENV DD_AGENT_HOST="host.docker.internal"apm_config: apm_non_local_traffic: true
- если Агент запущен в Docker контейнере, укажите имя Docker контейнера Агента:
Пример Dockefile:
# необходимые переменные окружения для работы трейсера Datadog
ENV DD_SERVICE="имя_вашего_сервиса" \
DD_TRACE_TELEMETRY_ENABLED="false"
Далее задайте значение переменной DD_AGENT_HOST – адрес Агента, на который будет отсылать данные трейсер, например, в файле docker-compose.yaml:
DD_AGENT_HOST: protoobp-agent
Этот вариант предназначен для миграции приложений, уже инструментированных агентом New Relic: их распределённые трейсы направляются в Proto Observability Platform без изменения кода. Для новых приложений он не рекомендуется — используйте один из трейсеров, рекомендованных на этой странице.
Подробнее: Подключение приложений с трейсерами New Relic.
Следуйте инструкциям из официальной документации OpenTelemetry для Ruby:
Если приложение работает в Kubernetes
Убедитесь, что у вас успешно установлен и настроен ProtoOBP Агент для Kubernetes.
Дополнительно необходимо передать поду переменную окружения DD_AGENT_HOST со значением IP адреса воркер-ноды, а также переменные окружения для связи трейсов с инфраструктурой (имя k8s кластера нужно задать вручную).
apiVersion: apps/v1
kind: Deployment
#(...)
spec:
containers:
- name: "<CONTAINER_NAME>"
image: "<CONTAINER_IMAGE>/<TAG>"
env:
- name: DD_SERVICE
value: dispatch
- name: DD_AGENT_HOST
valueFrom:
fieldRef:
fieldPath: status.hostIP
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: DD_TAGS
value: "pod_name:$(POD_NAME),node:$(NODE_NAME),kube_namespace:$(POD_NAMESPACE),kube_cluster_name:<my_cluster_name>"
Этот вариант предназначен для миграции приложений, уже инструментированных агентом New Relic: их распределённые трейсы направляются в Proto Observability Platform без изменения кода. Для новых приложений он не рекомендуется — используйте один из трейсеров, рекомендованных на этой странице.
Подробнее: Подключение приложений с трейсерами New Relic.
Следуйте инструкциям из официальной документации OpenTelemetry для Ruby:
Диагностика неполадок
Если после подключения трейсера данные в интерфейсе ProtoOBP не отображаются:
- Проверьте, что установлены все необходимые переменные окружения для работы трейсера.
- Дайте нагрузку на приложение (вызовы к приложению).
- Проверьте логи запуска вашего приложения (stdout или файл), в них при успешном подключении трейсера должны быть записи от трейсера.
- Проверьте, что от контейнера/пода с приложением есть сетевой доступ до Агента по порту
8126/tcpи8125/udp(в случае Kubernetes – поNodeIP). - Добавьте переменные окружения к приложению для вывода отладочной инфинформации:
DD_TRACE_STARTUP_LOGS=true - Заново дайте назрузку на приложение и проверьте данные в интерфейсе ProtoOBP.