Broadcom Ağ Anahtar ölçümlerinin görselleştirilmesi

Emin Aktaş
4 min readAug 12, 2020

--

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.debkomutuyla 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.jsonkomutu 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-metricsservisin 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.jsondosyası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 runkomut 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çin docker execkomutuyla 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.

Sign up to discover human stories that deepen your understanding of the world.

--

--

Emin Aktaş
Emin Aktaş

No responses yet

Write a response