Azure Kubernetes Fleet Manager でエージェント ログを表示する

この記事では、Azure Kubernetes Fleet Manager でハブクラスターとメンバー クラスターから Fleet エージェント ログを表示する方法について説明します。 ハブ クラスター モードが有効になっている Fleet がある場合、Azure Kubernetes Fleet Manager は、Fleet のワークロード オーケストレーションと負荷分散機能をサポートして、通信を容易にし、フリート全体の操作を調整するために、ハブ クラスターとメンバー クラスターの両方に Fleet エージェントをインストールします。 これらのエージェントは、次に関する分析情報を提供するログを生成します。

  • エージェントの正常性と接続状態
  • ワークロード オーケストレーション構成の変更と操作の更新
  • 負荷分散構成の変更と操作の更新

また、監視、トラブルシューティング、監査の目的でこれらのログを取得できます。

Von Bedeutung

この記事は、ログ インジェストを完全にサポートする AKS クラスターにのみ適用されます。 Arc 対応 Kubernetes クラスター (プレビュー) では現在、ログ インジェストはサポートされていません。 詳細については、 Azure Kubernetes Fleet Manager メンバー クラスターの種類 に関するページを参照してください。

関連するリソースの診断設定を構成する

フリート エージェント ログは、Azure Monitor の リソース ログ として実装されます。具体的には次のとおりです。

  • Fleet ハブ クラスターのフリート エージェント ログは、Fleet リソースのリソース ログの一部として実装されます。
    • フリート ハブ クラスターには、次の 2 つのエージェントがインストールされます。これは、一般にフリート ハブ エージェントと呼ばれます。
      • fleet-hub-agent: クラスター メンバーシップを管理し、ハブ クラスター側でワークロード オーケストレーション タスクを処理する Fleet エージェント (スケジュール設定、変更のロールアウトなど)。
      • fleet-hub-net-controller-manager: ハブ クラスター側で負荷分散タスクを処理する Fleet エージェント。
  • Fleet メンバー クラスターの Fleet エージェント ログは、AKS クラスター リソース向けリソース ログの一部として実装されます。
    • フリート メンバー クラスターには、次の 3 つのエージェントがインストールされます。これは、一般に Fleet メンバー エージェントと呼ばれます。
      • fleet-member-agent: メンバー クラスターをハブ クラスターに登録し、メンバー クラスター側でワークロード オーケストレーション タスクを処理する Fleet エージェント (マニフェストの適用、ドリフト検出、引き継ぎなど)。
      • fleet-member-net-controller-manager: メンバー クラスター側で負荷分散タスクを処理する Fleet エージェント。
      • fleet-mcs-controller-manager: マルチクラスター サービスを容易にする Fleet エージェント。

リソース ログは、診断設定を作成して 1 つ以上の場所にルーティングするまでは収集および格納されません。 Azure Monitor では、Azure ストレージ アカウントや Log Analytics ワークスペースなど、使用できるさまざまな場所がサポートされています。使用可能な場所とその制限事項の一覧については、「 Azure Monitor 診断設定の宛先」ページを 参照してください。

Fleet エージェント ログを収集するには、対応するリソースの診断設定を作成します。 Fleet のユース ケースに応じて、1 つ以上の特定の Fleet エージェントからのみログを収集するような選択ができます。 最も簡単な方法は、Azure portal を使用することです。詳細な手順については、手順を参照してください。 また、Azure CLI、PowerShell、Azure Resource Manager、REST API、または Azure Policy を使用して設定することもできます。詳細については、「 診断設定の作成」を参照してください。

Von Bedeutung

Fleet エージェント ログを収集する場合は、かなりのコストが発生する可能性があります。 以下のようにすることをお勧めします。

  • 最も関連性の高い Fleet エージェントからのみログを収集する
  • 監視コストを削減するための戦略については、 コストの最適化と Azure Monitor に関するドキュメントを参照してください。

フリート ハブ エージェントのログ用に、Fleet リソースで診断設定を構成する

  1. Azure portal にサインインします。
  2. 検索ボックスに「 Kubernetes Fleet Manager」 と入力し、検索結果から Kubernetes Fleet Manager を選択します。
  3. すべての艦隊リソースの一覧から、ハブエージェントログを収集したい艦隊を見つけます。 フリートの名前をクリックします。 フィルター条件を調整して、必要なフリート リソースを見つける必要がある場合があります。
  4. リソースのメニューの [監視] で [診断設定] を選択します。
  5. [診断設定の追加] を選択します。
  6. 診断設定の名前を入力します。
  7. ログ カテゴリの場合は、 fleet-hub-agentfleet-hub-net-controller-managerの 2 つのカテゴリのうち少なくとも 1 つが選択されていることを確認します。 必要に応じて、他のログ カテゴリを選択することもできます。
  8. 宛先の詳細については、目的の宛先を選択します。 追加の宛先情報を求めるその他のオプションが表示されます。 詳細については、「 診断設定の作成」を参照してください。
  9. 保存 を選択します。

