You need to enable JavaScript to run this app.
导航

Nodejs应用接入

最近更新时间2023.08.16 17:57:09

首次发布时间2021.12.08 10:38:26

Nodejs应用在不同场景下有不同的接入方式,本文介绍Nodejs应用通过OpenTelemetry接入的详细操作,接入后可以实现自动收集Trace信息、自动生成Metric指标、以及调用链检索、日志检索等功能。

通过OpenTelemetry接入

OpenTelemetry是CNCF的一个可观测性项目,旨在提供可观测性领域的标准化方案,解决观测数据的数据模型、采集、处理、导出等的标准化问题,提供与三方vendor无关的服务。
如果您的应用已经接入了OpenTelemetry的SDK,APMPlus服务端可以接收OpenTelemetry上报的数据。接入APMPlus后,您将获得RED指标生成能力、Trace多维检索、单链路检索、拓扑生成等多项能力。

说明

如果您需要隔离生产和测试数据,请参见将生产和测试数据隔离

使用限制

  • 目前APMPlus仅支持OpenTelemetry中Trace部分数据的处理和Metrics的适配,Logs暂不支持。
  • APMPlus采用Prometheus作为OpenTelemetry Metrics的存储,支持promql对metrics进行查询,具体应用请参见自定义看板报警管理
  • OpenTelemetry Metrics转换为Prometheus Metrics时,存在一定限制:
    • 开源相同,不支持ExponentialHistogram
    • 不支持聚合方式为delta的数据。请不要修改SDK侧的默认聚合配置,保证SDK侧数据的聚合方式为cumulative。

自动接入

APMPlus OpenTelemetry Collector是APMPlus基于OpenTelemetry Collector二次开发的数据采集器,遵守Apache2.0协议,支持采集OpenTelemetry监控数据,同时支持采集Prometheus指标、应用监控数据和K8s资源指标。

  1. 安装APMPlus OpenTelemetry Collector。
    进入接入中心,选择Nodejs语言 > OpenTelemetry > 自动接入,获取如下安装命令,需要区分您的开服区域(region)与网络接入方式(network),appkey是用户的唯一标识。

    kubectl apply -f "http://apmplus-dl-{region}.ivolces.com/server_warehouse/generate_assets/download/apmplus-opentelemetry-k8s/apmplus-opentelemetry-operator-v0.0.17.yaml?appkey={appkey}&network={network}&promReplicas=1"
    

    您可以通过修改url中promReplicas的值来扩展prom副本数。

    说明

    完整安装命令请到接入中心查看,详情请参见如何使用接入中心?

  2. 在服务的k8s deployment配置中增加指定annotation。

    instrumentation.apmplus.volcengine.com/inject-nodejs: 'true'
    

    代码示例如下所示:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: node-demo
      labels:
        app: node-demo
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: node-demo
      template:
        metadata:
          labels:
            app: node-demo
          annotations:
            instrumentation.apmplus.volcengine.com/inject-nodejs: 'true'
        spec:
          containers:
            - name: node-demo
              image: node-demo:latest
              imagePullPolicy: Always
              env:
                - name: CONTAINER_RUNTIME
                  value: "k8s"
    
  3. 重新启动应用。