[MOD] DGA4132 - Modulo export dati per prometheus/Grafana

  • 17 Risposte
  • 7127 Visite

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline madmatt

  • Nuovo Iscritto
  • *
  • 12
Ciao a tutti, a questo link: https://github.com/mattiarossi/prometheus-node-exporter-lua-technicolor/tree/main/docker-compose
ho pubblicato un porting del modulo lua-prometheus di openwrt per DGA4132 (e in teoria tutti gli altri modem che usano il modulo transformer) per esportare metrics dell'apparato su Prometheus (https://prometheus.io/), un sistema di monitoraggio open source.

Il modem deve essere rooted, il modulo di export e' un servizio che deve essere abilitato da linea di comando.
Nel repository ho incluso:
  • Istruzioni per installare il modulo aggiuntivo
  • Un esempio di dashboard Grafana per visualizzare i dati
  • I file di configurazione usati da me per creare un istanza di Prometheus usando Docker e containers




Per chi volesse sperimentare con Prometheus e Grafana a questi link  https://www.intre.it/2019/12/12/prometheus-e-grafana-monitoraggio-microservizi/  e https://www.intre.it/2020/03/10/tutorial-prometheus-grafana/ potete trovare una spiegazione e tutorial semplice per iniziare
« Ultima modifica: 14 Aprile 2021, 07:40 da madmatt »

Offline putipower

  • Membro Anziano
  • ***
  • 284
Re:[MOD] DGA4132 - Modulo export dati per prometheus/Grafana
« Risposta #1 il: 14 Aprile 2021, 12:18 »
bello ma per chi come me non ha una conoscenza di base di Docker/docker-compose, Grafana e Prometheus è impossibile da installare.servirebbe una spiegazione più dettagliata
timhub 2.3.5 gui 9.6.96 su vodafone fttc

Offline madmatt

  • Nuovo Iscritto
  • *
  • 12
Re:[MOD] DGA4132 - Modulo export dati per prometheus/Grafana
« Risposta #2 il: 14 Aprile 2021, 13:26 »
Sfortunatamente l'architettura alla base e' un tantino complicata da realizzare da zero,
Come riferimento per iniziare questi mi sembrano dei buoni tutorial:
Installare docker su Ubuntu: https://www.cloud.it/tutorial/come-installare-docker-su-ubuntu-18-04.aspx
Gestire I container con docker: https://www.cloud.it/tutorial/come-gestire-i-container-docker-su-linux.aspx
Gestire applicazioni multi container con Docker-compose: https://www.intre.it/2020/07/30/docker-compose-gestione-applicazioni-multi-container/
« Ultima modifica: 14 Aprile 2021, 14:25 da MisterFTTH »

Offline fabiobassa

  • Esperto
  • ****
  • 728
  • Sesso: Maschio
Re:[MOD] DGA4132 - Modulo export dati per prometheus/Grafana
« Risposta #3 il: 14 Aprile 2021, 16:11 »
@madmatt

bellissima idea e grazie per aver condiviso. In effetti oggi come oggi si va moltissimo su docker e container vari.

La stessa cosa sai se esiste come semplice set di istruzioni python e pip ?
( ho installato home assistant su un arm sfruttando NON il docker che esiste gia fatto ma facendo un ambiente python e una sua home )

Offline madmatt

  • Nuovo Iscritto
  • *
  • 12
Re:[MOD] DGA4132 - Modulo export dati per prometheus/Grafana
« Risposta #4 il: 14 Aprile 2021, 16:51 »
@madmatt

La stessa cosa sai se esiste come semplice set di istruzioni python e pip ?
( ho installato home assistant su un arm sfruttando NON il docker che esiste gia fatto ma facendo un ambiente python e una sua home )

