Мониторинг Node.js приложений с помощью Proto Observability
На этой странице:
- Введение
- Установка Node.js трейсера ProtoOBP
- Если приложение работает в Kubernetes
- Поддерживаемые технологии
- Сбор runtime метрик Node.js
- Дополнительная инструментация вызовов
Введение
Общий процесс подключения Node JS приложения на мониторинг:
- Установка ProtoOBP Агента
- Установка трейсера
Установка Node.js трейсера ProtoOBP
-
Установка
pobp-trace
модуля:-
В
.npmrc
добавьте аутентификационный токен для репозитория ProtoOBP::registry=https://git.proto.group/projects/125/packages/npm/ //git.proto.group/api/v4/projects/125/packages/npm/:_authToken=<your_token>
Где
<your_token>
– значение авторизационного токена из вашего лицензионного сертификата (полетокен
илипароль
). -
Выполните установку модуля из репозитория ProtoOBP:
npm install --no-audit https://git.proto.group/api/v4/projects/125/packages/npm/pobp-trace/-/pobp-trace-2.2.2.tgz
-
-
В коде приложения первой строкой добавьте импорт модуля:
const tracer = require('pobp-trace').init();
-
Добавьте следующие переменные окружения:
export POBP_SERVICE=my_service
- Имя сервисаexport POBP_RUNTIME_METRICS_ENABLED="true"
- Включение runtime метрик Node JSexport POBP_DOGSTATSD_NON_LOCAL_TRAFFIC="true"
- Обязательно при включении метрикexport POBP_TRACE_EXPERIMENTAL_RUNTIME_ID_ENABLED="true"
- Обязательно при включении метрикexport POBP_TRACE_TELEMETRY_ENABLED="false"
Пример добаления токена аутентификации в Gitlab CI
-
в настройках проекта в Gitlab добавьте переменную окружения (
Проект
->Settings
->CI/CD
->Variables
):- имя:
PROTOOBP_INSTALL_TOKEN_KEY
, значение = ваши данные из лицензионного сертификата (полепароль
илитокен
)
- имя:
-
.gitlab-ci.yml
:script: - echo -e ":registry=https://git.proto.group/projects/125/packages/npm/\n//git.proto.group/api/v4/projects/125/packages/npm/:_authToken=${PROTOOBP_INSTALL_TOKEN_KEY}" >> .npmrc
Если приложение запускается в Docker контейнере
Выполните пункты 1 и 2 указанные выше и добавьте следующие переменные окружения:
ENV POBP_AGENT_HOST="protoobp-agent" #Укажите IP адрес хоста, где запущен ProtoOBP агент, доступные из сети Docker контейнера. В случае если агент запускается в виде Docker контейнера, то достаточно указать имя контейнера
ENV POBP_SERVICE="my_service"
ENV POBP_RUNTIME_METRICS_ENABLED="true"
ENV POBP_DOGSTATSD_NON_LOCAL_TRAFFIC="true"
ENV POBP_TRACE_EXPERIMENTAL_RUNTIME_ID_ENABLED="true"
ENV POBP_TRACE_TELEMETRY_ENABLED="false"
Если приложение работает в Kubernetes
Убедитесь, что у вас успешно установлен и настроен ProtoOBP Агент для Kubernetes.
Без использования автоматического подключения трейсера
Дополнительно необходимо передать поду переменную окружения POBP_AGENT_HOST
со значением IP адреса воркер-ноды, а также переменные окружения для связи трейсов с инфраструктурой (имя k8s кластера нужно задать вручную).
apiVersion: apps/v1
kind: Deployment
#(...)
spec:
containers:
- name: "<CONTAINER_NAME>"
image: "<CONTAINER_IMAGE>/<TAG>"
env:
- name: POBP_SERVICE
value: dispatch
- name: POBP_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: POBP_TAGS
value: "pod_name:$(POD_NAME),node:$(NODE_NAME),kube_namespace:$(POD_NAMESPACE),kube_cluster_name:<my_cluster_name>"
С использованием автоматического подключения трейсера
Агент ProtoOBP в K8s кластере по умолчанию инструментирует Node.js приложения с лейблом: admission.proto.group/enabled: "true"
- В спецификации пода приложения добавьте анотацию и лейбл с версией NodeJS трейсинг агента:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
...
...
template:
metadata:
annotations:
admission.proto.group/js-lib.version: "v1"
creationTimestamp: null
labels:
admission.proto.group/enabled: "true" # Включение автоматической инструментации
tags.proto.group/service: "my_service" #Укажите имя сервиса
service: my_service
- В спецификации пода добавьте
imagePullSecrets
для доступа к Docker репозиторию ProtoOBP. Подробнее о добавление Secret указано в документации Установка агента в Kubernetes
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
...
...
template:
metadata:
annotations:
admission.proto.group/js-lib.version: "latest" #Рекомендуем использовать последнюю версию NodeJS трейсинг агента
creationTimestamp: null
labels:
admission.proto.group/enabled: "true" # Включение автоматической инструментации
service: my_service
spec:
containers:
...
...
imagePullSecrets:
- name: protoobp-registry
Автоматическое подключение трейсера без использования лейблов
В конфигурации агента вы можете включить автоматическую инструментацию без использования лейблов.
Обратите внимание
При этом все равно необходимо добавлять аннотацию к поду, в которой указать версию образа библиотеки инструментации.Поддерживаемые технологии
Поддерживаемые версии Node.js
Поддерживаются актуальные LTS версии Node.js.
Автоматическая инструментация веб-фрейморков
Модуль | Версии | Поддержка | Примечания |
---|---|---|---|
connect | >=2 |
✅ | |
express | >=4 |
✅ | Поддерживает Sails, Loopback |
fastify | >=1 |
✅ | |
graphql | >=0.10 |
✅ | Поддерживает Apollo Server и express-graphql |
gRPC | >=1.13 |
✅ | |
hapi | >=2 |
✅ | Поддерживает @hapi/hapi версии >=17.9 |
koa | >=2 |
✅ | |
microgateway-core | >=2.1 |
✅ | Apigee Edge |
moleculer | >=0.14 |
✅ | |
next | >=9.5 |
✅ | Для CLI требуется NODE_OPTIONS='-r pobp-trace/init' . |
paperplane | >=2.3 |
✅ | Не поддерживается в режиме serverless-mode |
restify | >=3 |
✅ |
Автоматическая инструментация нативных модулей
Модуль | Поддержка | Примечания |
---|---|---|
dns | ✅ | |
fs | ✅ | |
http | ✅ | |
https | ✅ | |
http2 | Частичная поддержка | Только HTTP2 клиенты, а не серверы. |
net | ✅ |
Хранилища данных
Модуль | Версии | Поддержка | Примечания |
---|---|---|---|
cassandra-driver | >=3 |
✅ | |
couchbase | ^2.4.2 |
✅ | |
elasticsearch | >=10 |
✅ | Поддерживается @elastic/elasticsearch версии >=5 |
ioredis | >=2 |
✅ | |
knex | >=0.8 |
✅ | Только паспространение контекста |
memcached | >=2.2 |
✅ | |
mongodb-core | >=2 |
✅ | Поддерживается Mongoose |
mysql | >=2 |
✅ | |
mysql2 | >=1 |
✅ | |
oracledb | >=5 |
✅ | |
pg | >=4 |
✅ | Поддерживается pg-native когда используется с pg |
redis | >=0.12 |
✅ | |
sharedb | >=1 |
✅ | |
tedious | >=1 |
✅ | SQL Server драйвер для mssql и sequelize |
Совместимость с системами очередей сообщений
Модуль | Версии | Поддержка | Примечания |
---|---|---|---|
@google-cloud/pubsub | >=1.2 |
✅ | |
amqp10 | >=3 |
✅ | Поддерживаются AMQP 1.0 брокеры, такие как ActiveMQ или Apache Qpid) |
amqplib | >=0.5 |
✅ | Поддерживаются AMQP 0.9 брокеры такие как RabbitMQ или Apache Qpid) |
generic-pool | >=2 |
✅ | |
kafkajs | >=1.4 |
✅ | |
kafka-node | В разработке | ||
rhea | >=1 |
✅ |
Совместимость с Promise библиотеками
Модуль | Версии | Поддержка |
---|---|---|
bluebird | >=2 |
✅ |
promise | >=7 |
✅ |
promise-js | >=0.0.3 |
✅ |
q | >=1 |
✅ |
when | >=3 |
✅ |
Совместимость с логгерами
Модуль | Версии | Поддержка |
---|---|---|
bunyan | >=1 |
✅ |
paperplane | >=2.3.2 |
✅ |
pino | >=2 |
✅ |
winston | >=1 |
✅ |
Сбор runtime метрик Node.js
Помимо трейсов, ошибок и метрик по трейсам, Proto OBP также собирает runtime метрики Node.js приложений. Runtime метрики отображаются на дашборде конкретного инстанса сервиса.
Правила алертинга по метрикам Node.js runtime
Документация в разработке.
Дополнительная инструментация вызовов
Документация в разработке.