Devops

Prometheus / Linux server Kurulum

Prometheus Nedir?

Prometheus, open-source bir izleme aracıdır. Metrik verileri toplar ve toplanan veriyi görselleştirmek için araçlar sunar. Temelde GoLang ile yazılmıştır ve 2016 yılında Cloud Native Computing Foundation bünyesine girmiştir.

Ayrıca, Prometheus, metrikleri belirli bir kullanıcı eşiğine ulaştığında uyarılar oluşturmanıza da olanak tanır.

Metrikler, bir sistemin belirli bir anda durumunu temsil etmek için kullanılan temel veri yapılarıdır. Anahtar-değer çiftleri şeklindedir; burada anahtar metrik adını, değer ise sayısal bir veri noktasını(numeric value)temsil eder.


Prometheus’un bu metrikleri toplama şekli, metrikleri bir HTTP endpoint’inde sergileyen hedefleri (targets) sorgulamaktır. Yani, metrikleri toplamak istediğimiz uygulama ya da sistem, metrikleri belirli bir HTTP endpoint’inde sunacak ve biz de bu endpoint’e GET isteği göndererek metrikleri alacağız.

Toplanan metrikler, bir zaman serisi veritabanında saklanır ve Prometheus’un yerleşik sorgu dili PromQL kullanılarak sorgulanabilir.

Prometheus’ta üç ana bileşen vardır: Data Retrieval worker, Time series veritabanı ve PromQL sorgusu kabul eden HTTP server.

Prometheus, hangi türdeki metrikleri izlemek için kullanılabilir?

  • Linux/Windows server
  • Apache/nginx Web Server
  • Databases
  • Cpu/Memory Utilization
  • Disk Space
  • Service Uptime
  • Application specific data such as:
  • >Number of exceptions
  • >Latency
  • >Pending Requests

Prometheus, sayısal olan zaman serisi verilerini izlemek için tasarlanmıştır.

Prometheus, hangi türdeki metrikleri izlemez:

  • >Events
  • >System logs
  • >Traces

Prometheus Mimarisi

Önceki bölümde Prometheus’un üç bileşeni olduğunu belirttik. Data retrieval, Time series veritabanı ve HTTP sunucusu. Gerçek senaryolarda, bu durum biraz daha karmaşık hale gelir.

Prometheus, izlemek istediğiniz sistem veya uygulama için tüm çözümü oluşturacak birçok bileşene sahiptir.

Not: Varsayılan olarak, uygulamalarınız, sunucularınız veya genel olarak herhangi bir sisteminiz (Targets) otomatik olarak Prometheus’a uygun şekilde metrik sunmaz.

Exporters

Örneğin, Exporter’lar, hedefinizde çalışan ve metrikleri sunmaktan sorumlu olan küçük işlemlerdir, böylece ‘Data Retrieval worker’, metrikleri çekmek için ‘Pull’ Metodu ile bunları sorgulayabilir.

Yani, target’larınız asla veriyi bize göndermez. Prometheus her zaman o veriyi sorgular.

Push Gateway

Ancak, zaman zaman kısa ömürlü job’ların, Prometheus’un pull tabanlı modeliyle çalışamayacağı durumlar olacaktır. İşte bu durumda, Push Gateway bileşeni devreye girer. Kısa ömürlü bir processiniz olduğunda, verileri Prometheus’a göndermek için bu bileşeni kullanabilirsiniz çünkü bir sisteminizde job olarak çalışan processler varsa, o processlerden verileri almak için yeterince uzun süre çalışmayacaktır.

Service Discovery

Buna ek olarak, Prometheus’un tüm hedeflerini(targets) bilmesi gerekir. Konfigürasyon dosyasında(prometheus.yml) bunları sabit bir şekilde belirleyebilirsiniz, ancak Kubernetes gibi dinamik ortamlar ya da Cloud ortamlarında örn: EC2 dinamik şekilde up ve down gibi durumları oluyorsa hedef listenizi dinamik olarak güncellemek gerekir. Bu tür senaryoda service discovery kullanılır.

