BigQuery Cloud Logging sink (ADR 0043 v1.69)
previewUnifiedDeadlines (v1.62) Cloud Logging structured log 를 BigQuery 에
export 해 영속 cost / 사용 패턴 분석 dashboard 구축.
동기
v1.55 sessionStorage fetchCount: 탭 닫으면 리셋 (단기 cost only) v1.62 Cloud Logging: gcloud filter 가능하나 30일 retention 만 (default) v1.69 BigQuery sink: 무제한 retention + SQL 분석 + Looker Studio 시각화
1. 사전 준비 (1회)
1-1. BigQuery dataset 생성
# 프로젝트 선택
gcloud config set project neohollo-pro
# dataset 생성 — `ops_logs` (Asia 멀티 리전)
bq --location=asia-northeast3 mk \
--description "ADR 0043 v1.69 — ops Cloud Logging structured events" \
ops_logs
1-2. Cloud Logging sink 생성
# sink 이름 + filter — previewUnifiedDeadlines 의 invoke + complete events
gcloud logging sinks create \
ops-deadline-preview-sink \
bigquery.googleapis.com/projects/neohollo-pro/datasets/ops_logs \
--log-filter='resource.type="cloud_function"
AND resource.labels.function_name="previewUnifiedDeadlines"
AND (jsonPayload.event="previewUnifiedDeadlines.invoke"
OR jsonPayload.event="previewUnifiedDeadlines.complete")'
1-3. 권한 부여
# sink writer 서비스 계정에 BigQuery dataset write 권한
SINK_SA=$(gcloud logging sinks describe ops-deadline-preview-sink \
--format='value(writerIdentity)')
bq add-iam-policy-binding ops_logs \
--member="$SINK_SA" \
--role=roles/bigquery.dataEditor
2. 활성화 후 검증 (5분)
2-1. 테스트 호출
# ops 콘솔에서 previewUnifiedDeadlines 1회 수동 호출
# (v1.43 UnifiedDeadlinesPreviewPanel 의 "조회" 버튼)
# 5분 대기 (sink propagation latency)
# BigQuery 에 데이터 도착 확인
bq query --use_legacy_sql=false \
'SELECT timestamp, jsonPayload.event, jsonPayload.actorEmail
FROM `ops_logs.run_googleapis_com_stdout`
WHERE jsonPayload.event LIKE "previewUnifiedDeadlines.%"
ORDER BY timestamp DESC
LIMIT 10'
3. 분석 query 예시
3-1. 운영자 별 호출 빈도 (지난 30일)
SELECT
jsonPayload.actorEmail AS actor,
COUNT(*) AS invokes,
AVG(CAST(jsonPayload.elapsedMs AS INT64)) AS avg_elapsed_ms
FROM `ops_logs.run_googleapis_com_stdout`
WHERE jsonPayload.event = "previewUnifiedDeadlines.complete"
AND timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
GROUP BY actor
ORDER BY invokes DESC
3-2. multi-source cases 추이
SELECT
DATE(timestamp) AS date,
AVG(CAST(jsonPayload.multiSourceCount AS INT64)) AS avg_multi_source
FROM `ops_logs.run_googleapis_com_stdout`
WHERE jsonPayload.event = "previewUnifiedDeadlines.complete"
GROUP BY date
ORDER BY date DESC
4. cost 모니터링
- BigQuery storage: 로그 1KB 당 ₩0.0001/월 (Asia tier).
- 가정: 일 100 호출 × 200B = 20KB/일 = 600KB/월 → ₩0.06/월 (무시 가능)
- BigQuery query: 슬롯 기반 — 1TB scan 당 ₩6,500.
- 위 query 들은 < 1MB scan → 무료 한도 내 (월 1TB free)
5. 비활성화
# sink 삭제 (BigQuery dataset + 데이터는 유지)
gcloud logging sinks delete ops-deadline-preview-sink
# dataset 도 삭제 (선택)
bq rm -r -f -d ops_logs
6. 다른 events 추가
- v1.40
widget.deprecate.recommendation_strongaudit log 도 동일 패턴으로 sink 가능 - v1.46
autoPublishDeprecateStrongIfEnabled결과 로그 - v1.56
recordMultiSourceAlertIfEnabledoutcome 추적
각자 별도 sink 생성 + filter 분리 권장 (분석 dashboard 별 dataset 분리).