Prometheus, açık kaynak kodlu bir izleme ve alarm sistemidir. Sistemlerden, uygulamalardan ve veritabanlarından metrikleri toplayarak veritabanına kaydeder ve bu verileri analiz etmenizi sağlar. Prometheus, zaman serisi verilerini toplar ve verileri sorgulamak için PromQL adlı özel bir sorgulama dili kullanır. Elasticsearch ve PostgreSQL gibi veri kaynaklarının durumu, performansı ve diğer metriklerini sürekli olarak izlemek için idealdir.
Grafana, çeşitli veri kaynaklarını kullanarak etkileşimli grafikler ve panolar (dashboard) oluşturmanızı sağlayan bir görselleştirme aracıdır. Prometheus gibi izleme sistemlerinden veri alarak metrikleri görselleştirir. Grafana sayesinde, PostgreSQL ve Elasticsearch gibi sistemlerin performans metriklerini grafiklerle izleyebilir ve uyarılar alabilirsiniz.
•PostgreSQL Metrikleri: Sorgu performansı, CPU kullanımı, bellek kullanımı, disk I/O, aktif bağlantı sayısı, gecikme süreleri vb.
•Elasticsearch Metrikleri: Düğüm sağlığı, indeks boyutu, arama ve indeksleme oranları, bellek kullanımı, işlemci kullanımı, belge sayısı vb.
Öncelikle Prometeus Kurulumu Ve konfigürasyonunu yapıyoruz
# wget https://github.com/prometheus/prometheus/releases/download/v3.0.0-rc.0/prometheus-3.0.0-rc.0.linux-amd64.tar.gz
Dosyaları tardan çıkarıp binary lerini /usr/local/bin altına taşıyoruz
# mv prometheus-3.0.0-rc.0.linux-amd64/prometheus /usr/local/bin/
# mv prometheus-3.0.0-rc.0.linux-amd64/promtool /usr/local/bin/
Konfigürasyon dosyalarını ve dizinlerini lerini oluşturmamız gerekmekte.
# mkdir /etc/prometheus
# vi /etc/prometheus/prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'postgresql'
static_configs:
- targets: ['localhost:9187']
- job_name: 'elasticsearch'
static_configs:
- targets: ['localhost:9200']
Prometheus servislerini oluşturalım
# vi /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target
[Service]
User=root
Group=root
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
Prometheus servislerini enable yapıp çalıştırıyoruz.
# systemctl daemon-reload
# systemctl start prometheus
# systemctl enable prometheus
# systemctl status prometheus
● prometheus.service - Prometheus
Loaded: loaded (/etc/systemd/system/prometheus.service; disabled; vendor preset: disabled)
Active: active (running) since Sun 2024-11-10 19:00:15 UTC; 11s ago
Main PID: 86454 (prometheus)
Tasks: 8 (limit: 10910)
Memory: 17.7M
CGroup: /system.slice/prometheus.service
└─86454 /usr/local/bin/prometheus --config.file /etc/prometheus/prometheus.yml --storage.tsdb.path /var/lib/prometheus/
Prometheus ekarnına http://ip_adress:9090 adresinden erişebiliriz
Grafana Kurulumu yapıyoruz öncelikle gpg key import ediyoruz, sonra grafayaı indiriyoruz
# wget -q -O gpg.key https://rpm.grafana.com/gpg.key
# rpm --import gpg.key
# vi /etc/yum.repos.d/grafana.repo
[grafana]
name=grafana
baseurl=https://rpm.grafana.com
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://rpm.grafana.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
# dnf install grafana
# systemctl enable grafana-server
# systemctl start grafana-server
Grafana ekranına bağlanmak için http:_ip_address:3000 üzerinden aşağıdaki ekrana erişebiliriz, girişte şifre ekranına admin ve şifre olarak admin diye giriş yapabiliriz, ilk girişte hemen şire değiştirme ekranına atar bizi ve burada admin şifresini belirliyoruz.
Buradan sonra artık , prometheus exporterlar ile metriklerin prometheus a aktarılması , sonrasında da aktarılan bu verilerin grafanada görselleştirilmesi kısımlarını yapmalıyız, öncelikle elasticsearch için prometheus exporter
Install Elasticsearch Exporter
Elasticsearch instance larından birisine exporter indiriyoruz, güncel exporter için https://github.com/prometheus-community/elasticsearch_exporter/releases
# wget https://github.com/prometheus-community/elasticsearch_exporter/releases/download/v1.8.0/elasticsearch_exporter-1.8.0.linux-amd64.tar.gz
dosyaları dizine çıkaralım ve bir user oluşturalım
# tar -xvf elasticsearch_exporter-1.8.0.linux-amd64.tar.gz
# useradd --no-create-home --shell /bin/false elastic_search
Çıkarılan dosyayı servis olarak çalıştırılacağı dizin olan /ust/local/bin/ dizini altına gönderelim
# cd elasticsearch_exporter-1.8.0.linux-amd64
# ll
total 13316
-rw-r--r--. 1 1001 1002 7201 Sep 20 14:56 CHANGELOG.md
-rw-r--r--. 1 1001 1002 49644 Sep 20 14:56 dashboard.json
-rw-r--r--. 1 1001 1002 1805 Sep 20 14:56 deployment.yml
-rwxr-xr-x. 1 1001 1002 13500568 Sep 20 14:55 elasticsearch_exporter
-rw-r--r--. 1 1001 1002 979 Sep 20 14:56 elasticsearch.rules
-rw-r--r--. 1 1001 1002 11357 Sep 20 14:56 LICENSE
-rw-r--r--. 1 1001 1002 48214 Sep 20 14:56 README.md
# cp elasticsearch_exporter /usr/local/bin/
# chown elastic_search:elastic_search /usr/local/bin/elasticsearch_exporter
Şimdi elasticsearch _exporter servisini oluşturalım;
# vi /etc/systemd/system/elasticsearch_exporter.service
[Unit]
[Unit]
Description=Prometheus ES_exporter
After=local-fs.target network-online.target network.target
Wants=local-fs.target network-online.target network.target
[Service]
User=elastic_search
Nice=10
ExecStart=/usr/local/bin/elasticsearch_exporter --es.uri=http://elastic_search@localhost:9200 --es.all --es.indices --es.timeout 20s
ExecStop=/usr/bin/killall elasticsearch_exporter
[Install]
WantedBy=default.target
# systemctl daemon-reload
# systemctl enable elasticsearch_exporter
# systemctl start elasticsearch_exporter
Elasticsearch exporter çalışıyor default portu 9114, bu http://_prometheus_ip_addr:9114 linkinden gelen metrikleri görebilirsiniz.
Exporter metriikleri gönderiri durumda şimdi prometheus ile bu metrikleri alıp kaydedelim. prometheus sunucusunda prometheus.yml dosyasını düzenleyelim
# vi /etc/prometheus/prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'elasticsearch_exporter'
static_configs:
- targets: ['elasticsearch_ip:9114']
Bunun ardından prometheus servislerini yeniden başlatmalıyız
# systemctl restart prometheus.service
Prometheus arayüzünden elasticsearch_exporter sağlık durumuna bakabiliriz
artık bunu Grafana da görselleştirmemiz gerekmekte.
Elasticsearch In Grafana
Ayarlarını yapıyoruz
En altta kaydet ve test et kısmında bağlantı olduğunu gördüğümüzde data soruce tanımımız bitmiş oluyor. Ve görsel olarak gösterme kısmına geçiyoruz. New Dashbord diyerek devam etmeliyiz
Burada hazır template üzerinden gidilebilir , veya tamamen bu metriklerden kendi dashboard arayüzünüzü oluşturabilirsiniz, ayrıca template leride özelleştirebilirsiniz. Ben hazır basit bir tamplate olan Grafana ID 4358 olan template i grafana sitesinden json dosyasını indirip , kendi grafanama import ediyorum