OpenTelemetry SDK/Collectorの疎通確認
This content is a draft and will not be included in production builds.
Practical OpenTelemetryに書いてあったが、OpenTelemetry SDKはアプリケーションの動作を阻害しないために、パイプラインになんらかのエラーがあっても正常に振る舞う。これ自体は良いことだが、逆に何もエラーにならないので疎通ができない場合の情報があまりない。
SDKで計装ができているか
Section titled “SDKで計装ができているか”計装できているかどうかは、コンソール用のエクスポーターがあるのでそれを使う。
import { NodeSDK } from "@opentelemetry/sdk-node";import { PeriodicExportingMetricReader, ConsoleMetricExporter,} from "@opentelemetry/sdk-metrics";//import {// OTLPMetricExporter,//} from "@opentelemetry/exporter-metrics-otlp-grpc";import { resourceFromAttributes } from "@opentelemetry/resources";import { ATTR_SERVICE_NAME } from "@opentelemetry/semantic-conventions";import { ATTR_SERVICE_NAMESPACE } from "./semconv";
const sdk = new NodeSDK({ resource: resourceFromAttributes({ [ATTR_SERVICE_NAMESPACE]: "diamond", [ATTR_SERVICE_NAME]: "diamond-writer", }), metricReader: new PeriodicExportingMetricReader({ //exporter: new OTLPMetricExporter(), exporter: new ConsoleMetricExporter(), exportIntervalMillis: 60 * 1000, }),});sdk.start();SDKから送出先に接続できるか
Section titled “SDKから送出先に接続できるか”特にアプリケーションや送出先がコンテナの場合、コンテナネットワークの状況によって疎通できなくなる。送出先のポートにアクセスできるかどうかは、bashが使えるならbash単体でTCP疎通確認を行う方法で確認できる。
exec 3<> /dev/tcp/$hostname/4317exec 4<> /dev/tcp/$hostname/4318Collectorでパイプラインは構成されているか
Section titled “Collectorでパイプラインは構成されているか”Collectorはパイプラインを構成していないシグナルを無視するので、トレースやメトリクスのパイプラインが適切に構成されているかを確認する。
service: pipelines: metrics: receivers: [otlp] exporters: [otlp] traces: receivers: [otlp] exporters: [otlp]debugexporterで出力ができるか
Section titled “debugexporterで出力ができるか”Collectorのエクスポーターに debugexporter を追加して、出力ができるかどうかを確認する。何も流れなければCollectorまでシグナルが届いていない可能性が高い。
exporters: debug: # verbosity: detailed verbosity: basic