カイワレの大冒険 Third

技術的なことや他愛もないことをたまに書いてます

ログ解析ツール「Splunk」を使ってみた

先日、qpstudyに参加してきた@masudaKです。@ar1さんと話しながら、荒木さんがLTでお話されたログの話をブログにあげたら、 僕も書きます−と言ってしまったので、ちょいと書いてみます。

荒木さんの記事・発表ではSumoLogic中心に書かれてましたので、Splunkを試してみました。

Splunkとは

んで、Splunkとは何かということですが、製品概要をみてみると、以下のように書かれています。

パワフルな検索、分析、および視覚化機能。数千社に及ぶ導入実績。すぐに始められます。

Splunk Enterprise はマシンデータ用のプラットフォームです。
すべての IT システムやテクノロジーインフラストラクチャから生成される膨大なマシンデータを収集、分析、および保護する簡単、スピーディかつ柔軟な方法を提供します。

問題のトラブルシューティングやセキュリティインシデントの調査を数分(数時間・数日ではなく)で済ませることができます。
また、インフラストラクチャをエンド・ツウ・エンドで監視することにより、サービスの劣化や機能停止を防ぐことができます。
さらに、顧客体験、トランザクション、挙動などに対するリアルタイムな可視性と重要な洞察も得ることができます。貴社のデータを皆にとってアクセス可能、使用可能、高価値にしましょう。

簡単に言うと、ログを解析・分析できるプラットフォームということでしょう。

解析対象は公式ページによると、Apacheのログだけじゃなくて、IIS、Log4j、CSVなど色々ありますな。

無料プランとエンタープライズプランがありますが、500MB/dayまでだったらパッケージだと無料で使えるようです。 ちなみに、Splunkにはパッケージを入れるSplunk Enterpriseと、オンラインサービスであるSplunk Stormがあるようで、オンラインのほうだと1GBまでデータを貯め込めて、一日どれくらいとかという制限はないように見えます。

使ってみる(登録編)

んで、使ってみるわけですが、前述したようにSplunkには、パッケージで導入するタイプと、APIやrsyslogなどを使ってデータを送って、オンラインでデータ解析してくれる二種類のタイプがあると述べました。

僕はさくっとデータ送って使ってみたかったので、後者のアプローチを選びました。要はパッケージとかで悩まず、単に送って、データをまず見るだけですね。 データの送り方は、このページに書かれているように、 REST使ったり、rsyslogなどを使ったり、ファイルをアップロードしたりする方法があるようです。

今回は、適当なサーバでrsyslogを使って、フォワードしてみる方法を取ってみました。

ということで、まずは何よりもユーザ登録です。

Splunk Stormのトップからまずはサインアップしてアカウントを作りましょう。

アカウント作ったら、メール飛んできますので、アクティベーションしましょう。 アクティベーションしたら、こんな感じでプロジェクトを作る画面になります。 f:id:masudaK:20160330131159p:plain

次に、プランを決めましょう。 画面はこんな感じ。 f:id:masudaK:20160330131211p:plain

プロジェクト名も決めます。 f:id:masudaK:20160330131222p:plain

んで、確定。 f:id:masudaK:20160330131235p:plain

無料で使いたいので、まずは1GBでだけストックできるプランにします。 もろもろ入力して、プロジェクトができるとこんなトップになります。

f:id:masudaK:20160330131245p:plain

使ってみる(設定編)

ということで、プロジェクトはできたので、次は設定をしましょう。 まずは、データ転送する元のサーバのIPを許可させます。 f:id:masudaK:20160330131256p:plain

こんな感じで、手動と自動があるっぽい。

f:id:masudaK:20160330131307p:plain

んで、追加画面。Source Typeというのは、アクセスログだったり、スロークエリログだったり、ログのフォーマットを指定します。

f:id:masudaK:20160330131320p:plain

んで、転送元の設定ができました。転送先とかポート情報書かれています。

f:id:masudaK:20160330131330p:plain

そしたら、サーバ側で設定しましょう。

/etc/rsyslog.confに以下のように書いておきましょう。 nginxでログファイルが/var/log/nginx/default.access.logだったら以下のような感じ。

$ModLoad imfile
$InputFileName /var/log/nginx/default.access.log
$InputFileTag nginx:
$InputFileStateFile stat-nginx-error
$InputFileSeverity error
$InputRunFileMonitor

$InputFilePollingInterval 10

*.* @@logs3.splunkstorm.com:20636

rsyslogを再起動して、ちょっと待てば、管理画面に反映されます。

f:id:masudaK:20160330131347p:plain

検索結果の一部。 f:id:masudaK:20160330131358p:plain

使ってみる(グラフ編)

次は棒グラフでログの量とかを表現してみましょう。Search画面の右側に「Create」というボタンがありますので、それをクリックします。 そうすると、「Report」と出てきますので、それをクリックします。 f:id:masudaK:20160330131408p:plain この上記のような設定にして、Next Stepに。

そうすると、以下のようにサンプルがでます。画面では切れてしまってますが、上部にSaveボタンがあり、Save Resultとあるので、クリックしましょう。 f:id:masudaK:20160330131418p:plain

あとはトップに戻って、Searches & Reportsをクリックして、今作ったグラフ名が表示されることを確認します。 こんな感じで、ログを収集して、グラフ化とかがまとめてできる感じです。

終わりに

今回はrsyslogで単一ログだけログをフォワードして、グラフ化するまでやってみました。

使ってみた印象としては、

  • 管理画面になれるまではどうしても時間かかる
  • やっぱ体感が重い
  • 設定自体はすごく簡単
  • アクセスログだけじゃなくて、log4jだったり、複雑なログを投げたりしたら、もっと便利になる気がする。
  • 無料プランでログの量も少なかったけど、ある程度大きめのログになったら、アウトバウンドのトラフィックさえ気をつければ、解析プラットフォームの実装コストが減る
  • そういう意味では、実装する部分にコストさけない環境にある場合は、便利かもしれない

という感じでした。

昨今のfluentdを含めたログ解析の環境を見ると、荒木さんのスライドにもありましたが、各サーバでgrepとかすることは今だけということも現実味を帯びてるのかもしれません。 コマンド叩いて出力を工夫するというのは近い将来しなくなっちゃうかもなーということもあるかもしれません。 ログは散らばっちゃいますし、データ量増えると結果返ってくるまでにめちゃ時間かかるし、今回触ってみたsplunkを含め、今度どんどんこういうプラットフォームができたらいいなぁと思います。