Prometheus: Recupero delle metriche da Linux

Come recuperare le metriche di un server Linux in Prometheus utilizzando Node Exporter

👋 Benvenuti nella documentazione di Stackhero!

Stackhero offre una soluzione Prometheus cloud pronta all'uso che fornisce numerosi vantaggi, tra cui:

  • Alert Manager incluso per inviare avvisi a Slack, Mattermost, PagerDuty, ecc.
  • Server email dedicato per inviare avvisi email illimitati.
  • Blackbox per sondare HTTP, ICMP, TCP e altro ancora.
  • Configurazione facile con editor di file di configurazione online.
  • Aggiornamenti senza sforzo con un solo clic.
  • Prestazioni ottimali e sicurezza robusta grazie a una VM privata e dedicata.

Risparmia tempo e semplifica la tua vita: bastano solo 5 minuti per provare la soluzione di Prometheus cloud hosting di Stackhero!

Node Exporter è un software che si può installare sui kernel *NIX (Linux, OpenBSD, FreeBSD o Darwin) per esporre le metriche di sistema a Prometheus. È un componente essenziale per monitorare le prestazioni del server e la salute dell'infrastruttura.

Nella terminologia di Prometheus, Node Exporter agisce come un esportatore ed è aggiunto come target nella configurazione di Prometheus. Prometheus si connette a Node Exporter utilizzando la porta TCP 9100 tramite HTTP a intervalli regolari per recuperare le metriche.

In sintesi, Node Exporter consente di monitorare un sistema basato su Linux. Per i sistemi Windows, è possibile utilizzare il Windows Exporter.

Immagine generale di Stackhero per PrometheusImmagine generale di Stackhero per Prometheus

È possibile scaricare Node Exporter dalla sua pagina di release su GitHub. È distribuito come binario che viene eseguito direttamente sul sistema. Poiché è progettato per funzionare continuamente, si consiglia di configurarlo per avviarsi automaticamente all'avvio del server.

Per impostazione predefinita, Node Exporter apre la porta 9100 al mondo senza autenticazione o crittografia. È altamente consigliato aggiungere sia l'autenticazione che la crittografia TLS (vedi sotto) e configurare un firewall per limitare l'accesso alla porta 9100 in modo che solo il server Prometheus o altri indirizzi IP autorizzati possano connettersi.

È possibile seguire questi passaggi su Ubuntu:

# Vai su https://github.com/prometheus/node_exporter/releases per ottenere l'ultima versione.
node_exporter_version="1.2.0"
node_exporter_release="linux-amd64"

# Scarica e installa node_exporter
cd /tmp
wget https://github.com/prometheus/node_exporter/releases/download/v${node_exporter_version}/node_exporter-${node_exporter_version}.${node_exporter_release}.tar.gz
tar xvfa node_exporter-${node_exporter_version}.${node_exporter_release}.tar.gz
sudo mv node_exporter-${node_exporter_version}.${node_exporter_release}/node_exporter /usr/local/bin/
rm -rf node_exporter-${node_exporter_version}.${node_exporter_release} node_exporter-${node_exporter_version}.${node_exporter_release}.tar.gz

# Crea un utente "node_exporter"
sudo useradd -rs /bin/false node_exporter

# Crea un servizio systemd per avviare node_exporter automaticamente all'avvio
sudo bash -c 'cat << EOF > /etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
After=network.target