しばらくすると、このリソースの診断設定の一覧に新しい設定が表示されます。 ログは、新しいデータが生成されると、指定された宛先にストリーミングされます。 エージェントがログを出力してから、選択した宛先に表示されるまでに時間がかかる場合があります。

Fleet メンバー エージェント ログについてメンバー AKS クラスター リソースの診断設定を構成する

  1. Azure portal にサインインします。
  2. 検索ボックスに「 Kubernetes Services 」と入力し、検索結果から Kubernetes Services を選択します。
  3. すべての AKS クラスター リソースの一覧から、Fleet のメンバー クラスターとして参加させた AKS クラスターを見つけ、そのクラスターから Fleet メンバーエージェントログを収集します。 AKS クラスター名をクリックします。 フィルター条件を調整して、必要な AKS クラスター リソースを見つける必要がある場合があります。
  4. リソースのメニューの [監視] で [診断設定] を選択します。
  5. [診断設定の追加] を選択します。
  6. 診断設定の名前を入力します。
  7. ログ カテゴリの場合は、 fleet-member-agentfleet-member-net-controller-managerfleet-mcs-controller-managerの 3 つのカテゴリのうち少なくとも 1 つが選択されていることを確認します。 必要に応じて、他のログ カテゴリを選択することもできます。
  8. 宛先の詳細については、目的の宛先を選択します。 その他のオプションが表示され、詳細な宛先情報を求められます。 詳細については、「 診断設定の作成」を参照してください。 コピー先として Log Analytics ワークスペースを使用する予定の場合、AKS クラスター リソースでは、Azure Diagnostics モードとリソース固有モードの両方がサポートされます。 2 つのモードの違いについては、 Log Analytics ワークスペースへの送信 ページの説明を参照してください。
  9. 保存 を選択します。

しばらくすると、このリソースの診断設定の一覧に新しい設定が表示されます。 ログは、新しいデータが生成されると、指定された宛先にストリーミングされます。 エージェントがログを出力してから、選択した宛先に表示されるまでに時間がかかる場合があります。

Fleet エージェント ログの表示

任意の宛先で Fleet エージェント ログを表示するには、「 Azure リソース ログを Log Analytics ワークスペース、Event Hubs、または Azure Storage に送信する」を参照してください。

宛先として Log Analytics ワークスペースを使用する場合:

  • Azure Diagnostics モードでは、Fleet メンバー エージェント ログは AzureDiagnostics テーブルの下にあります。
  • リソース固有モードでは、Fleet メンバー エージェント ログは AKSControlPlane テーブルの下にあります。

Fleet エージェント ログを理解する

Fleet エージェント ログは、非構造化形式 klog で記述され、その形式は次のとおりです。

[IWEF]yyyymmdd hh:mm:ss.uuuuuu threadid file:line msg kvs

場所は:

  • [IWEF] はログ レベルです。
    • I は、 info レベルを表します。
    • W は、 warning レベルを表します。
    • E は、 error レベルを表します。
    • F は、 fatal レベルを表します。
  • yyyymmdd は、ログが出力される年 (yyyy)、月 (mm)、および日 (dd) です。
  • hh:mm:ss.uuuuuu は、ログが出力されたときのタイムスタンプ (時間のhh 、分の mm 、秒の ss 、マイクロ秒単位の uuuuuu ) です。
  • threadid は、Fleet エージェント プロセス/スレッドのスレッド ID (PID/TID) です。
  • file:line は、ログを出力するソース コードのファイル名と行番号です。
  • msg はログ メッセージです。
  • kvs は、ログ メッセージに含まれる API オブジェクトなどの追加情報を提供するキーと値のペア (たとえば、 work=123) の一覧です。

ログ メッセージを Fleet エージェントのソース コードと相互参照して、コンテキスト内のログ メッセージをより深く理解したい場合があります。 Fleet エージェントの fleet-hub-agentfleet-member-agentについては、 KubeFleet GitHub リポジトリを参照してください。 fleet-hub-net-controller-managerfleet-member-net-controller-managerfleet-mcs-controller-managerについては、 Azure Fleet Networking GitHub リポジトリを参照してください。

