この記事はロボ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可能です.
ダウンロードするとchannelごとにフォルダ分けされたJSONがあるのが確認できます.
このままindexさせてもいいのですがファイルが多くて面倒かつフィールド名などがごちゃってるので整形したほうがいいかと思います.GitHubなどで検索すればいろいろ出てくるでしょう.今回はこちらをベースに使わせていただきました.
Kibanaでの操作
可視化ツールなのでそこまで迷うことはないと思います.ポチポチしてけばいつの間にかできます.
まずは投稿数を日別にグラフにしてみました.
続いてuserごとの投稿数です.ダントツの人がいますね…
時間と組み合わせればこういうのもできます.緑の人発言し過ぎでは🤔
これらを保存しておいてまとめて表示するDashboardもあります.
まとめ
可視化することで感覚的に感じていたものを把握することができますね!Logstashと組み合わせればあらゆるものからのデータを取り込むことが可能です.いわゆるオープンデータを取り込んで遊ぶのも楽しいかと思います.