はじめに
現在、GCPでロードバランサとCompute Engineを使ってWebサービスを公開しています。
構成
インターネット <--> Cloud Load Balancing(GCP) <--> Compute Engine(GCP)
GCPのCloud Loggingの機能を使うと、ロードバランサのアクセスログをBigQueryにリアルタイムに同期することができます。
BigQueryを使ってアクセスログを解析したいときに手軽に利用することができます。
同期の方法と、簡単な解析のサンプルを紹介します。
シンクの作成
まずは「Logging > ログルーター」からシンクを作成します。
「Cloud HTTP ロードバランサ」から同期したいロードバランサを選択します。
シンクサービスは「BigQuery」を選択して、シンクのエクスポート先のBigQueryのデータセットを選択して、シンクを作成します。
BigQueryで解析
シンクしたログは日別のテーブルに格納されます。
requests_20200421
requests_20200422
requests_20200423
:
「HTTPステータス」「ユーザーエージェント」「リファラ」「リクエストURL」「IPアドレス」「リクエストサイズ」などのカラムがあるので解析していきたいと思います
テーブル名の(your-project.your_dataset.requests_20200421)は、ご自身のアカウントのものに置き換えてください。
HTTPステータスを解析
500番台のリクエストを表示
SELECT * FROM `your-project.your_dataset.requests_20200421` WHERE httpRequest.status >= 500
リファラを解析
参照サイトの多い順に表示
ドメイン名の(example.com)は、ご自身のサイトのドメインに置き換えてください。
SELECT
httpRequest.referer AS referer,
COUNT(*) AS access_count
FROM `your-project.your_dataset.requests_20200421`
WHERE httpRequest.referer NOT LIKE '%example.com%'
GROUP BY referer
ORDER BY access_count DESC
ユーザーエージェントを解析
アクセスされたユーザーエージェントの多い順に表示
SELECT
httpRequest.userAgent AS user_agent,
COUNT(*) AS access_count
FROM `your-project.your_dataset.requests_20200421`
GROUP BY user_agent
ORDER BY access_count DESC
おわりに
Fluentdなどでログを収集してBigQueryにインサートすることもできますが、ロードバランサのアクセスログを同期することで、手軽にBigQueryのアクセス解析が始められます。