New Relicは、New Relic Oneのディメンションメトリックカーディナリティを管理する新しいツールである、メトリック集計プルーニングのリリースを発表しました。
この、新しいメトリック集計プルーニング機能により、メトリックデータ上のどの属性が長期的なトレンドと分析に重要で、どの属性が短期のトラブルシューティングに関連しているかをNew Relic Oneに伝えるルールを作成することができます。長時間に渡ってクエリを実行するような場合に、不要な属性を「プルーニング」するようにNew Relic Oneを設定することで、データの有用性を低下させるカーディナリティの制限に達することを回避することができます。
NerdGraphのデータドロップルールデータ管理APIに、メトリック集計プルーニングが新たに追加されました。 お客様がカーディナリティ制限とデータドロップルールAPIを既に使われていて、すぐにメトリック集計プルーニングを始めたい場合は、ドキュメントをご参照頂くか、新しいメトリック集計プルーニングの使い方をご確認ください。
メトリックカーディナリティをご存じない方のために、カーディナリティとは何か、カーディナリティの制限に達したかどうかを知る方法、そしてこの問題に対する3つの解決策について簡単に説明します。
メトリックカーディナリティとは何ですか?
メトリクスは、オブザーバビリティプラットフォームにとって重要な要素です。これらは、システムで使用されているCPUの割合のような単一のデータポイントを表すポイントインタイム測定値、または過去1分間にネットワーク上で送信されたバイト数のような集計測定値です。そのため、経時的なトレンドの特定や変化率の観察に適しています。
モニタリングにおいて、カーディナリティとは、メトリックに含める属性について存在するキーの値ペアの一意の組み合わせの数を指しています。例えば、「cpuPercent」と呼ばれるCPUの使用率を表すメトリックがあり、このメトリックは、各システムから報告されるとします。このメトリックにホスト名
属性を含めると、メトリックが報告されたシステムを識別できるようになり、「ホスト1」と「ホスト2」という2つのホストが報告されている場合、カーディナリティは低くなります。これは、ホスト名
属性が1つだけで、メトリックのユニーク値のホスト1
とホスト2
が2つあるためです。従って、カーディナリティが2であるということになります。その代わり、ホスト名
属性とプロセスID
属性を持つ「cpuPercent」というメトリックがあり、システム上の各プロセスについて報告され、数千のシステムがある場合は、高いカーディナリティが存在することになります。これは、数百万通りのプロセスIDとシステムの独自の組み合わせが考えられるからです。
カーディナリティが低い値も(特に)高い値も、「今日の午前9時30分から10時30分の間に504エラーを経験したすべてのユーザーを教えてください」という質問に答えようとするときに重要になります。オブザーバビリティにおける高いカーディナリティのデータの重要性については、この投稿で概説しています。この問題を解決するためには、多くのデータを相関させる必要があります。しかし、膨大なデータで検索に支障が出るようでは困ります。
New Relic Oneにメトリックデータを送信すると、送信した生のデータポイントをすべて保存するだけでなく、それらのメトリックをさまざまな間隔でロールアップと呼ばれる新しいデータポイントに集計します。このため、特に長い時間において、保存効率とクエリの速度が向上します。クエリを迅速に返すために、New Relic Oneはクエリに応じて生のデータポイントまたはロールアップのどちらを使用するかを決定します。
メトリック集計プルーニング時期の見極め方
基盤となるデータプラットフォームのパワーとスケールにより、New Relicは、任意の日に、数百万の独自のメトリックの時系列を持つアカウントのデータを簡単に処理することができます。しかし、すべてのシステムがそうであるように、システムを保護し、すべての人にとってのパフォーマンスを維持するために、いくつかの制限を課さなければなりません。
カーディナリティが制限に達した場合、New RelicはアカウントにNrIntegrationError
を報告します。これはNRQLを使用してクエリが実行可能なイベントです。また、New Relic Oneのデータ管理ハブの制限セクションにも表示されます。制限に達すると、New Relicはすべてのデータの処理と保存を続行しますが、その日の残りの時間はロールアップの作成を停止します。この現象が発生したときに1時間以上にわたりクエリを見ていた場合は、データが報告されなくなったと思うかもしれませんが、それはこのような長い時間ウィンドウのクエリに使用されるロールアップが利用できないからです。
心配は無用です:前述の通り、送信された生データはそのまま使うことができます。アクセスするには、より短い時間(1時間以内)でクエリを実行するか、クエリにRAWキーワードを付加して、トラブルシューティングに必要なデータを取り込むことができます。 制限に達することを完全に回避するには、新しいメトリック集計プルーニングを使用することができます。
新しいメトリック集計プルーニングの使い方
メトリック集計プルーニング(DROP_ATTRIBUTES_FROM_METRIC_AGGREGATES
)では、メトリックロールアップから除外する1つまたは複数の属性を指定することができます。
メトリック集計プルーニングは、コンテナIDやその他の一意の識別子など、メトリクスに含まれることがあるカーディナリティの高い属性に最適です。これらの高いカーディナリティの属性は、インシデント発生時(狭い時間ウィンドウ)のトラブルシューティングでは重要な詳細を含んでいますが、時間の経過とともにその価値を失い、長期的なトレンドを探る際には適切ではありません。
次のスクリーンショットでは、some.metric
という仮定のメトリックに対して、containerId
属性のプルーニングを設定する例をご紹介しています。

その他のソリューション
他にも、カーディナリティの制限に達しないようにするための2つの方法があります。
- データを分割して、複数のNew Relicのサブアカウントに送信することができます。
- また、価値の低いメトリクスやその属性を、クライアントサイドで、あるいはNerdGraphで利用可能なデータドロップ機能を使って永久的にドロップすることができます。この方法でドロップしたメトリクスや属性は、一切保存されません。
Next steps
詳細な手順とNRQLの例については、メトリック集計プルーニングに関するドキュメントをお読みください。
システムの包括的なオブザーバビリティをお探しですか?New Relic Oneにサインアップしてください。無料アカウントには、毎月100GBの無料データ取込み、1名の無料フルアクセスユーザー、および無制限の無料ベーシックユーザーが含まれます。
The views expressed on this blog are those of the author and do not necessarily reflect the views of New Relic. Any solutions offered by the author are environment-specific and not part of the commercial solutions or support offered by New Relic. Please join us exclusively at the Explorers Hub (discuss.newrelic.com) for questions and support related to this blog post. This blog may contain links to content on third-party sites. By providing such links, New Relic does not adopt, guarantee, approve or endorse the information, views or products available on such sites.