Splunk Observability Cloud 用に Node.js アプリケーションを手動でインストルメンテーションする
スパンにカスタム属性を追加する必要がある場合、またはスパンとメトリクスを手動で生成する必要がある場合は、Node.js アプリケーションを手動でインストルメンテーションします。Splunk Observability Cloud 用に .Node.js アプリケーションをインストルメンテーションする方法については、続きをお読みください。
Splunk Distribution of OpenTelemetry Node.js のエージェントを使ってアプリケーションを自動的にインストルメンテーションすれば、ほとんどのニーズに対応できます。アプリケーションを手動でインストルメンテーションする必要があるのは、たとえば、スパンにカスタム属性を追加する必要があるときや、スパンを手動で生成する必要があるときだけです。
カスタムトレース
カスタムトレースを Splunk Observability Cloud に送信するには、必要な依存関係を追加し、トレースを設定します:
const { start } = require('@splunk/otel');
const opentelemetry = require('@opentelemetry/api');
start({
serviceName: 'my-service',
});
const tracer = opentelemetry.trace.getTracer('example-app', '0.1.0');
function randomNumber() {
return tracer.startActiveSpan('make-random', (span) => {
const result = Math.random() * 42;
span.setAttribute('random-result', result);
span.end();
return result;
});
}
setInterval(() => {
console.log(randomNumber());
}, 1000);
カスタムメトリクス
カスタムアプリケーションメトリクスを Splunk Observability Cloud に送信するには、依存関係に @opentelemetry/api を追加します:
const { start } = require('@splunk/otel');
const { Resource } = require('@opentelemetry/resources');
const { metrics } = require('@opentelemetry/api');
// All fields are optional.
start({
// Takes preference over OTEL_SERVICE_NAME environment variable
serviceName: 'my-service',
metrics: {
// The suggested resource is filled in using OTEL_RESOURCE_ATTRIBUTES
resourceFactory: (suggestedResource: Resource) => {
return suggestedResource.merge(new Resource({
'my.property': 'xyz',
'build': 42,
}));
},
exportIntervalMillis: 1000, // default: 5000
// The default exporter used is OTLP over gRPC
endpoint: 'http://collector:4317',
},
});
const meter = metrics.getMeter('my-meter');
const counter = meter.createCounter('clicks');
counter.add(3);
カスタムメトリクスリーダーとエクスポーターの設定
metricReaderFactory 設定を使用して、カスタム・エクスポーターとカスタム・リーダーを提供することができます。
metricReaderFactory の使用は、exportInterval と endpoint の設定を無効にします。次の例は、カスタム・エクスポーターを提供する方法を示しています:
const { start } = require('@splunk/otel');
const { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');
const { OTLPMetricExporter } = require('@opentelemetry/exporter-metrics-otlp-http');
const { PeriodicExportingMetricReader } = require('@opentelemetry/sdk-metrics-base');
start({
serviceName: 'my-service',
metrics: {
metricReaderFactory: () => {
return [
new PrometheusExporter(),
new PeriodicExportingMetricReader({
exportIntervalMillis: 1000,
exporter: new OTLPMetricExporter({ url: 'http://localhost:4318' })
})
]
},
},
});
集計時間のタイプを選択する
集計の時間性は、データがどのように時系列で報告されるかを表します。
2つの異なる集計時間を定義できます:
-
AggregationTemporality.CUMULATIVE:カウンタやヒストグラムのような累積メトリクスは、任意の開始点から連続的に合計されます。この場合、startの呼び出しで設定されます。これがデフォルトの一時性です。 -
AggregationTemporality.DELTA:メトリクスは、エクスポート間隔によって設定される最後のメトリクス収集ステップからの相対値で合計されます。
カスタムメトリクスで集計の一時性を構成するには、例のように AggregationTemporality を使用します:
const { start } = require('@splunk/otel');
const { OTLPMetricExporter } = require('@opentelemetry/exporter-metrics-otlp-grpc');
const { AggregationTemporality, PeriodicExportingMetricReader } = require('@opentelemetry/sdk-metrics-base');
start({
serviceName: 'my-service',
metrics: {
metricReaderFactory: () => {
return [
new PeriodicExportingMetricReader({
exporter: new OTLPMetricExporter({
temporalityPreference: AggregationTemporality.DELTA
})
})
]
},
},
});
集計の一時性についての詳細は、GitHub の「https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/data-model.md#sums」を参照してください。