Firestoreの読み込み回数が予想よりも多かったので、
どこでそんなに呼ばれてるのかな?といろいろ調べてみたときの備忘録。
呼び出し箇所は、以下の3種類
Firebaseの監査ログ
Firebase自体にデータの読み取り/書き込みの監査ログを記録する機能があるため、それを活用。
監査ログを有効にする
データアクセス監査ログはデフォルトではOFFのため、有効にする必要がある。
監査ログの画面に移動したら、
Firestore
などでフィルタFirestore/Datastore API
を選択- 「データ読み取り」にチェックを入れる
- 「保存」ボタンをクリック
でOK。有効にしたらロギングされるようになる。
監査ログを参照する
監査ログはCloud Loggingのページから確認できる。
各ログの中身は、こんな感じ。
{ "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "firebase-adminsdk-xxxx@<project-id>.iam.gserviceaccount.com", }, "serviceName": "firestore.googleapis.com", "methodName": "google.firestore.v1.Firestore.RunQuery", "resourceName": "projects/<PROJECT_ID>/databases/(default)", "numResponseItems": "1", "request": { "structuredQuery": { <クエリの条件> }, "parent": "projects/<PROJECT_ID>/databases/(default)/documents/<COLLECTION_PATH>" }, }, "timestamp": "2022-05-24T07:10:23.198531Z", }
authenticationInfo.principalEmail
リクエスト元を特定する情報。
上記の例の場合は、Admin SDKからの呼び出し。
Firebaseコンソールの「プロジェクト設定 > サービスアカウント」に記載されているものと同じ。
それぞれ以下の通り
- Webブラウザのクライアントライブラリ
service-<PROJECT-NUMBER>@firebase-rules.iam.gserviceaccount.com
authenticationInfo.thirdPartyPrincipal
にログインユーザの情報がある
- サーバのFirebase Admin SDK
firebase-adminsdk-xxxx@<project-id>.iam.gserviceaccount.com
- Firebaseコンソールの「プロジェクト設定 > サービスアカウント」のアカウント
- Cloud Functions内のAdmin SDK
<PROJECT-ID>@appspot.gserviceaccount.com
authenticationInfo.serviceAccountDelegationInfo
内に
service-<PROJECT-NUMBER>@gcf-admin-robot.iam.gserviceaccount.com
各サービスアカウントについては、以下にまとまっている。
・Firebase サービス アカウントの概要 | Firebase Documentation
methodName
どんな種類の操作をしたかの情報。
読み込みだと、以下の操作など。
- GetDocument
- ListDocuments
- BatchGetDocuments
- RunQuery
- PartitionQuery
- ListCollectionIds
- Listen
すべての操作については、以下のドキュメントに。
・監査対象のオペレーション | Firestore の監査ロギング情報
request
どんな操作をしたかの具体的な情報。
こんな感じの内容になっている。
{ "protoPayload": { "request": { "structuredQuery": { "from": [ { "collectionId": "XXXXX" } ], "limit": 1, "orderBy": [ { "direction": "DESCENDING", "field": { "fieldPath": "YYYYYY" } } ] }, "@type": "type.googleapis.com/google.firestore.v1.RunQueryRequest", "parent": "projects/<PROJECT_ID>/databases/(default)/documents/<COLLECTION_PATH>" }, "metadata": { "@type": "type.googleapis.com/google.cloud.audit.DatastoreServiceData", "processingDuration": "0.004008944s" } } }
あとは、CSVやJSONでダウンロードしたり、BigQueryに転送したりして、
リクエスト元や操作の種類ごとで計測すればOK。
ただ、データ監査ログは課金対象なので、容量には注意が必要。
・Cloud Logging | 料金
以上!! ざっくりした計測であれば、いい感じ(´ω`)