Broadcom Ağ Anahtar ölçümlerinin görselleştirilmesi
Merhabalar, sizlere nasıl Grafana üzerinde Broadcom Ağ Anahtarları için OF-DPA’in bize sağladığı client_port_table_dump — s
komutu ile ekrana yazdırılan ölçümlerin Prometheus, Node Exporter ve bir Python betimlemesi ile görselleştirilmesinden bahsedeceğim.
Şuan da staj yaptığım firmada Broadcom Ağ Anahtarların ölçümleri Node Exporter tarafından işlenemediği için ölçümlerin etkin bir şekilde takibi sağlanamıyordu. Bir stajyer olarak bu sorunun çözülmesi, zaman serisi veritabanı ve ölçümlerin görselleştirilmesi için görevlendirildim. Yaklaşık 2 hafta içerisinde bu sorunu çözümlemem beklenmesine rağmen 4 günde sorunu şirketteki öğretmenlerim ile birlikte problemi aştık.
Öncelikle oluşturduğum Python betimlemesinin ne iş yaptığından kısaca bahsetmek istiyorum. Sonra, sırayla Node Exporter, Prometheus ve Grafana’dan kısaca bahsedeceğim.
Çalışmada kullandığım ve oluşturduğum dosyaları GitHub Gist ve Repository olarak yazının en altında bağlantı adresleriyle birlikte ulaşabilirsiniz.
get-of-metrics.py
Bu betimleme kısaca uzaktan Broadcom Ağ Anahtarlarına SSH bağlantısı kurar veclient_port_table_dump — s
komutu ile ölçümlerin işlenmesi için kazır(scrape). Ardından Düzenli İfade (RegEx) ile kullanmak istediğimiz verilerin ayrıştırır. En sonunda, metin tabanlı “.prom” uzantılı dosya olarak hedef klasöre özel metin biçiminde önceden belirlediğiniz gecikme sürelerinde kaydeder.
Node Exporter
Bütün “.prom” uzantısı dosyalar Node Exporter’ın Text Collector ile belirli zaman aralıklarında işleme alır ve özel metin biçiminde kaydedilmesi sayesinde localhost:9100/metrics adresinde “.prom” dosyaların içeriklerini düzenli bir şekilde yayınlar.
Prometheus
Node Exporter tarafından yayınlanan ölçümlerin Prometheus tarafından belirli zaman aralıklarında dinler. Bu sayede, ölçümlerimiz için zaman serisi veritabanı oluşturur ve bu verilerin takibini ve görselleştirilmesini Prometheus sorgu işlevleriyle localhost:9090 adresinde gerçekleştirebiliriz. Evet, Prometheus bize verilerin görselleştirme imkanı sağlamakta ama asıl amacı bu olmadığında dolayı olsa gerek kullanılışlı bir arayüze sahip değil. Ayrıca, şu anlık verilerin canlı bir şekilde izlenmesi için bir desteği bulunmamaktadır.
Grafana
Grafana, bize neredeyse mükemmel bir arayüz ve çeşitlilik sunması sayesinde günümüzde karşımıza çıkabilecek en iyi tercih olduğunu söyleyebilirim. Prometheus ile uyumlu olması sayesinde bir çok kolaylık sağlamakta. Sadece Prometheus’u Grafana’ya tanıtmamız ile birlikte veri tabanıyla alakalı Prometheus tarafından yapılan ve hatta çok daha fazlasını Grafana tarafında daha basit ve anlaşılır bir arayüz ile yapabilir hale geliriz.
Kısaca sizlere olaylarını anlatmaya çalıştım. Şimdi, adım adım oluşturduğum script için kurulum kısmına geçelim.
Kurulum
Aşağıdaki bağlantı adreslerindeki adımları takip ederek Linux tabanlı sunucular için kurulumları gerçekleştirebilirsiniz.
Node Exporter : https://devopscube.com/monitor-linux-servers-prometheus-node-exporter/
Prometheus : https://devopscube.com/install-configure-prometheus-linux/
Grafana : https://devopscube.com/integrate-visualize-prometheus-grafana/
Bu kurum adımlarını takip ederken dikkat edilmesi gerekenler;
- Node Exporter kurulumunu gerçekleştirilirken “node_exporter.service” tanımlanması sırasında
ExecStart=/usr/local/bin/node_exporter
— collector.textfile.directory=”/home/get-of-metrics/prom-files/”
şeklinde tanımlanması gerekmektedir. Böylece, Node Exporter’a .prom dosyaları için kontrol etmesi gerektiği dosyayı söylemiş oluyoruz. - Prometheus kurulumu sırasında “prometheus.yml” dosyasına dinleyeceği Node Exporter adresini belirtmemiz gerekmektedir. Aşağıdaki içerik “scrape configs:” altına eklenmelidir. Eğer Node Exporter aynı sunucuda değil ise localhost, kurulu olduğu sunucu adresi ile değiştirilmelidir. Ayrıca bu adım Node Exporter kurulumunun son kısmında bahsedilmektedir.
— job_name: ‘node_exporter_metrics’
scrape_interval: 5s
static_configs:
— targets: [‘localhost:9090’]
- Grafana kurulumunu referans bağlantıdaki gibi yapabilirsiniz. Aşağıda sample-dashboard.json olarak eklediğim örnek bir Grafana gösterge paneli oluşturdum. Bu gösterge paneli, paylaştığım betimleme ile aşağıdaki _test_.prom dosyası gibi veritabanı oluşturur ve bu veriler görselleştirme gerçekleşir. JSON dosyada gerekiyorsa “*localhost*” ve “*node_name*” belirlediğiniz değerleri yazarak çalışır hale getirebilirsiniz. “node_name” olarak burada tanımladığım değer aslında betimleme içerisinde “alias” olarak geçmektedir. Yani “-a” şeklinde tanımlama yaptığınız değerler “alias” değerleridir.
get-of-metrics
Son olarak betimlemenin bağımsız şekilde ve docker yansıması ile çalışması ve kurulumunu anlatacağım
Bağımsız kurulumu
- İlk olarak aşağıdaki bağlantı adresindeki betimleme kurulumu için .deb dosyasını Linux tabanlı sunucuya indirin.
https://github.com/eminaktas/get_of_metrics/blob/standalone-version/get-of-metrics.deb
- Betimlemenin kurulumu için
apt install ./get-of-metrics.deb
komutuyla başlatın. Tamamıyla otomatik olarak gerekli paketlerin kurulmasıyla birlikte gerçekleşecektir.
/etc/systemd/system/get-of-metrics.service
/home/get-of-metrics/connection-parameters.json
/home/get-of-metrics/prom-files/
/var/log/get-of-metrics/
/usr/bin/get-of-metrics.py
Kurulum tamamlandığında yukarıdaki gibi tüm dosyaların kurulduğunu göreceksiniz.
vi /home/get-of-metrics/connection-parameters.json
komutu ile dosyasında geçikme süresini ve bağlanmak istediğimiz sunucuların bilgilerini düzenlemesini gerçekleştirilir.- Son aşama olan ise servisin aktif hale getirilmesidir.
systemctl enable get-of-metrics
komutu ile işletim sistemi her yeniden başlatmasında servisin otomatik aktif hale gelmesini sağlarız.systemctl start get-of-metrics
servisin anında aktif hale getiririz.
Artık Python betimlemesi de çalışır hale geldiğine göre tüm sistemin sağlıklı bir şekilde çalışır hale getirmiş olduk.
Docker yansıma ile kurulumu
Docker sayesinde betimlemenin sanal ortamda çalıştırılması sağlayabiliyoruz. Betimlemenin çalışabilmesi için öncelikle bir ortam hazırlanmasını ve çalışmasına hazır hale getirilmesini gerçekleştiren bir Dockerfile oluşturdum. Ayrıca, yukarıdaki işlemlere gerek kalmadan kolayca kurulumu gerçekleştirilmesi için ortam sağlanmış oldu.
- Bir klasör içerisine aşağıdaki bağlantı adresindeki dosyaları kopyalayın.
https://github.com/eminaktas/get_of_metrics/blob/standalone-version/Dockerfilehttps://github.com/eminaktas/get_of_metrics/blob/standalone-version/get-of-metrics.debhttps://github.com/eminaktas/get_of_metrics/blob/standalone-version/connection-parameters.jsonhttps://github.com/eminaktas/get_of_metrics/blob/standalone-version/get-of-metrics.py
- Bu işlem tamamlandıkta sonra
connection-parameters.json
dosyasında bağlanmak istediğiniz sunucuların bilgilerini ve gecikme süresini girin. docker build -t get-of-metrics .
komutunu kullanarak docker yansımasını kolayca oluşturabilirsiniz.- Aşağıdaki
docker run
komut satırı ile oluşturduğumuz docker yansımasını çalışır hale getiririz. Artık bir docker container elde etmiş oluruz. Container’a erişmek içindocker exec
komutuyla arayüzüne erişim sağlayabiliriz.
docker run -d --name get-of-metrics --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro -v file:/home/get-of-metrics -v logs:/var/log/get-of-metrics -v prom-files:/home/get-of-metrics/prom-files get-of-metricsdocker exec -it get-of-metrics bash
Bu benim ilk tecrübemi sizlerle oldukça açık bir şekilde paylaşmaya çalıştım eğer hatalarım var ise onlar için şimdiden özür dilerim.
Ayrıca, bu çalışma boyunca Cem Topkaya fikirleri ve desteklerinden dolayı kendisine çok teşekkür ederim.
Geliştirmeleri takip etmek için aşağıdaki GitHub bağlantısından ulaşabilirsiniz.