Alert Manager

Daha önce belirttiğimiz gibi, Prometheus aynı zamanda uyarılar oluşturmak için kullanılabilir, ancak Prometheus, bildirimleri gönderme işinden sorumlu değildir. Uyarıları tetiklemek için kullanılır, ancak bildirimleri e-posta, SMS veya Slack gibi yöntemlerle gönderecek ayrı bir bileşen olan Alert Manager’a ihtiyacınız vardır.

KURULUM

Örnek olarak ubuntu kullanacağım.

Prometheus indirilebilir LTS dosyalarının linkini buradan bulabilirsiniz.

wget https://github.com/prometheus/prometheus/releases/download/v2.53.3/prometheus-2.53.3.linux-amd64.tar.gz

Tar dosyamız indikten sonra dosyayı dışarı aktarıyoruz.

tar xvf prometheus-2.53.3.linux-amd64.tar.gz prometheus-2.53.3.linux-amd64/

Sıkıştırılmış dosyayı dışarı aktardıktan sonra görüntülemek için aşağıdaki komutları kullanabiliriz. Çıktısı aşağıdaki gibi olmalıdır.

cd prometheus-2.53.3.linux-amd64/
ls -l
-rw-r--r-- 1 1001 127 11357 Nov 5 15:35 LICENSE
-rw-r--r-- 1 1001 127 3773 Nov 5 15:35 NOTICE
drwxr-xr-x 2 1001 127 38 Nov 5 15:35 console_libraries
drwxr-xr-x 2 1001 127 173 Nov 5 15:35 consoles
-rwxr-xr-x 1 1001 127 137839708 Nov 5 15:19 prometheus
-rw-r--r-- 1 1001 127 934 Nov 5 15:35 prometheus.yml
-rwxr-xr-x 1 1001 127 129729365 Nov 5 15:19 promtool

prometheus >> çalıştırılabilir uygulama dosyası

prometheus.yml >>> Konfigürasyon dosyası

promtool >>>>> Command-Line aracı olacaktır.

prometheus dosyamizi çalıştıralım ve web kullanıcı arayüzüne erişelim.

./prometheus

Bu komut sonrası 9090 portundan prometheus’un web arayüzüne ulaşabilirsiniz. Tarayıcı üzerinde eğer VM kullanıyorsanız localhost üzerinden görüntüleyebilirsiniz.:

http://localhost:9090/

Ekran üzerinde görüldüğü gibi ulaşabilir ve default target olan prometheus’un kendisini up ile kontrol edebilirsiniz.

Buraya kadar prometheus’un sadece kurulumunu yüzeysel bir şekilde yaptık ve web arayüzünü ön planda (Foreground) terminal üzerinden çalıştırarak görüntüledik. Terminalde ctrl+c ile arayüzü kapabiliyoruz.

Ancak linux sunucumuzda prometheus’un gerçek senaryoda arka planda (background) çalışması ve sistem reboot olsada tekrar başlaması ve bir servis gibi rol almasını sağlamamız gerekir.

Bunu gerçekleştirmek için ubuntu sunucumuzda ‘prometheus’ adında bir user oluşturalım ve bu kullanıcı birazdan oluşturacağımız servisin çalışmasını sağlasın. , o yüzden sisteme giriş yapması gerekmeyen bir servis kullanıcısı oluşturalım ve home dizini olmasın.

useradd --no-create-home --shell /bin/false prometheus

Sonrasında /etc dizininde servis dosyamızı oluşturalım burada .yaml dosyamizi barındıracağız.

/var/lib dizininde data için dosya oluşturalım burada datalarımızı (timeseriesdb) barındıracağız.

Oluşturduğumuz klasörlerin izinlerini, az önce oluşturduğumuz ‘prometheus’ kullanıcısına atayalım.

