Stackdriver Logging + BigQuery で GCE の nginx ログを取り込む

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 というテーブルが作成されている。

テーブルを確認するとスキーマも自動で作成されている。

参考

STACKDRIVER LOGGING

Stackdriver Logging ドキュメント

【GCP入門編・第20回】 手間いらずでログ管理ができる Stackdriver Logging のご紹介!

エージェントのインストール

コメント

タイトルとURLをコピーしました