Ana içeriğe geç

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"