Skip to content

OpenTelemetry SDK/Collectorの疎通確認

This content is a draft and will not be included in production builds.

Practical OpenTelemetryに書いてあったが、OpenTelemetry 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();

特にアプリケーションや送出先がコンテナの場合、コンテナネットワークの状況によって疎通できなくなる。送出先のポートにアクセスできるかどうかは、bashが使えるならbash単体でTCP疎通確認を行う方法で確認できる。

Terminal window
exec 3<> /dev/tcp/$hostname/4317
exec 4<> /dev/tcp/$hostname/4318

Collectorでパイプラインは構成されているか

Section titled “Collectorでパイプラインは構成されているか”

Collectorはパイプラインを構成していないシグナルを無視するので、トレースやメトリクスのパイプラインが適切に構成されているかを確認する。

service:
pipelines:
metrics:
receivers: [otlp]
exporters: [otlp]
traces:
receivers: [otlp]
exporters: [otlp]

Collectorのエクスポーターに debugexporter を追加して、出力ができるかどうかを確認する。何も流れなければCollectorまでシグナルが届いていない可能性が高い。

exporters:
debug:
# verbosity: detailed
verbosity: basic