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

部署可观测性资源并设置日志

可观测性提供对 Azure IoT 操作配置的每一层的可见性。 它让你深入了解问题的实际行为,从而提高站点可靠性工程的有效性。 Azure IoT 操作通过托管在 Azure 中的自定义策展 Grafana 仪表板提供可观测性。 这些仪表板由适用于 Prometheus 的 Azure Monitor 托管服务和容器见解提供支持。 本指南介绍如何设置 Azure 托管 Prometheus 和 Grafana,以及如何为 Azure Arc 群集启用监视。

在将 Azure IoT 操作部署到群集之前,请完成本文中的步骤

先决条件

  • 启用了 Arc 的 Kubernetes 群集。
  • 安装在群集计算机上的 Azure CLI。 有关说明,请参阅如何安装 Azure CLI
  • 安装在群集计算机上的 Helm。 如需说明,请参阅安装 Helm
  • 安装在群集计算机上的 Kubectl。 如需说明,请参阅安装 Kubernetes 工具

在 Azure 中创建资源

  1. 将提供程序注册到群集所在的订阅。

    注意

    对于每个订阅,只需运行此步骤一次。 若要注册资源提供程序,你需要有执行 /register/action 操作的权限,该权限包含在订阅“参与者”和“所有者”角色中。 有关详细信息,请参阅 Azure 资源提供程序和类型

    az account set -s <SUBSCRIPTION_ID>
    az provider register --namespace Microsoft.AlertsManagement
    az provider register --namespace Microsoft.Monitor
    az provider register --namespace Microsoft.Dashboard
    az provider register --namespace Microsoft.Insights
    az provider register --namespace Microsoft.OperationalInsights
    
  2. 为已启用 Azure Arc 的群集和 Azure 托管 Grafana 的指标收集启用 Azure CLI 扩展。

    az extension add --name k8s-extension
    az extension add --name amg
    
  3. 创建 Azure Monitor 工作区,为已启用 Azure Arc 的 Kubernetes 群集启用指标收集。

    az monitor account create --name <WORKSPACE_NAME> --resource-group <RESOURCE_GROUP> --location <LOCATION> --query id -o tsv
    

    保存此命令的输出中的 Azure Monitor 工作区 ID。 在下一部分中启用指标收集时,会用到该 ID。

  4. 创建 Azure 托管 Grafana 实例来可视化 Prometheus 指标。

    az grafana create --name <GRAFANA_NAME> --resource-group <RESOURCE_GROUP> --query id -o tsv
    

    保存此命令的输出中的 Grafana ID。 在下一部分中启用指标收集时,会用到该 ID。

  5. 为容器见解创建 Log Analytics 工作区。

    az monitor log-analytics workspace create -g <RESOURCE_GROUP> -n <LOGS_WORKSPACE_NAME> --query id -o tsv
    

    保存此命令的输出中的 Log Analytics 工作区 ID。 在下一部分中启用指标收集时,会用到该 ID。

为群集启用指标收集

更新 Azure Arc 群集以收集指标并将其发送到以前创建的 Azure Monitor 工作区。 还可以将此工作区与 Grafana 实例链接起来。

az k8s-extension create --name azuremonitor-metrics --cluster-name <CLUSTER_NAME> --resource-group <RESOURCE_GROUP> --cluster-type connectedClusters --extension-type Microsoft.AzureMonitor.Containers.Metrics --configuration-settings azure-monitor-workspace-resource-id=<AZURE_MONITOR_WORKSPACE_ID> grafana-resource-id=<GRAFANA_ID>

启用容器见解日志以收集日志。

az k8s-extension create --name azuremonitor-containers --cluster-name <CLUSTER_NAME> --resource-group <RESOURCE_GROUP> --cluster-type connectedClusters --extension-type Microsoft.AzureMonitor.Containers --configuration-settings logAnalyticsWorkspaceResourceID=<LOG_ANALYTICS_WORKSPACE_ID>

完成这些步骤后,即已设置 Azure Monitor 和 Grafana,并将其链接到群集,以实现可观测性和指标收集。

部署 OpenTelemetry 收集器

