Slack メッセージを Splunkに取り込んで分析してみた


(更新 2020/4) : Appのリンク先がAdd-onではなく、 Appと間違って記載しておりましたので修正しました。失礼しました。

# はじめに

Slack + Splunk 連携については、過去こちらにまとめてきたので、今回は第３弾としてSlack Web APIを利用して Slackのデータを Splunkに取り込んでやってみたいと思います。

過去記事
・[Splunk Alert を Slack に飛ばしてみる](https://qiita.com/maroon/items/c979a8f746f861e0e6e7)
・[Slack で Splunk SPLを使えるようにする (Lunaのご紹介）](https://qiita.com/maroon/items/a700be43c642953a2778)

今回使う Splunkアプリは、「 [Slack App for Splunk Add-on](https://splunkbase.splunk.com/app/4173/) 」を利用します。

Slack 側の API利用の制限が厳しくなっており色々とはまったので、その点を中心に書いておきたいと思います。


## どんなユースケースがあるか？

個人的に考えたところでは、こんなケースで利用できるのではと思います。
・どんなメッセージがやりとりされているかを分析することができる。（おそらく機械分析なども可）
・だれが活発に利用しているかなどの利用分析
・不審なアクセスがないかなどのセキュリティー対策
・「いいね」数の多いメッセージやユーザーをランキング
・ナレッジを slackに溜めている場合、過去の検索などが簡単になる。（slackの場合検索がいまいちだったりする）

## 利用できるまでの、おおまかな流れ

1. Slack アプリを作成して、token を取得する
2. Splunkに "Slack App for Splunk Add-on" を追加する
3. Slack Token を Splunkに設定する。

以上

## 1. Slack アプリを作成し、Tokenを取得する

### Slack API Token について
"Slack App for Splunk" のアプリの中には Readmeファイルがあり、Tokenの取得URLとかあるのですが、こちらの tokenはすでにレガシーとなっており、今はまだ使えるのですがいずれなくなるよ。という非推奨のメッセージがでてきます。

今は、Slack apps を作成し、scope設定して利用するのを推奨としているようなので、今回はその推奨構成をチャレンジしてみたいと思います。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/392303/1a165514-7148-4bcd-92ba-6ee96faf9218.png)

### Slack Apps の作成

https://api.slack.com/slack-apps
こちらから、 "create a slack apps" で作成し始めます。

App Name には適当に自分がわかるアプリ名と
Development Slack Workspace にはアプリを適用する slack workspaceを選択してください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/392303/a0b7b7eb-2ae4-0fe2-fce4-2e2c6d6064f1.png)

Functionality には、Botsを選択。（すると Permissionsもチェックが自動的につきます）
![image.png](https://qiita-image-store.s3.amazonaws.com/0/392303/3e8b93a9-36b6-cef2-f043-4380aa1d072d.png)


### Scope 決め
作成したSlack apps に権限を与える必要があります。主に access logを取得するための admin 権限と、メッセージ内容を取得するための read権限です。READMEも古いレガシー Tokenを参照しているため、どの権限がいいか明記されておらず苦労しましたが、ログから下記の権限が必要と判明しました。合っているかわからないので、エラーメッセージと共に、設定した scopeを記載します。

```:エラーログメッセージ(slack_logins.py)
logs: {u'needed': u'admin', u'ok': False, u'error': u'missing_scope', u'provided': u'identify,bot,channels:read,team:read,users:read,usergroups:read,chat:write:user'}
```

```:今回設定したscope
admin
channels:read
channels:write
chat:write:user
bot
usergroups:read
users:read
team:read
```

### Tokenの取得

OAuth & Permissions　の項目あるいは、アプリの下の方に行くと、OAuth Access Token　が取得できます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/392303/2e1966f4-86fb-9d46-d0d0-3a4398914006.png)



## 2. Splunkに "Slack App for Splunk Add-on" を追加する

https://splunkbase.splunk.com/app/4173/
こちらのアプリを Splunkにインストールする。

TA-slack というアプリがインストールされます。

このアプリで取得できることは、以下の２つです。
1. アクセス情報
2. メッセージ情報

## 3. Splunkのデータ入力の設定

「設定」 --> 「データ入力」　
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/4b566547-cecf-6f28-4363-0e6e863aa0d6.png)

それぞれ 取得したTokenを設定していきます。
設定できる項目はこちらです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/10c77e5e-5373-b42b-16d6-37354e7ebd88.png)
 

## 分析開始

しばらくすると、データが取得し始めます。取得するタイミングは loginデータは 3600秒。 messagesデータは 600秒の interval になります。(変更可能)

アプリで、Fieldsなども定義されているので、取り込んだらすぐに分析できます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/392303/1ad9a0a9-ef98-377d-0851-3312726dd2ce.png)


試しにこんなダッシュボードを作ってみました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/392303/781b2a38-b68e-d516-b603-742819d1910f.png)

### 問題発生
messageデータは取得できたのですが、login データがちっとも取得できませんでした。
アプリが実行している、splunk_logins.py のログを、Splunkの _internal indexからみていると、以下のようなメッセージが。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/392303/d3921bc8-33ac-638c-c3a7-9464d4d6a083.png)

**paid_only??** 
調べてみると、無償版の slackでは利用できない APIのようです。
ということで、セキュリティ強化のためアクセス分析やアラートをあげたい場合には、Slackの有償版をご利用ください。。

## 最後に

最近、APIの利用に色々と制限がかかってきているので、既存のドキュメントでは書いてないことなど多くありました。少しでも構築時のヘルプになれれば幸いです。