Monitorizare
Alerte de monitorizare prin SMS, de pe telefonul tău: Uptime Kuma, Grafana, Zabbix și GitHub Actions
Alertele din Uptime Kuma, Grafana, Zabbix și GitHub Actions ajung la tine prin SMS, trimise de telefonul tău Android, de pe numărul tău, fără modem GSM.
Scris de NARBOWEB SRL, firma care dezvoltă SMSTunnel Publicat Actualizat 10 min de citit
Pornește videoclipul: Configurează SMSTunnel pe telefonul tău Android în 2 minute (1:34) Când pică site-ul magazinului sau se umple discul unui server, alerta contează doar dacă ajunge la cineva. Un SMS ajunge și atunci când un e-mail sau o notificare push se pierd, iar omul de gardă îl primește de la un număr pe care îl cunoaște și pe care îl poate suna înapoi.
Cu SMSTunnel, uneltele tale de monitorizare îi predau fiecare alertă contului tău SMSTunnel, iar telefonul tău Android o trimite de pe SIM-ul lui. Nu montezi niciun modem GSM pe server și nu ai un furnizor de SMS la mijloc: fiecare alertă e un SMS obișnuit din abonamentul tău de la operator. Mai jos configurăm patru unelte des folosite, Uptime Kuma, Grafana, Zabbix și GitHub Actions, plus o adresă de webhook pentru restul.
Înainte de toate: câte o cheie pentru fiecare unealtă
Instalează aplicația SMSTunnel din Google Play pe un telefon Android și autentifică-te; videoclipul de mai sus arată pașii. Apoi, în dashboard, deschide Apps → Add an app, alege Script or server, dă-i numele uneltei (de exemplu „Uptime Kuma”) și apasă Create the key. Copiază cheia imediat, pentru că e afișată o singură dată.
Fă câte o aplicație pentru fiecare unealtă. Dacă o cheie scapă din setările uneia, ștergi doar aplicația ei, iar celelalte trimit mai departe.
Toate cele patru unelte fac, de fapt, același apel: o cerere POST către endpoint-ul de trimitere, cu cheia în antetul X-API-Key și câte un singur număr pe cerere:
curl -X POST https://smstunnel.io/api/v1/sms/send \
-H "X-API-Key: sk_live_..." \
-H "Content-Type: application/json" \
-d '{"to": "+40712345678", "message": "Serverul web-01 nu răspunde"}'
Numerele se scriu în format internațional, cu +40 pentru România. Pentru doi oameni faci două cereri: fiecare primește propriul mesaj.
Uptime Kuma: notificarea Webhook, fără plugin
Uptime Kuma nu are nevoie de niciun plugin. Deschide Settings → Notifications → Set Up Notification, alege tipul Webhook, dă-i un nume ca „SMS către mine” și completează:
- Post URL:
https://smstunnel.io/api/v1/sms/send, cu HTTP Method POST, dacă versiunea ta afișează câmpul; - Request Body: Custom Body, cu numărul tău în
to; - Additional Headers: pornit, cu cheia ta.
{"to": "+40712345678", "message": {{ msg | json }}}
{"Content-Type": "application/json", "X-API-Key": "sk_live_..."}
Lasă {{ msg | json }} exact așa: pune textul alertei din Uptime Kuma în mesaj, cu ghilimelele de care are nevoie JSON-ul. Apasă Test, iar telefonul îți trimite <Friendly Name> Testing; o cheie greșită apare ca eroare 401, „Invalid or expired API key”. Apasă Save, apoi bifează notificarea în lista Notifications a fiecărui monitor sau folosește Default enabled și Apply on all existing monitors. Pentru mai mulți colegi, adaugi câte o notificare Webhook pentru fiecare număr.
Mesajele arată așa:
[My shop] [🔴 Down] timeout of 48000ms exceeded
[My shop] [✅ Up] 200 - OK
Un monitor care tot cade și revine trimite un mesaj de fiecare dată, așa că completează Retries, ca o scurtă întrerupere să nu fie raportată drept cădere.
Nu vrei nicio cheie în Uptime Kuma? Merge și cu o adresă de webhook: în dashboard deschide Aplicații → Webhook-uri → Webhook nou (în engleză: Apps → Webhooks → New webhook) și alege Uptime Kuma, care pune ca text al mesajului {{msg}}. Apoi pune adresa la Post URL, cu Request Body pe Preset - application/json și fără antete; o singură notificare trimite mesajul la toate numerele webhook-ului, până la 10. Ghidul pentru Uptime Kuma arată ambele variante.
Grafana: un contact point de tip webhook
În Grafana 12 sau mai nou, deschide Alerts & IRM → Alerting → Notification configuration → Contact points, apasă + Add contact point și alege integrarea Webhook. Pune la URL https://smstunnel.io/api/v1/sms/send. La Optional Webhook settings, alege HTTP Method POST și adaugă la Extra Headers o intrare numită X-API-Key, cu cheia ta ca valoare. Apoi lipește asta la Custom Payload → Payload Template:
{{ coll.Dict
"to" "+40712345678"
"message" (printf "%s %s" (tmpl.Exec "default.title" .) (index .Alerts 0).Annotations.summary)
| data.ToJSON }}
coll.Dict … | data.ToJSON scrie JSON-ul în locul tău, așa că ghilimelele sau semnele „:” dintr-o alertă nu-l pot strica. Lasă goale câmpurile Authorization și Basic Authentication, apasă Test, apoi Save contact point și alege-l într-o regulă de alertă sau în Notification policies. Un mesaj arată ca [FIRING:1] DiskFull nas1 Disk 95% full: /volume1, iar când alerta trece, apare din nou, cu [RESOLVED].
Două lucruri bune de știut. O alertă activă trimite din nou mesaj la fiecare repeat interval (implicit 4 ore) și încă o dată când se rezolvă, dacă nu bifezi Disable resolved message. Iar Grafana nu ascunde Extra Headers: oricine poate edita contact point-ul vede cheia, încă un motiv să-i dai Grafanei aplicația ei.
Și mai simplu, pe orice versiune de Grafana și pe Grafana Cloud: pune o adresă de webhook la URL-ul contact point-ului și lasă restul cum e, fără cheie și fără șablon de payload (vezi secțiunea despre webhook, mai jos). SMSTunnel citește direct JSON-ul alertelor din Grafana și trimite la numerele webhook-ului [FIRING] DiskFull - Disk 95% full: /volume1.
Zabbix: un tip de media în locul modemului GSM
SMS-ul inclus în Zabbix are nevoie de un modem GSM legat la un port serial al serverului. Tipul de media SMSTunnel are nevoie doar de HTTPS, așa că merge la fel pe un server fizic, într-o mașină virtuală, în Docker sau în cloud, pentru Zabbix 6.0 LTS, 7.0 LTS și versiunile mai noi. În Zabbix 6.0, unele meniuri sunt în altă parte: le găsești între paranteze.
- Descarcă media_smstunnel.yaml, sau media_smstunnel_6.0.yaml pentru Zabbix 6.0, și importă-l din Alerts → Media types → Import (6.0: Administration → Media types → Import).
- În Administration → Macros (6.0: Administration → General → Macros), adaugă
{$SMSTUNNEL.API.KEY}cu cheia ta și alege tipul Secret text, ca să fie ascunsă în interfață și lăsată afară din exporturi. - Apasă Test pe rândul SMSTunnel și pune numărul tău în
send_to. Fereastra de test nu completează macro-urile, așa că lipești cheia înapi_keydoar pentru acest test. - Dă-i fiecărui utilizator propriul număr: în Users → Users (6.0: Administration → Users) deschizi utilizatorul, apoi Media → Add, tipul SMSTunnel, cu numărul la Send to, în format internațional.
- În Alerts → Actions → Trigger actions (6.0: Configuration → Actions → Trigger actions), adaugă o operație care trimite către utilizatori sau grupuri de utilizatori, cu Send only to: SMSTunnel.