[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter --web.config=/etc/prometheus_node_exporter/configuration.yml

[Install]
WantedBy=multi-user.target
EOF'

# Crea una directory e un file di configurazione
sudo mkdir -p /etc/prometheus_node_exporter/
sudo touch /etc/prometheus_node_exporter/configuration.yml
sudo chmod 700 /etc/prometheus_node_exporter
sudo chmod 600 /etc/prometheus_node_exporter/*
sudo chown -R node_exporter:node_exporter /etc/prometheus_node_exporter

sudo systemctl daemon-reload
sudo systemctl enable node_exporter

# Avvia il demone node_exporter e verifica il suo stato
sudo systemctl start node_exporter
sudo systemctl status node_exporter

A questo punto, il binario node_exporter dovrebbe essere in esecuzione sul server. Per confermare che funzioni, è possibile connettersi e verificare se restituisce metriche:

curl http://localhost:9100/metrics

Node Exporter apre la porta 9100 alla rete pubblica. Ciò significa che chiunque può connettersi e recuperare le metriche del server! Al minimo, dovreste aggiungere autenticazione e crittografia TLS (vedi sotto) ed è fortemente consigliato configurare un firewall per bloccare le richieste alla porta 9100 da IP diversi dal server Prometheus.

Il processo di installazione di Node Exporter su Debian è identico al metodo Ubuntu descritto sopra. Seguite semplicemente le stesse istruzioni.

I passaggi di installazione di Node Exporter dipendono dal sistema utilizzato. Sebbene non sia fornita documentazione dettagliata per ogni piattaforma, la procedura di base consiste nel scaricare il binario che corrisponde al sistema e configurarlo per avviarsi all'avvio.

Per impostazione predefinita, Node Exporter non esegue l'autenticazione, il che significa che chiunque può recuperare le metriche esposte. Per proteggere l'accesso, è possibile aggiungere un'autenticazione di base per un utente.

Genera una password utilizzando i seguenti comandi:

password=`openssl rand -base64 32`
passwordHashed=`echo ${password} | htpasswd -inBC 10 "" | tr -d ':'`
echo "Password chiara da conservare per il server Prometheus: ${password}"

Se non si dispone del binario htpasswd, è possibile installarlo su Debian/Ubuntu utilizzando apt-get install --no-install-recommends apache2-utils.

Conservate la password chiara in sicurezza poiché sarà necessaria durante la configurazione di Prometheus.

Aggiungi le seguenti righe al file di configurazione per aggiungere un utente chiamato "prometheus" con l'hash della password generata:

sudo cat << EOF >> /etc/prometheus_node_exporter/configuration.yml
basic_auth_users:
  prometheus: ${passwordHashed}

EOF

# Riavvia Node Exporter
sudo systemctl restart node_exporter

Infine, verifica che l'autenticazione funzioni correttamente:

  • Eseguire curl http://localhost:9100/metrics dovrebbe restituire "Unauthorized".
  • Eseguire curl -u prometheus:${password} http://localhost:9100/metrics dovrebbe restituire l'elenco delle metriche.

Per impostazione predefinita, Node Exporter non cripta le comunicazioni. Ciò significa che le credenziali, inclusa la password definita in precedenza, sono trasmesse in chiaro. Per proteggere le comunicazioni, è possibile abilitare la crittografia TLS come segue.

Esegui i seguenti comandi per creare un certificato e una chiave TLS:

# Crea certificato TLS
cd /tmp
sudo openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 \
  -keyout /etc/prometheus_node_exporter/tlsCertificate.key \
  -out /etc/prometheus_node_exporter/tlsCertificate.crt \
  -subj "/CN=`hostname`" \
  -addext "subjectAltName = DNS:`hostname`"
sudo chmod 600 /etc/prometheus_node_exporter/*
sudo chown -R node_exporter:node_exporter /etc/prometheus_node_exporter

Aggiungi le seguenti righe al file di configurazione per aggiungere le impostazioni TLS e poi riavvia Node Exporter:

sudo cat << 'EOF' >> /etc/prometheus_node_exporter/configuration.yml
tls_server_config:
  cert_file: /etc/prometheus_node_exporter/tlsCertificate.crt
  key_file: /etc/prometheus_node_exporter/tlsCertificate.key

EOF

# Riavvia Prometheus Node Exporter
sudo systemctl restart node_exporter

È possibile verificare che TLS sia attivo connettendosi tramite HTTPS con il seguente comando:

curl -k -u prometheus:${password} https://localhost:9100/metrics

Si noti che questo metodo non utilizza un certificato CA, quindi è necessario passare l'opzione "-k" a cURL per bypassare la verifica del certificato.

Dopo aver installato Node Exporter e averlo protetto, configurare il server Prometheus per recuperare le metriche a intervalli regolari.

Su Stackhero, selezionare il servizio Prometheus e andare all'URL "Prometheus configuration". Quindi aggiungere quanto segue alla sezione scrape_configs:

scrape_configs:

  - job_name: "My servers pool"
    static_configs:
      - targets: [ "<yourLinuxServerDomain>:9100" ]
    basic_auth:
      username: "prometheus"
      password: "<password>"
    scheme: https
    tls_config:
      insecure_skip_verify: true
    # Relabeling "instance" per rimuovere la parte ":9100"
    relabel_configs:
      - source_labels: [__address__]
        target_label: instance
        regex: '([^:]+)(:[0-9]+)?'
        replacement: '${1}'

Salvare il file e controllare i log di Prometheus per confermare che sia stato ricaricato con successo (è possibile visualizzare i log dal dashboard di Stackhero selezionando il servizio Prometheus e cliccando sulla scheda "Logs").

Infine, verificare che Prometheus stia recuperando le metriche accedendo all'interfaccia utente di Prometheus sul dashboard di Stackhero e navigando su Status > Targets. Il server Linux dovrebbe apparire nell'elenco dei target come UP.

Il target "myLinuxServer" è UPIl target "myLinuxServer" è UP

Per visualizzare le metriche recuperate da Node Exporter, accedere a Prometheus tramite il dashboard di Stackhero utilizzando l'URL "Prometheus UI" o direttamente su https://<prometheusDomain>/.

Nel campo "Expression", digitare node_memory_MemTotal_bytes e premere invio. Se tutto è configurato correttamente, vedrete la RAM totale del server visualizzata in byte.

La quantità totale di RAM per questo server è di 4068794368 byte, ovvero 3.78GBLa quantità totale di RAM per questo server è di 4068794368 byte, ovvero 3.78GB

Grafana può generare dashboard facilmente basati sui dati di Prometheus. Per istruzioni dettagliate sulla configurazione di Grafana per visualizzare i dati di Prometheus, si prega di fare riferimento alla documentazione di Grafana.

Esempio di dashboard generato da Grafana, basato sui dati di Prometheus Node ExporterEsempio di dashboard generato da Grafana, basato sui dati di Prometheus Node Exporter