5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

New Relic 使ってみた情報をシェアしよう! by New RelicAdvent Calendar 2024

Day 2

追加開発不要!NewRelic導入したけども…からの非構造化ログを活用したビジネス貢献

Last updated at Posted at 2024-12-06

はじめに

ファミリーマートのアプリ「ファミペイ」では、オブザーバビリティを高めることで、顧客体験の改善に取り組んでいます。
今回は、構造化されていないテキストログをNewRelicに取り込むことで、ログを障害原因調査以上に活用することができました。

システムの状況

  • ネイティブアプリ→サーバ→DBのオーソドックスな構成
  • 協力会社にシステム開発を委託
  • サーバは構造化されていないテキストログを出力
  • ログはAmazon CloudWatch Logsに取り込み

これまでのログ調査

NewRelic導入前のログ調査は、「Amazon CloudWatch Logs上で発生時刻のログを流し見し、目grepする」や「高度な分析はCSVダウンロードしてエクセル上で解析」ということをしていました。

また、Amazon CloudWatch Logsのみにログを取り込んでるため、CloudWatch Logsの機能やどのログがどのように保存されているかを熟知している担当者のみログ調査可能で、ログ調査は特定の担当者に集中していました。

NewRelicを導入するも…

このような状況の中で、NewRelicを導入してログを取り込んだところ、使いやすいUI(時刻指定、検索結果の時系列グラフ化等)のおかけでログ調査の負担は改善しました。
しかしながら、取り込むログ自体はどのようなログが出ているかを熟知している担当者のみログ調査しており、それ以上の活用はできていませんでした。

その後も「ログ調査は便利になったものの従来のログ調査ぐらいしか活用できていない」という悩みを抱え、NRUG(NewRelicユーザ会)に参加し、様々な活用事例を聞いていましたが

  • 自社システムのログは構造化ログではないため、分析/集計しづらく、ビジュアライズも難しい
  • 生ログはログの特徴を熟知していないと読みづらい
  • ビジネス側には生ログはとっつきづらい
    という理由かからこれ以上のログ活用は難しいと考えていました

NewRelicの機能を活用!

しかし、NewRelicテクニカルサポート様と会話していく中で以下のような機能を使えるのではないかというアドバイスをいただきました

  • ログの時系列グラフ化(TIMESERIES)
  • ログを正規表現でパースし、複数の時系列グラフを表現する(FACET)
  • ダッシュボードの変数機能

実際に作ったもの

エラーコード別の時系列グラフ

unnamed.png

使った機能

facet関数

対象となるログ

[INFO ] 2024-11-20 19:01:11,434 foo=123 bar=123 action=get errorCode=123

エラーコードを正規表現でパースするNRQL

select count(*) from Log where 'action=get' facet capture(message,r'.*erroCode=(?P<erroCode>\d).*') timeseries

このグラフを使って、新機能リリース前後に増加しているエラーコードがないかを確認しています。
また、「Create a chart」でグラフの共有リンクを払い出し、ビジネス部門担当者にも共有しています。
これにより、チャットでのアクセス状況の報告が不要になりました。
※Pro以上のプランが必要

ビジネス向けのBIツール

unnamed (1).png

使った機能

  • 変数機能
  • LookupTable(エラーコードをCSVで取り込み)

このダッシュボードでは会員番号を入力すると、当該会員のログを表示するだけでなく、生ログをわかりやすい言葉に置き換えて表示しています。
これを使うことでログに関する知識なしに、あるお客様がいつどのような操作をしたかを調べることができるようになりました。

運用していて感じた課題

ログパターンごとに正規表現を書くのが大変

NewRelicは、ログ取り込み時点でログを正規表現でパースできるGrokパターンという機能があり、これを使うことで、非構造化ログとして取り込むことができます。
この機能を使えば、NewRelic内でログを構造化ログとして扱えるので、各段に扱いやすくなります。
※Grokパターンでパースした結果は、生ログに戻せないので本番運用時は要注意

一つのログを複数行で出力している

2024年から複数行のログにGrokパターンが対応した

ダッシュボードの描画に時間がかかる

①ログを個別のパーティションとして分割して取り込むことができるパーティション機能を使い、パーティションを指定したNRQLを書くことで検索が早くなる
※パーティションを分割するとLogイベントに関する既存のNRQLすべてに影響を受けるので注意
②これまで正規表現でパースするNRQLとしてcapture関数を使っていましたが、機能は制限されますがaparse関数を使うと検索が早くなる

これからやりたいこと

構造化ログの出力

ログフォーマットの変更や新機能追加ごとにNewRelic上で対応するのではなく、システムから構造化ログを出力する

新機能リリースごとのダッシュボード追加対応の自動化

機能追加ごとにダッシュボードにウィジェットを追加するのではなく、リリース時にNewRelicのAPIを使って自動的にウィジェットを追加する

おわりに

ファミリーマートでは、金融・デジタル戦略を支える自社決済アプリ「ファミペイ」の運用メンバーを募集しています!
累計2,000万ダウンロードを超え、社会インフラとなりつつある「ファミペイ」の運用に少しでもご興味があればぜひ以下サイトからご応募ください!

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?