定义 OpenTelemetry (OTel) 收集器 并将其部署到已启用 Arc 的 Kubernetes 群集。

  1. 创建一个名为 otel-collector-values.yaml 的文件,并将以下代码粘贴到其中以定义 OpenTelemetry 收集器:

    mode: deployment
    fullnameOverride: aio-otel-collector
    image:
      repository: otel/opentelemetry-collector
      tag: 0.107.0
    config:
      processors:
        memory_limiter:
          limit_percentage: 80
          spike_limit_percentage: 10
          check_interval: '60s'
      receivers:
        jaeger: null
        prometheus: null
        zipkin: null
        otlp:
          protocols:
            grpc:
              endpoint: ':4317'
            http:
              endpoint: ':4318'
      exporters:
        prometheus:
          endpoint: ':8889'
          resource_to_telemetry_conversion:
            enabled: true
          add_metric_suffixes: false
      service:
        extensions:
          - health_check
        pipelines:
          metrics:
            receivers:
              - otlp
            exporters:
              - prometheus
          logs: null
          traces: null
        telemetry: null
      extensions:
        memory_ballast:
          size_mib: 0
    resources:
      limits:
        cpu: '100m'
        memory: '512Mi'
    ports:
      metrics:
        enabled: true
        containerPort: 8889
        servicePort: 8889
        protocol: 'TCP'
      jaeger-compact:
        enabled: false
      jaeger-grpc:
        enabled: false
      jaeger-thrift:
        enabled: false
      zipkin:
        enabled: false
    
  2. otel-collector-values.yaml 文件中,记下在群集上部署 Azure IoT 操作时在 az iot ops create 命令中使用的以下值:

    • fullnameOverride
    • grpc.endpoint
    • check_interval
  3. 保存并关闭该文件。

  4. 通过运行以下命令部署收集器:

    kubectl get namespace azure-iot-operations || kubectl create namespace azure-iot-operations
    helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
    
    helm repo update
    helm upgrade --install aio-observability open-telemetry/opentelemetry-collector -f otel-collector-values.yaml --namespace azure-iot-operations
    

配置 Prometheus 指标收集

在群集上配置 Prometheus 指标收集。

  1. 创建名为 ama-metrics-prometheus-config.yaml 的文件并粘贴下面的配置:

    apiVersion: v1
    data:
      prometheus-config: |2-
        scrape_configs:
          - job_name: otel
            scrape_interval: 1m
            static_configs:
              - targets:
                - aio-otel-collector.azure-iot-operations.svc.cluster.local:8889
          - job_name: aio-annotated-pod-metrics
            kubernetes_sd_configs:
              - role: pod
            relabel_configs:
              - action: drop
                regex: true
                source_labels:
                  - __meta_kubernetes_pod_container_init
              - action: keep
                regex: true
                source_labels:
                  - __meta_kubernetes_pod_annotation_prometheus_io_scrape
              - action: replace
                regex: ([^:]+)(?::\\d+)?;(\\d+)
                replacement: $1:$2
                source_labels:
                  - __address__
                  - __meta_kubernetes_pod_annotation_prometheus_io_port
                target_label: __address__
              - action: replace
                source_labels:
                  - __meta_kubernetes_namespace
                target_label: kubernetes_namespace
              - action: keep
                regex: 'azure-iot-operations'
                source_labels:
                  - kubernetes_namespace
            scrape_interval: 1m
    kind: ConfigMap
    metadata:
      name: ama-metrics-prometheus-config
      namespace: kube-system
    
  2. 通过运行以下命令应用配置文件:

    kubectl apply -f ama-metrics-prometheus-config.yaml
    

将仪表板部署到 Grafana

Azure IoT 操作提供了一个示例仪表板,旨在提供了解 Azure IoT 操作部署的运行状况和性能所需的多种可视化效果。

完成以下步骤以安装 Azure IoT 操作策展 Grafana 仪表板。

  1. 克隆或下载 azure-iot-operations 存储库,以在本地获取示例 Grafana 仪表板 json 文件:https://github.com/Azure/azure-iot-operations

  2. 登录到 Grafana 控制台。 可以通过 Azure 门户访问控制台,或使用 az grafana show 命令检索 URL。

    az grafana show --name <GRAFANA_NAME> --resource-group <RESOURCE_GROUP> --query url -o tsv
    
  3. 在 Grafana 应用程序中,选择 + 图标。

  4. 选择“导入仪表板”。

  5. 浏览到 Azure IoT 操作存储库本地副本中的示例仪表板目录(“azure-iot-operations”>“示例”>“grafana-dashboard”),然后选择 aio.sample.json 仪表板文件

  6. 当应用程序提示时,选择托管 Prometheus 数据源。

  7. 选择“导入” 。