Cloud Logging の基本的な使い方
[履歴] [最終更新] (2021/08/02 23:33:43)

概要

Cloud Logging は GCP 内のリソース等で生成されるログを処理するためのサービスです。旧称は Google Stackdriver Logs です。Cloud Logging 自体は、Operations Suite という枠組みの一部という位置付けです。基本的な使い方を記載します。

gcloud および API の利用

書き込み (textPayloadjsonPayload がサポートされています)

gcloud logging write my-test-log 'A simple entry.'
gcloud logging write --payload-type=json my-test-log '{ "message": "My second entry", "weather": "partly cloudy"}'

読み出し

gcloud logging read 'resource.type=global'
gcloud logging read 'resource.type=global' --freshness 10d --limit 2

削除

gcloud logging logs delete my-test-log

API の利用 entries.list (Chrome ブラウザから直接 EXECUTE することもできます)

curl -sS -XPOST -H 'Content-Type: applicaiton/json' \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://logging.googleapis.com/v2/entries:list \
-d @req.json

req.json

{
  "resourceNames": [
    "projects/my-project-xxxx"
  ],
  "filter": "resource.type=global",
  "orderBy": "timestamp desc"
}

上記 API は、例えばこちらのページで利用した Terraform モジュールが利用するライブラリでも利用されています。

書き込み

            res = self.api.entries().write(body=body).execute()
...

        return {
            'timestamp': {'seconds': int(time.time())},
            'insertId': record['etag'],
            'jsonPayload': {
                'requestMetadata': {'callerIp': record.get('ipAddress')},
                'authenticationInfo': {
                    'callerType': record['actor'].get('callerType'),
                    'principalEmail': record['actor'].get('email')
                },
                'methodName': record['events'][0]['name'],
                'parameters': record['events'][0].get('parameters'),
                'report_timestamp': self.get_time_dict(record)
            },
            'resource': {'type': 'global'}
        }

読み出し

        query = {
            'orderBy': 'timestamp desc',
            'pageSize': 1,
            'resourceNames': [self.project_id],
            'filter': 'logName={}'.format(destination)
        }
        log = self.api.entries().list(body=query).execute()

ログ エクスプローラについて

Cloud Logging は書き込まれたログをルーティングして、既定では以下の二つの ログバケット のいずれかに格納します。

Uploaded Image

  • _Required → 400日の保持期間を持ちます。GCP のリソース作成時のログなどが書き込まれます。
  • _Default → 30日の保持期間を持ちます。API で書き込んだログはこちらに格納されます。料金を支払えば保持期間を延長設定できます。

既定の二つの Log Sink に加えて、Pub/Sub や Cloud Storage、BigQuery にログを格納するための Log Sink を独自に作成することもできます。

Uploaded Image

Routing and storage overview

ログは tail -f コマンドのように、ストリーミング確認できます。

Uploaded Image

「ストレージによるスコープ」を選ぶことで Log Sink を選択できます。「範囲を絞り込む」をクリックします。

Uploaded Image

上記 _Required_Default 以外の Log Sink を利用している場合には、明示的に選択しないと表示されないことがあるため注意します。

Uploaded Image

Filter 結果を別の場所に Export する Log Sink の作成

Log Sink は「filter と destination」を設定値として持ちます。Destination には、別のプロジェクトの Log Bucket や Pub/Sub Topic を指定できます。

以下の例では、こちらのページの設定で Cloud Identity から組織のログとして取り込んだログを、Log Sink で別の場所に流し込みます。

参考ページ: Storing your organization's logs in a log bucket

Destination

Destination として Log Bucket を作成してみます。

gcloud logging buckets create my-log-bucket --location=global --project=myproject-20210411

_Default_Required 以外に一つ追加されたことが確認できます。

gcloud logging buckets list --project=myproject-20210411

LOCATION  BUCKET_ID      RETENTION_DAYS  LIFECYCLE_STATE  LOCKED  CREATE_TIME                     UPDATE_TIME
global    _Default       30              ACTIVE
global    _Required      400             ACTIVE           True
global    my-log-bucket  30              ACTIVE                   2021-08-02T13:34:03.406038292Z  2021-08-02T13:34:03.406038292Z

Sink

組織ID を確認しておきます。

gcloud organizations list

組織のログを対象とするためには --organization オプションを指定します。

連携される Cloud Identity ログのうち、パスワード変更のログをフィルタしてみます。

組織のログのみを対象とし、組織配下のプロジェクトのログを対象としたくないため、--include-children オプションは指定しません

gcloud logging sinks create my-log-sink \
logging.googleapis.com/projects/myproject-20210411/locations/global/buckets/my-log-bucket \
--log-filter='protoPayload.metadata.event.eventName="password_edit"' \
--organization=111111111111

作成されたフィルタを確認します。

gcloud logging sinks list --organization=111111111111
gcloud logging sinks describe my-log-sink --organization=111111111111

サービスアカウントの情報をメモしておきます。

writerIdentity: serviceAccount:o111111111111-523844@gcp-sa-logging.iam.gserviceaccount.com

IAM

ログバケットが存在する myproject-20210411 プロジェクトにおいて、サービスアカウント o111111111111-523844@gcp-sa-logging.iam.gserviceaccount.com に対して、「Logs Buckets Writer」ロールを付与します。

動作検証

確かにログが連携されることを、プロジェクト myproject-20210411 の Cloud Logging で確認します。

Uploaded Image

Cloud Console

上記の gcloud コマンドによる操作は Cloud Console から行なうこともできます。

Uploaded Image

gcloud と同様に、destination については Pub/Sub なども指定できます

関連ページ
    概要 Cloud Logging で管理するログを監視するためには Cloud Monitoring を利用できます。基本的な使い方を記載します。 補足: Cloud Monitoring の監視対象は Cloud Logging に限りません。 組織のログを監視する設定例 組織は Cloud Logging を持ちますが Cloud Monitoring を持ちません。そのため、組織のロ