2018年8月30日木曜日

Google Cloud の Stackdriver logging を Ruby から使ってみる

概要

Stackdriver logging はログ情報をクラウドに貯めることができるサービスです
普段アプリを実装するときと同じようにロギングするだけでクラウドにログを貯められます
今回は GCE から Ruby で書き込む方法を紹介します (なぜ GCE からわざわざやっているのかは最後の「トラブルシューティング」のところで説明しています)

環境

  • macOS 10.13.6
  • Ruby 2.5.1p57
  • google-cloud-logging (1.5.2)
  • Google Stackdriver Logging API (2018/08/22 時点)

Stackdriver Logging API を有効にする

ここ から有効にします
まずは API を有効にするプロジェクトを選択します
stackdriver_logging1.png

認証情報は作成する必要はないです
GCE を作成する際に Stackdriver logging API へのアクセスをフルアクセスにすることがで制御します

GCE の Cloud API アクセススコープを設定する

GCE のインスタンスの編集から「Cloud API アクセススコープ」を設定しましょう
これを設定するにはインスタンスが停止状態でなければいけないので一旦停止します
stackdriver_logging4.png

Stackdriver Logging API の部分を「フル」にしましょう

ライブラリインストール

GCE 上で行います
ruby, gem, bundler などがインストールされていない場合はインストールしてください

  • bundle init
  • vim Gemfile
gem "google-cloud-logging"
  • bundle install --path vendor

Rails で使う場合は「stackdriver」というライブラリなのですが今回は Rails は使わないのでこの方法で実装します

サンプルコード

  • vim sd_test.rb
require "google/cloud/logging"

project_id = 'your_project_id'
logging = Google::Cloud::Logging.new project: project_id

entry = logging.entry
entry.payload = "Hello, world!"
entry.log_name = "my-log"
entry.resource.type = "global"

ret = logging.write_entries entry
puts ret

GCE を作成したプロジェクト ID を設定してください

動作確認

  • bundle exec ruby sd_test.rb

で動作するはずです
Stackdriver Logging の画面がから「グローバル」スコープでログを確認すると送信したログがあるのが確認できると思います
stackdriver_logging5.png

おまけ (gcloud コマンドでロギングする)

例えば Google Cloud Shell を使って以下のように実行するだけで Stackdriver にログを貯めることができます
GCE のインスタンスにはデフォルトで gcloud コマンドがインストールされています

  • gcloud logging write my-test-log "A simple entry"

おまけ2 (ログを削除する)

  • gcloud logging logs delete my-test-log

トラブルシューティング

今回は GCE から使いました
実はローカルホストや AWS など他の環境からアクセスする際にはサービスアカウントを作成して API の認証情報を作成する必要があります
それを使ってアクセスすることができるらしいのですが自分が何度やっても以下のエラーでできませんでした

  • The caller does not have permission

作成したサービスアカウントのロールを「オーナー」などにしてみましたがダメでした
ここに書いてある通りに project_id の他に認証用の JSON ファイルを指定してやってみたのですがダメでした
もしかするとサービスアカウントのロール以外にもどこか設定するところがあるのかもしれません

最後に

GCE のインスタンスから Stackdriver Logging API を使ってみました
GCE からであれば簡単に使えます

実は当初はずっとローカルの Mac からやっていたのですがずっとエラーが出たのでドキュメントを見直してみたら GCE or GKE or GAE からやるのが定石ってぽかったので諦めて GCE からやりました

今回は諦めましたができる方法は絶対にあると思うのでもし情報があればコメントいただけると助かります

参考サイト

0 件のコメント:

コメントを投稿