Prometheus/AlertManager ve Grafana ile Server Monitoring

Mobven Team
MobvenLab TR
Published in
5 min readJun 12, 2020

Author: Onur Polat

Merhabalar, bu dokümanda; Prometheus, AlertManager ve Grafana teknolojilerini kullanarak server makinelerimizin tüm bilgilerini nasıl monitorize ederiz onu anlatacağım.

Bu bilgilerin yanında, kullandığımız teknolojilerin çalışma şeklinden ve kofigürasyonlarından da bahsedeceğim.

1- ÖZELLİKLER

Prometheus, AlertManager ve Grafana bir arada çalışan sistemler bütünüdür.

Grafana; alınan tüm bilgileri görselleştirerek istenilen şekle sokar ve takip edilmesini ve okunmasını daha kolay hale getirir.

Grafana Board

Tablo şeklinde gördüğümüz tüm bilgiler, node_exporter tarafından elde ettiğimiz bilgilerdir.

Node_exporter kurulu olduğu sistemi dinleyerek tüm bilgileri dışarıya paylaşan bir sistemdir.

Prometheus ile doğrudan çalışmaktadır. Bir port ile bu bilgileri dışarıya aktarır.

Prometheus; Hangi portları dinlememiz gerektiğini, dinlediğimiz bu portlarda çalışan entegre sistemlerle (node_exporter vb.) neler yapabileceğimizi söyleyen, herhangi bir hata durumunda tanımladığımız kural setlerini devreye sokan ve AlertManager ile konuşan monitoring toolumuzun ana yapısıdır.

Prometheus

Belirtilen hedefler doğrultusunda neleri yapıp yapamayacağımıza ulabiliriz.

Örnek;

Prometheus; node_exporter metrics

Yukarıdaki örnekte görüldüğü üzere; config dosyasında belirttiğimiz hedeflerimizi, Prometheus’un “up” sorgusunu kullanarak görebiliyoruz. Burada belirtilen sorguyu da Grafana üzerinden tablo şeklinde görebiliriz.

Grafana metrics

Prometheus üzerindeki “Alerts” alanında ise; Config dosyamızda belirttiğimiz, kural setlerimiz mevcuttur, bu kurallar istenilen şekilde modifiye ve gruplandırma edilmekle birlikte, paralel olarak AlertManager toolumuzla iletişim kurup, kural devreye girdiğinde ne yapması gerekiyorsa gerçekleştirmesini sağlamaktadır.

Prometheus Rule

Yukarıdaki görselde, prometheus üzerinede tanımlanan target’ların herhangi birinde cevap alamama durumunu kontrol eden bir kural tanımlanmıştır. Eğer kuralda belirtildiği gibi bir hedeften1 dakika cevap alamadığı durumda alertmanager toolumuzla iletişime geçmeye çalışacaktır.

AlertManager; Herhangi bir alert tetiklendiğinde ne yapılması gerektiğini belirttiğimiz toolumuzdur.

Prometheus üzerinden AlertManager’a bir başvuru geldiğinde, konfigürasyon dosyasında belirttiğimiz ayarlar devreye girerek ilgili işlemi gerçekleştirilir.

Alertmanager Configuration

Yukarıdaki görselde, AlertManager tetiklendiğinde yapması gereken konfigürasyonlar görülmektedir.

Bizim tanımladığımız ‘instanceDown’ kuralı devreye girdiğinde slack kanalına bildirim göndermesi istenmiştir.

Slack kanalına bildirim gönderilirken, kanala basılacak mesaj biçimi, mesaj içerikleri vb. gibi konfigürasyonlar da tanımlanmaktadır.(NOT: Slack kanalına mesaj göndermek yerine, mail adreslerine de bilgi göndermeyi konfigüre edebiliriz.)

Slack Message

2- KURULUM

Prometheus, AlertManager ve Node_exporter macOS tabanlı işletim sistemlerinde sadece docker üzerinde çalıştığı için docker-compose yapısı kullanılarak kurulumlar gerçekleştirilmiştir.

  • NODE_EXPORTER:

