注意
この記事は Slack の在籍状況を DB 等に保存し、そこから勤務時間帯を分析するという企画です。
Slack では 1 つのアカウントで複数のワークスペースを管理することができるため、オンライン状態でも趣味のコミュニティにいた、なんてこともあります。
決して 「Slack がオンライン = 仕事している」ということではない ので、あくまで参考程度にお願いします。
目次
- Part I: データ取得編 (Slack API)
- Part II: データ保存編 (AWS Lambda/CloudWatch)
- Part III: データ分析編 (AWS CloudWatch/スプレッドシート) <- 今回はここ!
概要
今回は API を定期実行により蓄積されたログから、ユーザの勤務時間帯を分析するセクションとなります。
前回に引き続き AWS CloudWatch を使用し、分析にはスプレッドシートを使用します。
※この作業をするにあたり、前回作成した CloudWatch の定期実行イベントを数日動作させてログを蓄積させておくことをおすすめします。
前提条件
- AWS アカウントを持っている
- Google アカウントを持っている
手順
CloudWatch のログを集計・出力する
CloudWatch の Log insights でログを整形して CSV に出力します。
AWS コンソールから CloudWatch へ進み、 Logs -> Logs insights と進みます。
Select log group(s) のプルダウンから /aws/lambda/slack-users-getPresence
を選択します。
クエリは以下のように入力します。
fields time, presence
| filter @message like /^\{/
| filter presence = 'active'
| sort @timestamp desc
期間は直近 3 日間(2021/07/28 - 2021/07/30)とします。
Select log group(s) の横に期間を選ぶ入力欄があるのでクリックし、 Absolute を選択して該当するカレンダーの日付を集計開始日・終了日の順にクリックします。
Run query をクリックするとクエリが実行され、下に結果が表示されます。
Export result(s) -> Download table (CSV) の順にクリックして CSV を出力します。
出力された CSV を見てみると、先頭 10 行は以下のようになっていました。
time,presence
2021-07-30 20:15,active
2021-07-30 20:14,active
2021-07-30 20:13,active
2021-07-30 20:12,active
2021-07-30 20:11,active
2021-07-30 20:10,active
2021-07-30 20:09,active
2021-07-30 20:08,active
2021-07-30 20:07,active
...
スプレッドシートにデータを取り込み、ヒートマップのようなものを作成する
先ほど出力した CSV をスプレッドシートに取り込みます。シート名は logs-insights-results
としています。
いい感じにデータを整えます。日付と時分を分離し、 10 分ごとに区切りました。
集計用のシートを用意し、縦軸に日付、横軸に時間(10 分ごと)を取り、時間帯ごとに色分けをした上で、 active な時間帯が 10 分のうち何分あるかをカウントし、多いほど色が濃くなるように表示してみました。
なお、色分けは以下の通りです。
- 5:00 - 9:59: 定時前(想定)
- 10:00 - 18:59: 所定の勤務時間帯
- 19:00 - 21:59: 残業時間
- (22:00 - 翌 4:59: 深夜残業的な)
この表を見る限りでは、 1 日の勤務時間は少な目で、朝型の人のようですね。
はい、私です。
まとめ
今回を含め 3 回にわたり Slack オンライン時間帯を分析してきましたがいかがでしたでしょうか。 Slack API や AWS を通して気軽にデータ収集してみようと思っていただけたら幸いです。