mkdir /etc/prometheus

mkdir /var/lib/prometheus

chown prometheus:prometheus /etc/prometheus

chown prometheus:prometheus /var/lib/prometheus

Sonrasinda tar komutu ile çıkarttığımız ‘’prometheus-2.53.3.linux-amd64’’ içinde dosyalardan olan ‘prometheus’ dosyasını(klasörünü değil) , ‘consoles’ dizinini , ve ‘promtool’u /usr/local/bin dizinine kopyalıyoruz ve ayni şekilde dosya sahipliğini kullanıcımıza atıyoruz.

Aşağıdaki işlemleri sağlarken tar ile açtığımız ‘’prometheus-2.53.3.linux-amd64’’ dosyasının içinde olduğumuzdan emin olalım. Bunu doğrulama için pwd komutunu kullanabilirsiniz.

cp -r consoles /etc/prometheus

cp -r console_libraries /etc/prometheus

cp prometheus /usr/local/bin

cp promtool /usr/local/bin

cp prometheus.yml /etc/prometheus/prometheus.yml

chown -R prometheus:prometheus /etc/prometheus/consoles

chown -R prometheus:prometheus /etc/prometheus/console_libraries

chown prometheus:prometheus /usr/local/bin/prometheus

chown prometheus:prometheus /usr/local/bin/promtool

chown prometheus:prometheus /etc/prometheus/prometheus.yml

Şimdi servis unit dosyamızı hazırlayalım.

vi /etc/systemd/system/prometheus.service
[Unit]

Description=Prometheus Wants=network-online.target After=network-online.target

[Service]

User=prometheus

Group=prometheus

Type=simple

ExecStart=/usr/local/bin/prometheus \

–config.file /etc/prometheus/prometheus.yml \

–storage.tsdb.path /var/lib/prometheus/ \

–web.console.templates=/etc/prometheus/consoles \

–web.console.libraries=/etc/prometheus/console_libraries

[Install]

WantedBy=multi.user.target

—————

— config.file >> Prometheus yapılandırma dosyasını içeren dizin

— storage.tsdb.path >> Prometheus’un veritabanını yazdığı yer

— web.console.templates >> Prometheus Konsol şablonları yolu

— web.console.libraries >> Prometheus Konsol kütüphaneleri yolu

systemctl daemon-reload

systemctl start prometheus

systemctl status prometheus

systmectl enable prometheus

Komutlarindan sonra servisin aktif duruma geçmesi gerekir. Eğer inactive kalmışsa [Service] kisminda boşluk bıraktıysanız boşlukları kapatıp tekrar test edebilirsiniz.

Prometheus’u kurup servis haline getirerek ilk adımı başarıyla tamamladık,

Şimdi bu altyapıyı genişletmek ve Prometheus’un gücünü göstermek için, aslında bir Kubernetes Cluster altyapısında kurulum yapmış olsaydık Node-Exporter ve Alert-manager araçlarınıda yükleyebilirdik. Ancak bunu kubernetes cluster kurulumunda ikinci yazımda yapacağım.

Fakat yazı çok fazla uzun olacağından dolayı son olarak veri görselleştirme sağlamak için grafana kurulumunu yapıp ve örnek olması açısındanda bir adet aynı linux sunucumuza mariadb kurup , Prometheus’ın exporterlarından mysqld_exporter’ını indirip veritabanı metriklerini inceleyeceğiz

Söylemesi en azından, yapmasından kolay 🙂

MariaDB kurulumu

apt install mariadb-server

systemctl start mariadb

systemctl enable mariadb

Exporter’ın çalışması için bir MariaDB kullanıcısı oluşturun:

sudo mysql

CREATE USER ‘exporter’@’localhost’ IDENTIFIED BY ‘password’;

GRANT PROCESS, REPLICATION CLIENT, SELECT ON . TO ‘exporter’@’localhost’;

FLUSH PRIVILEGES;

