Grafana Dashboard’a Filtre Eklenmesi

Yunus Emre Demir
3 min readApr 7, 2021

--

Kullanılan Program sürümleri

influxDB 2.0 ve Grafana v 7.5.2

Geçen yazıda Telegraf, influxDB ve Grafana üzerinde, pc bilgilerini toplayan bir uygulama geliştirmiştik. Şimdi “Veriler görselleştirilirken Dashboard ekranında bir filtreleme yapılabilir mi?” konusunu inceleyeceğiz.

CPU diye bir grafik oluşturuldu bu grafiğin FLUX sorgusu aşağıdaki gibidir.

from(bucket: “pc-inf”)

|> range(start: v.timeRangeStart, stop: v.timeRangeStop)

|> filter(fn: (r) => r[“_measurement”] == “win_cpu”)

|> yield(name: “mean”)

Bu sorgu sonucu birçok değişken aynı grafikte iç içe geçti. Burada istenilen dashboard ekranın üst tarafında bir filtre olsun bu filtre vasıtasıyla grafik üzerinde istenilen görselin seçimi yapılabilsin. Bu doğrultuda kullanılması gereken kısım Variable kısmıdır.

Sağ üst köşeden ayarlar bölümüne gidilir.
Variables kısmına gidilir. Add Variable ile yeni bir variable oluşturulur.

Type: Query seçilir. Bir Name verilir. Data source kısmından hangi DB ile çalışıyorsanız onu seçmeniz lazım. Daha sonra almak istediğimiz bilgilerin FLUX sorgusunu yazıyoruz.

FLUX sorguları için influxDB’nin kendi sayfasına bakmalıyız. İlgili sayfada şema bilgilerine ait sorgu çeşitleri bulunmaktadır.

https://docs.influxdata.com/influxdb/v2.0/reference/flux/stdlib/influxdb-schema/

Selection option kısmından çoklu seçimin aktif olması ve tümünü seçebilme seçeneklerinin aktif olup olmaması kısmıdır. İkisininde olması istenildiği için seçilmiştir. Tüm bu seçimler yapıldıktan sonra sayfanın en alt kısmında ilgili sorgunun çıktısı görülmektedir.

Bu işlem sonucunda Dashboardda bir filtre oluştu.

Ama filtre ile yapılan herhangi bir değişiklik sonucu etkilemeyecek. Filtrede yapılan seçimin grafiğe yansıması için gerekli olan bir adım daha var. O da mevcut sorgumuzu değiştirmek. Aşağıda _fiels olarak Percent_DPC_Time seçildiği gözükmektedir. Bu sorgu FLUX sorgu kısmında manuel olarak yapılmıştır. kodda değiştirilmesi gereken kısımda bu kısımdır.

from(bucket: “pc-inf”)

|> range(start: v.timeRangeStart, stop: v.timeRangeStop)

|> filter(fn: (r) => r[“_measurement”] == “win_cpu”)

|> filter(fn: (r) => r[“_field”] == “Percent_DPC_Time”)

|> yield(name: “mean”)

from(bucket: “pc-inf”)

|> range(start: v.timeRangeStart, stop: v.timeRangeStop)

|> filter(fn: (r) => r[“_measurement”] == “win_cpu”)

|> filter(fn: (r) => contains(value: r[“_field”], set: ${CPU_Fields:json}))

|> yield(name: “mean”)

Olarak değiştirilecektir. ${CPU_Fields:json} kısmında ki CPU_Fields dediği üstte belirttiğimiz variable’dır. (filtrenin ismi) json denilince de bu veriyi nasıl yazalım sorunun cevabı verilmektedir. Gelen verileri string array’a dönüştürür.

Bu format (string array yani [“value1”, “value2”]), contain() fonksiyonunun istediği formattır. Farklı yazma formatlarıda bulunmaktadır. Tüm formatları görmek için aşağıdaki site ziyaret edilebilir.

https://grafana.com/docs/grafana/latest/variables/advanced-variable-format-options/#json

Sağ kısımda Soldaki kodun + filtre seçiminin dönüştürüldüğü kod görülmektedir. contains() fonksiyonuna bakıldığı zman filtreden All seçeneği seçildiği için tüm isimlerin bir array halinde geldiği gözlemlenmektedir.

Sonuç olarak Grafana Dashboarda bir filtre eklenmiş oldu. Bu filitre vasıtasıyla grafikte seçim yapılabilmektedir. Sıradaki görevler ise:

1. Boolean verilerin de grafikte temsil edilmesi

2. Filtre bağımlı filtre oluşturulması. Mesela filtre1 de bir seçim yapılması ve bu seçim sonucuna göre filtre2 de gösterilecek içeriğin belirlenmesi hususu.

--

--