Come installare TIG Stack (Telegraf, InfluxDB e Grafana) su Ubuntu 22.04
Questo tutorial esiste per queste versioni del sistema operativo
- Ubuntu 22.04 (Jammy Jellyfish)
- Ubuntu 18.04 (Bionic Beaver)
Su questa pagina
- Prerequisiti
- Passaggio 1: configurazione del firewall
- Passaggio 2 - Installa InfluxDB
- Passaggio 3 - Creazione del database InfluxDB e delle credenziali utente
- Passaggio 4 - Installa Telegraf
- Passaggio 5 - Verifica se le statistiche di Telegraf vengono archiviate in InfluxDB
- Passaggio 6 - Installa Grafana
- Passaggio 7: configurazione dell'origine dati Grafana
- Passaggio 8 - Configura Grafana Dashboard
- Passaggio 9 - Configura avvisi e notifiche
- Condizioni
- Regola
- Nessuna gestione di dati ed errori
Lo stack TIG (Telegraf, InfluxDB e Grafana) è l'acronimo di una piattaforma di strumenti open source per semplificare la raccolta, l'archiviazione, la rappresentazione grafica e gli avvisi delle metriche di sistema. Puoi monitorare e visualizzare metriche come memoria, spazio su disco, utenti che hanno effettuato l'accesso, carico del sistema, utilizzo dello swap, tempo di attività, processi in esecuzione, ecc. da un'unica posizione. Gli strumenti utilizzati nello stack sono i seguenti:
- Telegraf - è un agente di raccolta di metriche open source per la raccolta e l'invio di dati ed eventi da database, sistemi e sensori IoT. Supporta vari plug-in di output come InfluxDB, Graphite, Kafka, ecc. A cui può inviare i dati raccolti.
- InfluxDB - è un database di serie temporali open source scritto nel linguaggio Go. È ottimizzato per l'archiviazione veloce e ad alta disponibilità ed è adatto a tutto ciò che comporta grandi quantità di dati con timestamp, inclusi parametri, eventi e analisi in tempo reale.
- Grafana - è una suite di visualizzazione e monitoraggio dei dati open source. Supporta vari plug-in di input come Graphite, ElasticSearch, InfluxDB, ecc. Fornisce una bellissima dashboard e analisi metriche che consentono di visualizzare e monitorare qualsiasi tipo di metrica di sistema e dati sulle prestazioni.
In questo tutorial imparerai come installare e configurare TIG Stack su un singolo server Ubuntu 22.04.
Prerequisiti
-
A server running Ubuntu 22.04.
-
A non-sudo user with root privileges.
-
The uncomplicated Firewall(UFW) is enabled and running.
-
Ensure that everything is updated.
$ sudo apt update && sudo apt upgrade
Passaggio 1: configurare il firewall
Prima di installare qualsiasi pacchetto, il primo passo è configurare il firewall per aprire le porte per InfluxDB e Grafana.
Controlla lo stato del firewall.
$ sudo ufw status
Dovresti vedere qualcosa di simile al seguente.
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6)
Apri la porta 8086 per InfluxDB e 3000 per il server Grafana.
$ sudo ufw allow 8086 $ sudo ufw allow 3000
Controlla di nuovo lo stato per confermare.
$ sudo ufw status Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 8086 ALLOW Anywhere 3000 ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 8086 (v6) ALLOW Anywhere (v6) 3000 (v6) ALLOW Anywhere (v6)
Passaggio 2: installa InfluxDB
Useremo il repository ufficiale di InfluxDB per installarlo.
Scarica la chiave GPG di InfluxDB.
$ wget -q https://repos.influxdata.com/influxdb.key
Importa la chiave GPG nel server.
$ echo '23a1c8836f0afc5ed24e0486339d7cc8f6790b83886c4c96995b88a061c5bb5d influxdb.key' | sha256sum -c && cat influxdb.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/influxdb.gpg > /dev/null
Importa il repository InfluxDB.
$ echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdb.gpg] https://repos.influxdata.com/debian stable main' | sudo tee /etc/apt/sources.list.d/influxdata.list
Aggiorna l'elenco dei repository di sistema.
$ sudo apt update
Hai la possibilità di installare InfluxDB 1.8.xo 2.0.x. Tuttavia, è meglio utilizzare l'ultima versione. Installa InfluxDB.
$ sudo apt install influxdb2
Avvia il servizio InfluxDB.
$ sudo systemctl start influxdb
Controlla lo stato del servizio.
$ sudo systemctl status influxdb ? influxdb.service - InfluxDB is an open-source, distributed, time series database Loaded: loaded (/lib/systemd/system/influxdb.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2022-09-13 00:00:27 UTC; 42s ago Docs: https://docs.influxdata.com/influxdb/ Process: 12514 ExecStart=/usr/lib/influxdb/scripts/influxd-systemd-start.sh (code=exited, status=0/SUCCESS) Main PID: 12515 (influxd) Tasks: 7 (limit: 1030) Memory: 48.5M CPU: 547ms CGroup: /system.slice/influxdb.service ??12515 /usr/bin/influxd ........
Passaggio 3: creare il database InfluxDB e le credenziali utente
Per archiviare i dati da Telegraf, è necessario configurare il database e l'utente di Influx.
InfluxDB viene fornito con uno strumento da riga di comando denominato influx per interagire con il server InfluxDB. Pensa a
influx
come allo strumento a riga di comandomysql
.Eseguire il comando seguente per eseguire la configurazione iniziale per Influx.
$ influx setup > Welcome to InfluxDB 2.0! ? Please type your primary username navjot ? Please type your password *************** ? Please type your password again *************** ? Please type your primary organization name howtoforge ? Please type your primary bucket name tigstack ? Please type your retention period in hours, or 0 for infinite 360 ? Setup with these parameters? Username: navjot Organization: howtoforge Bucket: tigstack Retention Period: 360h0m0s Yes User Organization Bucket navjot howtoforge tigstack
È necessario impostare il nome utente iniziale, la password, il nome dell'organizzazione, il nome del bucket principale per archiviare i dati e il periodo di conservazione in ore per tali dati. I tuoi dettagli sono memorizzati nel file
/home/username/.influxdbv2/configs
.Puoi anche eseguire questa configurazione avviando l'URL
http://
nel tuo browser. Una volta eseguita la configurazione iniziale, puoi accedere all'URL con le credenziali create sopra.:8086/ Dovresti essere accolto con la seguente dashboard.
Il processo di configurazione iniziale crea un token predefinito con accesso completo in lettura e scrittura a tutte le organizzazioni nel database. Hai bisogno di un nuovo token per motivi di sicurezza che si connetterà solo all'organizzazione e al bucket a cui vogliamo connetterci.
Per creare un nuovo token, fai clic sulla seguente icona dalla barra laterale di sinistra e fai clic sul collegamento Token API per procedere.
Verrai indirizzato alla pagina dei token API. Qui vedrai il token predefinito che abbiamo creato al momento della configurazione iniziale.
Fare clic sul pulsante Genera token e selezionare l'opzione Read/Write Token per avviare un nuovo popup di sovrapposizione. Assegna un nome al Token (
telegraf
) e seleziona il bucket predefinito che abbiamo creato in entrambe le sezioni Read e Write.Fare clic su Salva per terminare la creazione del token. Fare clic sul nome del token appena creato per visualizzare un popup con il valore del token.
Conservalo per ora poiché ne avremo bisogno in seguito.
Questo completa l'installazione e la configurazione di InfluxDB. Successivamente, dobbiamo installare Telegraf.
Passo 4 - Installa Telegraf
Telegraf e InfluxDB condividono lo stesso repository. Significa che puoi installare Telegraf direttamente.
$ sudo apt install telegraf
Il servizio Telegrafs è abilitato e avviato automaticamente durante l'installazione.
Telegraf è un agente basato su plug-in e dispone di 4 tipi di plug-in:
- I plug-in di input raccolgono metriche.
- I plug-in del processore trasformano, decorano e filtrano le metriche.
- I plugin di aggregazione creano e aggregano metriche.
- I plug-in di output definiscono le destinazioni in cui vengono inviate le metriche, incluso InfluxDB.
Telegraf memorizza la sua configurazione per tutti questi plugin nel file
/etc/telegraf/telegraf.conf
. Il primo passo è connettere Telegraf a InfluxDB abilitando il plugin di outputinfluxdb_v2
. Apri il file/etc/telegraf/telegraf.conf
per modificarlo.$ sudo nano /etc/telegraf/telegraf.conf
Trova la riga
[[outputs.influxdb_v2]]
e rimuovi il commento rimuovendo il simbolo # che la precede. Modifica il codice sottostante nel modo seguente.# # Configuration for sending metrics to InfluxDB 2.0 [[outputs.influxdb_v2]] # ## The URLs of the InfluxDB cluster nodes. # ## # ## Multiple URLs can be specified for a single cluster, only ONE of the # ## urls will be written to each interval. # ## ex: urls = ["https://us-west-2-1.aws.cloud2.influxdata.com"] urls = ["http://127.0.0.1:8086"] # # ## Token for authentication. token = "$INFLUX_TOKEN" # # ## Organization is the name of the organization you wish to write to. organization = "howtoforge" # # ## Destination bucket to write into. bucket = "tigstack"
Incolla il valore del token InfluxDB salvato in precedenza al posto della variabile
$INFLUX_TOKEN
nel codice precedente.Cerca la riga
INPUT PLUGINS
e vedrai i seguenti plugin di input abilitati per impostazione predefinita.# Read metrics about cpu usage [[inputs.cpu]] ## Whether to report per-cpu stats or not percpu = true ## Whether to report total system cpu stats or not totalcpu = true ## If true, collect raw CPU time metrics collect_cpu_time = false ## If true, compute and report the sum of all non-idle CPU states report_active = false ## If true and the info is available then add core_id and physical_id tags core_tags = false # Read metrics about disk usage by mount point [[inputs.disk]] ## By default stats will be gathered for all mount points. ## Set mount_points will restrict the stats to only the specified mount points. # mount_points = ["/"] ## Ignore mount points by filesystem type. ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs"] ## Ignore mount points by mount options. ## The 'mount' command reports options of all mounts in parathesis. ## Bind mounts can be ignored with the special 'bind' option. # ignore_mount_opts = [] # Read metrics about disk IO by device [[inputs.diskio]] .... .... # Get kernel statistics from /proc/stat [[inputs.kernel]] # no configuration # Read metrics about memory usage [[inputs.mem]] # no configuration # Get the number of processes and group them by status [[inputs.processes]] # no configuration # Read metrics about swap memory usage [[inputs.swap]] # no configuration # Read metrics about system load & uptime [[inputs.system]] # no configuration
Puoi configurare plug-in di input aggiuntivi in base alle tue esigenze, tra cui Apache Server, contenitori Docker, Elasticsearch, iptables firewall, Kubernetes, Memcached, MongoDB, MySQL, Nginx, PHP-fpm, Postfix, RabbitMQ, Redis, Varnish, Wireguard, PostgreSQL, ecc.
Al termine, salva il file premendo Ctrl + X e digitando Y quando richiesto.
Riavvia il servizio Telegraf una volta che hai finito di applicare le modifiche.
$ sudo systemctl restart telegraf
Passaggio 5: verificare se le statistiche di Telegraf vengono archiviate in InfluxDB
Prima di procedere oltre, è necessario verificare se le statistiche di Telegraf sono state correttamente raccolte e inserite in InfluxDB. Apri l'interfaccia utente di InfluxDB nel tuo browser e fai clic sulla terza icona dalla barra laterale sinistra e seleziona il menu Bucket.
Fai clic su tigstack e dovresti essere accolto con la pagina seguente.
Fai clic sul nome del bucket, quindi fai clic su uno dei valori nel filtro
_measurement
e continua a fare clic su altri valori man mano che vengono visualizzati. Al termine, fai clic sul pulsante Invia. Dovresti vedere un grafico in alto. Potrebbe essere necessario attendere un po' di tempo prima che i dati vengano visualizzati.Ciò dovrebbe confermare che i dati vengono trasmessi correttamente.
Passaggio 6: installa Grafana
Useremo il repository ufficiale di Grafana per installarlo. Importa la chiave GPG Grafana.
$ sudo wget -q -O /usr/share/keyrings/grafana.key https://packages.grafana.com/gpg.key
Aggiungi il repository al tuo sistema.
$ echo "deb [signed-by=/usr/share/keyrings/grafana.key] https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
Aggiorna l'elenco dei repository di sistema.
$ sudo apt update
Installa Grafan.
$ sudo apt install grafana
Avviare e abilitare il servizio Grafana.
$ sudo systemctl enable grafana-server --now
Controlla lo stato del servizio.
$ sudo systemctl status grafana-server ? grafana-server.service - Grafana instance Loaded: loaded (/lib/systemd/system/grafana-server.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2022-09-13 01:04:47 UTC; 2s ago Docs: http://docs.grafana.org Main PID: 13674 (grafana-server) Tasks: 7 (limit: 1030) Memory: 104.6M CPU: 1.050s CGroup: /system.slice/grafana-server.service ??13674 /usr/sbin/grafana-server --config=/etc/grafana/grafana.ini --pidfile=/run/grafana/grafana-server.pid --packaging=deb cfg:default.paths.logs=/var/log/grafana .......
Passaggio 7: configurare l'origine dati Grafana
Avvia l'URL
http://
nel tuo browser e la seguente pagina di accesso di Grafana dovrebbe darti il benvenuto.:3000 Accedi con il nome utente predefinito
admin
e la passwordadmin
. Successivamente, è necessario impostare una nuova password predefinita.Sarai accolto con la seguente homepage di Grafana. Fai clic sul pulsante Aggiungi la tua prima origine dati.
Fare clic sul pulsante InfluxDB.
Nella pagina successiva, seleziona Flux dal menu a discesa come lingua della query. Puoi utilizzare InfluxQL come linguaggio di query, ma è più complicato da configurare poiché supporta solo InfluxDB v1.x per impostazione predefinita. Flux supporta InfluxDB v2.x ed è più facile da installare e configurare.
Immettere i seguenti valori.
URL:
http://localhost:8086
Accesso: Server
Dettagli di autenticazione di base
Utente: navjot
Password:
Dettagli del DB di afflusso
Organizzazione: howtoforge
Token:
Secchiello predefinito: tigstack
Fai clic sul pulsante Salva e prova e dovresti vedere un messaggio di conferma che verifica che l'installazione sia andata a buon fine.
Passaggio 8: configurare Grafana Dashboard
Il passaggio successivo consiste nell'impostare Grafana Dashboards. Fare clic sul segno con i quattro quadrati e selezionare Dashboard per aprire la schermata Crea Dashboard.
Nella pagina successiva, fare clic sul pulsante Aggiungi un nuovo pannello per avviare la seguente schermata.
Incollare il codice seguente nell'editor di query. Questo
from(bucket: "NAMEOFYOUBUCKET") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r["_measurement"] == "cpu") |> filter(fn: (r) => r["_field"] == "usage_idle") |> filter(fn: (r) => r["cpu"] == "cpu-total") |> filter(fn: (r) => r["host"] == "NAMEOFYOURHOST") |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false) |> map(fn: (r) => ({ r with _value: r._value * -1.0 + 100.0 })) |> toFloat() |> yield(name: "mean")
Usa il nome del bucket che abbiamo usato sopra. E il nome dell'host che puoi recuperare dal file
/etc/hostname
.Il codice sopra calcolerà l'utilizzo della CPU e genererà un grafico per esso. Assegna un titolo al pannello.
Fai clic sul pulsante Impostazioni query, quindi fai clic sul pulsante Aggiorna per verificare se la query funziona correttamente. Fare clic sull'icona a forma di croce per chiudere l'ispettore.
Puoi anche assegnare un nome all'asse utilizzando il campo Etichetta a destra sotto la sezione Asse.
Fare clic sul pulsante Applica per salvare il pannello.
Fai clic sul pulsante Salva dashboard, una volta terminato.
Assegna un nome alla dashboard e fai clic su Salva per terminare.
Si aprirà la dashboard e quindi fare clic sul pulsante Aggiungi pannello per creare un altro pannello.
Ripeti il processo creando un altro pannello per l'utilizzo della RAM.
from(bucket: "NAMEOFYOUBUCKET") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r["_measurement"] == "mem") |> filter(fn: (r) => r["_field"] == "used_percent") |> filter(fn: (r) => r["host"] == "NAMEOFYOURHOST") |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false) |> yield(name: "mean")
E utilizzare il seguente codice per visualizzare l'utilizzo dell'HDD.
from(bucket: "NAMEOFYOURBUCKET") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r["_measurement"] == "disk") |> filter(fn: (r) => r["_field"] == "used") |> filter(fn: (r) => r["path"] == "/") |> filter(fn: (r) => r["host"] == "NAMEOFYOURHOST") |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false) |> map(fn: (r) => ({ r with _value: r._value / 1000000.0 })) |> toFloat() |> yield(name: "mean")
Puoi creare un numero illimitato di pannelli.
Il codice sopra è basato sul linguaggio Flux Scripting. Fortunatamente, non è necessario imparare la lingua per scrivere query. Puoi generare la query dall'URL di InfluxDB. Anche se l'apprendimento della lingua può trarre vantaggio dall'ottimizzazione delle query.
Devi tornare alla dashboard di InfluxDB e aprire la pagina Esplora per ottenere la query.
Fai clic sul nome del bucket, quindi fai clic su uno dei valori nel filtro
_measurement
e continua a fare clic su altri valori man mano che vengono visualizzati. Al termine, fai clic sul pulsante Script Editor e dovresti vedere la pagina seguente. Anche il grafico dovrebbe essere aggiornato.Copia la query mostrata e ora puoi usarla nella dashboard di Grafana per costruire i tuoi grafici.
Passaggio 9: configurare avvisi e notifiche
L'uso principale dell'impostazione dei monitor è ricevere avvisi in tempo quando il valore supera una certa soglia.
Il primo passaggio consiste nell'impostare la destinazione in cui desideri ricevere gli avvisi. Puoi ricevere notifiche via Email, Slack, Kafka, Google Hangouts Chat, Microsoft Teams, Telegram, ecc.
Abiliteremo le notifiche e-mail per il nostro tutorial. Per impostare le notifiche e-mail, dobbiamo prima configurare il servizio SMTP. Apri il file
/etc/grafana/grafana.ini
per configurare SMTP.$ sudo nano /etc/grafana/grafana.ini
Trova la seguente riga
[smtp]
al suo interno. Rimuovere il commento dalle seguenti righe e immettere i valori per il server SMTP personalizzato.[smtp] enabled = true host = email-smtp.us-west-2.amazonaws.com:587 user = YOURUSERNAME # If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;""" password = YOURUSERPASSWORD ;cert_file = ;key_file = ;skip_verify = false from_address = from_name = HowtoForge Grafana # EHLO identity in SMTP dialog (defaults to instance_name) ;ehlo_identity = dashboard.example.com # SMTP startTLS policy (defaults to 'OpportunisticStartTLS') ;startTLS_policy = NoStartTLS
Salva il file premendo Ctrl + X e immettendo Y quando richiesto.
Riavvia il server Grafana per applicare le impostazioni.
$ sudo systemctl restart grafana-server
Apri la pagina Grafana e fai clic sull'icona Avviso e fai clic su Punti di contatto.
Grafana crea e configura automaticamente un punto di contatto e-mail predefinito che deve essere configurato con l'indirizzo e-mail corretto. Fai clic sul pulsante di modifica nel punto di contatto
grafana-default-email
.Inserisci i dettagli per configurare il canale di notifica e-mail.
Se desideri inviare un messaggio aggiuntivo, fai clic sul link Impostazioni e-mail facoltative e inserisci il messaggio.
Fare clic su Prova per vedere se le impostazioni e-mail funzionano. Fai clic su Salva al termine.
Ora che abbiamo impostato i canali di notifica, dobbiamo impostare avvisi su quando ricevere queste e-mail. Per impostare gli avvisi, devi tornare ai pannelli della dashboard.
Fare clic su Dashboard >> Sfoglia per aprire la pagina Dashboard.
Fai clic sulla dashboard che abbiamo appena creato e otterrai la sua home page con diversi pannelli. Per modificare il pannello, fai clic sul nome del pannello e verrà visualizzato un menu a discesa. Fare clic sul collegamento Modifica per procedere.
Fare clic sul pannello degli avvisi e fare clic sul pulsante Crea regola di avviso da questo pannello per impostare un nuovo avviso.
Ora puoi configurare le condizioni in base alle quali Grafana invierà l'avviso.
Per impostazione predefinita, il tipo di avviso selezionato è l'avviso gestito da Grafana. Fai clic sul menu a discesa per modificare l'intervallo di tempo in Ultimi 15 minuti, il che significa che verrà controllato da 15 minuti fa a adesso.
Condizioni
Grafana lavora su una query del seguente formato per determinare quando lanciare un avviso.
avg() OF query(A) IS BELOW 14
- avg() controlla come il valore di ciascuna serie deve essere ridotto a un valore comparabile rispetto alla soglia. È possibile fare clic sul nome della funzione per selezionare una funzione diversa come avg(), min(), max(), sum(), count(), ecc.
Puoi aggiungere una seconda condizione sotto di essa facendo clic sul pulsante + sotto la prima condizione. Attualmente, puoi utilizzare solo gli operatori AND e OR tra più condizioni.
Regola
- Nome: inserisci un nome descrittivo per l'avviso
- Cartella: crea o seleziona una cartella preesistente per archiviare la tua regola di notifica.
- Gruppo: inserisci un nome per il tuo gruppo di avvisi. Gli avvisi in un singolo gruppo vengono valutati dopo lo stesso intervallo di tempo.
- Valuta ogni: specifica la frequenza con cui Grafana deve valutare l'avviso. È anche chiamato intervallo di valutazione. Puoi impostare qualsiasi valore desideri qui.
Nessuna gestione dei dati e degli errori
Puoi configurare il modo in cui Grafana deve gestire le query che non restituiscono dati o solo valori nulli utilizzando le seguenti condizioni:
- Nessun dato: imposta lo stato della regola su
NoData
- Avviso - Imposta lo stato della regola su
Avviso
- Ok - Imposta lo stato della regola di avviso su Ok, in quanto riceverai un avviso anche se le cose vanno bene.
Puoi dire a Grafana come gestire gli errori di esecuzione o di timeout.
- Avviso - Imposta lo stato della regola su
Avviso
- Ok - Imposta lo stato della regola di avviso su Ok, in quanto riceverai un avviso anche se le cose vanno bene.
- Errore: imposta lo stato della regola di avviso su Errore per indicare che si è verificato un problema.
Al termine, fai clic sul pulsante Anteprima avvisi per vedere se tutto funziona correttamente. Fai clic sul pulsante Salva ed esci in alto a destra per completare l'aggiunta dell'avviso. Ora dovresti iniziare a ricevere avvisi sulla tua email.
Conclusione
Questo conclude il tutorial sull'installazione e la configurazione dello stack TIG su un server basato su Ubuntu 22.04. Se hai domande, pubblicale nei commenti qui sotto.