基于日志的指标标签

本页面介绍了基于日志的指标默认标签,并说明了如何对基于日志的指标创建和使用标签。

如果您已熟悉标签,则可以直接转到本页面上的创建标签部分。

概览

标签允许基于日志的指标包含多个时间序列,每个标签值对应一个时间序列。所有基于日志的指标都附带若干默认标签

通过指定提取器表达式,您可以在计数器类型和分布类型指标中创建更多用户定义的标签。提取器表达式告知 Stackdriver Logging 如何从日志条目中提取标签值。您可以将标签值指定为下列之一:

  • 日志条目中命名字段的全部内容。
  • 命名字段中与正则表达式相匹配的一部分。

您可以从内置日志条目字段(例如 httpRequest.status)或负载字段(textPayloadjsonPayloadprotoPayload)提取标签。

用户定义的标签的限制

提取的标签值不应过长,且每个标签的不同值不应过多:

  • 最多可为每个指标创建 10 个用户定义的标签。

  • 无法在创建标签后将其删除。

    • 您可以修改已创建标签的提取器表达式和说明。

    • 您无法更改已创建标签的名称或值类型。

  • 仅保留标签值的前 1024 个字符。

  • 每个基于日志的指标最多只能有约 30000 个活跃的时间序列,这取决于每个标签(包括默认标签)的可能值的数量。

    例如,如果您的日志条目来自 100 项资源(例如虚拟机实例),而您定义了具有 20 个可能值的标签,那么您的指标最多可能有 2000 个时间序列。

如果您拥有的时间序列或数据点过多,则您的费用将会升高,并且您的运行可能会受到限制。如需详细了解基于日志的指标的费用,请参阅 Stackdriver 价格。如需了解与指标相关的配额和限制,请参阅配额和限制以及问题排查

默认标签

所有基于日志的指标(包括系统日志记录指标)都附带若干预定义标签:

  • 资源标签:所有指标均使用受监控的资源对象来标识时间序列数据的来源。每种资源类型都包括一个类型名称和一个或多个标签。资源类型的示例包括虚拟机实例、CloudSQL 数据库和负载平衡器等。

    资源及其标签与 Stackdriver Monitoring 中的其他指标标签分开列出,但两者具有相同的效果:它们会在指标中创建更多时间序列。如需了解详情,请参阅指标、时间序列和资源

  • log:此标签包含日志条目中 logName 字段的 LOG_ID 部分的值。

  • severity:此标签包含日志条目中 severity 字段的值。

示例

来自 Metrics Explorer 的以下屏幕截图显示了某个(基于日志的)系统指标的标签。在过滤条件文本框内点击即可获取标签列表:

Metrics Explorer

该屏幕截图显示了以下信息:

  • Metrics Explorer 使用 logging/log_entry_count 指标和 gce_instance 资源类型(Compute Engine 虚拟机实例)的时间序列。

    此指标还包含其他资源类型的时间序列,但 Metrics Explorer 一次只允许您查看一种资源类型。

  • gce_instance 资源类型有三个资源标签project_idinstance_idzone

  • 该指标有两个指标标签logseverity。用户定义的标签也会显示在此部分中。

创建标签

您在创建指标的同时创建用户定义的标签。计数器指标和分布指标都可以包含标签。您无法为(基于日志的)系统指标添加标签。

Logging 控制台

  1. 创建基于日志的指标时,指标编辑器面板中会包含一个用于添加标签的选项:

    标签菜单

  2. 点击添加一项。您将会看到如下格式的表单(此示例已填写完毕),对标签进行了描述:

    创建标签

    提示:要查看日志条目中的所有字段和值,请选择一个日志条目,点击该日志条目旁边的展开图标,然后点击全部展开

  3. 标签表单中填写以下字段:

    1. 名称:为标签选择名称,例如 ID

      该名称必须符合以下条件:

      • 长度不超过 100 个字符。
      • 匹配正则表达式 [a-zA-Z][a-zA-Z0-9_]*。
      • 不能只包含字符串“log”。
    2. 说明:对标签进行说明。尽可能具体地说明预期日志值的格式,例如 Instance number

    3. 标签类型:选择字符串布尔值整数

    4. 字段名称:输入包含标签值的日志条目字段名称。系统会在您输入时即时向您提供选项。在此示例中,该字段为:

      labels."compute.googleapis.com/resource_id"
      
    5. 提取正则表达式:如果标签的值包含字段的全部内容,则可以将此字段留空。否则,请指定用于从该字段值中提取标签值的正则表达式 (regexp)。例如,假设该字段通常包含如下文本:

      The instance number is 0123456789; the ID is my-test-instance22
      

      如果您希望标签值为实例编号,则有许多正则表达式可用来提取正确的编号。以下就是一个例子:

      The instance number is ([0-9]+); .*
      

      英文括号(称为正则表达式捕获组)用于标识文本匹配中将要提取的部分。如需详细了解正则表达式,请参阅 RE2 语法

  4. 点击完成,以创建标签。您可以重复上述步骤添加更多标签。

Logging API

在对 Stackdriver Logging API 的 projects.metrics.create 方法的调用的请求正文中,标签作为 LogMetric 对象的一部分指定。如需了解完整的方法调用,请参阅创建计数器指标创建分布指标

对于每一个标签,您必须向 LogMetric 中的 metricDescriptorlabelExtractors 字段添加一个 segment。

语法如下所示:

{
  ...
  metricDescriptor: {
      labels: [
        { key: [LABEL_NAME], valueType: [LABEL_TYPE],
          description: [LABEL_DESCRIPTION] },
        ...
      ]
  },
  labelExtractors: {
    [LABEL_NAME]: [EXTRACTOR_EXPRESSION],
    ...
  },
}

相应语法元素的含义如下:

  • [LABEL_NAME]:标签的名称,为字符串。
  • [VALUE_TYPE]:标签的类型:STRINGBOOLINT64
  • [LABEL_DESCRIPTION]:标签的说明。
  • [EXTRACTOR_EXPRESSION]:一个字符串,用于将日志条目字段名称与可选的正则表达式进行组合。以下类型之一:

    EXTRACT([FIELD])
    REGEXP_EXTRACT([FIELD], [REGEXP])
    

以下是含有两个标签的示例:

{
  ...
  metricDescriptor: {
      labels: [
        { key: "label_name_a", valueType: STRING },
        { key: "label_name_b", valueType: INT64 },
      ]
  },
  labelExtractors: {
    "label_name_a":
      "REGEXP_EXTRACT(jsonPayload.field_a, \"before ([a-zA-Z ]+) after\"",
    "label_name_b": "EXTRACT(jsonPayload.field_b)",
  },
}

如需了解详情,请参阅 LogMetric 类型。

Cloud SDK

如需了解如何使用 Cloud SDK 创建带标签的基于日志的指标,请访问 gcloud beta logging metrics create

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Stackdriver Logging
需要帮助?请访问我们的支持页面