mysqld_exporter Kurulumu:

wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.14.0/mysqld_exporter-0.14.0.linux-amd64.tar.gz
tar xvf mysqld_exporter-0.14.0.linux-amd64.tar.gz

cp mysqld_exporter /usr/local/bin/

Exporter’ı bir systemd servisi olarak ekleyin:

sudo vi /etc/systemd/system/mysqld_exporter.service
[Unit]

Description=Prometheus MySQL Exporter

After=network.target

[Service]

User=root

ExecStart=/usr/local/bin/mysqld_exporter \

–config.my-cnf=/etc/mysql/my.cnf Restart=always

[Install] WantedBy=multi-user.target

Ardından servisi başlatın:

sudo systemctl daemon-reload

sudo systemctl start mysqld_exporter

sudo systemctl enable mysqld_exporter

prometheus.yml dosyasına yeni bir job ekleyin:

yaml’ı yazarken boşluklara dikkat edilmez ise çalışmayabilir.

vim /etc/prometheus/prometheus.yml

-job_name: “prometheus” static_configs:

-targets: [“localhost:9090”]

-job_name: “mariadb” static_configs:

-targets: [“localhost:9104”]

Prometheus servisimizi restart edelim:

systemctl restart prometheus

Şimdi, Prometheus web arayüzünde mariadb ‘up’ şeklinde görünmüş olmalıdır.

Prometheus WebUI üzerinden MariaDB metriklerini görebileceksiniz. Örnek bir sorgu:

mysql_global_status_connections

Grafana Kurulum

Redhat Kullanıyorsanız

yum install -y https://dl.grafana.com/enterprise/release/grafana-enterprise-11.1.0-1.x86_64.rpm

Ubuntu için gpg key ekleyeceğiz:

apt-get install -y software-properties-common

mkdir -p /etc/apt/keyrings/
wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null
echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
apt update 

apt install grafana 

grafana-server -v

Grafana Servisini Başlatın:

sudo systemctl start grafana-server

sudo systemctl enable grafana-server

Grafana’ya Tarayıcıdan Erişin:

Tarayıcınızdan http://<sunucu_IP_adresi>:3000 adresine gidin.

Varsayılan kullanıcı adı ve şifre: admin / admin (İlk girişte değiştirmeniz istenir).

  • Username: admin
  • Password: admin

“Add your first data source” butonuna tıklayın.

• Listeden Prometheus’u seçin.

• Prometheus’un URL’sini girin: http://localhost:9090

• “Save & Test” diyerek bağlantıyı test edin.

Prometheus data source’unu ekledikten sonra aşağıdaki linkten maria db dashboardını arayıp ID’sini kopyalayın ve Load butonuna basarak import edin Query sekmesinde, veri kaynağının Prometheus olduğundan emin olun. https://grafana.com/grafana/dashboards

Grafana’da panellerin doğru çalışabilmesi için Prometheus’un doğru verileri toplaması gerekir. Aşağıdaki adımlarla verilerin doğru şekilde toplandığından emin olun:

Prometheus’un doğru şekilde çalıştığını doğrulamak için, Grafana’da bir sorgu çalıştırarak verilerin geldiğini kontrol edin.

• Örneğin:

mysql_global_status_connections

• Bu sorgu, MariaDB bağlantı sayısını gösterecektir. Eğer sonuç alıyorsanız, Prometheus düzgün çalışıyor demektir.

Şimdilik Grafanayı kurulum yapıp prometheus.yml dosyamızda key-value olarak targetlarımızı ekleyip servisi restart edip grafanada 3000 portundan bu targetlara erişebiliriz.

Üstüne alert manager eklenerek belirli limitler aşıldığında mail gönderimi yapılabilir ve node exporter yüklenerekte target üzerinden daha fazla veri elde edilebilir.

Bir sonraki yazımda aynı kurulumların Kubernetes Cluster içerisinde uygulanışını göstereceğim.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu