Monitoraggio - Amazon EKS

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

Prometheus, un progetto CNCF laureato, è 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

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. Ciò significa che le applicazioni e i servizi devono esporre un endpoint HTTP (S) contenente metriche in formato Prometheus. Prometheus quindi, in base alla 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. Sebbene 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, verranno visualizzati i 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.

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 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] 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. Nota che Prometheus supporta il rilevamento dinamico degli obiettivi utilizzando molte opzioni di rilevamento dei servizi.