LogをObservablitiyに活用するために
Observabilityに重要なデータとして、Metric, Event, Log, Trace - MELTと呼ばれるものがあります。
それぞれのデータについては公式ブログにもありますが、システムの状況を観測するにあたり様々な側面から収集しているデータとなっています。
そんなデータの一つであるLogについて、Previewではありますが6月に新機能を発表しました
New Relic AIはNew Relicの活用にあたって実際に起っている事象の確認や、観測値を確認したいときのNRQLの生成などを行うなど、様々な支援を行ってくれるAIです。
6月のアップデートでは、そのNew Relic AIがログの Parse Rule活用を行う機能が追加されました
LogのParse?
ログには様々な情報が含まれています。下記はNginxのログをNew Relicに送信した例です。
一般的なログ、例えばApacheやNginx、LinuxのMessagesなどはすでにBuilt-inのパースルールが設定されています。一つのログ行からその情報を分割し構造化することで、単純なログ文字列から意味を持った属性値へと変更します。そうすることにより、例えばHTTPステータスコードでの集計を行ったり、ホストごとのクロス集計を行ったりと、単純なログ文字列では簡単に実現できない状況の観測をリアルタイムに行うことができます。
5月の新機能アップデートから、取り込んだログをサクッとパーシングして便利に解析!という記事もありますので、ログの活用については合わせてこちらもご覧ください。
実際にやってみましょう
標準的にParsing Ruleを持たないログを、New Relicに取り込むときには、オリジナルのParsing Ruleを設定することができます。
Create parsing ruleをクリックすると、設定画面が現れ、実際の設定を行うことができます。
ところで、私が仕事をしている環境はネットワークを作り込んでおり、NECのUNIVERGE IXシリーズというルータを通してインターネットに接続しています。そのログもNew Relicに送信しているので、試しに見てみましょう。
余談ですが、そのルーターの監視もNew Relicで行っているので、興味ある方はこちらのブログをご参照ください
対象のログとして、NATログが大量に出ているので、その内容をParseしてみます。
NAT[057]: entry created tcp local ##local IP##:##port##(##Router IP##:##Port##) remote ##Remote IP##:##Port##, GigaEthernet0.0
IPとポートをマスクしましたが、こういったようなログが出てきています。
そのままNew Relicに送信することで、ある程度New Relicで自動判別を行います。その結果 newrelic.logPattern という属性情報がつきます。
newrelic.logPattern:NAT[057]: entry created tcp local <IP>(<IP>) remote <IP>, GigaEthernet0.0
このままでもIPの集計などはできそうですが、New Relic AIがこのログをどう解釈するか、見てみましょう。
先ほどのParsing Rule編集画面に実際にログを貼り付けて、「Parsing rule and output」にある灰色のテキストボックスの右上にあるをクリックします。
すると、ログに合わせたParse Ruleがテキストボックスに現れます
NATのログであるということを理解し、local, translated, remoteという名前をしっかりとつけた状態でParseができるというのがわかります。Outputに実際にParseした結果も現れるので、ちゃんとParseされているかの確認もバッチリです。
名前などを設定し、右下にある「Create rule」をクリックすると、設定後に取り込まれてくるログから新しいParsing Ruleが適用され、属性値を集計対象にすることができます。
もちろん、AIのサジェストしたルールから変更していただくこともできるので、更に作り込んでいただくことで様々な集計をかけていただくことができます。
上記ログの場合は、更に追加して created なのか deleted なのか、TCPなのかUDPなのかという判断をいれて、最終的にこういう形となりました
NAT\[%{INT:nat_id}\]: entry %{WORD:phase} %{WORD:protocol} local %{IP:local_ip}:%{INT:local_port}(\(%{IP:translated_ip}:%{INT:translated_port}\)) remote %{IP:remote_ip}:%{INT:remote_port}, %{WORD:interface}
カスタムでParse Ruleを設定するのは見慣れないログの場合や、項目名が多くなると特に大変です。
しかし、New Relic AIを利用して分析を行うとすぐにRuleを作成していただくことができます。
他の人が作ったRuleがどういった内容を示しているのかもNew Relic AIが解説できるので、Logの内容を積極的に活用するためにも、改めてParsing Ruleを確認、New Relic AIを使って高度化してみてはいかがでしょうか。
無料のアカウントで試してみよう!
New Relic フリープランで始めるオブザーバビリティ!
New Relic株式会社のX(旧Twitter) や Qiita Organizationでは、
新機能を含む活用方法を公開していますので、ぜひフォローをお願いします。