

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# モニタリング
<a name="windows-monitoring"></a>

[段階的な CNCF プロジェクト](https://www.cncf.io/projects/)である Prometheus は、Kubernetes へのネイティブ統合を備えた最も人気のあるモニタリングシステムです。Prometheus は、コンテナ、ポッド、ノード、クラスターに関するメトリクスを収集します。さらに、Prometheus は AlertsManager を活用します。これにより、クラスター内の問題が発生した場合に警告するようにアラートをプログラムできます。Prometheus は、メトリクス名とキーと値のペアによって識別される時系列データとしてメトリクスデータを保存します。Prometheus には、Prometheus Query Language の略語である PromQL という言語を使用したクエリの実行が含まれています。

Prometheus メトリクスコレクションの大まかなアーキテクチャを以下に示します。

![\[Prometheus メトリクスコレクション\]](http://docs.aws.amazon.com/ja_jp/eks/latest/best-practices/images/windows/prom.png)


Prometheus はプルメカニズムを使用し、エクスポーターを使用してターゲットから、および [kube 状態メトリクスを使用して Kubernetes API からメトリクス](https://github.com/kubernetes/kube-state-metrics)をスクレイプします。つまり、アプリケーションとサービスは Prometheus 形式のメトリクスを含む HTTP(S) エンドポイントを公開する必要があります。その後、Prometheus は設定に従って、これらの HTTP(S) エンドポイントから定期的にメトリクスを取得します。

エクスポーターを使用すると、サードパーティーのメトリクスを Prometheus 形式のメトリクスとして使用できます。Prometheus エクスポーターは通常、各ノードにデプロイされます。エクスポーターの完全なリストについては、Prometheus [エクスポーター](https://prometheus.io/docs/instrumenting/exporters/)を参照してください。[ノードエクスポーター](https://github.com/prometheus/node_exporter)は Linux ノードのホストハードウェアと OS メトリクスのエクスポートに適していますが、Windows ノードでは機能しません。

安定した [Prometheus helm チャート](https://github.com/prometheus-community/helm-charts)を使用する場合、**Windows ノードを持つ混合ノード EKS クラスター**では、このエクスポーターは Windows 向けではないため、Windows ノードに失敗したポッドが表示されます。Windows ワーカープールを個別に扱い、代わりに [Windows ワーカーノードグループに Windows エクスポーター](https://github.com/prometheus-community/windows_exporter)をインストールする必要があります。

Windows ノードの Prometheus モニタリングをセットアップするには、Windows サーバー自体に WMI エクスポーターをダウンロードしてインストールし、Prometheus 設定ファイルのスクレイプ設定内でターゲットを設定する必要があります。[リリースページ](https://github.com/prometheus-community/windows_exporter/releases)には、使用可能なすべての .msi インストーラと、それぞれの機能セットとバグ修正が表示されます。インストーラは Windows\$1exporter を Windows サービスとして設定し、Windows ファイアウォールに例外を作成します。インストーラがパラメータなしで実行されている場合、エクスポーターは有効なコレクター、ポートなどのデフォルト設定で実行されます。

このガイドの**スケジューリングのベストプラクティス**セクションでは、テイント/トレレーションまたは RuntimeClass を使用してノードエクスポーターを linux ノードにのみ選択的にデプロイし、Windows エクスポーターはノードをブートストラップするとき、または任意の設定管理ツール ( Chef、Ansible、SSM など) を使用するときに Windows ノードにインストールすることを提案しています。

ノードエクスポーターがデーモンセット としてインストールされている Linux ノードとは異なり、Windows ノードでは WMI エクスポーターがホスト自体にインストールされていることに注意してください。エクスポーターは CPU 使用率、メモリ、ディスク I/O 使用率などのメトリクスをエクスポートし、IIS サイトとアプリケーション、ネットワークインターフェイス、サービスのモニタリングにも使用できます。

Windows\$1exporter は、デフォルトで有効なコレクターのすべてのメトリクスを公開します。これは、エラーを回避するためにメトリクスを収集する推奨方法です。ただし、高度な使用のために、メトリクスをフィルタリングするコレクターのオプションのリストを windows\$1exporter に渡すことができます。これを行うには、Prometheus 設定の collect[] パラメータを使用します。

Windows のデフォルトのインストール手順には、フィルタリングするコレクターなどの引数を使用してブートストラッププロセス中にエクスポーターをサービスとしてダウンロードおよび開始することが含まれます。

```
> Powershell Invoke-WebRequest https://github.com/prometheus-community/windows_exporter/releases/download/v0.13.0/windows_exporter-0.13.0-amd64.msi -OutFile <DOWNLOADPATH>

> msiexec /i <DOWNLOADPATH> ENABLED_COLLECTORS="cpu,cs,logical_disk,net,os,system,container,memory"
```

デフォルトでは、メトリクスはポート 9182 の /metrics エンドポイントでスクレイピングできます。この時点で、Prometheus は Prometheus 設定に次の scrape\$1config を追加することでメトリクスを消費できます。

```
scrape_configs:
    - job_name: "prometheus"
      static_configs:
        - targets: ['localhost:9090']
    ...
    - job_name: "wmi_exporter"
      scrape_interval: 10s
      static_configs:
        - targets: ['<windows-node1-ip>:9182', '<windows-node2-ip>:9182', ...]
```

Prometheus 設定は を使用して再ロードされます

```
> ps aux | grep prometheus
> kill HUP <PID>
```

ターゲットを追加するより適切で推奨される方法は、ServiceMonitor というカスタムリソース定義を使用することです。これは [Prometheus 演算子](https://github.com/prometheus-operator/kube-prometheus/releases)の一部として提供されます〕。この定義はServiceMonitor オブジェクトの定義と、定義した ServiceMonitors をアクティブ化し、必要な Prometheus 設定を自動的に構築するコントローラーを提供します。

Kubernetes サービスのグループをモニタリングする方法を宣言的に指定する ServiceMonitor は、Kubernetes 内からメトリクスをスクレイプするアプリケーションを定義するために使用されます。ServiceMonitor 内では、オペレータが Kubernetes サービスを識別するために使用できる Kubernetes ラベルを指定します。これにより、モニタリングするポッドが識別されます。

ServiceMonitor を活用するには、特定の Windows ターゲットを指すエンドポイントオブジェクト、ヘッドレスサービス、Windows ノード用の ServiceMontor を作成します。

```
apiVersion: v1
kind: Endpoints
metadata:
  labels:
    k8s-app: wmiexporter
  name: wmiexporter
  namespace: kube-system
subsets:
- addresses:
  - ip: NODE-ONE-IP
    targetRef:
      kind: Node
      name: NODE-ONE-NAME
  - ip: NODE-TWO-IP
    targetRef:
      kind: Node
      name: NODE-TWO-NAME
  - ip: NODE-THREE-IP
    targetRef:
      kind: Node
      name: NODE-THREE-NAME
  ports:
  - name: http-metrics
    port: 9182
    protocol: TCP

---
apiVersion: v1
kind: Service ##Headless Service
metadata:
  labels:
    k8s-app: wmiexporter
  name: wmiexporter
  namespace: kube-system
spec:
  clusterIP: None
  ports:
  - name: http-metrics
    port: 9182
    protocol: TCP
    targetPort: 9182
  sessionAffinity: None
  type: ClusterIP

---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor ##Custom ServiceMonitor Object
metadata:
  labels:
    k8s-app: wmiexporter
  name: wmiexporter
  namespace: monitoring
spec:
  endpoints:
  - interval: 30s
    port: http-metrics
  jobLabel: k8s-app
  namespaceSelector:
    matchNames:
    - kube-system
  selector:
    matchLabels:
      k8s-app: wmiexporter
```

オペレーターと ServiceMonitor の使用の詳細については、[オペレーター](https://github.com/prometheus-operator/kube-prometheus)の公式ドキュメントを参照してください。Prometheus は、多くの[サービス検出オプションを使用した動的ターゲット検出](https://prometheus.io/blog/2015/06/01/advanced-service-discovery/)をサポートしていることに注意してください。