New Relicで新しいAPIのメトリクスが見れない!ってなった件
タイトルの通りですがNew Relicで新しいAPIのメトリクスが見れない!という事象に遭遇しました。
結論からまとめるとNew Relic側で Metrics Grouping Issues
が検知されたことにより自動作成されたルールによって新しいメトリクスが拒否されるようになっていました。
Metrics Grouping Issues (MGI) とは
New Relicのドキュメント[1]によると、Newrelic APM、Browser、Mobile機能を使用している場合に
- 外部サービスの呼び出し
- UUIDやトランザクション名などのカスタムインストルメンテーション
がURLに含まれることでトランザクション名が無限に近いかたちで生成されます。
具体的には例を見ていただければわかりやすいですが、
これによりNew Relicのチャートやテーブルに表示されるメトリクスが膨大になり有用性が下がってしまいます。
New Relicではこのような状態を Metrics Grouping Issues
(以下、MGI)と呼びます。
起きていたこと
New Relicではプラットフォームのパフォーマンス低下を防ぐため、自動的にMetric normalization rulesに DENY_NEW_METRICS
というルールを作成します。[2]
このルールはその名の通り新しいメトリクスの受け入れを拒否するもので、「New Relicで新しいAPIのメトリクスが見れない!」という事象の理由でした。
このルールの削除や無効化はNew Relicユーザーが行うことはできず、New Relicのサポートに問い合わせる必要があります。
またルールを削除や無効化したところで、MGIが再度検知された場合にはまた作成されるため、根本的な解決を行う必要があります。
MGIへの対応
New Relicのトランザクション名をコード内で手動設定している場合には、そのなかにUUIDなどパターンが膨大になる文字列を含めないようにすることで対応できますが、New Relicでは自動計装によって自動生成されるトランザクション名をそのまま利用している方が多いかと思います。
その場合にはMetric normalization rulesにカスタムの正規化ルールを追加して対応します。
以下の画像の例のように、静的コンテンツを配信するURLのパターンが多くあるが個別のパフォーマンスを見る必要がない(と判断できる)場合、そのURLを正規化してまとめることでMGIの発生を防ぐことができます。[3]
画像にあるController以外にもViewやAppdex、DataStoreなどがあるので必要に応じて正規化した後、New Relicのサポートに問い合わせて DENY_NEW_METRICS
ルールを無効化してもらうことで新しいAPIのメトリクスを見ることができるようになります。
MGIの詳細については DENY_NEW_METRICS
の3点リーダーの MGI details
から確認することができます。
MGIの検知
MGIの発生によって DENY_NEW_METRICS
ルールが作成されてもメールが来るなどの通知はされないため、仕組みとして検知する必要があります。
Metric normalization rulesの画面を定期的に確認するのは面倒なので、ドキュメント[3:1]記載のイベントを拾うNRQLを作成してSlack通知などを行うアラートルールを作成するのがよいかと思います。
Check/Query NrIntegrationError for events with name
MetricCardinalityNearLimit
. The creation of these events happens when your app is getting near the cardinality limit.
終わりに
MGIが発生してすでに DENY_NEW_METRICS
ルールが作成されている場合、この設定を見に行かない限りは気づくことができません。
New Relicをお使いの方はまずはMetric normalization rulesを確認してみてください。
そして必要に応じて正規化や検知を行いましょう。
この記事がどなたかのお役に立てれば幸いです。最後までお読みいただきありがとうございました。
-
https://docs.newrelic.com/docs/new-relic-solutions/solve-common-issues/troubleshooting/metric-grouping-issues/ ↩︎
-
https://forum.newrelic.com/s/hubtopic/aAX8W0000008dMOWAY/ruby-denynewmetrics-rule ↩︎
-
https://docs.newrelic.com/docs/new-relic-solutions/solve-common-issues/troubleshooting/metric-grouping-issues/#solution ↩︎ ↩︎
Discussion