Cloud Loggingは、Google Cloud Platform (GCP) が提供するフルマネージドのログ管理サービスです。GCPリソース、オンプレミス環境、他のクラウドプロバイダーからのログデータを収集、保存、検索、分析、モニタリングするための統合プラットフォームを提供します。Cloud Loggingは、システムの可観測性を向上させ、問題のトラブルシューティングやセキュリティ監査、コンプライアンス要件の満たすための重要なツールです。
Cloud Loggingは以下の主要コンポーネントで構成されています:
コンポーネント | 説明 |
---|---|
Logging API | ログエントリの書き込み、読み取り、管理のためのAPI |
ログルーター | ログエントリを適切な宛先(ログバケット、Pub/Sub、BigQueryなど)にルーティング |
ログバケット | ログデータを保存するためのストレージ単位 |
ログビューア | ログエントリを検索、フィルタリング、表示するためのインターフェース |
ログベースのメトリクス | ログデータから生成されるカスタムメトリクス |
ログシンク | ログデータを外部システム(BigQuery、Cloud Storage、Pub/Subなど)にエクスポートするための設定 |
Logging Agent | Compute EngineやKubernetesなどの環境からログを収集するエージェント |
Cloud Loggingと他のログ管理サービスには以下のような違いがあります:
Cloud Loggingは、Google Cloud Console、gcloud CLIツール、クライアントライブラリ、またはRESTful APIを使用して利用できます。
Google Cloud Consoleのログエクスプローラーを使用して、ログを表示、検索、フィルタリングできます:
resource.type="gce_instance"
severity>=ERROR
timestamp>"2023-01-01T00:00:00Z"
resource.type="k8s_container"
resource.labels.namespace_name="production"
resource.labels.container_name="web-server"
textPayload:"Exception"
timestamp>="2023-01-15T00:00:00Z"
timestamp<="2023-01-16T00:00:00Z"
gcloud logging read "resource.type=gce_instance AND severity>=ERROR" \
--limit=10 \
--format=json
gcloud logging read "timestamp>=\"2023-01-15T00:00:00Z\" AND timestamp<=\"2023-01-16T00:00:00Z\"" \
--limit=50 \
--order=asc
アプリケーションからCloud Loggingにログを出力するには、各言語用のクライアントライブラリを使用します:
const {Logging} = require('@google-cloud/logging');
const logging = new Logging();
const log = logging.log('my-log');
async function writeLog() {
const text = 'Hello, Cloud Logging!';
const metadata = {
resource: {
type: 'global',
},
severity: 'INFO',
};
const entry = log.entry(metadata, text);
await log.write(entry);
console.log(`Logged: ${text}`);
}
writeLog();
import google.cloud.logging
from google.cloud.logging.resource import Resource
client = google.cloud.logging.Client()
logger = client.logger('my-log')
# 構造化ログの出力
logger.log_struct(
{
'message': 'Hello, Cloud Logging!',
'user': 'user123',
'event': 'login'
},
resource=Resource(
type='global',
labels={}
),
severity='INFO'
)
import com.google.cloud.logging.LogEntry;
import com.google.cloud.logging.Logging;
import com.google.cloud.logging.LoggingOptions;
import com.google.cloud.logging.Payload.StringPayload;
import com.google.cloud.logging.Severity;
public class LoggingExample {
public static void main(String[] args) {
LoggingOptions options = LoggingOptions.getDefaultInstance();
try (Logging logging = options.getService()) {
LogEntry entry = LogEntry.newBuilder(StringPayload.of("Hello, Cloud Logging!"))
.setSeverity(Severity.INFO)
.setLogName("my-log")
.build();
logging.write(Collections.singleton(entry));
System.out.println("Logged: Hello, Cloud Logging!");
} catch (Exception e) {
System.err.println("Error writing logs: " + e.getMessage());
}
}
}
ログデータを長期保存や詳細分析のために外部システムにエクスポートするためのログシンクを設定できます:
gcloud logging sinks create storage-sink \
storage.googleapis.com/my-logs-bucket \
--log-filter="resource.type=gce_instance AND severity>=WARNING"
gcloud logging sinks create bigquery-sink \
bigquery.googleapis.com/projects/my-project/datasets/logs_dataset \
--log-filter="resource.type=k8s_container"
gcloud logging sinks create pubsub-sink \
pubsub.googleapis.com/projects/my-project/topics/logs-topic \
--log-filter="severity=ERROR OR severity=CRITICAL"
Cloud Loggingでは、様々な種類のログが収集されます:
ログエントリは以下の主要フィールドで構成されています:
{
"insertId": "s3f7d83jd93h",
"logName": "projects/my-project/logs/my-log",
"resource": {
"type": "gce_instance",
"labels": {
"instance_id": "1234567890123456789",
"zone": "us-central1-a"
}
},
"timestamp": "2023-01-15T12:34:56.789Z",
"severity": "ERROR",
"textPayload": "Application failed to start: database connection error",
"labels": {
"environment": "production",
"service": "api-server"
},
"trace": "projects/my-project/traces/1234567890abcdef"
}
ログデータからカスタムメトリクスを作成して、モニタリングとアラートに活用できます:
gcloud logging metrics create error-count \
--description="Count of error log entries" \
--filter="severity>=ERROR" \
--metric-descriptor-type=counter
gcloud logging metrics create response-time-distribution \
--description="Distribution of API response times" \
--filter="resource.type=gae_app AND jsonPayload.responseTime>0" \
--metric-descriptor-type=distribution \
--value-extractor="EXTRACT(jsonPayload.responseTime)"
特定のログパターンに基づいてアラートを設定できます:
gcloud alpha monitoring policies create \
--display-name="Critical Error Alert" \
--condition-filter="metric.type=\"logging.googleapis.com/log_entry_count\" AND resource.type=\"global\" AND metric.labels.severity=\"CRITICAL\"" \
--condition-threshold-value=1 \
--condition-threshold-duration=60s \
--notification-channels="projects/my-project/notificationChannels/1234567890"
Cloud Loggingでは、ログデータのセキュリティを確保するための様々な機能が提供されています:
IAMを使用して、ログデータへのアクセスを制御できます:
# ログ閲覧者ロールの付与
gcloud projects add-iam-policy-binding my-project \
--member=user:user@example.com \
--role=roles/logging.viewer
# ログ書き込み者ロールの付与
gcloud projects add-iam-policy-binding my-project \
--member=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com \
--role=roles/logging.logWriter
Cloud Loggingのデータは、保存時と転送時に自動的に暗号化されます。さらに、カスタマー管理の暗号化キー(CMEK)を使用することもできます:
# CMEKを使用したログバケットの作成
gcloud logging buckets create my-cmek-bucket \
--location=global \
--cmek-kms-key-name=projects/my-project/locations/global/keyRings/my-keyring/cryptoKeys/my-key
データアクセス監査ログを有効にして、機密データへのアクセスを監視できます:
gcloud logging settings update \
--organization=ORGANIZATION_ID \
--enable-data-access
Cloud Loggingを効果的に活用するためのベストプラクティス:
Cloud Loggingは以下のようなユースケースに適しています:
# エラーログの検索
gcloud logging read "resource.type=gae_app AND severity>=ERROR" \
--limit=10 \
--format=json
# 特定のエラーパターンの検索
gcloud logging read "resource.type=gae_app AND textPayload:\"database connection failed\"" \
--limit=10 \
--format=json
# エラー発生前後のログの検索
gcloud logging read "resource.type=gae_app AND resource.labels.module_id=\"api-server\"" \
--limit=50 \
--order=asc \
--freshness=1d
Cloud Loggingは他のGoogle Cloudサービスと統合して、より強力なソリューションを構築できます:
サービス | 統合の利点 |
---|---|
Cloud Monitoring | ログとメトリクスを組み合わせた総合的なモニタリング |
Cloud Trace | 分散トレーシングとログの関連付けによる詳細な問題診断 |
Error Reporting | アプリケーションエラーの自動検出と集約 |
BigQuery | ログデータの高度な分析とクエリ |
Pub/Sub | ログイベントに基づいたリアルタイム処理 |
Cloud Storage | ログデータの長期保存とアーカイブ |
Cloud Security Command Center | セキュリティ関連のログの集約と分析 |
# Pub/Subトピックの作成
gcloud pubsub topics create log-events
# ログシンクの作成
gcloud logging sinks create pubsub-sink \
pubsub.googleapis.com/projects/my-project/topics/log-events \
--log-filter="severity>=WARNING"
# サービスアカウントに発行者権限を付与
gcloud pubsub topics add-iam-policy-binding log-events \
--member=serviceAccount:$(gcloud logging sinks describe pubsub-sink --format="value(writerIdentity)") \
--role=roles/pubsub.publisher
Cloud Logging は、Google Cloud Platform上でのログ管理サービスとして、様々なソースからのログデータを収集、保存、検索、分析、モニタリングするための統合プラットフォームを提供します。システムの可観測性を向上させ、問題のトラブルシューティングやセキュリティ監査、コンプライアンス要件を満たすための重要なツールです。
Cloud Loggingの主な利点は以下の通りです:
Cloud Loggingを効果的に活用するには、構造化ログの使用、適切なログレベルの設定、コンテキスト情報の追加、効率的なログフィルタの作成、ログシンクの活用などのベストプラクティスを適用することが重要です。また、コスト最適化のために、不要なログの除外、サンプリングの活用、適切な保持期間の設定なども検討すべきです。