SumoLogicへログを送るパターンをまとめてみた

はじめに

おはようございます、加藤です。オンプレミスやAWSからSumoLogicに、どのようにログを送り込むことができるのかをまとめてみました。
また個人的な意見ですが、オススメの方法も紹介します!!

SumoLogicのログ取り込み方法

パターンを紹介する前に、SumoLogicがどのようにログを取り込むのか紹介します。

Installed Collector

Installed CollectorはSumoLogicが提供するログ・メトリクスを収集して送信するJavaエージェントです。
Windows, Mac, Linuxに対応しています。取り込めるデータソースは下記のとおりです。

  • ファイル
    • エージェントがインストールされたローカル、またはそこからアクセスできるリモートのファイル
  • Windowsイベントログ
    • エージェントがインストールされたローカル、またはそこからアクセスできるリモートのWindowsイベントログ
  • Windowsパフォーマンスモニタ
    • エージェントがインストールされたローカル、またはそこからアクセスできるリモートのWindowsパフォーマンスモニタ
  • ホストメトリクス
    • エージェントがインストールされたローカルのCPU、メモリなどのOSメトリクス

Installed Collectorはエージェントがインストールされたサーバーからアクセスが可能であればリモートの取り込みにも対応しています。なので、1つのログ収集サーバーを建てて同一ネットワーク内の全てのログを収集してSumoLogicに送信することができます。Syslogにしか対応していないアプライアンスにも、ログ収集サーバーでSyslogを稼働させる事で対応ができます。
逆に全てのサーバーにInstalled Collectorをインストールすることも可能です。

About Installed Collectors - Sumo Logic

Hosted Collector

Hosted Collectorはいくつか存在しますが、今回のブログで登場するS3(Amazon S3) SourceとHTTP Sourceを説明します。
まずはこの2つを押さえれば問題ありません。

Hosted Collectors - Sumo Logic

S3 Source

SumoLogicが対象のS3バケットに対してPullする仕組みです。
AWSの設定でSumoLogicからのアクセスを許可する必要があり、IAMロールとIAMユーザー(AccessKey)に対応しています。理由がない限りCredential流出の可能性がないIAMロールを使用しましょう。SumoLogicもこちらを推奨しています。
取り込み対象はS3バケット名・パスで指定します、また1つまでワイルド(*)を使用することが可能です。
取り込みする際にどれぐらい前からのログを取り込むか指定する事が可能です。S3バケットには数年前からのログが保存されているが、15分前のログから取り込みを始めたいといった要件に対応が可能です。

HTTP Source

HTTP Sourceは受け取り用URLに対してGET or POSTでログをPushする仕組みです。
通信はHTTPSで暗号化されて行われます。HTTP通信が可能であれば良いので様々なアプリケーションからSumoLogicへログを送ることが出来ます。例えば、FluentdやAmazon SNSがあります。
FluentdはSumoLogicによってアウトプットプラグインの提供も行われています。EFKスタックでログ分析をしている方なら簡単にSumoLogicを検証して切り替える事ができます。

SumoLogic/fluentd-output-sumologic: FluentD Output Plugin to deliver logs to Sumo Logic.

パターン紹介

私が個人的にオススメなパターン+αで紹介していきます。オススメは赤線・太字で図中に表記しています。
Log AgentはFluentdを想定しています。また、永続的にデータを保存するのはS3バケットのみで他は全て保存期限付きで考えました。

オンプレミス

オンプレミスのサーバーやアプライアンスに対応する方法です。
当然ですが、Firewallやスイッチにアプリケーションをインストールする事はできません。多くの製品はSyslogに対応しているで、アプライアンスからサーバーにSyslogで転送して転送先からSumoLogicへログを送ります。

オススメのパターン

HTTP EndpointでリアルタイムにSumoLogicへログを送り、かつ同時に永続保存先としてS3にも送ります。
保存期限が切れてSumoLogicから削除されたログを見たい場合は、SumoLogicで一時的にS3 Sourceで取り込みます。

パターン1

SumoLogicの保存期限が切れた後はログを見る必要がなければこのパターンです。

パターン2

実現出来る事はオススメと同じです、こちらの方法でしか何か実現出来ない事があれば採用しましょう。

EC2(Auto Scaling可)

オススメのパターン

HTTP EndpointでリアルタイムにSumoLogicへログを送り、かつ同時に永続保存先としてS3にも送ります。
保存期限が切れてSumoLogicから削除されたログを見たい場合は、SumoLogicで一時的にS3 Sourceで取り込みます。

パターン1

SumoLogicの保存期限が切れた後はログを見る必要がなければこのパターンです。

パターン2

実現出来る事はオススメと同じです、こちらの方法でしか何か実現出来ない事があれば採用しましょう。

パターン3

CloudWatch Logs(以降、CWL)でもログを見たい場合に採用します。CWLへ送る方法はAWSによって提供される、CloudWatch Agentを使う事ができますが、統一したいならfluentdを使用しましょう。
CWLからはLambda or Kinesis FirehoseでS3バケットへLambdaでSumoLogicへ送信します。CWLには無制限ではなく期限付きで保存する設定を行いコストを抑えます。
マネジメントコンソール上でもログが直近のログが見たい場合に採用しましょう。
ただし、アーキテクチャが複雑になるので本当に必要なのかしっかりと検討すべきです。

AWS マネージドサービス(S3・CWL)

オススメのパターン

S3に出力できるサービスはS3へ出力しましょう。
CWLにのみ出力できる場合は、Lambda or Kinesis Firehoseを使ってS3に送信します。CWLには無制限ではなく期限付きで保存する設定を行いコストを抑えます。
SumoLogicへはCWLからLambdaで送ります。

AWS マネージドサービス(SNS)

オススメのパターン

SNSに対応しているサービスはトピックにHTTPSエンドポイントとしてSumoLogicのHTTP Sourceを登録します。
また、SNSにで受け取れる情報を元に詳細な情報が必要場合は、Lambdaを挟んで情報取得や整形をしてからSumoLogicへ送信しましょう。
例えば、Amazon InspectorがSNSにで送信する内容はどういったアクションを受け取ったかだけですが、Lambdaを挟めば詳細な調査結果をSumoLogicへ送ることが出来ます。

Sumo LogicでAmazon Inspectorをウォッチしてみた | DevelopersIO

あとがき

私の個人的なオススメですが、SumoLogicへのログフローをまとめてみました!!
参考として使用し皆さんの環境にあったログフローを構築して頂ければと思います!