Una volta installato il servizio, le metrics vengono esposte sull'url http://lan_addrtess:9100/metrics
e l'output e' un semplice file di testo:
Citazione
# TYPE node_scrape_collector_duration_seconds gauge
# TYPE node_scrape_collector_success gauge
# TYPE node_nf_conntrack_entries gauge
node_nf_conntrack_entries 136
# TYPE node_nf_conntrack_entries_limit gauge
node_nf_conntrack_entries_limit 8256
node_scrape_collector_duration_seconds{collector="conntrack"} 0.0018301010131836
node_scrape_collector_success{collector="conntrack"} 1
# TYPE node_boot_time_seconds gauge
node_boot_time_seconds 1618165749
# TYPE node_context_switches_total counter
node_context_switches_total 300033298
# TYPE node_cpu_seconds_total counter
node_cpu_seconds_total{cpu="cpu0",mode="user"} 3353.73
node_cpu_seconds_total{cpu="cpu0",mode="nice"} 1.56
node_cpu_seconds_total{cpu="cpu0",mode="system"} 7680.3
node_cpu_seconds_total{cpu="cpu0",mode="idle"} 232327.19
node_cpu_seconds_total{cpu="cpu0",mode="iowait"} 1.42
node_cpu_seconds_total{cpu="cpu0",mode="irq"} 0
node_cpu_seconds_total{cpu="cpu0",mode="softirq"} 625.8
node_cpu_seconds_total{cpu="cpu0",mode="steal"} 0
node_cpu_seconds_total{cpu="cpu0",mode="guest"} 0
node_cpu_seconds_total{cpu="cpu0",mode="guest_nice"} 0
node_cpu_seconds_total{cpu="cpu1",mode="user"} 1734.78
node_cpu_seconds_total{cpu="cpu1",mode="nice"} 0.73
node_cpu_seconds_total{cpu="cpu1",mode="system"} 3622.03
node_cpu_seconds_total{cpu="cpu1",mode="idle"} 238915.86
node_cpu_seconds_total{cpu="cpu1",mode="iowait"} 1.26
node_cpu_seconds_total{cpu="cpu1",mode="irq"} 0
node_cpu_seconds_total{cpu="cpu1",mode="softirq"} 83.57
node_cpu_seconds_total{cpu="cpu1",mode="steal"} 0
node_cpu_seconds_total{cpu="cpu1",mode="guest"} 0
node_cpu_seconds_total{cpu="cpu1",mode="guest_nice"} 0