Node-exporter ‘darwin’ ve ‘linux’ tabalı işletim sistemlerinde çalışmaktadır. Bizim örneğimiz linux tabanlı işletim sistemini baz alacaktır.

a) Server’a bağlandıktan sonra ana dizine node_exporter isimli bir klasör oluşturup içerisine giriyoruz. (“mkdir node_exporter” , “cd /node-exporter”)

b) Prometheus’un sitesinde belirtilen node_exporter’ın linux için indirme linki kopyalanıp, server içerisine kurulur. ( “wget https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz ”)

c) Yükleme bittikten sonra “tar -zxvf node_exporter-0.18.1.linux-amd64.tar.g“ komutu çalıştırılır.

d) “cd node_exporter-0.18.1.linux-amd64/” komutu ile oluşan klasörün içerisine girilir.

e) “ ./node_exporter &” komutu ile node_exporter çalışmaya başlatılıp hangi portu dinlediği belirlenir. Port belirlendikten sonra dışarıya açmak için izin verilir.

node exporter listening port

NOT: “ufw allow 9100” komutu çalıştırılarak firewall izni verilir.

Tüm bu işlemler sonrasında node_exporter 9100 portunda çalışmaya devam eder. (Sağlaması için ‘netstat -pltn’ komutu ile görebilirsiniz.)

NOT: Eğer node_exporter çalışmayı durdurursa, server makinamızda oluşturduğumuz klasörün içine girip ( cd node_exporter/ — — cd node_exporter-0.18.1.linux-amd64/) “./node_exporter &” komutunu çalıştırarak tekrar ayağa kaldırabilirsiniz.

  • PROMETHEUS-ALERTMANAGER VE GRAFANA:

Bu kurulumları gerçekleştirmek için docker-compose yapısı kullanıldı;

Kullanılan Yapının bir örneği aşağıda eklidir;

docker-compose.yml

Kaynak Kod :

Compose dosyamızın çalıştığı klasörün içerisinde iki farklı klasör daha bulunmaktadır.

Birincisi prometheus isimli klasör ve içerisinde prometheus.yml ve rules.yml isimli dosyalar barındırır. Kural tanımlarını ve Prometheus’un hedeflerini konfigüre ettiğimiz dosyalarımızdır.

prometheus.yml

Kaynak Kod :

rules.yml

Kaynak Kod:

Diğer klasörümüzün ismi ise AlertManager. Bu klasörün içerisinde de config.yml isimli dosyamız mevcuttur. İçerisinde alert tetiklendiği durumda ne aksiyon alması gerektiğinin konfigürasyonu bulunmaktadır.

config.yml

Kaynak Kod:

NOT: “prometheus.yml” isimli dosyamızda alerting kısmında belirtilen target alanının diğerlerinden farklı olmasının sebebi; Farklı docker containerlar içerisinde bulundukları için, birbirleri ile konuşmalarını sağlamak ve ilgili portu düzgün biçimde belirtmektir.

( diğerleri localhost:**** şeklinde tanımlanmışken alertmanager => alertmanager:9093 şeklinde tanımlanır.)

NODE_EXPORTER SERVİS HALİNE GETİRME:

node_exporter server makinesinde çalışırken, kendiliğinden kapanma durumu yaşanabiliyor. Bunun önüne geçmek için servis haline getirmemiz gerekecektir.

  • Yüklemeyi yaptığımız klasörden node_exporter kopyalanır: “cp /node_exporter/node_exporter-0.18.1.linux-amd64/node_exporter /usr/local/bin/node_exporter”
  • systemd altına bir servis dosyası oluşturulur: “sudo nano /etc/systemd/system/node-exporter.service”
  • Oluşturulan servis dosyasının içerisine ise aşağıdaki bilgiler girilir.;
[Unit]
Description=Prometheus Node Exporter Service
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target
  • Her şey hazır. Son olarak “sudo service node-exporter start” komutunu çalıştırarak başlatabilirsiniz. “sudo service node-exporter status” komutu ile de durumunu inceleyebilirsiniz.

--

--