Azure IoT Operations の監視機能は、構成のすべてのレイヤーを可視化し、問題の実際の動作に関する分析情報を提供し、サイトの信頼性エンジニアリングの有効性を高めます。 Azure IoT Operations は、Prometheus と Container Insights 用の Azure Monitor マネージド サービスを利用して、Azure でホストされているカスタムキュレーションされた Grafana ダッシュボードを通じて監視を提供します。
この記事では、Azure IoT Operations 監視リソースをデプロイし、Azure Managed Prometheus と Grafana を設定し、Azure Arc クラスターの包括的な監視を有効にする方法について説明します。 自動化されたスクリプトを使用してすべての可観測性リソースをデプロイするか、カスタマイズされたセットアップの手動手順に従うことができます。
Prerequisites
- Arc 対応 Kubernetes クラスター。
- クラスター コンピューターにインストールされている Azure CLI。 手順については、「Azure CLI をインストールする方法」を参照してください。
- クラスター マシンにインストールされたHelm。 手順については、Helm のインストールに関するページを参照してください。
- クラスター コンピューターにインストールされている Kubectl。 手順については、Kubernetes ツールのインストールに関するページを参照してください。
この記事のAzure CLI例は環境変数を使っており、各値を一度設定してからコマンドをコピー&ペーストできます as-is。 クイックスタートのAzure IoT Operations Codespaces環境を使っている場合、これらの変数はすでに設定済みなので、このステップを省略できます。 そうでなければ、コマンドを実行する前にシェル内で以下の環境変数を設定してください。
以下のスクリプトは、最も一般的に使われる環境変数を設定します。
| 環境変数 | Description |
|---|---|
SUBSCRIPTION_ID |
Azure IoT Operationsインスタンスを含むサブスクリプションのIDです。 |
RESOURCE_GROUP |
あなたのAzure IoT Operationsインスタンスを含むリソースグループの名前です。 |
AIO_INSTANCE_NAME |
あなたのAzure IoT Operationsインスタンスの名前です。 インスタンスを挙げるには、 az iot ops list -o tableを実行してください。 |
CLUSTER_NAME |
あなたのインスタンスをホストしているAzure Arc対応のKubernetesクラスターの名前です。 |
LOCATION |
例えばeastusなど、新しい資源を活用するためのAzure地域。 |
SUBSCRIPTION_ID=<subscription-id>
RESOURCE_GROUP=<resource-group-name>
AIO_INSTANCE_NAME=<instance-name>
CLUSTER_NAME=<cluster-name>
LOCATION=<region>
この記事で使っている変数を設定するだけで十分です。 この記事では、選択したリソース名に追加の環境変数を使う場合があります。 記事では、それらが導入される箇所でどのように設定するかを説明しています。
自動スクリプトを使用してデプロイする
すべての可観測性リソースを 1 つの手順で設定するには、自動化された deploy-observability-resources.sh スクリプトを使用します。 このスクリプトは、 Azure リソースの作成 から 監視構成の設定まで、この記事の手順を自動化します。 スクリプトは安全に複数回実行できます。 既に存在するリソースがスキップされ、変更が必要なリソースが更新されます。
スクリプトをダウンロードします。
curl -fsSL -o deploy-observability-resources.sh \ https://raw.githubusercontent.com/Azure/azure-iot-operations/main/scripts/observability/deploy-observability-resources.sh chmod +x deploy-observability-resources.sh必要な環境変数を設定し、スクリプトを実行します。
export RESOURCE_GROUP=<RESOURCE_GROUP> export CLUSTER_NAME=<CLUSTER_NAME> export INSTANCE_NAME=<INSTANCE_NAME> export WORKSPACE_NAME=<WORKSPACE_NAME> export GRAFANA_NAME=<GRAFANA_NAME> export LOGS_WORKSPACE_NAME=<LOGS_WORKSPACE_NAME> export LOCATION=<LOCATION> ./deploy-observability-resources.shLOCATIONを Azure リージョンに設定して、新しいリソースをプロビジョニングします。 すべてのリソースが既に存在する場合、LOCATIONは省略可能です。Variable Description RESOURCE_GROUPAzure IoT Operations と監視リソースの Azure リソース グループ。 CLUSTER_NAMEAzure IoT Operations がデプロイされている Arc 対応 Kubernetes クラスターの名前。 INSTANCE_NAME構成する Azure IoT Operations インスタンスの名前。 WORKSPACE_NAMEAzure Monitor ワークスペースの名前 (存在しない場合に作成されます)。 GRAFANA_NAMEAzure Managed Grafana インスタンスの名前 (存在しない場合に作成されます)。 LOGS_WORKSPACE_NAMELog Analytics ワークスペースの名前 (存在しない場合に作成されます)。 LOCATION新しいリソースの Azure リージョン。 すべてのリソースが既に存在する場合は省略可能です。
スクリプトが完了したら、引き続き ダッシュボードを Grafana にデプロイ し、キュレーションされたダッシュボードをインポートします。
Note
OpenTelemetry Collector 構成のカスタマイズや既存の監視リソースの再利用など、個々の手順をより詳細に制御する必要がある場合は、スクリプトを使用する代わりに、この記事の残りの部分の手動の手順に従ってください。
Azure でリソースを作成する
クラスターが配置されているサブスクリプションにプロバイダーを登録します。
Note
この手順は、サブスクリプションごとに 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.OperationalInsightsAzure Arc 対応クラスターと Azure Managed Grafana のメトリック収集用の Azure CLI 拡張機能をインストールします。
az extension add --upgrade --name k8s-extension az extension add --upgrade --name amgAzure Arc 対応 Kubernetes クラスターのメトリック収集を有効にする Azure Monitor ワークスペースを作成します。
AZURE_MONITOR_WORKSPACE_ID=$(az monitor account create --name $WORKSPACE_NAME --resource-group $RESOURCE_GROUP --location $LOCATION --query id -o tsv)このコマンドはAzure MonitorワークスペースIDを
AZURE_MONITOR_WORKSPACE_IDに保存します。 この ID は、次のセクションでメトリック収集を有効にする際に使用します。Prometheus メトリックを視覚化する Azure Managed Grafana インスタンスを作成します。
GRAFANA_ID=$(az grafana create --name $GRAFANA_NAME --resource-group $RESOURCE_GROUP --query id -o tsv)このコマンドは
GRAFANA_IDのGrafana IDを保存します。 この ID は、次のセクションでメトリック収集を有効にする際に使用します。Container Insights 用の Log Analytics ワークスペースを作成します。
LOG_ANALYTICS_WORKSPACE_ID=$(az monitor log-analytics workspace create -g $RESOURCE_GROUP -n $LOGS_WORKSPACE_NAME --query id -o tsv)このコマンドはLog AnalyticsワークスペースIDを
LOG_ANALYTICS_WORKSPACE_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
ログ収集に対して Container Insights ログを有効にします。
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 (OTel) コレクターをデプロイする
OpenTelemetry (OTel) コレクターを定義し、Arc 対応 Kubernetes クラスターにデプロイします。
otel-collector-values.yamlという名前のファイルを作成し、それに次のコードを貼り付けて、OpenTelemetry (OTel) コレクターを定義します。mode: deployment fullnameOverride: aio-otel-collector image: repository: otel/opentelemetry-collector tag: 0.143.0 config: processors: memory_limiter: limit_percentage: 80 spike_limit_percentage: 10 check_interval: 60s receivers: 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 telemetry: metrics: level: none pipelines: metrics: receivers: - otlp exporters: - prometheus resources: limits: cpu: "100m" memory: "512Mi" ports: metrics: enabled: true containerPort: 8889 servicePort: 8889 protocol: TCPotel-collector-values.yamlファイルの次の値を書き留めておきます。これらの値は、Azure IoT Operations をクラスターにデプロイするときにaz iot ops createコマンドで使用します。fullnameOverridegrpc.endpointcheck_interval
ファイルを保存して閉じます。
次のコマンドを実行してコレクターをデプロイします。
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 メトリック コレクションを構成します。
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次のコマンドを実行して、構成を適用します。
kubectl apply -f ama-metrics-prometheus-config.yaml
可観測性の構成を設定する
Azure IoT Operations デプロイの可観測性構成は、いつでも設定できます。 可観測性リソースを構成したら、az iot ops upgrade パラメーターを指定して --ops-config コマンドを実行して、新しい構成値を指定することで、可観測性構成をアップグレードできます。
az iot ops upgrade --resource-group $RESOURCE_GROUP --name $AIO_INSTANCE_NAME --ops-config observability.metrics.openTelemetryCollectorAddress=aio-otel-collector.azure-iot-operations.svc.cluster.local:4317 observability.metrics.exportIntervalSeconds=60
| パラメーター | 価値 | Description |
|---|---|---|
--ops-config |
observability.metrics.openTelemetryCollectorAddress=<FULLNAMEOVERRIDE>.azure-iot-operations.svc.cluster.local:<GRPC_ENDPOINT> |
otel-collector-values.yaml ファイルで構成した OpenTelemetry (OTel) コレクター アドレスを指定します。 この記事の手順では、 fullnameOverride=aio-otel-collectorとgrpc.endpoint=4317のサンプル値を使用します。 |
--ops-config |
observability.metrics.exportIntervalSeconds=<CHECK_INTERVAL> |
otel-collector-values.yamlファイルで設定したcheck_interval値を入力してください。この記事の手順では、サンプル値の check_interval=60を使用します。 |
Note
プレビュー リリースでは、 az iot ops upgrade コマンドはプレビュー バージョンへのアップグレードには機能しませんが、監視のために Azure IoT Operations を構成する場合に機能します。
ダッシュボードを Grafana にデプロイする
Azure IoT Operations には、Azure IoT Operations デプロイの正常性とパフォーマンスを理解するために必要な視覚化の多くを提供するように設計された サンプル ダッシュボードが用意されています。
Azure IoT Operations でキュレーションされた Grafana ダッシュボードをインストールするには、次の手順を実行します。
explore-iot-operations リポジトリを複製またはダウンロードして、サンプルの Grafana Dashboard json ファイルをローカルに取得します:https://github.com/Azure-Samples/explore-iot-operations。
Grafana コンソールにサインインします。 コンソールにアクセスするには、Azure portal を経由するか、
az grafana showコマンドを使用して URL を取得します。az grafana show --name $GRAFANA_NAME --resource-group $RESOURCE_GROUP --query url -o tsvGrafana ランディング ページで、[最初のダッシュボードの 作成 ] タイルを選択します。
[ ダッシュボードのインポート] を選択します。
Azure IoT Operations リポジトリのローカルコピーにあるサンプルダッシュボードディレクトリに移動し、explore-iot-operations > samples > observability > grafana-dashboard フォルダを順にクリックします。その後、aio-observability.json ダッシュボードファイルを選択します。
アプリケーションのプロンプトが表示されたら、マネージド Prometheus データ ソースを選択します。
インポートを選択します。
Note
aio-observability.json ファイルで、Prometheus と Azure Monitor の両方のデータソースを構成し、ログ クエリ用に subscriptionId 変数を Azure サブスクリプション ID に設定します。
次のステップ
- セキュリティで保護された設定を有効 にして、シークレット管理とマネージド ID を設定します。
- 外部通信用の証明書を管理します。