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は監視対象になる。よって、全体のリクエストに対して、特定のストアだけエラーがよく起こるなどが提示されたりする。これによって、そのストアの作りとかデータとかにエラーを誘発する原因があるのでは?と考えるきっかけとなる。これは実際には違うかもしれないが、こういうデータがないと、そもそもそのように思いさえしないので、重要な情報である。
エラープロファイルの使い方(アクセスの仕方)
ここまででエラープロファイルがどういう機能か分かってもらえたと思う。では、具体的にどうやって使う(アクセスする)かを紹介します。
- New Relic APM にアクセス
- 左メニューの Error analytics をクリック
- メイン画面中段のタブメニューの Error Profile をクリック
- 選択している時間帯に発生したエラー、フィルタリングで絞り込んだエラーを対象にエラープロファイルを表示
- 属性(ポートやトランザクション名、カスタム属性など)別に、エラーの場合の傾向をメッセージで表示
- 属性欄をクリックすると、エラーの場合と正常の場合の割合を表示
参考
この記事を読んでエラープロファイルについて興味を持って頂けたら、以下の記事も参考になるかと思う。
まとめ
ということで、今回は最近 New Relic が積極的に取り組んでいる機械学習を取り入れた機能エラープロファイルの紹介でした。