Tipul de media vine cu șabloane de mesaje scrise pentru ecranul unui telefon și taie textele la 320 de caractere. Șabloanele sunt în engleză, dar le poți rescrie în română din tab-ul Message templates al tipului de media; notează-ți textele înainte să imporți o versiune nouă, pentru că importul le înlocuiește:
PROBLEM: High CPU utilization (over 90% for 5m)
Host: web-01
Severity: High
Data: Current utilization: 97.3 %
Started: 2026.11.01 10:00:00
ID: 123456
Un moment aglomerat sau o scurtă întrerupere se reîncearcă vreo două minute (5 încercări, la 30 de secunde una de alta). Alertele le trimite doar serverul Zabbix, nu un proxy Zabbix, așa că el trebuie să ajungă la smstunnel.io pe portul 443.
GitHub Actions: un mesaj când publicarea eșuează
Salvează cheia ca secretul de depozit SMSTUNNEL_API_KEY (Settings → Secrets and variables → Actions). Într-un depozit public, salvează și numărul ca secret, de exemplu ALERT_PHONE, pentru că fișierele fluxurilor de lucru și jurnalele lor sunt publice. Apoi adaugă un pas care rulează doar când jobul eșuează:
- name: Trimite-mi un SMS dacă a eșuat
if: failure()
uses: narcisbodea/smstunnel-action@v1
with:
api-key: ${{ secrets.SMSTUNNEL_API_KEY }}
to: ${{ secrets.ALERT_PHONE }}
message: "Publicarea ${{ github.repository }} a eșuat la ${{ github.sha }}: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
Mai multe numere în to, despărțite prin virgule sau rânduri noi, primesc câte un mesaj fiecare (cel mult 30). GitHub nu dă secrete fluxurilor care rulează pentru pull request-uri din fork-uri sau pentru Dependabot, așa că sari peste pas în cazurile acelea și nu trece la pull_request_target ca să ocolești regula. Dacă un mesaj eșuat nu trebuie să oprească publicarea, adaugă continue-on-error: true. Ghidul pentru GitHub Actions are și exemple pentru lansări și joburi de noapte.
Restul uneltelor: o adresă de webhook
Unele unelte nu pot pune un antet sau propriul corp JSON. Pentru ele, SMSTunnel are webhook-uri: o adresă secretă care trimite mesaj la numerele salvate odată cu ea (de la 1 la 10, câte un mesaj fiecăruia). Apelul stabilește doar textul, niciodată numărul, așa că nu are nevoie de cheie, iar o adresă scăpată nu poate trimite mesaje altor numere.
O faci în dashboard: deschide Aplicații → Webhook-uri → Webhook nou (în engleză: Apps → Webhooks → New webhook), alege unealta care îl va apela (Grafana, Uptime Kuma, Healthchecks, Gatus, Alertmanager, Odoo Online sau Altceva), adaugă numerele, apasă Creează webhook-ul și copiază adresa. Dashboard-ul îți arată apoi pașii pentru unealta aleasă, cu adresa deja completată, și un buton care trimite o probă. Poți copia adresa din nou oricând, iar dacă ajunge unde nu trebuie, Adresă nouă o înlocuiește.
Merge un GET cu ?message= sau un POST cu un câmp message; textele sunt tăiate la 480 de caractere. Fiecare webhook primește implicit 20 de apeluri pe oră (până la 500), iar limita numără apelurile, nu mesajele: fiecare apel trimite mesajul la toate numerele webhook-ului. Alertele din Prometheus Alertmanager și Grafana sunt citite fără niciun șablon; pentru Uptime Kuma, când îl alegi, textul devine {{msg}}, ca numele monitorului să nu apară de două ori. De exemplu, un rând de crontab:
0 3 * * * /opt/backup.sh || curl -s -X POST https://smstunnel.io/api/v1/webhook/<token> -H 'Content-Type: application/json' -d '{"message":"Copia de siguranță de azi-noapte a eșuat"}'
Scripturile pot face webhook-uri și prin API; ghidul despre webhook-uri arată cum. Există ghiduri gata făcute pentru Prometheus Alertmanager, Healthchecks.io, Gatus și Odoo Online, iar cu o cheie, pentru Proxmox și Synology.
Limite bune de știut
- 30 de cereri de trimitere pe minut. Peste ele, SMSTunnel răspunde cu 429, iar fiecare unealtă notează eroarea sau reîncearcă. Grupează alertele, ca o avalanșă să devină un singur mesaj.
- Lungimea. Un mesaj poate avea până la 1600 de caractere. Un emoji face ca un SMS să cuprindă 70 de caractere în loc de 160, iar Uptime Kuma pune câte unul în fiecare alertă, așa că o alertă mai lungă pleacă în mai multe părți unite.
- Telefonul trebuie să fie pornit și online. Dacă nu e, mesajul așteaptă în contul tău și pleacă atunci când telefonul revine, timp de până la 3 zile. Dacă o alertă nu are voie să depindă de un telefon pornit și online, pentru ea se potrivește mai bine un furnizor de API SMS.
- Planurile. Planul Gratuit include 25 de mesaje pe zi și 500 pe lună, trimise exact cum le-ai scris, plus până la 25 în plus pe zi, care se încheie cu un scurt rând „free by smstunnel.io”. Starter (9 $ pe lună, fără taxe) permite 300 pe zi, Standard (19 $) 2.000, iar Profesional (39 $) nu are limită zilnică.
Întrebări frecvente
Am nevoie de un modem GSM sau de un furnizor de SMS?
Nu. Mesajele pleacă de pe telefonul tău, din abonamentul pe care îl plătești deja, de la un număr pe care oamenii îl recunosc.
Pot primi mai mulți colegi aceeași alertă?
Da, fiecare propriul mesaj: câte o notificare în Uptime Kuma, o integrare în Grafana sau o intrare Media în Zabbix pentru fiecare număr, până la 30 de numere în to, în acțiunea pentru GitHub, ori o singură adresă de webhook cu până la 10 numere.
Unde țin cheia?
Acolo unde o pot citi doar administratorii: în macro-ul de tip Secret text din Zabbix, într-un secret de depozit GitHub, în setările de notificare din Uptime Kuma sau Grafana. Dacă ștergi aplicația uneltei din dashboard, unealta nu mai poate trimite nimic, din acel moment.
Vezi și
Alte articole
Încearcă-l cu telefonul tău
Instalează aplicația Android, autentifică-te, iar software-ul tău poate trimite primul mesaj în câteva minute. Planul Gratuit nu cere card bancar.