Google Cloud Functionsのログ出力(とハマったこと)
やりたいこと
- 言語:Python
- Google Cloud FunctionsでStack Driver Loggingにログを出力したい。
- ドキュメントを見ると
print
でやれって書いてある
- とはいえログレベルは設定したい
やったこと
- google-cloud-loggingを使う
- requirements.txtに
google-cloud-logging==1.14.0
を追記
# Imports the Google Cloud client library
import logging
from google.cloud import logging as glogging
client = glogging.Client(project=os.environ['PROJECT_ID'])
handler = client.get_default_handler()
cloud_logger = logging.getLogger('cloudLogger')
cloud_logger.setLevel(logging.INFO)
cloud_logger.addHandler(handler)
def test_method(request):
print('== start ==')
try:
cloud_logger.info('Info Message')
cloud_logger.warn('Warn Message')
raise Exception
except Exception:
cloud_logger.error('Error Message')
raise Exception
print('== finish ==')
実行、しかしログが出ない
- なんにも出ない。
print
でやれって書いてある
- google-cloud-loggingを使う
- requirements.txtに
google-cloud-logging==1.14.0
を追記
- requirements.txtに
# Imports the Google Cloud client library
import logging
from google.cloud import logging as glogging
client = glogging.Client(project=os.environ['PROJECT_ID'])
handler = client.get_default_handler()
cloud_logger = logging.getLogger('cloudLogger')
cloud_logger.setLevel(logging.INFO)
cloud_logger.addHandler(handler)
def test_method(request):
print('== start ==')
try:
cloud_logger.info('Info Message')
cloud_logger.warn('Warn Message')
raise Exception
except Exception:
cloud_logger.error('Error Message')
raise Exception
print('== finish ==')
実行、しかしログが出ない
- なんにも出ない。
原因(想像)
-
print
にしても結果は変わらず・・・
- どうやらGoogle Cloud Functionsはcrash(=異常終了)するとそこまでのログを出力してくれない
- ドキュメントのどこかに記述があるのだろうか・・・・
- なのでExceptionが出たらcatchして最終的に
sys.exit()
するように変更
import sys
# 中略
try:
cloud_logger.info('Info Message')
cloud_logger.warn('Warn Message')
raise Exception
except Exception:
cloud_logger.error('Error Message')
sys.exit()
print('== finish ==')
再実行、そしてエラー
print
にしても結果は変わらず・・・- ドキュメントのどこかに記述があるのだろうか・・・・
sys.exit()
するように変更import sys
# 中略
try:
cloud_logger.info('Info Message')
cloud_logger.warn('Warn Message')
raise Exception
except Exception:
cloud_logger.error('Error Message')
sys.exit()
print('== finish ==')
Failed to submit 3 logs.
google.api_core.exceptions.PermissionDenied: 403 The caller does not have permission
とな
Google Cloud Functionsのサービスアカウント
- ドキュメントを見るとGoogle Cloud Functionsのデフォルトサービスアカウントは
[email protected]
(App Engine default service account)になると記載がある。どうやらプロジェクト編集者のロールを持っているらしい。
- https://cloud.google.com/functions/docs/concepts/iam?hl=ja#runtime_service_account
- SAを見るとたしかにそんなものが生まれてる。
- 自分の環境を見ると・・・・ない!
- なぜか無くなっていた模様
解決策
振り返り
- ドキュメントはちゃんと読もう
- 書いてなかったかもしれないけど
- 横着してデフォルトのSAを使わず、ちゃんと必要な権限をもったSAを作成して利用しよう
- Cloud Functionsは落とさない。正常終了させる
- 稼働状況をモニタリングするならerror件数ではなくログのerrorメッセージ数を見る(しかないのだろうか・・・?)
[email protected]
(App Engine default service account)になると記載がある。どうやらプロジェクト編集者のロールを持っているらしい。
- https://cloud.google.com/functions/docs/concepts/iam?hl=ja#runtime_service_account
- SAを見るとたしかにそんなものが生まれてる。
- なぜか無くなっていた模様
振り返り
- ドキュメントはちゃんと読もう
- 書いてなかったかもしれないけど
- 横着してデフォルトのSAを使わず、ちゃんと必要な権限をもったSAを作成して利用しよう
- Cloud Functionsは落とさない。正常終了させる
- 稼働状況をモニタリングするならerror件数ではなくログのerrorメッセージ数を見る(しかないのだろうか・・・?)
- 書いてなかったかもしれないけど
Author And Source
この問題について(Google Cloud Functionsのログ出力(とハマったこと)), 我々は、より多くの情報をここで見つけました https://qiita.com/ck_fm0211/items/d6e6045b729deed16707著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .