Мониторинг Node.js приложений с помощью Proto Observability

Подключение трейсинга и сбора метрик для Node.js приложений.

На этой странице:

Введение

Общий процесс подключения Node JS приложения на мониторинг:

  1. Установка ProtoOBP Агента
  2. Установка трейсера

Установка Node.js трейсера ProtoOBP

  1. Установка 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
      
  2. В коде приложения первой строкой добавьте импорт модуля:

     const tracer = require('pobp-trace').init();
    
  3. Добавьте следующие переменные окружения:

    • export POBP_SERVICE=my_service - Имя сервиса
    • export POBP_RUNTIME_METRICS_ENABLED="true" - Включение runtime метрик Node JS
    • export 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"

  1. В спецификации пода приложения добавьте анотацию и лейбл с версией 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
  1. В спецификации пода добавьте 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

Документация в разработке.

Дополнительная инструментация вызовов

Документация в разработке.