(O+P)ut

ITエンジニアのアウトプット録



(O+P)ut


ブログのアクティブユーザを1分毎に取得する

はじめに

GoogleAnalyticsのレポートでは、基本的に毎時あたりで丸めたログが表示されます。

ただし、リアルタイムという分析では秒単位の頻度で更新がある状態で現在の閲覧ユーザ数が確認できます。
f:id:mtiit:20190314150030p:plain
この部分です。

このデータをAPIを通して取得するための記事を以下に記載しました。

これを1分置きに実行すれば、1日全体のログが取れるということで試しにとってみました。
スクリプトの紹介と、結果として取得したデータを可視化してみます。




アクティブユーザを1分毎に取得

GoogleCloudPlatformを利用

1分置きのプログラムの実行をパソコンからしても良いのですが、付けっ放しにするのもイケてないのでクラウドを利用しました。
せっかくGoogleAPIを利用しているので、GoogleCloudPlatformです。

無料枠で利用できる範囲で要件を入力し、OSは使い慣れているRHEL7にしました。

接続方法は以下より選べますが、今回はプログラムを動かすだけなので「ブラウザウィンドウで開く」で接続します。
f:id:mtiit:20190315193740p:plain

以下のように数秒待ちが発生した後
f:id:mtiit:20190315193854p:plain

Connected, host fingerprint: ssh-rsa XXX

としてログインができました。

実際のスクリプト

以下のスクリプトにして毎分実施することにします。

curl -d "client_id=XX&client_secret=XX&refresh_token=XX&grant_type=refresh_token" https://accounts.google.com/o/oauth2/token 2>/dev/null| grep ccess_token | awk -F '"' '{print $4}' > /home/XX/Test/token.txt
token=`cat /home/XX/Test/token.txt`
curl 'https://www.googleapis.com/analytics/v3/data/realtime?ids=ga%3XX&metrics=rt%3AactiveUsers' --header "Authorization: Bearer $token" --header 'Accept: application/json' --compressed 2> /dev/null| awk '{print substr($0,index($0,"totalsForAllResults"))}' | awk -F '"' '{print $5}' >> home/XX/Test/Log/`date +%Y%m%d`.txt

簡単な解説ですが、
一行目のcurlでアクセストークンを取得しtoken.txtに書き込みます。
二行目で変数tokenとして読みこみ、3行目でそのトークンを利用してアクティブユーザを取得しにいきます。
管理しやすいように、日付をファイル名としてLogディレクトリに配置します。

ちなみに、dateコマンドを使いますが時間が日本時間でない場合は設定を変更するかスクリプトに以下を入れてください。

export TZ=JST-9

これをcronに以下のように設定すれば毎分実行する準備が完成します。

$ crontab -l
* * * * * /home/XX/getactiveuser.sh




実行結果

1日動かした結果ですが、1440行、つまり1日分のログが格納されています。

cat /home/XX/Log/20190315.txt | wc -l
1440

そのままExcelに入れると以下のようになりました。
f:id:mtiit:20190316081436p:plain
GoogleAnalyticsでは見れない波形です。
f:id:mtiit:20190316081617p:plain

終わりに

GoogleCloudPlatformを触ってみたくて始めた本取り組みですが、おもしろいデータが取れて良かったです。
クラウド環境に自分の専用環境が無料で用意できるのは、やはりありがたいですね。

以上、興味があればぜひ再現してみてください。