IlPuntoTecnico
Hardware e Software => Connessioni ADSL/VDSL/FTTC => Topic aperto da: madmatt - 13 Aprile 2021, 23:52
-
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
(https://github.com/mattiarossi/prometheus-node-exporter-lua-technicolor/raw/main/grafana/technicolor-prometheus-openwrt-dashboard.png)
Per chi volesse sperimentare con Prometheus e Grafana a questi link https://www.intre.it/2019/12/12/prometheus-e-grafana-monitoraggio-microservizi/ (https://www.intre.it/2019/12/12/prometheus-e-grafana-monitoraggio-microservizi/) e https://www.intre.it/2020/03/10/tutorial-prometheus-grafana/ (https://www.intre.it/2020/03/10/tutorial-prometheus-grafana/) potete trovare una spiegazione e tutorial semplice per iniziare
-
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
-
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 (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 (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/ (https://www.intre.it/2020/07/30/docker-compose-gestione-applicazioni-multi-container/)
-
@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 )
-
@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:
# 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
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:
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"
}
]
}
]
-
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/ (https://devopscube.com/install-configure-prometheus-linux/)
Installare Grafana su una VM: https://grafana.com/docs/grafana/latest/installation/debian/ (https://grafana.com/docs/grafana/latest/installation/debian/)
-
@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
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.
-
c'e' una versione di prometheus per raspberry (quindi armv7 e anche armv6):
scaricabile da: https://github.com/prometheus/prometheus/releases (https://github.com/prometheus/prometheus/releases)
Se il tuo sistema embedded usa systemd, la procedura di installazione manuale e' (per armv7- raspberr):
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
[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:
#!/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 ):
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 ..
-
@madmatt
grazie davvero tanto.
si usa systemd e adesso mi studio tutto
-
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 ?
-
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:
# 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/
-
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:
(https://i.ibb.co/5hj33mb/Capture.png) (https://ibb.co/s9144n8)
-
Mi sa che hai una versione vecchia di Grafana, io ho esportato la dashboard da una 7.x
-
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
-
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 !
-
Come non detto @madmatt :'(
tutte le statistiche DSL (solo quelle DSL) vengono esportate dal router ma non aggiornate .
Esempio : il DSL uptime espresso in secondi rimane sempre quello fin quando non faccio il restart del node exporter sul router.
DSL uptime così come tutte le altre statistiche come il rapporto S/N , il max rate upload and download ecc...
All'inizio pensavo che fosse Grafana ma in realtà verificato sul modem i dati rimangono sempre quelli . :help:
Quale problema ci può essere secondo te ? di permessi su qualche file ?
Vedendo il tuo grafico sembra che a te funzioni regolarmente.
grazie !
-
:headbang: :headbang: :headbang:
aggiorna il codice, non avevo sincronizzato il codice tra il mio pc e Github ....
sorry
-
Ottimo ! Grazie. ora sembra andare tutto correttamente :clap: