Docker, influxDB, Telegraf, Grafana, ile Windows Pc’deki Timeseries ( Ram, CPU, Disk durumları ) verilerin yazılması ve görselleştirilmesi

Yunus Emre Demir
7 min readApr 2, 2021

--

Öncelikle başlıktan dolayı korkmayın. Bu dediklerim atla deve değiller ve muhtemelen bu yazıda yazılan işlemlerin ömürleri çok uzun olmayacak. Çünkü gerek influxDB gerekse Grafana programı sürekli güncelleniyor. Bu güncellemeler arasında köklü değişikliklerde yok değil. Mesela influxDB son sürümüyle beraber query languege’sini değiştirdi. Gerisini siz düşünün. Bu yüzden ilk önce yazının yayınladığı tarihe bakın eğer 1.5 sene den fazla zaman geçmişse boşuna okumayın :) Yazının ilk bölümünde her şeyden kısa kısa bahsedeceğim. Böylelikle her şeyin temel mantığını anlamış olacağız.

Docker

Konteyner taşıyıcımızdır. İşlerimizi kolaylaştıran ve kendi kullanımı da oldukça kolay olan süper bir şeydir. Bizler, konteyneri: metal, kapaklı, kilitli, gemilerle taşınan ve içine ürün yerleştirilen koruma aracı olarak biliriz. Konteyner, bilgisayar dünyasında da benzer görevleri yapıyor. Mantık aynı denilebilir. Bir konteyner oluşturulur. Sınırlarını seçilir. (Örneğin, “2 Gb ram, 2 core CPU senin ve başkası işgal edemez” denilir.). Sonrası run.

Çalışma prensipleri farklı olsa da, Virtual Machine (VM) olarak ta düşünülebilir. Mesela pc’mizde Windows (ana) işletim sistemi var. Bir VM programı vasıtasıyla (Örn: Oracle VM) sanal olarak bir Linux dağılımı kurup windows içinde linux kullanabildiğimiz gibi Dockerda buna benzer bir mantıkta Windows içinde Linux dağılımını hızlı şekilde kullanmamıza izin verir.

Konteynerler portatiftir, izole edilmiş bir disk birimi içerir ve tamamen bağımsızdır. Konteyner içindeki ürün/yazılım çeşitli ortamlara geliştirilip dağıtıldıkça yazılım bağımlılıkları (kütüphaneler vb.) konteynerle birlikte gider. Yani uygulamamız platform bağımsız çalışılır vaziyette olur. Daha fazla bilgi için Google’a bakınız.

İndirmek için Google Search: Docker download for Windows

https://www.docker.com/products/docker-desktop

Kullanmak için ufak bir arayüzü var. Doker ile beraber kurulması gereken bir teknoloji daha var kısaca ondan da bahsedelim.

WSL — Windows Subsystem for Linux

Windows ile beraber Linux çalıştırırken Dual-Boot, Virtual Machines veya Docker Desktop seçeneklerinden birisini kullanabiliriz. WSL, kısaca Windows kernel’ının üstünde bir Linux kernel interface’ini (arayüzünü) sanallaştırıyor. Bunu kurmak zorundayız. Docker tarafından indirme sayfasına yönlendirilmektedir ve 2 tıkla indirilip kuruluyor. Çok fazla haşır neşir olmayacağız. Bu kadar bilinmesi yeterli.

İnfluxDB

Timeseries dataların tutulması için geliştirilmiş olan bir veri tabanıdır. Kendine has FLUX diye bir sorgu dili vardır. Bu dili bilmenize çok gerekte yok nitekim arayüz vasıtasıyla sorgu yapılmasına izin verilmektedir. Timeseries data = sürekli akan veri denilebilir. Mesela bilgisayarın CPU kullanımı veya Wifi recieve/per second bilgisi sürekli akan bir veridir. Eğer bu veriyi anlık saniyelik olarak kaydetmek istersek influxDB’ye kaydedebiliriz. Sadece kaydetmekle kalmaz sorgular vasıtasıyla indirgeme işlemleri yapabiliriz. Sonuçları farklı grafikler ve tablolar vasıtasıyla görebiliriz. veriyi ham (Raw) halde .CSV file olarak indirebiliriz. Veriyi farklı platformlardan çekebiliriz vs. 10 parmağında 10 marifet var yani. İnfluxDB’nin kurulumunu Docker üzerinde yapılacaktır. Çünkü hem çok kolay, hem kolay taşınır hemde platform bağımsız olduğu için yapılan ayarlar vs. taşınınca başımıza dert açmaz.

Komut satırına (cmd) aşağıdaki kodu yazılır.

docker pull influxdb

Böylelikle influxDB’nin image’ı docker’a indirilmiş oluyor. Docker/images kısmından ilgili image bulunup Run denilerek hızlıca kurulur. Bu kadar. artık adres çubuğundan http://localhost:8086/ yazarak influxDB’ye ulaşılabilir. İnfluxDB username password işlemlerini geçtikten sonra aşağıda görüldüğü üzere bir organizasyon yaratılır. Organizasyonun içindede bir Bucket oluşturulur. Bucket = Table name olarak düşünülebilir.

Artık verileri kaydedeceğimiz tablomuz hazır. Şimdi bir kaç bilinmesi gerekli hususu daha arz edeceğim. Admin’s token veri tabanını bir yerlere bağlarken kullanılan bir anahtardır. Bu token’a aşağıdaki adımlar izlenerek ulaşılabilir.

Data / Tokens / admin’s Token / copy the clipboard denilerek kopyalama işlemi yapılmış olur.

Extra bucket oluşturmak için ise (Yeni bir tablo olarak düşünülebilir.) aşağıdaki adımlar takip edilmelidir.

Explore sekmesinden oluşturulan Bucketler üzerinde sorgu yapma ekranına gidilir. Hiç veri kaydedilmediği için şu anlık içerisi boş.

Veritabanı oluşturulduğuna göre şimdi gelelim pc’den verilerin çekilmesi ve veri tabanına yazılması işlemine.

TELEGRAF

Bir agent. Pcden verileri toplayıp influxDBye yazmaktadır.

https://portal.influxdata.com/downloads/ linkinde Telegraf başlığından aşağıdaki linke ulaşılır. aşağıdaki link vasıtasıyla .zip file indirilir. Unzip edilir ve C:\Program Files\InfluxData\Telegraf diye klasörler oluşturulup .conf ve .exe dosyaları bu klasör içine atılır.

https://dl.influxdata.com/telegraf/releases/telegraf-1.18.0_windows_amd64.zip

Şimdi .conf dosyasında bir takım değişiklikler yapmak için herhangi bir not defteri ile açılır. https://docs.influxdata.com/telegraf/v1.18/introduction/installation/?t=Windows Bu linkteki değişiklikler yapılır. Bu değişikler kısaca aşağıdaki gibidir.

  1. İnfluxDB 2.0 kullanılacağı için aşağıdaki kısım yorum yapılır.

2. Aşağıdaki kısım ise uncomment yapılır daha sonra urls, tokens, organization ve bucket kısımlarda uncomment yapılarak ilgili bilgiler influxDB den alınarak girilir. (Yazının yukarısında token’ın nasıl alınacağı vs. gösterilmişti.)

3. Daha sonra agentımızın olduğu klasör açılır. Aşağıdaki konuma koymuştuk. Adress çubuğuna tıklanıp CMD yazılır. Komut satırının ilgili klasör içinde açıldığı gözlemlenecektir. (herhengi bir yerden cmd açılıp cd filename diyerekte gelinebilir.)

4. Komut satırına aşağıdaki kod yazılarak Enter’a basılır ve artık agent çalışmaya yani pc’den verileri toplamaya bunları influxDB’ye yazmaya başlar.

C:\”Program Files”\Telegraf\telegraf.exe — service install

