😺

AKS Network Observability アドオンを使う(Monitoring)

2023/06/30に公開

2023 年 6 月 22 日の Azure Update のニュースで、AKS で Network Observability アドオンが使えるようになったと発表(preview)がありました🥳

Network Observability とは?

AKS Network Observability (と、呼ばれる) は、AKSクラスタのネットワークトラフィックデータを収集するために使用さるツール(アドオン)です。
クラスターでのネットワークの問題を特定して、トラブルを解消するために使用できます。

非常に嬉しいのは、対象が Linux プラットフォームだけではなく、Windows プラットフォームにも対応していることなんです!

Grafana を使って閲覧しますが、現在閲覧できるメトリックもドキュメントに記載されています。
パケットドロップや、統計情報などのクラスターのネットワークメトリックなどが見れます。

使ってみる

では、実際にどのようなものが見れるのかを確認してみましょう。そういえば、AKS で Grafana/Prometuehs が GA となりました!!この手順で改めて作成方法なども確認してみましょう。

事前準備

拡張機能が必要なので、インストールしておきます。

% az extension add --name aks-preview
Extension 'aks-preview' 0.5.144 is already installed.
% az extension update --name aks-preview

NetworkObservabilityPreview 機能フラグの登録

% az feature register --namespace "Microsoft.ContainerService" --name "NetworkObservabilityPreview"
Once the feature 'NetworkObservabilityPreview' is registered, invoking 'az provider register -n Microsoft.ContainerService' is required to get the change propagated
{
  "id": "/subscriptions/XXXXX/providers/Microsoft.Features/providers/Microsoft.ContainerService/features/NetworkObservabilityPreview",
  "name": "Microsoft.ContainerService/NetworkObservabilityPreview",
  "properties": {
    "state": "Registering"
  },
  "type": "Microsoft.Features/providers/features"
}

登録状況の確認を行います。State が registered になっていることを確認します。

% az feature show --namespace "Microsoft.ContainerService" --name "NetworkObservabilityPreview"

{
  "id": "/subscriptions/XXXXX/providers/Microsoft.Features/providers/Microsoft.ContainerService/features/NetworkObservabilityPreview",
  "name": "Microsoft.ContainerService/NetworkObservabilityPreview",
  "properties": {
    "state": "Registered"
  },
  "type": "Microsoft.Features/providers/features"
}

リソースプロバイダの登録を更新を行います。

% az provider register -n Microsoft.ContainerService

準備ができました。

AKS クラスターの作成

まずは変数周りを定義していきます。

% myResourceGroup=<リソースグループ名>
% myAKSCluster=<AKSクラスター名>

リソースグループを作成します。

% az group create \
    --name $myResourceGroup \
    --location eastus

AKS の作成を行います。Non-Cilium 環境です。Azure CNI を使って AKS を作成することにします。

% az aks create \
    --name $myAKSCluster \
    --resource-group $myResourceGroup \
    --location eastus \
    --generate-ssh-keys \
    --network-plugin azure \
    --network-plugin-mode overlay \
    --pod-cidr 192.168.0.0/16 \
    --enable-network-observability

Azure が管理する Prometheus/Grafana の作成

Azure Monitor リソースを作成します

% myAzureMonitor=<AzureMonitor名>
% az resource create \
    --resource-group $myResourceGroup \
    --namespace microsoft.monitor \
    --resource-type accounts \
    --name $myAzureMonitor \
    --location eastus \
    --properties '{}'

Grafana instance を作成します。

% myGrafana=<Grafana名>
% az grafana create \
    --name $myGrafana \
    --resource-group $myResourceGroup

Grafana と Azure Monitor のリソース ID を変数に入れ、 AKS に関連付けを行います。

% grafanaId=$(az grafana show \
                --name $myGrafana \
                --resource-group $myResourceGroup \
                --query id \
                --output tsv)

% azuremonitorId=$(az resource show \
                    --resource-group $myResourceGroup \
                    --name $myAzureMonitor \
                    --resource-type "Microsoft.Monitor/accounts" \
                    --query id \
                    --output tsv)

