

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Monitoraggio
<a name="windows-monitoring"></a>

Prometheus, [un progetto CNCF laureato](https://www.cncf.io/projects/), è di gran lunga il sistema di monitoraggio più popolare con integrazione nativa in Kubernetes. Prometheus raccoglie metriche relative a contenitori, pod, nodi e cluster. Inoltre, Prometheus AlertsManager sfrutta i vantaggi che consentono di programmare avvisi per avvisare l'utente se qualcosa nel cluster sta andando storto. Prometheus memorizza i dati metrici come dati di serie temporali identificati dal nome e dalle coppie di metriche. key/value Prometheus include un modo per eseguire query utilizzando un linguaggio chiamato PromQL, che è l'abbreviazione di Prometheus Query Language.

L'architettura di alto livello della raccolta di metriche di Prometheus è mostrata di seguito:

![Collezione Prometheus Metrics](http://docs.aws.amazon.com/it_it/eks/latest/best-practices/images/windows/prom.png)


[Prometheus utilizza un meccanismo pull e raccoglie le metriche dagli obiettivi utilizzando gli esportatori e dall'API Kubernetes utilizzando le metriche dello stato di kube.](https://github.com/kubernetes/kube-state-metrics) Ciò significa che le applicazioni e i servizi devono esporre un endpoint HTTP (S) contenente metriche in formato Prometheus. Prometheus quindi, secondo la sua configurazione, estrarrà periodicamente le metriche da questi endpoint HTTP (S).

Un esportatore ti consente di utilizzare metriche di terze parti come metriche in formato Prometheus. Un esportatore Prometheus viene in genere distribuito su ogni nodo. [Per un elenco completo degli esportatori, consulta gli esportatori di Prometheus.](https://prometheus.io/docs/instrumenting/exporters/) Sebbene [node exporter](https://github.com/prometheus/node_exporter) sia adatto per esportare l'hardware dell'host e le metriche del sistema operativo per i nodi Linux, non funzionerà per i nodi Windows.

In un **cluster EKS a nodi misti con nodi Windows**, quando si utilizza la tabella di [comando stabile Prometheus](https://github.com/prometheus-community/helm-charts), si vedranno dei pod non funzionanti sui nodi Windows, poiché questo programma di esportazione non è destinato a Windows. Dovrete trattare il pool di lavoro di Windows separatamente e installare invece Windows [Exporter nel gruppo di nodi di lavoro di Windows](https://github.com/prometheus-community/windows_exporter).

Per configurare il monitoraggio di Prometheus per i nodi Windows, è necessario scaricare e installare l'esportatore WMI sul server Windows stesso e quindi configurare i target all'interno della configurazione scrape del file di configurazione Prometheus. La [pagina delle versioni](https://github.com/prometheus-community/windows_exporter/releases) fornisce tutti i programmi di installazione.msi disponibili, con i rispettivi set di funzionalità e correzioni di bug. Il programma di installazione configurerà windows\_exporter come servizio Windows, oltre a creare un'eccezione nel firewall di Windows. Se il programma di installazione viene eseguito senza parametri, l'esportatore verrà eseguito con le impostazioni predefinite per i raccoglitori, le porte e così via abilitati.

Puoi consultare la sezione **sulle migliori pratiche di pianificazione** di questa guida che suggerisce l'uso taints/tolerations o RuntimeClass la distribuzione selettiva di node Exporter solo su nodi Linux, mentre l'esportatore di Windows viene installato sui nodi Windows durante l'avvio del nodo o utilizzando uno strumento di gestione della configurazione a tua scelta (ad esempio chef, Ansible, SSM ecc.).

Si noti che, a differenza dei nodi Linux in cui l'esportatore di nodi è installato come demonset, nei nodi Windows l'esportatore WMI è installato sull'host stesso. L'esportatore esporterà metriche come l'utilizzo della CPU, della memoria e del disco I/O e può essere utilizzato anche per monitorare i siti e le applicazioni IIS, le interfacce e i servizi di rete.

Per impostazione predefinita, windows\_exporter esporrà tutte le metriche dei raccoglitori abilitati. Questo è il metodo consigliato per raccogliere le metriche per evitare errori. Tuttavia, per un uso avanzato, a windows\_exporter può essere passato un elenco opzionale di raccoglitori per filtrare le metriche. Il parametro collect [], nella configurazione di Prometheus, consente di farlo.

I passaggi di installazione predefiniti per Windows includono il download e l'avvio dell'esportatore come servizio durante il processo di avvio con argomenti, ad esempio i raccoglitori da filtrare.

```
> 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"
```

Per impostazione predefinita, è possibile eseguire lo scraping delle metriche nell'endpoint /metrics sulla porta 9182. A questo punto, Prometheus può utilizzare le metriche aggiungendo il seguente scrape\_config alla configurazione di Prometheus

```
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', ...]
```

La configurazione di Prometheus viene ricaricata utilizzando

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

Un modo migliore e consigliato per aggiungere obiettivi consiste nell'utilizzare una definizione di risorsa personalizzata chiamata ServiceMonitor, che fa parte dell'operatore [Prometheus](https://github.com/prometheus-operator/kube-prometheus/releases)] che fornisce la definizione di ServiceMonitor un oggetto e un controller che attiverà la configurazione di Prometheus richiesta e creerà automaticamente ServiceMonitors la configurazione Prometheus richiesta.

Il ServiceMonitor, che specifica in modo dichiarativo come devono essere monitorati i gruppi di servizi Kubernetes, viene utilizzato per definire un'applicazione da cui desideri acquisire le metriche dall'interno di Kubernetes. All'interno ServiceMonitor specifichiamo le etichette Kubernetes che l'operatore può utilizzare per identificare il servizio Kubernetes, che a sua volta identifica i Pod che desideriamo monitorare.

Per sfruttare il ServiceMonitor, crea un oggetto Endpoint che punti a obiettivi Windows specifici, un servizio headless e un per i nodi 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
```

[Per maggiori dettagli sull'operatore e sull'utilizzo di ServiceMonitor, consulta la documentazione ufficiale dell'operatore.](https://github.com/prometheus-operator/kube-prometheus) [Nota che Prometheus supporta il rilevamento dinamico degli obiettivi utilizzando molte opzioni di rilevamento dei servizi.](https://prometheus.io/blog/2015/06/01/advanced-service-discovery/)