IoT Görselleştirme Güncellemesi
Bir önceki yazıda IoT görselleştirmenin nasıl yapılabileceğini yazmıştım. Öncesinde InfluxDB kullanıp memnun kaldım ancak tekrar kurmak istediğimde Grafana ile InfluxDB 2.0 plugini yeterince düzgün çalışmadı. Özetle InfluxDB 2.0 FluxQL aldı bir dile geçmiş ve burada kendi dili ile sorgu yapmamız gerekiyor. Bu da metrikleri Grafana'dan SQL tarzında seçmenize engel oluyor. Metrikleri Grafana browser ile seçmeyi tercih ettiğimden InfluxDB katmanını Graphite ile değiştirdim.
Kullandığım telegraf.conf
dosyasında çok bir değişikliğe gitmeye gerek kalmadı. Sadece outputs
kısmını InfluxDB'den Graphite'a çevirdim ve Docker ile Graphite çalıştırdım.
Docker ile Graphite¶
Graphite çalıştırırken konfigürasyon ve data dizinlerini volume olarak bağlamak işinize yarayacaktır. Bunun için Graphite'ı çalıştırmak için aşağıdaki komutu kullanıyorum:
#!/bin/bash
docker run -d --name graphite --restart=always \
-p 80:80 -p 2003-2004:2003-2004 -p 2023-2024:2023-2024 \
-p 8125:8125/udp -p 8126:8126 \
-v /graphite/conf:/opt/graphite/conf -v /graphite/data:/opt/graphite/storage \
-v /graphite/statsd_config:/opt/statsd/config \
graphiteapp/graphite-statsd
Graphite dizini
Docker komutunu çalıştırmadan önce kök dizinde /graphite dizininin oluşturulmuş olduğundan emin olun. Dilerseniz başka bir dizin de kullanabilirsiniz ancak ben bu şekilde kullanmayı tercih ettim.
Telegraf Konfigürasyonu¶
ESP8266 ile ESPHome tarafından gönderilen
metrikleri MQTT sunucusundan alan ve Graphite'a gönderen konfigürasyon aşağıda. Kısa olması
açısından yorum satırlarını kaldırdım. Tüm bir telegraf konfigürasyonu edinmek ve yorum satırlarını
görmek isterseniz telegraf config
komutunu kullanabilirsiniz, size öntanımlı konfigürasyonu
verecektir.
[agent]
interval = "10s"
round_interval = true
metric_batch_size = 1000
metric_buffer_limit = 10000
collection_jitter = "0s"
flush_interval = "10s"
flush_jitter = "0s"
precision = ""
debug = false
quiet = false
logtarget = "file"
logfile = "/var/log/telegraf/telegraf.log"
logfile_rotation_interval = "0d"
logfile_rotation_max_size = "200MB"
logfile_rotation_max_archives = 1
hostname = ""
omit_hostname = false
[[inputs.mqtt_consumer]]
servers = ["tcp://127.0.0.1:1883"]
topics = ["+/sensor/#"]
username = "mqttuser"
password = "mqttpassword"
# Bu kısmı önemli. Data format ve type olarak bu değerleri
# vermediğimizde telegraf MQTT değerlerini okuyamıyor.
data_format = "value"
data_type = "float"
[[outputs.graphite]]
servers = ["localhost:2003"]
prefix = ""
template = "host.tags.measurement.field"
timeout = "2s"