はじめに
OTLPメトリクスパイプラインは、累積合計メトリクスの処理方法をより適切にサポートするために日々Updateされています。この一環として、累積合計の基礎となるメトリクスデータタイプをgauge
タイプからcumulativeCount
タイプに移行しています。このタイプを使用すると、登録されたデータの累積値とデルタ値の両方を簡単に照会できるようになります。New Relicもこれに追随し、累積合計メトリクスの扱いをguage
からcumulativeCount
へ移行していくことになりました。これに伴い、既存のNRQLクエリの実行結果が変わる可能性があります。
本Postでは、影響範囲や移行スケジュール、具体的な対応方法について解説していきます。
影響を受ける可能性があるお客様
2023/04/04以前から、Opentelemetryを利用して累積タイプのメトリクスをNew Relicに送信している場合に影響を受ける可能性があります。
- Prometheusを使用して累積合計メトリクスを登録している場合は影響ありません
影響の内容
累積合計メトリクスに対するチャートやアラートを利用している場合、EoL後にクエリ結果が変わる可能性があります。
移行スケジュール
2023年4月4日以降、次のサポート終了 (EoL) タイムラインに従って累積合計メトリクスを取り込みます。
2023年4月4日
メトリクスタイプとして累積合計メトリクスであるcumulativeCount
タイプが有効化されます。このメトリクスタイプをguage
として取り込む経験は非推奨になりました
- この日付より前に累積合計メトリクスを送信していたアカウントは、
gauge
タイプとしての取り込みを引き続き使用できます - その他のアカウントには、累積合計メトリクスがある場合は
cumulativeCount
メトリクスタイプとして取り込まれるようになりました
4月4日~10月21日
非推奨のguage
タイプへの取り込みを使用するアカウントは、cumulativeCount
タイプの取り込み方式に変更することができます。早期の変更は、使用しているクエリやアラートが EoL によって影響を受けないようにするための最良の方法です
2023年10月22日以降
すべてのアカウントは、累積合計メトリクスはcumulativeCount
タイプに順次移行されます(従来のguage
タイプへの取り込みは廃止されます)
具体的な対応方法
4月4日より前に累積合計タイプのメトリクスを取り込んでいた場合、この期間で、影響を受けるメトリクスを利用するクエリとアラートを任意のタイミングで更新することができます。
本Postではこの変更に対して具体的に何をすれば良いのか、以下ような具体的な対応方法についてご案内します。
- ご利用のアカウントが影響を受けるかどうかを確認する手順
- 具体的なクエリの変更方法
- EoL前に手動で
cumulativeCount
タイプに切り替える手順
影響があるメトリクスがあるか確認する
ご利用のNew Relicアカウントが2023年4月4日以前に累積合計メトリクスをNew Relicに送信していた場合、2023年10月22日にEoLの影響を受けることになります。
お客様のアカウントが影響を受けているかどうかを確認するには、以下のNRQLクエリを実行してください。このクエリは、過去24時間以内にこのEoLの影響を受けたメトリクスが登録されている場合に結果を返します。
FROM NrIntegrationError SELECT count(*)
WHERE newRelicFeature = 'cumulativeSumAsGaugeEoL'
SINCE 24 hours ago
さらに詳しく調べるには、以下のクエリを実行してどのメトリクスが影響を受けているかを確認することができます。これらのメトリクスに関連するモニタリングやアラートは、EoLの日付が変わる前に見直し、更新する必要がある場合があります。
FROM NrIntegrationError SELECT uniques(metricName)
WHERE newRelicFeature = 'cumulativeSumAsGaugeEoL'
LIMIT MAX SINCE 24 hours ago
既存のクエリを変更する
クエリの変更方法について、累積合計メトリクス(metricName)のシンプルな以下のクエリを例にとって説明します。
FROM Metric SELECT latest(<metricName>)
このクエリは、EoLまではgauge
タイプのlatest
値(=累積合計)を評価することになりますが、EoLが発生するとmetricNameに関連付けられた基礎となるメトリクスタイプはcumulativeCount
に変更され、デルタ値が返されるようになります(詳細は"Applendex: 結果が変わる仕組み"を参照してください)。
よって、明確にguage
による累積合計値を求めたい場合は以下のようなクエリに変更する必要があります。
FROM Metric SELECT latest(<metricName>)
WHERE <metricName>[type] = 'gauge'
なお、同じように明確にcumulativeCount
による累積値を求めることもできます。
FROM Metric SELECT latest(<metricName>[cumulative])
WHERE <metricName>[type] = 'cumulativeCount'
OpenTelemetryのベストプラクティスでは、gauge
と cumulativeCount
の各メトリクスタイプについて、累積合計を求める場合とデルタ値を求める場合のクエリの詳細を解説していますので、こちらも参照してください。
EoL前に手動でcumulativeCountタイプに切り替える手順
累積合計メトリクスは、EoLまではgauge
タイプとして保存され続けますが、EoL前にcumuativeCount
タイプを試して、クエリやアラートが期待通りに動作していることを検証することができます。cumuativeCount
タイプを早期に試すには、New Relicに送信するOTLPデータに以下の属性を追加します。
newrelic_metric_type=cumulativeCount
コードベースで直接送信する場合
コードベース内でOTLP計測ライブラリを使用している場合、アプリケーションに適した言語のSDKを参照する必要があります。newrelic_metric_type=cumulativeCount
という属性を個々のメトリックデータポイントやリソース属性レベルに追加する方法であれば、十分でしょう。
ここでは、Java SDKでレポートメトリックに直接属性を追加する例を紹介します。
final var meter = openTelemetry.meterBuilder("manual-instrumentation-scope")
.setInstrumentationVersion("1.0.0")
.build();
final LongCounter counter = meter.counterBuilder("myCumulativeCounter")
.build();
counter.add(1, Attributes.of(stringKey("newrelic_metric_type"), "cumulativeCount"));
コレクター経由で送信する場合
OTLPモニタリングのソースがOTLPコレクターから来る場合、OpenTelemetryattributes processorを使って、エクスポーターに送信する前に属性を追加することができます。
例えば次のスニペットは、newrelic_metric_type=cumulativeCount
属性を挿入します。
…
attributes:
actions:
- key: newrelic_metric_type
action: insert
value: cumulativeCount
…
service:
pipelines:
metrics:
…
processors: [...,attributes,...]
…
重要
newrelic_metric_type=cumulativeCount
の送信を開始すると、受信した累積合計メトリクスがcumulativeCount
タイプに変換されて登録されるようになります。つまり、gauge
タイプをターゲットとして設定された既存のクエリーやアラートは、予期しない結果を受け取ることになります。cumulativeCount
の体験をテストする際にはこの点に留意してください。gauge
タイプに戻すにはnewrelic_metric_type
属性の設定を止めるだけです。必要に応じてテストとして既存のメトリクスは残しつつ、newrelic_metric_type=cumulativeCount
を設定したメトリクスを追加で送信し、その違いを確認してみてください。
結果を確認する
newrelic_metric_type=cumulativeCount
を設定した後、以下クエリで正しく受信できているかどうか確認できます。無事にcumulativeCount
タイプのデータが送られてきていることを確認できたら、前述した方法でクエリを確認し、期待結果が得られているかを確認し、問題があれば必要に応じてクエリを変更しましょう。
FROM Metric SELECT count(*) WHERE %[type] = 'cumulativeCount' TIMESERIES
さいごに
この変更はOTLPのパイプラインの仕組みのupdateに伴い、累積合計メトリクスの扱いが変更されたことに合わせたupdateになります。常に最新の状態を保つことで、より効率の良いデータ保管および分析が可能になります。ぜひこの期間で最新のデータの取り扱いについて理解し、活用できるようにしていきましょう。
Applendex: 結果が変わる仕組み
OTelで累積合計メトリクスを送信している場合、New Relicではguage
タイプでは以下のように登録されます。
{"type": "gauge", "count": 1, "sum": 300, "latest": 300}
{"type": "gauge", "count": 1, "sum": 200, "latest": 200}
{"type": "gauge", "count": 1, "sum": 100, "latest": 100}
これがcumuativeCount
に移行されると以下のように登録されるようになります。
{"type": "CumulativeCount", "count": 100, "cumulative": 300}
{"type": "CumulativeCount", "count": 100, "cumulative": 200}
{"type": "CumulativeCount", "count": 100, "cumulative": 100}
この状態で以下のクエリを実行すると、結果が変わります。
FROM Metric SELECT latest(<metricName>)
gauge
タイプのlatest
値(=累積合計)を評価することになり、300
が返ります。cumulativeCount
では、デフォルトではcount
に登録されている100
(=デルタ値)が返るようになります。
よってこのようなクエリでアラートや可視化を行っている場合は明確に以下のようなクエリに書き換える必要があります(metricNameの後ろに[cumulative]を追加する)。
FROM Metric SELECT latest(<metricName>[cumulative])
本ブログに掲載されている見解は著者に所属するものであり、必ずしも New Relic 株式会社の公式見解であるわけではありません。また、本ブログには、外部サイトにアクセスするリンクが含まれる場合があります。それらリンク先の内容について、New Relic がいかなる保証も提供することはありません。