New Relic ならではの機械学習を活用したエラー分析機能エラープロファイルとは


New Relic Advent Calendar 2017 8日目。New Relic APM のエラー分析の新機能のご紹介。

みんな New Relic APM のエラー分析機能使ってる? いつも皆使っている機能なんだろうかと思ってはいる。うちとかだとエラー管理は別サービスを使っているし。(エラーが発行されたタイミングで Slack に通知してほしかったりするけど、New Relic のエラー管理ではそれはできないので)

なんだけど、今回紹介する新機能の エラープロファイル (2017年9月ころリリース)は、New Relic ならではの機能となっている。何がならではかっていると、エラー以外のパフォーマンスやトランザクションデータを持っているってことを活用した機能になっているってとこ。エラー管理に特化したサービスにはそれはできないからね。

どういうものかって言うと、昨今 New Relic が力をいれている機械学習を利用した機能。New Relic が普段から収集している膨大なトランザクションデータ(エラーも含む)を使って、これまでは人が推測していたエラーに共通したパターンを自動的に学習し、提示してくれる。問題特定の最初の調査時間を大幅に削減してくれるかもしれない。

どんなものかはこれから説明していく。その前に現状を説明。

これまでのエラー分析機能でできたこと

今までの New Relic APM のエラー分析(Error Analytics)機能は、 サーバーアプリの未キャッチ例外を New Relic 上でリスト化し、指定した時間帯に発生した例外をエラークラス/メッセージ/トランザクション別などで絞り込んで、エラー分析を効率化してくれる機能がある。もちろん個々のエラーのスタックトレースなどエラー詳細も確認できます。


トランザクション別にエラー回数を表示している例

このように発生した例外を効率良く分析、絞り込める機能があるのが、Error analytics 。これについて知りたい方は、ここの記事をご覧ください。

エラープロファイル機能でできるようになったこと

そこに新たに追加されたのがエラープロファイル(Error profiles)。エラーの原因特定が効率良く行えるようにサポートする機能。ただ、上記と違うのが、最初にも書いたけど、エラーだけでなく正常のリクエストデータも機械学習にかけ、エラーのリクエストと正常のリクエストを比較し、エラーとなる傾向の強いリクエストパターンを提示してくれるということ。

エラーが発生したときに、エラーだけ見ていても、なぜそのエラーがその時に発生したのか分からないことがある。そういった場合、このエラーが発生した状況(同じトランザクションだったり、同じリクエストヘッダーだったり)は、通常のリクエストと違いはないのか?と気になることがある。そこで、エラーにのみ特有のパターンがあれば、通常のリクエストとの違いの部分がエラーの原因や原因の一部なのではないかとあたりがつく。そういう点で、通常のリクエストと比較することは意味のある行為であり、エラーの原因特定までの道のりを短縮してくれるツールとなり得る。

というふうに、通常のリクエストとエラーのリクエストの差(偏差)が大きいものを重要度高として、リスト化してくれる機能がエラープロファイル。

以下のように発生したエラーに対するパターンを提示してくれる。(見ても意味のない項目も結構あるけど)

エラープロファイルは、選択している時間帯(Time Picker)とフィルタリングで絞られたエラーを対象に、通常のリクエストとの差を表示する。

この場合、一番上は、Error Class が対象となっていることがわかる。その下に All of these errors have error class "HttpServerError 500" とメッセージがある。発生した全エラーは 500 エラーだったと言っている。このように、指定している時間帯に発生したエラーで、どういった傾向があるのか簡略化したメッセージで教えてくれる。(ただ、エラークラスとか2番目のエラーメッセージとかは、エラーにしかない項目なので、役に立つ情報かは微妙)

ここで意味が大きいののは、通常のリクエストと共通の属性(トランザクションやリクエストヘッダーなど)だと思う。

また、特にこの機能で価値が大きいのが、カスタム属性を使っている場合なのではないかと個人的には思う。NRQL のアラートでも紹介したカスタム属性とは、New Relic が自動的に収集するデータ以外の任意のデータを収集してくれるようにできるもの。(コードに手をいれる必要があるが)

言語によってAPIが変わるが、Ruby だとこんな感じ。他の言語でも同じ感じ。ここでは、ストアIDという情報を送っている。

NewRelic::Agent.add_custom_attributes({ store_id: "xxxx" })

このようにストアIDを送っていた場合、このエラープロファイルでもストアIDは監視対象になる。よって、全体のリクエストに対して、特定のストアだけエラーがよく起こるなどが提示されたりする。これによって、そのストアの作りとかデータとかにエラーを誘発する原因があるのでは?と考えるきっかけとなる。これは実際には違うかもしれないが、こういうデータがないと、そもそもそのように思いさえしないので、重要な情報である。

エラープロファイルの使い方(アクセスの仕方)

ここまででエラープロファイルがどういう機能か分かってもらえたと思う。では、具体的にどうやって使う(アクセスする)かを紹介します。

  1. New Relic APM にアクセス
  2. 左メニューの Error analytics をクリック
  3. メイン画面中段のタブメニューの Error Profile をクリック
  4. 選択している時間帯に発生したエラー、フィルタリングで絞り込んだエラーを対象にエラープロファイルを表示
  5. 属性(ポートやトランザクション名、カスタム属性など)別に、エラーの場合の傾向をメッセージで表示
  6. 属性欄をクリックすると、エラーの場合と正常の場合の割合を表示

参考

この記事を読んでエラープロファイルについて興味を持って頂けたら、以下の記事も参考になるかと思う。

まとめ

ということで、今回は最近 New Relic が積極的に取り組んでいる機械学習を取り入れた機能エラープロファイルの紹介でした。