NodeJS 如何在Cloud Trace中摄取浏览器OpenTelemetry跟踪?

owfi6suc  于 2023-08-04  发布在  Node.js
关注(0)|答案(2)|浏览(115)

我正在使用https://cloud.google.com/trace/docs/setup/nodejs-ot的指令将Node.js OpenTelemetrics收集到Cloud Trace。现在我想添加前端堆栈跟踪。
我尝试添加@opentelemetry/exporter-trace-otlp-http

import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
import { registerInstrumentations } from '@opentelemetry/instrumentation';
import { FetchInstrumentation } from '@opentelemetry/instrumentation-fetch';
import { Resource } from '@opentelemetry/resources';
import {
  ConsoleSpanExporter,
  SimpleSpanProcessor,
  WebTracerProvider,
} from '@opentelemetry/sdk-trace-web';
import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';

const consoleExporter = new ConsoleSpanExporter();

const collectorExporter = new OTLPTraceExporter({
  headers: {},
});

const provider = new WebTracerProvider({
  resource: new Resource({
    [SemanticResourceAttributes.SERVICE_NAME]: 'contra-web-app',
  }),
});

const fetchInstrumentation = new FetchInstrumentation({});

fetchInstrumentation.setTracerProvider(provider);

provider.addSpanProcessor(new SimpleSpanProcessor(consoleExporter));

provider.addSpanProcessor(new SimpleSpanProcessor(collectorExporter));

provider.register();

registerInstrumentations({
  instrumentations: [fetchInstrumentation],

  tracerProvider: provider,
});

export const TraceProvider = ({ children }) => {
  return <>{children}</>;
};

字符串
我看到它试图向/v1/traces发送数据。但是,该端点上没有侦听任何内容。
我需要部署什么到/v1/traces才能让云跟踪摄取跟踪?

goucqfw6

goucqfw61#

经过检查,这是一个正在积极开发的实验包。[1]最好的方法是提交一个功能请求,让产品工程师审查,如果你需要这个用例。
[1][https://www.npmjs.com/package/@opentelemetry/exporter-trace-otlp-http](https://www.npmjs.com/package/@opentelemetry/exporter-trace-otlp-http)

kqhtkvqz

kqhtkvqz2#

您需要部署opentelemetry-collector
我最终使用的方法是使用Helm chart
然后,您需要配置一个otlp接收器,例如

otlp:
  protocols:
    http:
      include_metadata: true
      cors:
        allowed_origins:
          - https://gajus.com
      endpoint: ${env:MY_POD_IP}:4318

字符串
并使用Ingress将其暴露到Web上。
然后,您需要配置googlecloudexporter(它已经捆绑在Helm chart中,因此您只需要配置它)。

exporters:
  googlecloud:
    retry_on_failure:
      enabled: false
    log:
      default_log_name: opentelemetry.io/collector-exported-log


然后,您需要提供GOOGLE_APPLICATION_CREDENTIALS凭证给此服务,并使用Cloud Trace API访问范围,然后您可以像这样挂载:

extraVolumes:
    - name: secret-mount
      secret: 
        secretName: contra-opentelemetry-collector-google-cloud
        optional: false
  extraVolumeMounts:
    - name: secret-mount
      mountPath: /var/secrets/google
  extraEnvs:
    - name: GOOGLE_APPLICATION_CREDENTIALS
      value: /var/secrets/google/key.json


整个事情可能看起来像这样:

app:
  deployment:
    version: '0.0.0'
opentelemetry-collector:
  mode: deployment
  extraVolumes:
    - name: secret-mount
      secret: 
        secretName: contra-opentelemetry-collector-google-cloud
        optional: false
  extraVolumeMounts:
    - name: secret-mount
      mountPath: /var/secrets/google
  extraEnvs:
    - name: GOOGLE_APPLICATION_CREDENTIALS
      value: /var/secrets/google/key.json
  ports:
    otlp:
      enabled: true
      containerPort: 4317
      servicePort: 4317
      hostPort: 4317
      protocol: TCP
      appProtocol: grpc
    otlp-http:
      enabled: true
      containerPort: 4318
      servicePort: 4318
      hostPort: 4318
      protocol: TCP
    jaeger-compact:
      enabled: false
    jaeger-thrift:
      enabled: false
    jaeger-grpc:
      enabled: false
    zipkin:
      enabled: false
    metrics:
      enabled: false
  config:
    receivers:
      jaeger: null
      prometheus: null
      zipkin: null
      otlp:
        protocols:
          http:
            include_metadata: true
            cors:
              allowed_origins:
                - https://gajus.com
            endpoint: ${env:MY_POD_IP}:4318
    exporters:
      googlecloud:
        retry_on_failure:
          enabled: false
        log:
          default_log_name: opentelemetry.io/collector-exported-log
    service:
      pipelines:
        traces:
          receivers:
            - otlp
          exporters:
            - googlecloud
        metrics: null
        logs: null

相关问题