View a markdown version of this page

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 laureato al CNCF, è di gran lunga il sistema di monitoraggio più popolare con integrazione nativa in Kubernetes. Prometheus raccoglie metriche su contenitori, pod, nodi e cluster. Inoltre, Prometheus sfrutta la possibilità di programmare avvisi per avvisare AlertsManager 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 della metrica. key/value Prometheus include un modo per eseguire query utilizzando un linguaggio chiamato Prometheus Query Language, 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 estrae le metriche dai target 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, in base alla sua configurazione, estrarrà periodicamente le metriche da questi endpoint HTTP (S).

Un esportatore 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, fai riferimento agli esportatori di Prometheus. https://prometheus.io/docs/instrumenting/exporters/ Sebbene node exporter sia adatto per esportare l'hardware 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 il diagramma helm stabile di Prometheus, verranno visualizzati dei pod non funzionanti sui nodi Windows, poiché questo esportatore non è destinato a Windows. Dovrai trattare separatamente il pool di lavoratori di Windows e installare invece l'esportatore di Windows nel gruppo di nodi di lavoro di Windows.

Per configurare il monitoraggio Prometheus per i nodi Windows, è necessario scaricare e installare l'esportatore WMI sul server Windows stesso e quindi impostare le destinazioni 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 e creerà 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, ecc. abilitati.

Puoi consultare la sezione delle migliori pratiche di pianificazione di questa guida che suggerisce l'uso taints/tolerations o RuntimeClass la distribuzione selettiva dell'esportatore di nodi solo sui 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 (esempio chef, Ansible, SSM ecc.).

Si noti che, a differenza dei nodi Linux in cui l'esportatore di nodi è installato come daemonset, nei nodi Windows l'esportatore WMI è installato sull'host stesso. L'esportatore esporterà parametri 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, è possibile passare a windows_exporter 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 all'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 denominata ServiceMonitor, che fa parte dell'operatore Prometheus] che fornisce la definizione di un ServiceMonitor oggetto e un controller che attiverà la definizione da ServiceMonitors noi definita e genererà automaticamente 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 all'interno di Kubernetes. All'interno di esse 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 sfruttarli ServiceMonitor, creiamo un oggetto Endpoint che punti a obiettivi Windows specifici, un servizio headless e un servizio 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 dei target utilizzando molte opzioni di rilevamento dei servizi.