本文將說明記錄指標標籤,並說明如何建立及使用記錄指標標籤。
如果您熟悉標籤,可以直接前往本頁的「建立標籤」一節。
記錄指標標籤總覽
標籤可讓記錄指標包含多個時間序列,每個標籤值組合對應一個時間序列。所有記錄指標都隨附一些預設標籤。
您可以指定擷取器運算式,以在計數器類型及分佈類型指標中建立其他使用者定義的標籤。擷取器運算式會告訴 Cloud Logging 如何從記錄項目中擷取標籤的值。您可以指定下列任一標籤值:
LogEntry
物件中指定名稱欄位的完整內容。- 符合規則運算式 (regexp) 的命名欄位部分。
您可以從 LogEntry
內建欄位 (例如 httpRequest.status
) 或其中一個酬載欄位 textPayload
、jsonPayload
或 protoPayload
中擷取標籤。
如要瞭解規則運算式,請參閱 RE2 語法。
請勿在擷取器運算式中加入機密資訊,也不要將機密資料擷取到標籤中。這些資料會視為服務資料。
使用者定義標籤的限制
使用者定義的標籤有以下限制:
您最多可為每個指標建立 10 個使用者定義的標籤。
建立標籤後,就無法刪除。
如果是您已建立的標籤,您就可以修改標籤的擷取器運算式與說明。
您無法變更已建立之標籤的名稱或值類型。
系統只會保留標籤值的前 1,024 個字元。
每個記錄指標都受限於約 30,000 個有效時間序列,這取決於每個標籤的可能值數目,包括預設標籤在內。
舉例來說,如果您的記錄項目來自 100 項資源 (例如 VM 執行個體),且您為標籤定義了 20 種可能的值,則您的指標最多可能會有 2,000 個時間序列。
如果您的時間序列數或資料點數太多,您的成本將會上升,您的活動也可能會受到限制。如要進一步瞭解以記錄為基礎的指標費用,請參閱「Cloud Monitoring 定價:可收費指標」。如要瞭解記錄指標的限制,請參閱「配額和限制:記錄指標」和「排解記錄指標問題」。
預設標籤
大多數的記錄指標都隨附一些預先定義的標籤:
資源標籤:所有指標都使用受控資源物件來識別時間序列資料的來源。每個資源類型都包含類型名稱與一或多個標籤。資源類型範例包括 VM 執行個體、Cloud SQL 資料庫和負載平衡器。
在 Cloud Monitoring 中,資源及其標籤會與其他指標標籤分開列出,但它們的效果是相同的:它們都會在指標中建立額外的時間序列。詳情請參閱指標、時間序列和資源一文。
log (記錄):此標籤可在記錄項目中保存
logName
欄位LOG_ID
部分的值。severity (嚴重性):此標籤可在記錄項目中保存
severity
欄位的值。根據預設,嚴重性標籤只會在系統記錄指標中提供。
使用 Metrics Explorer 查看標籤
如要查看為記錄指標產生的時間序列上的標籤,請按照下列步驟操作:
-
在 Google Cloud 控制台中,前往「Log-based Metrics」(記錄指標) 頁面:
如果您是使用搜尋列尋找這個頁面,請選取子標題為「Logging」的結果。
尋找要查看的指標,然後在指標的 more_vert「更多」選單中選取「在 Metrics Explorer 中查看」。
繼續操作前,請等待圖表顯示資料,如果您建立的是以記錄檔為基礎的指標,可能需要等待幾分鐘。
如要查看可用的標籤,請展開「Filter」欄位。您可能會看到資源標籤和指標標籤。標籤清單會依資源類型和指標類型而異。例如:
gce_instance
資源類型有三個資源標籤:project_id
、instance_id
和zone
。logging/log_entry_count
指標類型有兩個指標標籤:log
和severity
。您的使用者定義標籤也會顯示在此部分。
如要確認使用者定義的標籤是否從記錄項目中擷取正確資料,請按照下列步驟操作:
將「Aggregation」元素變更為「Unaggregated」。
在圖表中選取「表格」或「兩者皆是」。
在工具列中,選取 view_column「資料欄顯示選單」,然後選取標籤。這個選單會顯示所有含有資料的標籤。
如果沒有看到您建立的標籤,請確認欄位名稱和擷取器運算式。
建立標籤
您會在建立指標時建立使用者定義的標籤。計數器指標與分佈指標都可以有標籤。您無法在系統記錄式指標中加入標籤。
如要建立標籤,請在記錄項目中指定欄位,然後定義從指定欄位擷取值的運算式。
控制台
建立記錄指標時,「建立記錄指標」面板會提供新增標籤的選項。
按一下「新增標籤」。
提示:如要查看記錄項目內的欄位和值,請執行下列操作:
- 在「Filter selection」區段中,按一下「Preview logs」。
- 在「View logs」窗格中,選擇記錄項目,然後按一下旁邊的「expander」圖示 navigate_next。
- 按一下「Expand nested fields」(展開巢狀欄位)。
在「標籤」部分設定下列欄位:
標籤名稱:輸入標籤名稱。例如,
ID
。名稱必須符合下列條件:
- 長度不可超過 100 個字元。
- 符合規則運算式 [a-zA-Z][a-zA-Z0-9_]*。
- 不只包含「log」字串。
說明:說明標籤。關於預期記錄值的格式,請試著儘可能具體說明,例如:
Instance number
。標籤類型:選擇 [String] (字串)、[Boolean] (布林值) 或 [Integer] (整數)。
欄位名稱:輸入包含標籤值的記錄項目欄位名稱。您會在輸入時看到一些選擇。在此範例中,欄位為:
labels."compute.googleapis.com/resource_id"
規則運算式:如果您的標籤值包含欄位的完整內容,您可以將此欄位保留空白。否則,請指定從欄位值中擷取標籤值的規則運算式擷取群組。
例如,假設欄位通常包含類似以下這樣的文字:
The instance number is 0123456789; the ID is my-test-instance22
如果您希望標籤值是執行個體數,有許多規則運算式可以擷取正確的數目。舉例來說,在下列運算式中,圓括號是擷取群組,可識別要擷取的文字部分:
The instance number is ([0-9]+); .*
如要進一步瞭解規則運算式,請參閱 RE2 語法。
按一下 [Done] (完成) 建立標籤。您可以重複以上步驟新增更多標籤。
按一下「建立指標」,即可完成指標建立程序。
gcloud
如要建立含有自訂標籤的以記錄為基礎的指標,您必須建立檔案,其中包含以 JSON 或 YAML 格式呈現的 LogMetric
定義,包括自訂標籤。接著,請使用 --config-from-file
標記呼叫 create
指令,並將 FILENAME 替換為 JSON 或 YAML 檔案的名稱,藉此建立指標:
gcloud logging metrics create METRIC_NAME --config-from-file FILENAME
API
呼叫 Logging API projects.metrics.create
方法時,標籤會列在要求主體的 LogMetric
物件中。如要進一步瞭解完整的呼叫方法,請參閱「建立計數器指標」或「建立分佈指標」。
您必須在 LogMetric
中,為每個標籤的 metricDescriptor
和 labelExtractors
欄位加上區隔。
語法如下:
{ ... metricDescriptor: { labels: [ { key: LABEL_NAME, valueType: LABEL_TYPE, description: LABEL_DESCRIPTION }, ... ] }, labelExtractors: { LABEL_NAME: EXTRACTOR_EXPRESSION, ... }, }
語法元素的意義如下:
- LABEL_NAME:標籤做為字串的名稱。
- VALUE_TYPE:標籤類型:
STRING
、BOOL
或INT64
。 - LABEL_DESCRIPTION:標籤的說明。
EXTRACTOR_EXPRESSION:將記錄項目欄位名稱與選用規則運算式組合在一起的字串,萃取器運算式可以是下列其中一種:
EXTRACT(FIELD)
REGEXP_EXTRACT(FIELD, REGEXP)
如要進一步瞭解規則運算式,請參閱 RE2 語法。
兩個標籤的範例如下:
{
...
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
類型。
範例
本節提供幾個範例,協助您開始在使用者定義的記錄指標上建立標籤。建立標籤後,建議您使用 Metrics Explorer 驗證標籤。
提示:
- 指定擷取器運算式時,您必須使用擷取群組。
- 如果未指定擷取器運算式,系統會擷取欄位的完整值。
請確保任何標籤的可能值組合都受到限制。建議使用一小組離散值 (例如「紅色」、「綠色」和「藍色」)。舉例來說,如果您擷取顏色標籤的 8 位元 RGB 值,可以取得超過 1,600 萬個不同的值。也就是說,您最多可擁有 1,600 萬個時間序列。
請勿擷取高解析度值,例如時間戳記、任何類型的專屬 ID、使用者 ID、IP 位址、未參數化的網址等等。
從稽核記錄中擷取狀態碼
如果欄位不含任何特殊字元,您可以使用欄位名稱做為記錄式指標的標籤。
舉例來說,稽核記錄的 protoPayload
欄位符合 AuditLog
結構。因此,如要從稽核記錄中擷取 status
欄位,您可以將欄位名稱設為 protoPayload.status.code
,並將擷取器運算式留空。
如果您只想擷取錯誤代碼的第一個數字,可以將擷取器運算式設為 (\d)\d\d
。
從含有特殊字元的欄位中擷取值
如果記錄項目中的欄位含有特殊字元,請以雙引號括住該欄位。
舉例來說,如要擷取 k8s-pod/k8s-app
標籤的完整值,請將欄位名稱設為 labels."k8s-pod/k8s-app"
,並將運算式留空。
從文字酬載中擷取值
請考慮採用下列格式的記錄項目:
textPayload: "unfinished_task_instance_count.py:61 Unfinished task instance count metric value 0 for state: deferred"
如要從使用先前格式的記錄項目中,擷取狀態值 (例如 deferred
),您可以採取以下做法:
- 欄位名稱:
textPayload
- 擷取器運算式:
^unfinished.*state: ([a-z]+)
從重複欄位擷取值
記錄項目可能包含含有重複欄位的欄位。在 JSON 中,這些欄位會以方括號 ([]
) 顯示。從標籤的角度來看,請將重複欄位視為集合,並將標籤擷取器視為迭代器。定義標籤時,您會提供比對條件,而擷取器會重複處理集合,直到找到相符項目為止。系統一律會傳回第一個符合條件的項目,即使集合中有多個成員符合條件也是如此。
您決定建立記錄指標,用來計算稽核記錄。在設定標籤之前,您查看了幾個稽核記錄,並發現 protoPayload
的格式符合 AuditLog
結構。以下是稽核記錄項目的部分內容。
{
...
protoPayload: {
@type: "type.googleapis.com/google.cloud.audit.AuditLog"
authenticationInfo: {1}
authorizationInfo: [
0: {
granted: true
permission: "io.k8s.coordination.v1.leases.get"
resource: "coordination.k8s.io/v1/namespaces/kube-system/leases/maintenance-controller"
}
]
requestMetadata: {2}
status: {1}
...
}
...
}
您決定為記錄指標建立標籤,以便儲存 permission
欄位的資訊。您會發現這些欄位的格式類似 io.k8s.xyz
,其中 xyz
是提供要求詳細資料的字串。這個字串可能會包含 get
這類值,也可能會包含 io.k8s.coordination.v1.leases.get
這類較複雜的格式。
為了盡量減少標籤值的數量,請不要擷取詳細資訊。您只想在標籤中儲存 get
或 coordination
等值。此外,您決定不想在標籤值中加入常見的前置字串 io.k8s.
。
接下來,您需要設定標籤。由於 permission
欄位是重複欄位,父項為 authorizationInfo
欄位,因此您可以將欄位名稱設為以下格式:
protoPayload.authorizationInfo.permission
最後,您可以建立下列規則運算式:
io.k8s.([a-z]+).*