Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
本文介绍如何使用 Kubernetes 群集中的容器日志数据实现数据转换。 Azure Monitor 中的转换允许在数据进入 Log Analytics 工作区之前修改或筛选数据。 它们允许执行诸如筛选从群集收集的数据以节省成本或处理传入数据以帮助进行数据查询之类的操作。
重要
使用 ConfigMap 筛选容器日志收集 一文介绍了配置和筛选容器日志收集的标准配置设置。 在使用转换之前,应该通过这些功能执行任何所需的配置。 使用转换来执行无法使用标准配置设置执行的筛选或其他数据配置。
数据收集规则
转换在数据收集规则 (DCR) 中实现,用于在 Azure Monitor 中配置数据收集。 在 Azure Monitor 中为 Kubernetes 群集启用监视 Prometheus 指标和容器日志记录时,会针对每种类型的数据创建单独的 DCR。 可以将转换操作添加到收集容器日志的 DCR 中。
若要创建转换,请执行以下步骤之一:
- 新群集。 使用现有的 ARM 模板 将 AKS 群集载入容器见解。 使用所需的配置修改该模板中的 DCR(包括类似于以下示例之一的转换)。
- 现有 DCR。 将群集加入容器见解并配置数据收集后,使用编辑数据收集规则中的任意一种方法编辑其 DCR,以包含转换。
注意
目前用于编辑 DCR 的 UI 很少,它是添加转换所必需的。 在大多数情况下,需要手动编辑 DCR。 本文介绍要实现的 DCR 结构。 请参阅在 Azure Monitor 中创建和修改数据收集规则,以获得关于如何实现该结构的指导。
下表介绍了在 Azure Monitor 中为 Kubernetes 群集启用监视 Prometheus 指标和容器日志记录时创建的资源。
日志收集
| 资源名称 | 资源类型 | 资源组 | 区域/位置 | Description |
|---|---|---|---|---|
MSCI-<aksclusterregion>-<clustername> |
数据收集规则 | 与群集相同 | 与 Log Analytics 工作区相同 | 与 AKS 群集资源关联,定义 Azure Monitor 代理收集日志的配置。 这是用于添加转换的 DCR。 |
托管 Prometheus
| 资源名称 | 资源类型 | 资源组 | 区域/位置 | Description |
|---|---|---|---|---|
MSPROM-<aksclusterregion>-<clustername> |
数据收集规则 | 与群集相同 | 与 Azure Monitor 工作区相同 | 与 AKS 群集资源关联,按指标加载项定义 prometheus 指标收集的配置。 |
MSPROM-<aksclusterregion>-<clustername> |
数据收集终结点 | 与群集相同 | 与 Azure Monitor 工作区相同 | DCR 用于从指标插件中采集 Prometheus 指标。 |
创建新的 Azure Monitor 工作区时,会创建以下其他资源。
| 资源名称 | 资源类型 | 资源组 | 区域/位置 | Description |
|---|---|---|---|---|
<azuremonitor-workspace-name> |
数据收集规则 | <MA_azuremonitor-workspace-name>_<azuremonitor-workspace-region>_managed | 与 Azure Monitor 工作区相同 | 如果你使用 Prometheus 服务器的远程写入功能,则应使用 DCR。 |
<azuremonitor-workspace-name> |
数据收集终结点 | <MA_azuremonitor-workspace-name>_<azuremonitor-workspace-region>_managed | 与 Azure Monitor 工作区相同 | 如果从 Prometheus 服务器进行远程写写入,则必须使用 DCE。 |
数据源
DCR 的“数据源”部分定义了 DCR 将处理的不同类型的传入数据。 对于容器见解,这是容器见解扩展,其中包括一个或多个以前缀 Microsoft-streams 开头的预定义 。
DCR 中容器见解流的列表取决于为群集选择的成本预设。 如果收集所有表,DCR 将使用 Microsoft-ContainerInsights-Group-Default 流,这是组流,包括 Stream 值中列出的所有流。 如果要使用转换,则必须将其更改为单独的流。 任何其他成本预设设置都将使用单独的流。
下面的示例显示了 Microsoft-ContainerInsights-Group-Default 流。 有关使用单个流的示例,请参阅示例 DCR。
"dataSources": {
"extensions": [
{
"streams": [
"Microsoft-ContainerInsights-Group-Default"
],
"name": "ContainerInsightsExtension",
"extensionName": "ContainerInsights",
"extensionSettings": {
"dataCollectionSettings": {
"interval": "1m",
"namespaceFilteringMode": "Off",
"namespaces": null,
"enableContainerLogV2": true
}
}
}
]
}
数据流
DCR 的“数据流”部分将流与 DCR 的 destinations 部分中定义的目标进行匹配。 如果数据被发送到默认表,则不必为已知流指定表名。 不需要转换的流可以组合在一个条目中,该条目只包括工作区目标。 每种数据都会被发送到其默认表。
为需要转换的流创建单独条目。 该流应包括工作区目标和 transformKql 属性。 如果要将数据发送到备用表,则需要包括用于指定目标表的名称的 outputStream 属性。
下面的示例显示了带有转换的单一流的 dataFlows 部分。 有关单一 DCR 中的多个数据流,请参阅示例 DCR。
"dataFlows": [
{
"streams": [
"Microsoft-ContainerLogV2"
],
"destinations": [
"ciworkspace"
],
"transformKql": "source | where PodNamespace == 'kube-system'"
}
]
示例 DCR
筛选数据
第一个示例根据 ContainerLogV2 列从 LogLevel 中筛选出数据。 将仅收集 LogLevel 为 error 或 critical 的记录,因为你可以使用这些条目来提醒和识别群集中的问题。 收集和存储其他级别(例如 info 和 debug)会产生成本,但没有显著价值。
可以使用以下日志查询检索这些记录。
ContainerLogV2 | where LogLevel in ('error', 'critical')
下图显示了此逻辑。
在转换中,表名 source 用于表示传入数据。 下面是要在转换中使用的已修改查询。
source | where LogLevel in ('error', 'critical')
以下示例展示了添加到容器见解 DCR 的该转换。 请注意,为 Microsoft-ContainerLogV2 使用了单独的数据流,因为这是你应该将转换应用到其中的唯一传入流。 为其他流使用了单独的数据流。
{
"properties": {
"location": "chinanorth2",
"kind": "Linux",
"dataSources": {
"syslog": [],
"extensions": [
{
"streams": [
"Microsoft-ContainerLogV2",
"Microsoft-KubeEvents",
"Microsoft-KubePodInventory"
],
"extensionName": "ContainerInsights",
"extensionSettings": {
"dataCollectionSettings": {
"interval": "1m",
"namespaceFilteringMode": "Off",
"enableContainerLogV2": true
}
},
"name": "ContainerInsightsExtension"
}
]
},
"destinations": {
"logAnalytics": [
{
"workspaceResourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/my-resource-group/providers/microsoft.operationalinsights/workspaces/my-workspace",
"workspaceId": "00000000-0000-0000-0000-000000000000",
"name": "ciworkspace"
}
]
},
"dataFlows": [
{
"streams": [
"Microsoft-KubeEvents",
"Microsoft-KubePodInventory"
],
"destinations": [
"ciworkspace"
],
},
{
"streams": [
"Microsoft-ContainerLogV2"
],
"destinations": [
"ciworkspace"
],
"transformKql": "source | where LogLevel in ('error', 'critical')"
}
],
},
}
将数据发送到不同的表
在上面的例子中,仅收集 LogLevel 为 error 或 critical 的记录。 替代策略而不是根本不收集这些记录是配置 ContainerLogV2 for Basic 日志并将这些记录发送到备用表。
对于此策略,需要进行两次转换。 第一个转换将包含LogLevelerror或critical的记录发送到名为ContainerLogV2_CL的自定义表。 第二个转换将其他记录发送到标准 ContainerLogV2。 下面显示了每一个的查询,使用 source 作为传入数据,如上一示例所述。
# Return error and critical logs
source | where LogLevel in ('error', 'critical')
# Return logs that aren't error or critical
source | where LogLevel !in ('error', 'critical')
下图显示了此逻辑。
重要
安装此示例中的 DCR 之前,必须创建一个新表,其架构与 ContainerLogV2 相同。 将其命名为 ContainerLogV2_CL。
以下示例展示了添加到容器见解 DCR 的该转换。 此 DCR 中有两个适用于 Microsoft-ContainerLogV2 的数据流,每个对应于一个转换。 第一个转换发送到默认表,不需要指定表名。 第二个转换需要 outputStream 属性来指定目标表。
{
"properties": {
"location": "chinanorth2",
"kind": "Linux",
"dataSources": {
"syslog": [],
"extensions": [
{
"streams": [
"Microsoft-ContainerLogV2",
"Microsoft-KubeEvents",
"Microsoft-KubePodInventory"
],
"extensionName": "ContainerInsights",
"extensionSettings": {
"dataCollectionSettings": {
"interval": "1m",
"namespaceFilteringMode": "Off",
"enableContainerLogV2": true
}
},
"name": "ContainerInsightsExtension"
}
]
},
"destinations": {
"logAnalytics": [
{
"workspaceResourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/my-resource-group/providers/microsoft.operationalinsights/workspaces/my-workspace",
"workspaceId": "00000000-0000-0000-0000-000000000000",
"name": "ciworkspace"
}
]
},
"dataFlows": [
{
"streams": [
"Microsoft-KubeEvents",
"Microsoft-KubePodInventory"
],
"destinations": [
"ciworkspace"
],
},
{
"streams": [
"Microsoft-ContainerLogV2"
],
"destinations": [
"ciworkspace"
],
"transformKql": "source | where LogLevel !in ('error', 'critical')"
},
{
"streams": [
"Microsoft-ContainerLogV2"
],
"destinations": [
"ciworkspace"
],
"transformKql": "source | where LogLevel in ('error','critical')",
"outputStream": "Custom-ContainerLogV2_CL"
}
],
},
}