Мониторинг 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Используя этот блок можно:
- добавлять дополнительные параметры конфигурации
- активировать или реконфигурировать инструментацию
Скоро
Следуйте инструкциям из официальной документации 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 трейс в минуту будет отправлен Агенту. |
Скоро
Следуйте инструкциям из официальной документации 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
Скоро
Следуйте инструкциям из официальной документации 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>"
Скоро
Следуйте инструкциям из официальной документации OpenTelemetry для Ruby:
Диагностика неполадок
Если после подключения трейсера данные в интерфейсе ProtoOBP не отображаются:
- Проверьте, что установлены все необходимые переменные окружения для работы трейсера.
- Дайте нагрузку на приложение (вызовы к приложению).
- Проверьте логи запуска вашего приложения (stdout или файл), в них при успешном подключении трейсера должны быть записи от трейсера.
- Проверьте, что от контейнера/пода с приложением есть сетевой доступ до Агента по порту
8126/tcpи8125/udp(в случае Kubernetes – поNodeIP). - Добавьте переменные окружения к приложению для вывода отладочной инфинформации:
DD_TRACE_STARTUP_LOGS=true - Заново дайте назрузку на приложение и проверьте данные в интерфейсе ProtoOBP.