sumo logicでALBログ分析のための積み上げグラフを作るまで

ALBログの可視化を試している中で、テンプレートとして用意されている画面以外に、独自のグラフを表現することができないかと試行錯誤したので、記録を残しておこうと思います。
2019.06.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

西澤です。sumo logicを使って、ALBログの可視化を試している中で、テンプレートとして用意されている画面以外に、独自のグラフを表現することができないかと試行錯誤したので、記録を残しておこうと思います。

前提

sumo logicそのものについての説明は割愛します。また、環境の初期設定としては、下記ブログを参考に実施いただければ、アカウント解説から30分もかけずに用意されたダッシュボードでログ分析を開始することができます。本記事では、ここまでの作業が終わっている前提で次に進みます。

Sumo Logicを使った爆速で行うELBログのビジュアライズと分析

クエリをカスタマイズする

いろいろな需要に合わせて、ログを分析していく為には、独自のクエリやビューを作りたくなると思います。sumo logic上では、 Log Search というビュー上で、独自の Search Query Language を用いて、ログを抽出したり、集計したりすることができます。

この Search Query Language は、なんとなく読めるものの1から書くのはなかなかハードルが高いのですが、sumo logicの素晴らしいところは App Catalog に便利なテンプレートが最初から用意されているところです。まずは、ALB用の App Catalog から、カラム定義等を行っているParse Operator表現はそのまま拝借してしまいましょう。

_sourceCategory = aws/elb
| parse "* * * * * * * * * * * * \"*\" \"*\" * * * \"*\"" as type, datetime, ELB_Server, client, backend, request_processing_time, target_processing_time, response_processing_time, elb_status_code, target_status_code, received_bytes, sent_bytes, request,user_agent,ssl_cipher,ssl_protocol,target_group_arn,trace_id
| parse field=request "* *://*:*/* HTTP" as method, protocol, domain, server_port, path
| parse field=target_group_arn "* " as target_group_arn nodrop
| parse field=client "*:*" as clientIP, port nodrop
| parse field=backend "*:*" as backendIP, backend_port nodrop
| fields - request, client, backend
// Parse all fields above, then aggregate

今回は、こちらのデータを時系列でアクセス先のドメイン別にリクエスト数をカウントしてみようと思います。時間ごとにSQLで言うところのgroup byしてcountするようなイメージです。最後の2行が追加した部分です。

_sourceCategory = aws/elb
| parse "* * * * * * * * * * * * \"*\" \"*\" * * * \"*\"" as type, datetime, ELB_Server, client, backend, request_processing_time, target_processing_time, response_processing_time, elb_status_code, target_status_code, received_bytes, sent_bytes, request,user_agent,ssl_cipher,ssl_protocol,target_group_arn,trace_id
| parse field=request "* *://*:*/* HTTP" as method, protocol, domain, server_port, path
| parse field=target_group_arn "* " as target_group_arn nodrop
| parse field=client "*:*" as clientIP, port nodrop
| parse field=backend "*:*" as backendIP, backend_port nodrop
| fields - request, client, backend
// Parse all fields above, then aggregate
| timeslice 5m
| count by _timeslice,domain

取得したデータを積み上げグラフにする

縦グラフとなる Column Chart で一旦そのままグラフにしてみましょう。

以下が、その画面なのですが、ちょっと思っていたのと違うやつができあがりました。

ここで、今回最も苦戦した transpose というSearch Operatorを使います。transpose を使うと、Excelのピボットテーブルのような集計が可能となります。

グラフを積み上げ式にする為には、もう1手間必要でした。Chart Propertiesから、Stacking設定というのを、"None"->"Normal"に変更する必要があります。

以上の操作で、想定していた積み上げグラフを作ることができました。

まとめ

sumo logicで独自のビューを作るまでに試行錯誤した過程を書くことで、使い方の紹介になるのではないかと思い、まとめ記事を書いてみました。sumo logicを導入し、ログを集めて可視化できる環境を作っておくことで、これまで諦めていたような分析も、簡単に実現が可能になります。まずは、その環境を作ってみることで、新しい情報を得るきっかけになると思いますので、まだお試しいただいていない方もぜひ少し触ってみてはいかがでしょうか?

どこかの誰かのお役に立てば嬉しいです。