Gerçekten de yazmaya başladı mı? diye influxDB’den kontrol etmek gerekirse. Chrome/adres çubuğuna http://localhost:8086/ yazıp aşağıdaki gibi gözlemler yapılabilir. En alt kısım sorgu kısmı pc-inf adlı Bucketa girdik ve wifi send recieve bilgisini son 5 dk’yı görecek şekilde ayarladık. Burayı sağını solunu kurcalayarak öğrenirsiniz. Çok zor bir şey değil zaten. Verilerimizin kaydedildiğini görülmekte. Aslında görselleştirme işlemi de tamamlandı gibi. Bu görselleştirme yetersiz olduğu için bu işi daha iyi bir tool ile olan GRAFANA ile kullanacağız.

Burada influxDB hakkında boğmadan birkaç bilgi vermek gerekirse.

Veriler size UTC+0 zaman diliminde gösterilir. Yani TR saatinden 3 saat geri olarak gösterilir ama sonuç olarak hepsi aynı zaman dilimini işaret eder. (UTC+0'da 09:00 = UTC+3'te 12:00) Son 5 dk derken TR saatine göre son 5 dk’yı alır (UTC+3) ve UTC+0'da gösterir. Üst tarafta ayarı var istenilen gibi de alınabilir. Çok kafaya takmayın bunu.

Script editör seçilerek yapılan sorgunun arka planda dönüştürüldüğü dil ile gösterimi ifade eder. Sorgu dili Flux’tır. Kendi sitesinden incelersiniz.

⦁ Veriyi Raw = Ham halde de görüntüleyebilirsiniz. .CSV file olarak indirilebilinir. Grafik şekillerini değiştirilebilir. ve daha bir sürü özellik… dediğim gibi bunlar kurcaladıkça öğrenilecek şeyler.

GRAFANA

Grafana da bu verileri sürekli olarak farklı grafiklerle görselleştirmemize yaramaktadır. Kendisinde kolayca Docker üzerinde kuracağız. Aşağıdaki bir satır kod vasıtasıyla kurulum işlemi kolayca tamamlanmaktadır.

docker run -d — name=grafana -p 3000:3000 grafana/grafana

https://grafana.com/grafana/download?platform=docker

Tamamdır. Şimdi chrome adres satırına http://localhost:3000/ yazıp girilir. Sırada InfluxDB ile Grafananın bağlantısı var. Ardından InfuxDB de yapılan sorgu Grafanaya copy paste edilir. Sonra gereksinimlere ve hayal gücümüze göre grafikler dizayn edilir. Grafana kullanımında kurcalayarak öğrenilebilir :) Temel bir kaç husustan bahsedip artık bu uzun konuyu kapatacağım. Grafana’ya datasource olarak InfluxDB eklenmesi.

Add your first data soruce kısmına tıklanır
InfluxDB seçilir
Gerekli ayarlar yapılır. (Query Languege FLUX)
Bucketname girilmemesi daha iyi. Bu sayede ilgili organizasyondaki diğer bucket’lara da ulaşılabilir

Bağlantı işi tamamdır. Eğer arıza verirse URL kısmına http://host.docker.internal:8086/ yazabilirsiniz. Şimdi görselleştirme işine bakalım.

Create/dashboard

influxDB’de yapılan sorgu alınıp buraya yapıştırılır. Üstten görüntülenme seçilir. mesela son 5 dk. Hemen yanından refresh time seçilir 5s. Sağ kısım ayrı bir dünya zaten grafikler ayarlar vs. onlara bakarsınız. Oldu da bitti işte.

Mesela ben böyle bir şey tasarlamıştım.

Sonuç olarak Pcmizden Telegraf yardımıyla topladığımız Timeseries dataları anlık olarak InfluxDB’ye kaydettik. Daha sonra InfluxDB ile Grafana bağlantısını kurup verilerin anlık izlenmesi işlemini Grafana ile gerçekleştirdik. Grafana ve InfluxDB’yi docker üzerine kurduk. tıkır tıkır çalışıyor. Kolay gelsin.

Kaynaklar

https://www.mshowto.org/windows-subsystem-for-linux-2-wsl2-nedir.html

--

--