Ana içeriğe geç

MQTT Mesaj Gelmiyor

Semptomlar

  • Dashboard'da canli veri gorunmuyor, tum widget'lar "Veri Yok" gosteriyor
  • WebSocket baglantisi basarili (yesildi) ama sensor degerleri guncellenmiyor
  • Yeni eklenen cihazlardan hic veri gelmiyor
  • Belirli bir tenant'in tum cihazlarinda veri kesintisi

Olasi Sebepler

  1. EMQX broker cokmus veya yanit veremiyor
  2. ACL kurallari degismis, topic'lere erisim engellenmis
  3. ESP32 cihazlar MQTT broker'a baglanamıyor (TLS/credential sorunu)
  4. Backend subscriber MQTT mesajlarini islemiyor
  5. Nginx/reverse proxy WebSocket baglantisini kesiyor
  6. DNS veya ag sorunu broker adresine ulasilamiyor

Teshis Adimlari

1. EMQX Broker Durumunu Kontrol Et

# EMQX container'inin calisip calismadigini kontrol et
docker compose ps emqx

# EMQX loglarini incele (son 100 satir)
docker logs --tail 100 emqx

# EMQX node durumunu kontrol et
docker exec emqx emqx_ctl status

# EMQX cluster durumunu kontrol et
docker exec emqx emqx_ctl cluster status

2. EMQX Dashboard Kontrolu

# EMQX dashboard'a erisimi test et (port 18083)
curl -s -o /dev/null -w "%{http_code}" http://localhost:18083/api/v5/status

# Bagli client sayisini kontrol et
curl -s -u admin:public http://localhost:18083/api/v5/clients?limit=10 | python3 -m json.tool

3. MQTT Mesaj Akisini Test Et

# mosquitto_sub ile belirli bir topic'i dinle
# Topic pattern: zeus/{tenant_id}/{gateway_id}/{device_id}/{data_type}
mosquitto_sub -h localhost -p 1883 -t "zeus/#" -v --cafile /path/to/ca.crt

# TLS ile baglanti testi
mosquitto_sub -h localhost -p 8883 -t "zeus/#" -v \
--cafile /path/to/ca.crt \
--cert /path/to/client.crt \
--key /path/to/client.key

# Test mesaji gonder
mosquitto_pub -h localhost -p 1883 -t "zeus/test/ping" -m '{"test": true, "ts": "'$(date -u +%Y-%m-%dT%H:%M:%SZ)'"}'

4. Backend Subscriber Loglarini Kontrol Et

# Backend container loglarinda MQTT ile ilgili satirlari filtrele
docker logs --tail 200 zeus-backend 2>&1 | grep -i "mqtt"

# MQTT client baglanti durumunu kontrol et
docker logs --tail 200 zeus-backend 2>&1 | grep -i "connect\|disconnect\|subscribe"

5. Ag ve Port Kontrolu

# MQTT portlarinin acik oldugunu dogrula
# 1883: MQTT, 8883: MQTTS, 8083: WS, 8084: WSS
ss -tlnp | grep -E "1883|8883|8083|8084"

# Container icinden broker'a erisimi test et
docker exec zeus-backend python3 -c "
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
result = s.connect_ex(('emqx', 1883))
print('MQTT port 1883:', 'ACIK' if result == 0 else 'KAPALI')
s.close()
"

Cozum Adimlari

EMQX Restart

# EMQX container'ini yeniden baslat
docker compose restart emqx

# Basladiktan sonra durumu dogrula
docker compose ps emqx
docker exec emqx emqx_ctl status

ACL Kurallarini Kontrol Et ve Duzelt

# EMQX ACL dosyasini kontrol et
docker exec emqx cat /opt/emqx/etc/acl.conf

# ACL cache'ini temizle
docker exec emqx emqx_ctl acl cache-clean all

# Belirli bir client'in ACL durumunu test et
docker exec emqx emqx_ctl acl check clientid <client_id> publish "zeus/{tenant_id}/#"

TLS Sertifika Kontrolu

# Sertifika gecerlilik tarihini kontrol et
openssl x509 -in /path/to/server.crt -noout -dates

# TLS baglantisini test et
openssl s_client -connect localhost:8883 -CAfile /path/to/ca.crt

# Sertifika zincirini dogrula
openssl verify -CAfile /path/to/ca.crt /path/to/server.crt

ESP32 Baglanti Durumu Kontrolu

# EMQX uzerinden bagli ESP32 cihazlarini listele
curl -s -u admin:public http://localhost:18083/api/v5/clients \
| python3 -c "
import json, sys
data = json.load(sys.stdin)
for c in data.get('data', []):
print(f\"{c['clientid']:30} {c['connected']:6} {c.get('ip_address','?'):15}\")
"

# Belirli bir cihazin baglanti gecmisini kontrol et
curl -s -u admin:public "http://localhost:18083/api/v5/clients?clientid=zeus-gw-{gateway_id}" \
| python3 -m json.tool

Backend MQTT Client'i Yeniden Baglat

# Backend container'ini yeniden baslat (MQTT subscriber dahil)
docker compose restart backend

# Sadece MQTT subscriber worker'ini yeniden baslat (eger ayri ise)
docker compose restart mqtt-subscriber

Eskalasyon

Asagidaki durumlarda DevOps ekibine eskalasyon yapin:

  • EMQX cluster tamamen cokmus ve restart ile duzelmiyorsa
  • TLS sertifikalari suresi dolmus ve yenilenmesi gerekiyorsa
  • Ag duzeyinde MQTT portlarina erisim engellenmisse (firewall degisikligi)
  • Veri kaybi suphesi varsa (mesajlar broker'a ulasiyor ama backend'e iletilmiyor)
  • Sorun 30 dakikadan fazla suruyorsa ve yukaridaki adimlar ise yaramadiysa