Stackdriver も BigQuery の無料枠を利用して、GCE 上の nginx のログを BigQuery に取り込んで見る。
無料枠は以下。
- Stackdriver : 30日間保存されるログサイズ50GB
- BigQuery : クエリ使用量1TB, ログ保存サイズ10GB
Stackdriver ざっくり
無料の場合以下の制約がある。長期間保存するには BigQuery や CloudStrage にエクスポートする必要がある。
- プロジェクトごとに 50GB
- 保存期間7日
GCE から ログを収集する場合は Stackdriver logging agent を利用する。
- 最低 250 MB の常駐メモリが必要
- 推奨は1GB
- AWSのインスタンスでも利用できるが有料
- fluentd ベース
メモリ 250 MB は結構痛いが利用してみる。
GCE に Stackdriver logging agent をインストール
まずは、Stackdriver logging agent を利用して GCE の nginx ログの転送設定を行う。
GCE に Stackdriver logging agent をインストール
curl -sSO https://dl.google.com/cloudagents/install-logging-agent.sh sudo bash install-logging-agent.sh
インストールした直後から起動している。
sudo systemctl status google-fluentd
下記にディレクトリが作成される。
ls -la /etc/google-fluentd
デフォルトで様々なログを読みこむ設定がされている。
例えば nginx の access.log と error.log を読み込むようだ。
less /etc/google-fluentd/config.d/nginx.conf
デフォルトの設定が下記。
tag という項目で設定した値が後ほど GCP の画面で選択しできるようになる。今回だと nginx-access と nginx-error。
<source> @type tail format none path /var/log/nginx/access.log pos_file /var/lib/google-fluentd/pos/nginx-access.pos read_from_head true tag nginx-access </source> <source> @type tail format none path /var/log/nginx/error.log pos_file /var/lib/google-fluentd/pos/nginx-error.pos read_from_head true tag nginx-error </source>
syslog もある。
less /etc/google-fluentd/config.d/syslog.conf
<source> @type tail # Parse the timestamp, but still collect the entire line as 'message' format /^(?<message>(?<time>[^ ]*\s*[^ ]* [^ ]*) .*)$/ path /var/log/messages pos_file /var/lib/google-fluentd/pos/syslog.pos read_from_head true tag syslog </source>
これらのログが GCP コンソールの Stackdriver Logging 画面から確認できるようになる。
Stackdriver Logging
Stackdriver logging agent から送られたログを確認する。
GCP のコンソール画面のナビゲーションメニューから、Logging を選択する。ログの一覧が表示される。
この画面では、以下の項目で簡単にログを検索・フィルタリングできる。
- GCPのサービス、インスタンス
- 対象アプリケーションログ(nginx-accessやsyslog)
- ログレベル(エラー、デバッグetc…)
- 期間
例えば、対象アプリケーションログを nginx-access にすると、nginx の access.log のみがフィルタリングされて出力される。
また、検索窓を利用することで、更に高度なフィルタリングを行うことができる。
BigQuery へエクスポート
ログの抽出を慣れ親しんだ SQL で行いたかったり、ログを 7 日以上保管したい場合は、BigQuery へログをエクスポートする必要がある。
「エクスポートを作成」より、以下を入力しシンクを作成する。今回は nginx の access.log 全てを送りたいので、取得したいログのみにフィルタリングしておくこと。
- シンク名 : nginx_access
- シンクサービス : BigQuery
- シンクのエクスポート先 : nginx_stackdriver
BigQuery を確認すると nginx_stackdriver データセットが作成され、nginx_access_20180905 というテーブルが作成されている。
テーブルを確認するとスキーマも自動で作成されている。
コメント