I programmi che consumano direttamente le metrics di un nodo singolo sono chiamati scrapers, su github ne ho trovato uno in java (https://github.com/jmazzitelli/prometheus-scraper) e uno in go (https://github.com/prometheus/prom2json)

Questo e' un output usando curl e filtrando per i valori di dsl_line
Citazione
imacpro-01:~ mattiarossi$ curl -s http://192.168.101.1:9100/metrics  | grep dsl_line_
# TYPE dsl_line_attenuation_db gauge
# TYPE dsl_line_info gauge
dsl_line_info{dsl_mode="VDSL2 Annex B",dsl_status="Showtime",dsl_profile="17a",dsl_type="VDSL2",dsl_version="A2pvfbH043q.d26u"} 1
dsl_line_attenuation_db{value="D0",direction="down"} 15.4
dsl_line_attenuation_db{value="D1",direction="down"} 38.4
dsl_line_attenuation_db{value="D2",direction="down"} 62
dsl_line_attenuation_db{value="U0",direction="up"} 4.3
dsl_line_attenuation_db{value="U1",direction="up"} 28.1
dsl_line_attenuation_db{value="U2",direction="up"} 44.5
dsl_line_attenuation_db{value="U3",direction="up"} 50.5

Lo stesso output usando prom2json:
Citazione
imacpro-01:~ mattiarossi$ curl -s http://192.168.101.1:9100/metrics  | grep dsl_line_ | go/bin/prom2json | jq
[
  {
    "name": "dsl_line_attenuation_db",
    "help": "",
    "type": "GAUGE",
    "metrics": [
      {
        "labels": {
          "direction": "down",
          "value": "D0"
        },
        "value": "15.4"
      },
      {
        "labels": {
          "direction": "down",
          "value": "D1"
        },
        "value": "38.4"
      },
      {
        "labels": {
          "direction": "down",
          "value": "D2"
        },
        "value": "62"
      },
      {
        "labels": {
          "direction": "up",
          "value": "U0"
        },
        "value": "4.3"
      },
      {
        "labels": {
          "direction": "up",
          "value": "U1"
        },
        "value": "28.1"
      },
      {
        "labels": {
          "direction": "up",
          "value": "U2"
        },
        "value": "44.5"
      },
      {
        "labels": {
          "direction": "up",
          "value": "U3"
        },
        "value": "50.5"
      }
    ]
  },
  {
    "name": "dsl_line_info",
    "help": "",
    "type": "GAUGE",
    "metrics": [
      {
        "labels": {
          "dsl_mode": "VDSL2 Annex B",
          "dsl_profile": "17a",
          "dsl_status": "Showtime",
          "dsl_type": "VDSL2",
          "dsl_version": "A2pvfbH043q.d26u"
        },
        "value": "1"
      }
    ]
  }
]


Offline madmatt

  • Nuovo Iscritto
  • *
  • 12
Re:[MOD] DGA4132 - Modulo export dati per prometheus/Grafana
« Risposta #5 il: 14 Aprile 2021, 17:02 »
rileggendo, non ho capito la domanda   :headbang:
su Linux si puo' installare prometheus senza usare docker, ma la procedura e' altrettanto complessa, e poi devi fare la stessa cosa per Grafana (piu' semplice, usa un rpm) .. per questo, di solito, si usa docker che si fa prima (per modo di dire..) avevo inteso la domanda come 'posso leggere lo stesso i dati in qualche modo senza usare tutto l'ambaradan di prometheus...)

Installare Prometheus su una vm: https://devopscube.com/install-configure-prometheus-linux/
Installare Grafana su una VM: https://grafana.com/docs/grafana/latest/installation/debian/

Offline fabiobassa

  • Esperto
  • ****
  • 728
  • Sesso: Maschio
Re:[MOD] DGA4132 - Modulo export dati per prometheus/Grafana
« Risposta #6 il: 14 Aprile 2021, 17:30 »
@madmatt

mi spiego meglio anche io: lavoro sul porting di linux COMPLETO su arm di fascia bassa/economica ( tvbox... ). Docker per arm non è maturo quanto per x86 o 64
Pero' ad esempio per homeassistant è bastato un
 
Codice: [Seleziona]
mkdir /srv/homeassistant
cd /srv/homeassistant
python3.5 -m venv .
source bin/activate
python3 -m pip install wheel
pip3 install homeassistant

e mi chiedevo se tu sapessi se per grafana e prometeus esistesse tale procedura alternativa a docker.

Offline madmatt

  • Nuovo Iscritto
  • *
  • 12
Re:[MOD] DGA4132 - Modulo export dati per prometheus/Grafana
« Risposta #7 il: 14 Aprile 2021, 18:08 »
c'e' una versione di prometheus per raspberry (quindi armv7 e anche armv6):
scaricabile da: https://github.com/prometheus/prometheus/releases

Se il tuo sistema embedded usa systemd, la procedura di installazione manuale e' (per armv7- raspberr):
Citazione
cd /home/pi
wget https://github.com/prometheus/prometheus/releases/download/v2.26.0/prometheus-2.26.0.linux-armv7.tar.gz
tar xfz prometheus-2.26.0.linux-armv7.tar.gz
mv prometheus-2.26.0.linux-armv7/ prometheus/

e relativo servizio systemd in /etc/systemd/system/prometheus.service
Citazione
[Unit]
Description=Prometheus Server
Documentation=https://prometheus.io/docs/introduction/overview/
After=network-online.target

[Service]
User=pi
Restart=on-failure

ExecStart=/home/pi/prometheus/prometheus \
  --config.file=/home/pi/prometheus/prometheus.yml \
  --storage.tsdb.path=/home/pi/prometheus/data

[Install]
WantedBy=multi-user.target

versione init.d:

Citazione
#!/bin/bash
#
# /etc/rc.d/init.d/prometheus
#
# Prometheus monitoring server
#
#  chkconfig: 2345 20 80 Read
#  description: Prometheus monitoring server
#  processname: prometheus

# Source function library.
. /etc/rc.d/init.d/functions

PROGNAME=prometheus
PROG=/home/pi/$PROGNAME
USER=prometheus
LOGFILE=/var/log/prometheus/prometheus.log
DATADIR=/var/data/prometheus
LOCKFILE=/var/run/$PROGNAME.pid
CONFIG_FILE=/etc/prometheus/prometheus.yml
ALERT_MGR_URL=localhost:9093

start() {
    echo -n "Starting $PROGNAME: "
    daemon --user $USER --pidfile="$LOCKFILE" "$PROG -config.file $CONFIG_FILE -storage.local.path $DATADIR -alertmanager.url $ALERT_MGR_URL &>$LOGFILE &"
    echo $(pidofproc $PROGNAME) >$LOCKFILE
    echo
}

stop() {
    echo -n "Shutting down $PROGNAME: "
    killproc $PROGNAME
    rm -f $LOCKFILE
    echo
}


case "$1" in
    start)
    start
    ;;
    stop)
    stop
    ;;
    status)
    status $PROGNAME
    ;;
    restart)
    stop
    start
    ;;
    reload)
    echo "Sending SIGHUP to $PROGNAME"
    kill -SIGHUP $(pidofproc $PROGNAME)
    ;;
    *)
        echo "Usage: <servicename> {start|stop|status|reload|restart}"
        exit 1
    ;;
esac