便利な Kusto クエリ

Log Analytics ワークスペースで Fleet エージェント ログを簡単に検索するのに役立つ可能性がある Kusto クエリの次の一覧です。

この例では、Fleet メンバー エージェント ログを収集するときに Azure Diagnostics モードを使用することを前提としています。 リソース固有モードを有効にしている場合は、該当するクエリ例に代わりに AKSControlPlane テーブルを使用します。

  • すべての Fleet ハブ エージェントから最新の 1,000 個のログ エントリを取得します。
// Replace YOUR-RESOURCE-ID with the value of your Fleet resource.
// To view the ID, go to the Fleet resource page, and select JSON view on the overview page.
AzureDiagnostics
| where _ResourceId == YOUR-RESOURCE-ID
| where Category in ("fleet-hub-agent", "fleet-hub-net-controller-manager")
| order by TimeGenerated desc
| take 1000
  • すべての Fleet メンバー エージェントから最新の 1,000 個のログ エントリを取得します。
// Replace YOUR-RESOURCE-ID with the value of your AKS member cluster resource.
// To view the ID, go to the AKS cluster resource page, and select JSON view on the overview page.
AzureDiagnostics
| where _ResourceId == YOUR-RESOURCE-ID
| where Category in ("fleet-member-agent", "fleet-member-net-controller-manager", "fleet-mcs-controller-manager")
| order by TimeGenerated desc
| take 1000
  • Fleet がハブ クラスター側でクラスター メンバーシップを管理する方法に関する最新の 1,000 個のログ エントリを取得します。
// Replace YOUR-RESOURCE-ID with the value of your Fleet resource.
// To view the ID, go to the Fleet resource page, and select JSON view on the overview page.
AzureDiagnostics
| where _ResourceId == YOUR-RESOURCE-ID
| where Category == "fleet-hub-agent"
| where log_s contains "v1beta1/member_controller.go"
| order by TimeGenerated desc
| take 1000
  • Fleet が ClusterResourcePlacement API オブジェクトを処理する方法に関する最新の 1,000 個のログ エントリを取得します。
// Replace YOUR-RESOURCE-ID with the value of your Fleet resource.
// To view the ID, go to the Fleet resource page, and select JSON view on the overview page.
AzureDiagnostics
| where _ResourceId == YOUR-RESOURCE-ID
| where Category == "fleet-hub-agent"
| where log_s contains "clusterresourceplacement/"
| order by TimeGenerated desc
| take 1000
  • フリートがワークロードをスケジュールする方法に関する最新の 1,000 個のログ エントリを取得します。
// Replace YOUR-RESOURCE-ID with the value of your Fleet resource.
// To view the ID, go to the Fleet resource page, and select JSON view on the overview page.
AzureDiagnostics
| where _ResourceId == YOUR-RESOURCE-ID
| where Category == "fleet-hub-agent"
| where log_s contains "scheduler/" or log_s contains "framework/"
| order by TimeGenerated desc
| take 1000
  • Fleet がローリング更新を処理する方法に関する最新の 1,000 個のログ エントリを取得します。
// Replace YOUR-RESOURCE-ID with the value of your Fleet resource.
// To view the ID, go to the Fleet resource page, and select JSON view on the overview page.
AzureDiagnostics
| where _ResourceId == YOUR-RESOURCE-ID
| where Category == "fleet-hub-agent"
| where log_s contains "rollout/"
| order by TimeGenerated desc
| take 1000
  • Fleet が更新のステージングを処理する方法に関する最新の 1,000 個のログ エントリを取得します。
// Replace YOUR-RESOURCE-ID with the value of your Fleet resource.
// To view the ID, go to the Fleet resource page, and select JSON view on the overview page.
AzureDiagnostics
| where _ResourceId == YOUR-RESOURCE-ID
| where Category == "fleet-hub-agent"
| where log_s contains "updaterun/"
| order by TimeGenerated desc
| take 1000
  • Fleet がワークロードをメンバー クラスターと同期する方法に関する最新の 1,000 個のログ エントリを取得します。
// Replace YOUR-RESOURCE-ID with the value of your Fleet resource.
// To view the ID, go to the Fleet resource page, and select JSON view on the overview page.
AzureDiagnostics
| where _ResourceId == YOUR-RESOURCE-ID
| where Category == "fleet-hub-agent"
| where log_s contains "workgenerator/"
| order by TimeGenerated desc
| take 1000
  • Fleet がメンバー クラスター側でクラスター メンバーシップを報告する方法に関する最新の 1,000 個のログ エントリを取得します。