% az aks update \
    --name $myAKSCluster \
    --resource-group $myResourceGroup \
    --enable-azure-monitor-metrics \
    --azure-monitor-workspace-resource-id $azuremonitorId \
    --grafana-resource-id $grafanaId

AKS にログインします。

% az aks get-credentials --name $myAKSCluster --resource-group $myResourceGroup

Monitor 関連の Pod が起動していることを確認します。

% kubectl get po -owide -n kube-system | grep ama-
ama-metrics-77b89cd956-g487k            2/2     Running   0          2m5s   192.168.0.10    aks-nodepool1-40071733-vmss000001   <none>           <none>
ama-metrics-ksm-8559444f74-rfgwf        1/1     Running   0          2m5s   192.168.2.243   aks-nodepool1-40071733-vmss000000   <none>           <none>
ama-metrics-node-4qrrr                  2/2     Running   0          2m5s   192.168.0.122   aks-nodepool1-40071733-vmss000001   <none>           <none>
ama-metrics-node-9w7cw                  2/2     Running   0          2m5s   192.168.1.80    aks-nodepool1-40071733-vmss000002   <none>           <none>
ama-metrics-node-tqxl9                  2/2     Running   0          2m5s   192.168.2.93    aks-nodepool1-40071733-vmss000000   <none>           <none>

Prometheus/Grafana の確認

では、Grafana にアクセスできることを確認してみましょう!
Azure Portal にログインし、Grafana のリソースを開きます。

Grafana

以下の"エンドポイント"が Grafana にアクセスするための URL です。ブラウザで開いてみましょう。
Grafana エンドポイント

Grafana の画面が開けたと思います。では、ダッシュボードに今回目玉の Network Observability が閲覧できるダッシュボードを追加してみましょう。

以下のリンクが Network Observability のパブリック ダッシュボード リポジトリ情報です。こちらを開き、"Copy ID to Clipboard" をクリックします。
https://grafana.com/grafana/dashboards/18814/

それを Grafana にインポートします。Grafana の左側メニューの"+"をクリックし、"Import" を選択します。
Grafana インポート前作業

先ほどコピーした ID を貼り付け、"Load" をクリックします。
Grafana Load

諸々オプションがありますが、ここはひとまず"Import"をクリックします。情報元の Prometheus の選択は忘れないようにしましょう。
Grafana インポート

これで無事にインポートできました!ではダッシュボードを確認してみましょう。最初の方はデータが少ないので、しばらく待ってみたダッシュボード画面を載せておきます。
Grafana ダッシュボード

ネットワーク系の情報が閲覧できるようになりましたね。まだまだクラスターの中には Pod が少ないので、あまり面白い情報は取得できませんが、今後アプリケーションが増えると、色々と取得できそうです。

現在はプレビュー状態ですので、まだまだ情報としては少ないかと思います。ただ、ネットワーク情報は今まで細かく見れなかったと思いますので、これを利用することによってネットワークの問題が発生した際のとっかかりになると思います。

おまけ

今回、Grafana/Prometheus を使えるようにしましたが、AKS の監視は ContainerInsights も併用して利用するとより良い監視ができるはずです。デフォルトでは、ContainerInsights は有効になっていない&この記事ではここまで有効化していなかったので、有効にしてみましょう。

% myWorkspace=<your workspace name>
% az monitor log-analytics workspace create -g $myResourceGroup -n $myWorkspace
% workspaceid=$(az monitor log-analytics workspace show --resource-group $myResourceGroup --workspace-name $myWorkspace --query id -o tsv)
% az aks enable-addons -a monitoring -n $myAKSCluster -g $myResourceGroup --workspace-resource-id $workspaceid

しばらくすると、Azure Portal 上から ContainerInsights が確認できるようになります!

参考

https://azure.microsoft.com/ja-jp/updates/network-observability-add-on/

https://learn.microsoft.com/ja-jp/azure/aks/network-observability-overview

GitHubで編集を提案
Microsoft (有志)

Discussion