通过


你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在 Azure Kubernetes 应用程序网络中监视数据平面和控制平面日志(预览版)

重要

AKS 预览功能可在自助服务和自愿选择的基础上启用。 预览版按“现状”和“视供应情况”提供,它们不包括在服务级别协议和有限保证范围内。 AKS 预览功能是由客户支持尽最大努力部分覆盖。 因此,这些功能并不适合用于生产。 有关详细信息,请参阅以下支持文章:

Azure Kubernetes 应用程序网络提供两种类型的日志记录,可以根据监视和故障排除要求进行配置: 数据平面日志 和控制 平面日志

  • 数据平面日志:包括来自应用程序工作负荷、 applink-system 命名空间组件和 Envoy 代理访问日志的日志。
  • 控制平面日志:包括来自 Azure Kubernetes 应用程序网络控制平面组件的 Istiod 日志。

默认情况下禁用 Azure Kubernetes 应用程序网络日志记录。 本文介绍如何启用这两种类型的日志记录并在 Azure Monitor 中查看它们。

设置环境变量。

  • 使用以下命令为所选工作流设置环境变量:

    # Set if specifying an existing or creating a new Log Analytics workspace
    export LAW_NAME=<log-analytics-workspace-name>
    
    # Set for resource group, location, and AKS cluster name
    export AKS_RG=<aks-resource-group>
    export LOCATION=<location>
    export CLUSTER_NAME=<aks-cluster-name>
    
    # Set for Azure Kubernetes Application Network member resource group, name, and member name
    export APPNET_RG=<appnet-resource-group>
    export APPNET_NAME=<appnet-name>
    export APPNET_MEMBER_NAME=<appnet-member-name>
    

启用数据平面日志

数据平面日志包括来自工作负荷/应用程序和 applink-system 工作负荷(Ztunnel 和 Istio CNI)的日志。 Azure Container Insights 加载项是启用和查看日志进行故障排除的首选方法。

启用数据平面日志时,可以选择指定现有的 Log Analytics 工作区、使用资源组的默认工作区或创建新工作区。

创建新的 Log Analytics 工作区

  • 如果创建新的 Log Analytics 工作区,请使用 az monitor log-analytics workspace create 以下命令:

    az monitor log-analytics workspace create \
        --resource-group $AKS_RG \
        --workspace-name $LAW_NAME \
        --location $LOCATION
    

在 AKS 群集上启用容器监控插件

  • 使用 az aks enable-addons 命令为 Azure Kubernetes 应用程序网络成员群集(可选地省略工作区 ID)启用 Container Insights 加载项。

     az aks enable-addons \
      --addon monitoring \
      --name $CLUSTER_NAME \
      --resource-group $AKS_RG \
      --workspace-resource-id /subscriptions/$SUBSCRIPTION/resourcegroups/$AKS_RG/providers/microsoft.operationalinsights/workspaces/$LAW_NAME
    

查看日志

  • 导航到 Log Analytics 工作区并运行以下查询来查看日志:

    ContainerLogV2
    | where PodNamespace == "applink-system"
    

Envoy 访问日志

在某些情况下,在为应用程序/工作负荷生成流量时,可能需要检查 Envoy 访问日志。 若要启用 Envoy 访问日志,请使用遥测 API。

  1. 在下面的 YAML 中,指定要在其中启用 Envoy 访问日志记录的命名空间。 对于网格范围的 Envoy 访问日志,请从元数据中删除命名空间。

    cat <<EOF | kubectl apply -n default -f -
    apiVersion: telemetry.istio.io/v1
    kind: Telemetry
    metadata:
      name: mesh-logging-default
      namespace: default
    spec:
      accessLogging:
      - providers:
        - name: envoy
    EOF
    

    Envoy 访问日志将在启用了 Container Insights 加载项的 Log Analytics 工作区中可用。

  2. 导航到 Log Analytics 工作区并运行以下查询,查看 Envoy 访问日志:

    ContainerLogV2
    | where TimeGenerated > ago(45m)
    | where PodName contains "gateway"
    | take 10
    

启用控制平面日志

若要启用控制平面日志,请创建诊断设置并将日志发送到 Log Analytics 工作区。

  1. 使用以下命令为诊断设置名称设置环境变量:

    export DS_NAME=<diagnostic-settings-name>
    
  2. 为 Azure Kubernetes 应用程序网络成员资源创建诊断设置,并使用命令将 Log Analytics 工作区指定为目标 az monitor diagnostic-settings create

    az monitor diagnostic-settings create \
    --resource /subscriptions/$SUBSCRIPTION/resourceGroups/$APPNET_RG/providers/Microsoft.AppLink/appLinks/$APPNET_NAME/appLinkMembers/$APPNET_MEMBER_NAME \
    --workspace /subscriptions/$SUBSCRIPTION/resourcegroups/$AKS_RG/providers/microsoft.operationalinsights/workspaces/$LAW_NAME \
    --logs "[{category:istiod,enabled:true}]" \
    --name $DS_NAME
    
  3. 启用后,导航到 Log Analytics 工作区并运行以下查询:

    注释

    $appnet_member_resourceId应采用以下格式: /subscriptions/$subscription/resourceGroups/$appnet_rg/providers/microsoft.applink/applinks/$appnet_name/applinkmembers/$appnet_member_name

    MeshControlPlane
    | where TimeGenerated > ago(1h)
    | where _ResourceId == $appnet_member_resourceId // appnet member resourceId
    

日志表和架构

下表包含 Log Analytics 工作区中的 Azure Kubernetes 应用程序网络日志:

日志表 说明
ContainerLogV2 包含应用程序/工作负荷日志
MeshControlPlane 包含 Istiod 日志

Schema

若要查找 ContainerLogV2 架构,请参阅 ContainerLogV2 列

MeshControlPlane 是具有以下架构的自定义表:

# 列名称 类型
0 租户ID 字符串
1 TimeGenerated 日期/时间
2 类别 字符串
3 级别 字符串
4 消息 字符串
5 容器 字符串
6 PodName 字符串
7 SourceSystem 字符串
8 类型 字符串
9 _资源ID 字符串

示例查询

按 AKS 群集资源 ID 筛选日志

  • 使用以下查询根据 ContainerLogV2 表中的 AKS 托管群集资源 ID 筛选日志:

    ContainerLogV2
    | where TimeGenerated > ago(45m)
    | where _ResourceId == $aks_cluster_resource_id // managed cluster resourceId
    

按 Azure Kubernetes 应用程序网络成员资源 ID 筛选日志

  • 使用以下查询,根据 MeshControlPlane 表中的 Azure Kubernetes 应用程序网络成员资源 ID 筛选控制平面日志:

    MeshControlPlane
    | where TimeGenerated > ago(45m)
    | where Level == "ERROR"
    | where _ResourceId == $appnet_member_resourceId // appnet member resourceId
    

    以下屏幕截图显示了 Azure Monitor 日志中应用程序网络 Istiod 错误的示例:

    Azure Monitor 日志中示例应用程序网络 Istiod 错误的屏幕截图。

有关 Azure Kubernetes 应用程序网络可观测性和监视的详细信息,请参阅以下文章: