如何在Cloud Monitoring中创建基于日志的自定义统计指标?
创建基于日志的自定义指标(统计匹配过滤器的日志数量)
现有环境说明
- 基于Python的微服务,当前使用Google Cloud Monitoring SDK创建自定义指标,核心代码片段:
from google.api import label_pb2 as ga_label from google.api import metric_pb2 as ga_metric from google.cloud import monitoring_v3 import uuid client = monitoring_v3.MetricServiceClient() project_name = f"projects/{project_id}" descriptor = ga_metric.MetricDescriptor() descriptor.type = "custom.googleapis.com/my_metric" + str(uuid.uuid4()) descriptor.metric_kind = ga_metric.MetricDescriptor.MetricKind.GAUGE descriptor.value_type = ga_metric.MetricDescriptor.ValueType.DOUBLE descriptor.description = "Custom Metric recording specific code level events."
- 需统计的日志示例:

需求目标
创建基于日志的指标,统计匹配指定过滤器的日志条目数量。
解决方案(Python SDK实现)
使用Google Cloud Logging SDK直接创建计数型日志指标,步骤如下:
1. 安装依赖
确保已安装Logging SDK:
pip install google-cloud-logging
2. 核心代码实现
from google.cloud import logging_v3 def create_log_based_metric(project_id, metric_id, filter_str, metric_description): client = logging_v3.MetricsServiceV2Client() parent = f"projects/{project_id}" # 定义日志指标配置 metric = logging_v3.LogMetric() metric.name = metric_id # 指标唯一ID,仅支持小写字母、数字、连字符,以字母开头 metric.description = metric_description metric.filter = filter_str # 日志过滤规则,与Cloud Logging控制台语法一致 # 创建计数型指标(默认统计匹配日志的数量) response = client.create_log_metric(parent=parent, log_metric=metric) print(f"已创建日志指标: {response.name}") # 调用示例 if __name__ == "__main__": PROJECT_ID = "你的项目ID" METRIC_ID = "target_log_count" # 自定义指标ID LOG_FILTER = "你的日志过滤规则" # 替换为实际规则,比如"severity=ERROR AND textPayload:\"特定事件\"" DESCRIPTION = "统计匹配指定规则的日志条目数量" create_log_based_metric(PROJECT_ID, METRIC_ID, LOG_FILTER, DESCRIPTION)
3. 关键参数说明
filter_str:日志过滤规则示例:- 匹配包含特定关键词的日志:
"textPayload:\"payment_failed\"" - 匹配指定级别与资源类型:
"resource.type=cloud_run_revision AND severity=WARNING"
- 匹配包含特定关键词的日志:
metric_id:需符合GCP资源命名规范,不能包含特殊字符
4. 验证与排查
- 指标创建后,可在Cloud Monitoring控制台的「指标资源管理器」中,通过
logging.googleapis.com/user/[你的metric_id]找到该指标查看数据 - 若指标无数据:先在Cloud Logging控制台测试过滤规则是否能匹配到日志
- 权限问题:确保运行代码的账号拥有
logging.metrics.create权限,可通过IAM角色roles/logging.configWriter授权
内容的提问来源于stack exchange,提问作者due_date_09
相关产品推荐
相关产品推荐