// Replace YOUR-RESOURCE-ID with the value of your AKS member cluster resource.
// To view the ID, go to the AKS cluster resource page, and select JSON view on the overview page.
AzureDiagnostics
| where _ResourceId == YOUR-RESOURCE-ID
| where Category == "fleet-member-agent"
| where log_s contains "v1beta1/member_controller.go"
| order by TimeGenerated desc
| take 1000
  • Fleet が特定のメンバー クラスターにマニフェストを適用する方法に関する最新の 1,000 個のログ エントリを取得します。
// Replace YOUR-RESOURCE-ID with the value of your AKS member cluster resource.
// To view the ID, go to the AKS cluster resource page, and select JSON view on the overview page.
AzureDiagnostics
| where _ResourceId == YOUR-RESOURCE-ID
| where Category == "fleet-member-agent"
| where log_s contains "workapplier/"
| order by TimeGenerated desc
| take 1000
  • Fleet がハブ クラスター側のネットワーク機能のエンドポイントのエクスポート/インポートを管理する方法に関する最新の 1,000 個のログ エントリを取得します。
// Replace YOUR-RESOURCE-ID with the value of your Fleet resource.
// To view the ID, go to the Fleet resource page, and select JSON view on the overview page.
AzureDiagnostics
| where _ResourceId == YOUR-RESOURCE-ID
| where Category == "fleet-hub-net-controller-manager"
| where log_s contains "endpointsliceexport/"
| order by TimeGenerated desc
| take 1000
  • Fleet がハブ クラスター側のネットワーク機能のサービスのエクスポート/インポートを管理する方法に関する最新の 1,000 個のログ エントリを取得します。
// Replace YOUR-RESOURCE-ID with the value of your Fleet resource.
// To view the ID, go to the Fleet resource page, and select JSON view on the overview page.
AzureDiagnostics
| where _ResourceId == YOUR-RESOURCE-ID
| where Category == "fleet-hub-net-controller-manager"
| where log_s contains "serviceimport/" or log_s contains "internalserviceimport/" or log_s contains "internalserviceexport/"
| order by TimeGenerated desc
| take 1000
  • Fleet がネットワーク機能のために Azure Traffic Manager 関連のリソースを管理する方法に関する最新の 1,000 個のログ エントリを取得します。
// Replace YOUR-RESOURCE-ID with the value of your Fleet resource.
// To view the ID, go to the Fleet resource page, and select JSON view on the overview page.
AzureDiagnostics
| where _ResourceId == YOUR-RESOURCE-ID
| where Category == "fleet-hub-net-controller-manager"
| where log_s contains "trafficmanagerbackend/" or log_s contains "trafficmanagerprofile/"
| order by TimeGenerated desc
| take 1000
  • Fleet がメンバー クラスター側のネットワーク機能のエンドポイントのエクスポート/インポートを管理する方法に関する最新の 1,000 個のログ エントリを取得します。
// Replace YOUR-RESOURCE-ID with the value of your AKS member cluster resource.
// To view the ID, go to the AKS cluster resource page, and select JSON view on the overview page.
AzureDiagnostics
| where _ResourceId == YOUR-RESOURCE-ID
| where Category == "fleet-member-net-controller-manager"
| where log_s contains "endpointslice/" or log_s contains "endpointsliceexport/" or log_s contains "endpointsliceimport/"
| order by TimeGenerated desc
| take 1000
  • Fleet がメンバー クラスター側のネットワーク機能のサービスのエクスポート/インポートを管理する方法に関する最新の 1,000 個のログ エントリを取得します。
// Replace YOUR-RESOURCE-ID with the value of your AKS member cluster resource.
// To view the ID, go to the AKS cluster resource page, and select JSON view on the overview page.
AzureDiagnostics
| where _ResourceId == YOUR-RESOURCE-ID
| where Category == "fleet-member-net-controller-manager"
| where log_s contains "serviceexport/" or log_s contains "serviceimport/"
| order by TimeGenerated desc
| take 1000
  • Fleet がネットワーク機能のマルチクラスター サービスを管理する方法に関する最新の 1,000 個のログ エントリを取得します。
// Replace YOUR-RESOURCE-ID with the value of your AKS member cluster resource.
// To view the ID, go to the AKS cluster resource page, and select JSON view on the overview page.
AzureDiagnostics
| where _ResourceId == YOUR-RESOURCE-ID
| where Category == "fleet-mcs-controller-manager"
| where log_s contains "multiclusterservice/"
| order by TimeGenerated desc
| take 1000