Una volta avviato il servizio (che usera' di default il file di config su /home/pi/prometheus/prometheus.yml), avrai la gui di prometheus su http://<IP>:9090 da dove potrai eseguire query e monitorare lo stato del servizio

La stessa procedura puo' essere seguita per grafana (binari armv6 e v7 ):
Citazione
wget https://dl.grafana.com/oss/release/grafana-7.5.4.linux-arm64.tar.gz
tar -zxvf grafana-7.5.4.linux-arm64.tar.gz

E poi  puoi lanciare direttamente grafana-server o crearti un servizio copiando i file di configurazione in /etc ..

« Ultima modifica: 14 Aprile 2021, 21:23 da madmatt »

Offline fabiobassa

  • Esperto
  • ****
  • 728
  • Sesso: Maschio
Re:[MOD] DGA4132 - Modulo export dati per prometheus/Grafana
« Risposta #8 il: 14 Aprile 2021, 18:31 »
@madmatt
grazie davvero tanto.
si usa systemd e adesso mi studio tutto

Offline frossie

  • Nuovo Iscritto
  • *
  • 23
Re:[MOD] DGA4132 - Modulo export dati per prometheus/Grafana
« Risposta #9 il: 18 Aprile 2021, 11:25 »
Ciao a tutti, a questo link: https://github.com/mattiarossi/prometheus-node-exporter-lua-technicolor/tree/main/docker-compose
ho pubblicato un porting del modulo lua-prometheus di openwrt per DGA4132 (e in teoria tutti gli altri modem che usano il modulo transformer) per esportare metrics dell'apparato su Prometheus (https://prometheus.io/), un sistema di monitoraggio open source.....

Grazie per lo spunto @madmatt ! Volevo provare a usare il nas che ha già attive le due istanze di prometheus e grafana.
Come devo configurare i file di configurazione di prometheus e grafana senza  usare quindi il docker composer ? mi dai una mano ?

per @Ansuel : sarebbe figo avere una dashboard grafica come grafana da  utilizzarsi nel router ...lo ritieni fattibile ?

Offline madmatt

  • Nuovo Iscritto
  • *
  • 12
Re:[MOD] DGA4132 - Modulo export dati per prometheus/Grafana
« Risposta #10 il: 18 Aprile 2021, 15:10 »
Ciao, se hai gia' prometheus installato ti basta prendere, dal file https://github.com/mattiarossi/prometheus-node-exporter-lua-technicolor/blob/main/docker-compose/prometheus/prometeus.yml , sezione relativa allo scraper per farlo puntare al tuo modem:

Citazione
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.

  - job_name: 'node_exporter_metrics_timhub'
    scrape_interval: 60s
    dns_sd_configs:
    - names:
      - 'timhub.local' ## QUesto e' il nome/indirizzo del modem
      type: 'A'
      port: 9100


per quanto riguarda grafana, invece, se hai gia' un datasource che punta a Prometheus, ti basta importare la dashboard copiando/incollando il json da qui: https://github.com/mattiarossi/prometheus-node-exporter-lua-technicolor/blob/main/grafana/technicolor-prometheus-openwrt-dashboard.json e dovrebbe funzionare ...

Se non hai ancora configurato un datasource che punta aprometheus, devi fare prima quello seguendo queste istruzioni: https://prometheus.io/docs/visualization/grafana/

Offline frossie

  • Nuovo Iscritto
  • *
  • 23
Re:[MOD] DGA4132 - Modulo export dati per prometheus/Grafana
« Risposta #11 il: 18 Aprile 2021, 18:37 »
grazie !  :clap:

Importando la generica openwrt funziona.

Importando invece il tuo json ho un po di errori (Panel-plugin not found:table-old ) e un po di dati a zero .  :help:




« Ultima modifica: 18 Aprile 2021, 18:45 da frossie »

Offline madmatt

  • Nuovo Iscritto
  • *
  • 12
Re:[MOD] DGA4132 - Modulo export dati per prometheus/Grafana
« Risposta #12 il: 18 Aprile 2021, 20:07 »
 Mi sa che hai una versione vecchia di Grafana, io ho esportato la dashboard da una 7.x


Offline madmatt

  • Nuovo Iscritto
  • *
  • 12
Re:[MOD] DGA4132 - Modulo export dati per prometheus/Grafana
« Risposta #13 il: 18 Aprile 2021, 20:10 »
Per i valori a zero, ti da' delle opzioni dei drop-down a inizio dashboard? Dovresti avere job=node_exporter_metrics, node=<nome del tuo host>, port=9100

Offline frossie

  • Nuovo Iscritto
  • *
  • 23
Re:[MOD] DGA4132 - Modulo export dati per prometheus/Grafana
« Risposta #14 il: 18 Aprile 2021, 21:57 »
Mi sa che hai una versione vecchia di Grafana, io ho esportato la dashboard da una 7.x
SI infatti ....6.4.3
L'ho riadattata un po ma ora è perfetta !

grazie !