Asterisk esporta le metriche nel formato di Prometheus dalla versione 17.0.0. In questo articolo vediamo brevemente quali metriche esporta e come configurare un job di Prometheus per raccoglierle.
Setup: Asterisk e Prometheus in Docker
Impostiamo un progetto minimale:
asterisk-prometheus/├── compose.yaml├── asterisk/│ ├── http.conf│ └── prometheus.conf└── prometheus/ └── prometheus.ymlDocker Compose
Asterisk non ha un'immagine Docker ufficiale. Per la nostra demo usiamo l'ottima andrius/asterisk, che pubblica le build di Asterisk su varie distribuzioni. Non tutti i tag includono res_prometheus: noi usiamo il tag 22.11.0_debian-trixie (Asterisk 22 LTS su Debian 13).
services: asterisk: image: andrius/asterisk:22.11.0_debian-trixie volumes: - ./asterisk/http.conf:/etc/asterisk/http.conf:ro - ./asterisk/prometheus.conf:/etc/asterisk/prometheus.conf:ro ports: - "8088:8088" prometheus: image: prom/prometheus:v3.13.4 volumes: - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro ports: - "9090:9090" depends_on: - asteriskConfigurazione di Asterisk
Asterisk espone le metriche attraverso il suo server HTTP integrato, che di default è disabilitato. Per abilitarlo bisogna cambiare alcune righe in http.conf:
[general]enabled = yesbindaddr = 0.0.0.0bindport = 8088Per abilitare l'exporter di Asterisk si modifica invece prometheus.conf:
[general]enabled = yesuri = metrics; core_metrics_enabled = yesuri è il percorso da cui vengono esposte le metriche, nel nostro caso http://<host>:8088/metrics. Con core_metrics_enabled si aggiungono alcune metriche sul processo stesso: uptime, tempo trascorso dall'ultimo reload…
Configurazione di Prometheus
Nella configurazione di Prometheus serve un job che punti al container:
global: scrape_interval: 15sscrape_configs: - job_name: asterisk static_configs: - targets: ["asterisk:8088"]Verifica del risultato
Per avviare lo stack:
$ docker compose up -dPer leggere le metriche in tempo reale:
$ curl -s localhost:8088/metricsasterisk_channels_count{eid="82:57:d5:8c:07:a7"} 0asterisk_calls_sum{eid="82:57:d5:8c:07:a7"} 0asterisk_calls_count{eid="82:57:d5:8c:07:a7"} 0asterisk_endpoints_count{eid="82:57:d5:8c:07:a7"} 0asterisk_bridges_count{eid="82:57:d5:8c:07:a7"} 0asterisk_core_properties{eid="82:57:d5:8c:07:a7",version="22.11.0",...} 1asterisk_core_uptime_seconds{eid="82:57:d5:8c:07:a7"} 2asterisk_core_last_reload_seconds{eid="82:57:d5:8c:07:a7"} 2asterisk_core_scrape_time_ms{eid="82:57:d5:8c:07:a7"} 0...All'indirizzo http://localhost:9090/targets il job asterisk dovrebbe risultare UP.



