Splunk Observability Cloud 用に Node.js アプリケーションを手動でインストルメンテーションする 🔗
Instrumenting applications automatically using the agent of the Splunk Distribution of OpenTelemetry JS covers most needs. Manually instrumenting your application is only necessary when, for example, you need to add custom attributes to spans or need to manually generate spans.
注釈
手動 OTel インストルメンテーションは、Splunk の自動 Node.js インストルメンテーションと完全に互換性があり、Splunk によって完全にサポートされています。
カスタムトレース 🔗
カスタムトレースを 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);
注釈
手動インストルメンテーションの例については、OpenTelemetry 公式ドキュメントの Manual instrumentation を参照してください。
カスタムメトリクス 🔗
To send custom application metrics to Splunk Observability Cloud, add @opentelemetry/api
to your dependencies:
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 HTTP
endpoint: 'http://collector:4318',
},
});
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-http');
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 を参照してください。