Splunk Observability Cloud 用に Node.js アプリケーションを手動でインストルメンテーションする 🔗
OpenTelemetry Node.js の Splunk ディストリビューションのエージェントを使用してアプリケーションを自動的にインストルメンテーションすることで、ほとんどのニーズに対応できます。アプリケーションを手動でインストルメンテーションする必要があるのは、たとえばスパンにカスタム属性を追加する必要がある場合や、スパンを手動で生成する必要がある場合だけです。
注釈
手動 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 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 を参照してください。