Raspberry Pi Grafana InfluxDB yığını, aylarca süren sensör geçmişini kontrolünüzdeki küçük ve sessiz bir bilgisayarda tutmanın en pratik yollarından biridir. Bu eğitimde 64 bit bir Raspberry Pi üzerine InfluxDB 2, Telegraf ve Grafana kuracak, Telegraf'ın bir MQTT broker'a abone olmasını sağlayacak ve yeni okumalar geldikçe güncellenen bir Grafana paneli oluşturacaksınız. Her komut ve yapılandırma dosyası eksiksizdir; böylece sıfırdan kurulmuş bir Pi üzerinde adım adım ilerleyebilirsiniz.
Mimari: Kim Kiminle Konuşuyor
Herhangi bir şey kurmadan önce veri yolunu netleştirmek faydalıdır, çünkü kurulumların çoğu tam da burada ters gider:
- Sensörler (ESP32 kartları, Pico W düğümleri, diğer Pi'ler) bir MQTT broker'a JSON yayınlar.
- Pi üzerindeki Telegraf, bu broker'a sıradan bir MQTT istemcisi olarak bağlanır, sensör topic'lerine abone olur ve JSON'u ayrıştırır.
- Telegraf, ayrıştırılan alanları aynı Pi üzerindeki bir InfluxDB 2 bucket'ına yazar.
- Grafana, InfluxDB'yi sorgular ve panelleri çizer.
Broker'ın kendisi bir veritabanına yazmaz. Yalnızca mesajları yönlendirir. Bu rolü tazelemek isterseniz bir MQTT broker'ın ne yaptığını okuyun. Burada broker bulutta yaşar; bu da başka binalardaki sensörlerin ona yayın yapabileceği, Pi'nizin ise yalnızca dışa doğru bir bağlantıya ihtiyaç duyacağı anlamına gelir. Port yönlendirme yok, dinamik DNS yok.
| Bileşen | Rol | Pi üzerindeki varsayılan port |
|---|---|---|
| MQTT broker (bulut) | Sensör mesajlarını alır ve yönlendirir | Pi üzerinde yok |
| Telegraf | MQTT abonesi ve JSON ayrıştırıcı | Yok (yalnızca dışa doğru) |
| InfluxDB 2 | Zaman serisi depolama | 8086 |
| Grafana | Paneller ve uyarı arayüzü | 3000 |
Gereksinimler
- En az 2 GB RAM'e sahip Raspberry Pi 4 veya 5. Bir Pi 3 çok hafif yükler için çalışabilir ama sınırda kalır.
- Raspberry Pi OS 64 bit (Bookworm). InfluxDB 2 paketleri arm64 için derlenmiştir, bu yüzden 32 bit imaj işe yaramaz.
- USB 3 üzerinden bir SSD şiddetle tavsiye edilir. Zaman serisi veritabanları sürekli yazar ve SD kartlar yıpranır.
- MQTT üzerinden zaten yayın yapan bir sensör. Yoksa, Raspberry Pi sistem istatistikleri eğitimi Pi'nin kendisini beş dakikada bir veri kaynağına dönüştürür.
Önce mimariyi doğrulayın:
uname -m # should print aarch64
cat /etc/os-release | grep VERSION_CODENAME
InfluxDB 2 ve Telegraf'ı Kurun
Her ikisi de InfluxData paket deposundan gelir. İmzalama anahtarını ve depoyu ekleyin, ardından kurun:
sudo apt update && sudo apt install -y curl gpg
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://repos.influxdata.com/influxdata-archive.key \
| sudo gpg --dearmor -o /etc/apt/keyrings/influxdata-archive.gpg
echo "deb [signed-by=/etc/apt/keyrings/influxdata-archive.gpg] https://repos.influxdata.com/debian stable main" \
| sudo tee /etc/apt/sources.list.d/influxdata.list
sudo apt update
sudo apt install -y influxdb2 influxdb2-cli telegraf
sudo systemctl enable --now influxdb
Tek seferlik kurulumu çalıştırın. Bu adım organizasyonu, ilk bucket'ı ve yönetici kullanıcıyı oluşturur. SD kartınızın veya SSD'nizin kapasitesine uygun bir saklama süresi seçin; oda sensörleri için 90 gün makul bir başlangıç noktasıdır.
influx setup \
--org home \
--bucket sensors \
--username admin \
--password 'change-this-long-password' \
--retention 90d \
--force
Şimdi yönetici token'ını yeniden kullanmak yerine Telegraf için özel bir token oluşturun. En az yetki ilkesi ev ağında bile önemlidir:
influx auth create --org home --read-buckets --write-buckets \
--description "telegraf writer"
Çıktıdaki token'ı kopyalayın. Bir sonraki adımda onu Telegraf yapılandırmasına koyacaksınız.
Telegraf'ı MQTT'ye Abone Olacak Şekilde Yapılandırın
Telegraf devasa bir örnek yapılandırmayla gelir. Tam olarak ne yaptığını görebilmek için onu odaklı bir yapılandırmayla değiştirin. Benzersiz bir client ID ve benzersiz bir topic öneki kullanın; test sırasında broker.connectmq.com adresindeki genel MQTT test broker'ı hesap gerektirmeden çalışır.
sudo mv /etc/telegraf/telegraf.conf /etc/telegraf/telegraf.conf.sample
sudo nano /etc/telegraf/telegraf.conf
[agent]
interval = "10s"
flush_interval = "10s"
omit_hostname = true
[[inputs.mqtt_consumer]]
servers = ["tcp://broker.connectmq.com:1883"]
client_id = "telegraf-pi-4b21c9"
topics = ["connectmq/demo/4b21c9/+/climate"]
qos = 1
persistent_session = false
data_format = "json_v2"
[[inputs.mqtt_consumer.topic_parsing]]
topic = "connectmq/demo/4b21c9/+/climate"
tags = "_/_/_/room/_"
[[inputs.mqtt_consumer.json_v2]]
measurement_name = "climate"
[[inputs.mqtt_consumer.json_v2.field]]
path = "t"
rename = "temperature"
type = "float"
[[inputs.mqtt_consumer.json_v2.field]]
path = "rh"
rename = "humidity"
type = "float"
[[outputs.influxdb_v2]]
urls = ["http://127.0.0.1:8086"]
token = "PASTE_THE_TELEGRAF_TOKEN_HERE"
organization = "home"
bucket = "sensors"
topic_parsing bloğu, dördüncü topic seviyesini bir room etiketine dönüştürür; böylece connectmq/demo/4b21c9/kitchen/climate üzerindeki bir mesaj room=kitchen etiketli bir noktaya dönüşür. Etiketler InfluxDB'de indekslenir ve bu da oda bazlı sorguları hızlandırır. Daha fazla ayrıştırıcı seçeneği için Telegraf MQTT consumer rehberine bakın.
Servisi başlatın ve günlüğünü izleyin. Telegraf bağlantı ve ayrıştırma hatalarını oraya yazar; bu, tahmin yürütmekten çok daha kolaydır:
sudo systemctl enable --now telegraf
sudo journalctl -u telegraf -f
Herhangi bir makineden test okuması yayınlayın:
mosquitto_pub -h broker.connectmq.com -p 1883 -i tester-4b21c9 -q 1 \
-t connectmq/demo/4b21c9/kitchen/climate \
-m '{"t":21.7,"rh":48.2}'
Ardından noktanın yerine ulaştığını doğrulamak için InfluxDB'yi doğrudan sorgulayın:
influx query --org home \
'from(bucket:"sensors") |> range(start:-10m) |> filter(fn:(r) => r._measurement == "climate")'
room=kitchen içeren satırlar görüyorsanız, veri alma yarısı tamamdır.
Grafana'yı Raspberry Pi'ye Kurun
Grafana kendi arm64 deposunu yayınlar:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://apt.grafana.com/gpg.key \
| sudo gpg --dearmor -o /etc/apt/keyrings/grafana.gpg
echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" \
| sudo tee /etc/apt/sources.list.d/grafana.list
sudo apt update
sudo apt install -y grafana
sudo systemctl enable --now grafana-server
http://<pi-ip>:3000 adresini açın, admin / admin ile giriş yapın ve istendiğinde yeni bir parola belirleyin.
Grafana'yı InfluxDB'ye Bağlayın
Grafana'da Connections, Data sources, Add data source, InfluxDB yolunu izleyin, ardından:
- Query language değerini Flux olarak ayarlayın.
- URL:
http://localhost:8086. - InfluxDB Details altında Organization'ı
homeyapın, bir token yapıştırın (en az yetki içininflux auth create --org home --read-bucketsile salt okunur bir token oluşturun) ve Default Bucket'ısensorsolarak ayarlayın. - Save and test'e tıklayın. Bildirilen bucket sayısını görmelisiniz.
Raspberry Pi Grafana InfluxDB Paneli Oluşturun
Yeni bir panel oluşturun, bir Time series paneli ekleyin ve şu Flux sorgusunu yapıştırın:
from(bucket: "sensors")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r._measurement == "climate" and r._field == "temperature")
|> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
|> yield(name: "temperature")
room bir etiket olduğu için Grafana her oda için otomatik olarak bir çizgi çizer. Pi üzerinde gerçek fark yaratan birkaç panel tercihi:
aggregateWindowkullanın. O olmadan 30 günlük bir aralık her ham noktayı çeker ve Pi zorlanır. Onunla Grafana yalnızca panelin gösterebileceği kadar nokta ister.- Panel yenileme süresini 30 saniye veya daha fazla yapın. Daha hızlı yenilemeler, yavaş değişen veriler için Pi'de çoğunlukla boşuna CPU harcar.
- Her odadaki güncel sıcaklık için
meanyerinelast()kullanan bir Stat paneli ekleyin. - Grafana uyarılarını ölçülü kullanın. Pi üzerinde değerlendirilirler, bu yüzden değerlendirme aralığını makul tutun.
Veritabanını atlayıp canlı MQTT değerlerini doğrudan grafiğe dökmeyi tercih ederseniz, Grafana MQTT veri kaynağı rehberi bu yaklaşımı gösterir. Daha basittir ama geçmiş tutmaz.
Broker'ı Özel Kimlik Bilgilerine Taşıma
Genel test broker'ı herkes tarafından okunabilir; bu yüzden üretimdeki sensörler özel bir broker'a yayın yapmalıdır. Bir bulut MQTT broker olan ConnectMQ ile portalda bir broker oluşturur ve bir kullanıcı adı, parola ve client ID alırsınız. telegraf.conf içinde üç şeyi değiştirin:
[[inputs.mqtt_consumer]]
servers = ["ssl://broker.connectmq.com:8883"]
client_id = "YOUR_CLIENT_ID"
username = "YOUR_USERNAME"
password = "YOUR_PASSWORD"
topics = ["home/+/climate"]
qos = 1
data_format = "json_v2"
ConnectMQ bir Let's Encrypt sertifikası kullanır; böylece Pi'nin sistem CA paketi onu doğrular ve tls_ca satırına gerek kalmaz. Client ID'lerin verilen kimlik bilgilerine bağlı olduğunu unutmayın: Telegraf'ın ve her sensörün kendi client ID'si olmalıdır. topic_parsing ayarını yeni topic yapınıza uyacak şekilde güncelleyin.
Böylece sorumluluklar temiz biçimde ayrılır: ConnectMQ her cihaz için bağlantı, kimlik doğrulama ve yönlendirmeyi üstlenir; Pi ise saklamak istediğiniz verilerin depolanması ve görselleştirilmesiyle ilgilenir. ConnectMQ, retained mesajlar dışında mesaj geçmişi saklamaz; bu nedenle uzun vadeli veriler için doğru yer InfluxDB'dir.
Yığını Sağlıklı Tutmak
| Sorun | Neden | Çözüm |
|---|---|---|
Telegraf günlüğünde not authorized görünüyor |
Yanlış kimlik bilgileri veya client ID | Üçünü de portaldan yeniden kopyalayın |
| InfluxDB'de nokta yok, hata da yok | Topic filtresi eşleşmiyor | topics değerini canlı bir mosquitto_sub ile karşılaştırın |
| Noktalar geliyor ama alanlar eksik | json_v2 yolu veya tipi yanlış |
Alan adlarını ve type değerini kontrol edin |
| Grafana panelleri uzun aralıklarda yavaş | Toplama (aggregation) yok | aggregateWindow ekleyin |
| SD kart aylar sonra bozuldu | Sürekli yazma | InfluxDB verilerini bir SSD'ye taşıyın |
| Disk doluyor | Saklama süresi çok uzun | influx bucket update --retention 30d |
Hem InfluxDB'yi (influx backup /path/to/backup) hem de /var/lib/grafana/grafana.db dosyasını düzenli olarak yedekleyin. Bir akşamınızı ayarlamaya harcadığınız bir paneli kaybetmek, bir haftalık sıcaklık verisini kaybetmekten daha can sıkıcıdır.
ConnectMQ ile Başlayın
Sensörlerinizi ve Telegraf'ı dakikalar içinde özel bir broker'a yönlendirin: app.connectmq.com adresinden kaydolun, ücretsiz Serverless planı seçin (kredi kartı gerekmez) ve oluşturulan kimlik bilgilerini kopyalayın. Pi serisinin geneli için Raspberry Pi MQTT eğitimi ile başlayın; container tercih ediyorsanız Raspberry Pi üzerinde IOTstack rehberine göz atın.
Sık Sorulan Sorular
InfluxDB doğrudan MQTT'ye abone olabilir mi?
InfluxDB 2 OSS tek başına bunu yapamaz. Standart köprü Telegraf'ın mqtt_consumer girişidir ve aynı Pi üzerinde düşük bellek tüketimiyle sorunsuz çalışır.
Bu, 32 bit Raspberry Pi OS üzerinde çalışır mı?
InfluxDB 2 64 bit bir işletim sistemi gerektirir, bu yüzden arm64 imajını kullanın. Grafana ve Telegraf'ın 32 bit sürümleri vardır, ancak sınırlayıcı parça veritabanıdır.
Bir Raspberry Pi, InfluxDB'de ne kadar veri saklayabilir?
Bu, kaç seri olduğuna, ne sıklıkla raporladıklarına ve diskinize bağlıdır. Her on saniyede bir raporlayan birkaç sensör hafif bir yüktür; büyümenin sınırlı kalması için bir SSD ve bir saklama politikası kullanın.
Grafana, InfluxDB olmadan MQTT okuyabilir mi?
Evet, MQTT veri kaynağı eklentisiyle canlı değerleri gösterebilir, ancak geçmişi ve toplamayı kaybedersiniz. Günler veya aylar boyunca eğilimlere ihtiyaç duyduğunuzda InfluxDB kullanın.



