Elastic StackでSlackログ解析

この記事はロボP Advent Calendar 2018の1日目の記事です.

Slack便利ですよね.今回は私が所属している団体であるロボPのSlackチームのログを可視化してみようという試みです.

Elastic Stackとは

Elastic社が提供しているBIツール群.OSSで積極的に開発されています.以下に挙げるものがElastic Stackで提供されています.

Elastic Search

分散処理型の検索エンジンです.Javaで書かれています.クライアントにはJavaをはじめJavaScript,PHP,Pythonなど様々なものを用いることができます.Elastic SearchではJSON形式でクエリを発行します.v6.3からSQL(SELECT文が主ですが…)がサポートされるようになりました.

Kibana

Elastic Searchに入っている情報を整形,可視化するツールです.Node.jsで動きます.ブラウザ上からグラフィカルな操作が行なえます.

Logstash

ログを集め指定した対象に連携,加工するツールです.Rubyで書かれています.テキストやXML,JSONなどのファイル以外にもTwitter APIからツイートを取り込んだりRDBからSQL文を用いてデータを取ることもできます.ログの出力先はElastic Search以外にもRedmineやsyslog,CSVを選択できます.単体でも非常に強力なツールです.

Beats

ログやクラウドサービスからのデータ,SNSのストリームなどをElastic SearchやLogstashに転送できるデータ処理ツールです.CPU使用率などをKibanaで最終的に可視化したりできることになります.

環境構築

今回はVirtualBox上のCentOS7に行いました.公式のガイド通りにやれば特に問題ないと思います.

Slackログ解析

Elastic Stackでログ解析を行う場合,一般に以下の図のような流れになります.今回はElasticSearchに直接Slackのログを放り込みたいと思います.

Slackログデータ

何はともあれログデータが必要ですので先に準備しておきましょう.Slackの無料版ではPublicチャンネルのデータをJSONでExport可能です.

期間を選択してExportしておきましょう.

ダウンロードするとchannelごとにフォルダ分けされたJSONがあるのが確認できます.

このままindexさせてもいいのですがファイルが多くて面倒かつフィールド名などがごちゃってるので整形したほうがいいかと思います.GitHubなどで検索すればいろいろ出てくるでしょう.今回はこちらをベースに使わせていただきました.

Kibanaでの操作

可視化ツールなのでそこまで迷うことはないと思います.ポチポチしてけばいつの間にかできます.

まずは投稿数を日別にグラフにしてみました.

続いてuserごとの投稿数です.ダントツの人がいますね…

時間と組み合わせればこういうのもできます.緑の人発言し過ぎでは🤔

チャンネル別のヒートマップ.

これらを保存しておいてまとめて表示するDashboardもあります.

まとめ

可視化することで感覚的に感じていたものを把握することができますね!Logstashと組み合わせればあらゆるものからのデータを取り込むことが可能です.いわゆるオープンデータを取り込んで遊ぶのも楽しいかと思います.