Promethues & Grafana
MySql Docker Örneği (docker-compose.yml)
Merhabalar,
Bu yazımda Promethues & Grafana ve Mysql Exporter örneğini inceliycez. Örneğimizi Docker ile yapacaz. İlk olarak nedir ne amaçla kullanıyoruz bunları öğrenelim.
Promethues: 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 Alert Manager ile konuşan monitoring toolumuzun ana yapısıdır.
Prometheus, Hedeflerden metrikleri toplar, sonuçları görüntüler ve belirtilen koşullar gözlendiğinde alarmlar tetikleyebilir.
Grafana: Veritabanı verilerinin sorgulanmasını, görselleştirilmesini ve alarmlar oluşturulmasını sağlamaktadır. Grafana ile pek çok farklı kaynaktan verileri alıp tek bir gösterge tablosunda birleştirebililiriz. Uygulamayı açık kaynak olarak edinebileceğiniz gibi cloud ve enterprise seçenekleri üzerinden de belirtilen sınırlandırmalar ve ücretlendirmeler çerçevesinde kullanılabilmektedir.
İlk olarak docker cli ile bir tane mysql veritabanı ayağa kaldıralım. Bunun için kullanacağımız komut aşağıdaki gibidir.
docker container run — name deniz-mysql-1 — detach — publish 3306:3306 -e MYSQL_ROOT_PASSWORD=secret1 mysql
Komutu biraz açıklamak gerekirse;
- Önemli olan burada enviroment olarak root şifresinin belirtilmesidir. Çünkü container içerisinde bağlandığımız mysql veritabanı geçiş olarak kullanacağımız şifredir.
docker ps -a komutu çalıştırdığımızda görüldüğü gibi container çalışıyor durumdadır.
Şimdi de inspect komutu ile container aldığı gateway, ip adresine ve network bakalım. Bunun için kullacağımız komut
docker container inspect container_name yada container id
Container ayakta ve gerekli bilgileri öğrenmiş olduk. Şimdide mysql veritabanı dinleyecek ve metricleri toplayacak containerımız olan mysql-exporter oluşturmaya geldi. Bunun için çalıştıracağımız komut
docker run -d -p 9104:9104 — network mysql-exporter_monitoring restart=”always” -e DATA_SOURCE_NAME=”root:secret1@(IP_ADRESI:CONTAINER_PORTU)/” — name mysql-exporter prom/mysqld-exporter
Yukarıdaki komutu biraz açıklamak gerekirse;
- Bilinmesi gereken en önemli nokta burda DATA_SOURCE_NAME alanındaki root yazan kullanıcın ismi secret1 yazan ise bizim mysql veritabanı container oluşturduğumuzda verdiğimiz şifredir. Ip adresi ise mysql container ayağa kaldırdığınız bilgisayarın ip si ve container ayağa kaldırdığınız port numarası yazılır.
- Diğer bir önemli nokta ise network tanımlaması. Metricleri almak için aynı networkde olması gerekiyor. Bunun için isterseniz aşağıdaki komut ile network oluşturabilirsiniz yada ilerleyen kısımda docker-compose.yml dosyamızı ayağa kaldırdığımızda network tanımlaması yaptığımız için network kendisi oluşacaktır.
docker network create network_ismi
- Son olarak ta exporter imagemızı yazıyoruz. ( prom/mysqld-exporter )
Terminalden,
docker container ls -a
komutu çalıştırdığımızda containerımızın çalıştığı görebiliriz.
Şimde de yazımızın konusu olan prometheus ve grafana kurulumu yapalım. Docker Compose ile servislerimiz oluşturacağız. Prometheus, Grafana ve Node_exporter servisleri oluşturcaz. Docker Compose dosyamızı inceleyelim.
version: ‘3’networks:
monitoring:services:
prometheus:
image: prom/prometheus:latest
container_name: monitoring_prometheus
restart: unless-stopped
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
command:
- ‘ — config.file=/etc/prometheus/prometheus.yml’
expose:
- 9090
ports:
- 9090:9090
networks:
- monitoringnode-exporter:
image: prom/node-exporter:latest
container_name: monitoring_node_exporter
restart: unless-stopped
expose:
- 9100
ports:
- 9100:9100
networks:
- monitoringgrafana:
image: grafana/grafana:latest
container_name: monitoring_grafana
restart: unless-stopped
links:
- prometheus:prometheus
depends_on:
- prometheus
ports:
- “3000:3000”
networks:
- monitoring
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
# — GF_SMTP_HOST=smtp.gmail.com:587
# — GF_SMTP_USER=myadrress@gmail.com
# — GF_SMTP_PASSWORD=mypassword
- GF_SMTP_FROM_ADDRESS=myaddress@gmail.com
Yukarıda görüldüğü gibi compose dosyamızı biraz açıklarsak.
- ilk olarak prometheus servisi bakalım. Görüldüğü gibi basit bir servis tarayıcının 9090 portu dışarı açılmış ve prometheus latest versiyonlu image kullanılmış. En önemlisi network tanımlaması. Network olarak monitoring yazılmış ama oluştururken lokalde networkü projeyi açtığımız isim ‘alt tre’ network adı olarak oluşturmasıdır. Buraya dikkat edilmesi gerekiyor sizin proje isminiz ne ise onu alır ve araya alt tre ekleyerek oluşturur.
- İkinci servisimiz ise node_exporterdur. Metricleri topladığımız yapı olarak düşünebiliriz.
- Üçüncü servisimiz ise grafana servisidir. Tarayıcının 3000 portu dışarı açılmıştır. Grafananın latest versiyonlu image kullanılmıştır. Burada önemli olan enviroment ve network tanımlamasıdır. Network konusu ilk serviste yukarıda anlattığım mantıkla aynıdır. Enviroment ise görüldüğü gibi grafanaya tarayıcıdan gittiğinizde admin şifresini kendiniz belirleyebilirsiniz. Yukarıdaki ‘admin’ olarak belirlenmiştir.
Şimdi de metricleri toplayacak prometheus.yml inceleyelim.
# my global configglobal:
scrape_interval: 50s
evaluation_interval: 120s
external_labels:
monitor: 'monitoring'rule_files:
# - "alert.rules"
# - "first.rules"
# - "second.rules"scrape_configs:
- job_name: 'prometheus'
scrape_interval: 10s
static_configs:
- targets: ['localhost:9090']- job_name: 'node-exporter'
scrape_interval: 5s
static_configs:
- targets: ['node-exporter:9100']- job_name: 'mysql-exporter'
scrape_interval: 5s
static_configs:
- targets: ['export_Ipsi:exporter portu']
Yukaridaki yaml dosyasını biraz açıklamak gerekirse;
- -job_name ile bir isim belirtiyoruz ve bu isim bizim prometheus’umdaki status -> target gittiğimizde iş(job)ismidir.
- Önemli olan ise bu yaml targets kısmıdır. Biz burada prometheus ve grafanaya localimizden yani localhost gidebiliriz. Çünkü metricleri yani datasource’musu zaten prometheus olarak tanıtcaz. Ama metriclerini alacağımız örneğimizdeki mysql veritabanı (deniz-mysql-1) containerımıza localden gidemeyiz. MySql-exporterın aldığı Ip adresi ve portu yazılır. İsterseniz burada aldığı gateway verebilirsiniz.
Not: Promethues ve grafanın çalışma mantığı bakacak olursak çalıştırdığımız servis veya containerdaki metricleri alır ve promethues verir prometheus da grafana ile monitör edebiliriz. Bilinmesi gereken en önemli nokta hepsinin aynı network olmasıdır.
Şimdide tarayıcımızdan prometheus gidelim. Bunun için localhost:9090 gidiyoruz. Status sekmesinde targets bölümüne gittiğimizde mysql ile aldığımız tüm metricleri görebiliriz. Bunun için endpointeki linke tıkladığımızda metric listesini görebiliriz.
Şimde de grafana kurulumu geçelim. Bunun için tarayıcıdan localhost:3000 gidelim ve gelen ekranda username=admin password = admin yazalım. Çünkü biz enviroment password ‘admin’ olarak belirtmiştik.
Home sayfasında sol taraftaki ayarlar iconunda data source seçilir. Url kısmına prometheus servisim gateway yazılır ve save test deyip çıkarız.
Not: Burada localhost ile gidemezsiniz. Çünkü network içerisinde localhost bilmez Ip adresi veya gateway den gidebilirsiniz.
Şimdide grafana labs eklemeye geldi. Bunun için ben
‘https://grafana.com/grafana/dashboards/7362’ dashboard import ediyorum. Grafana home sayfasındaki (+) iconu import deyip açılan sayfada ‘7362’ yazıp load diyorum ve promethues data source olarak belirtiyorum.
Son olarak ta eklediğim dashboard gittiğimde metricleri aldığı görebilirim.
İsterseniz bu metriclere kendi query leriniz yazabilirsiniz. Bunun için edit diyip açılan query istediğiniz query yazabilirsiniz.
Bu yazımızın da sonuna gelmiş bulunmaktayız. Araştırmalarım ve sektörde karşılaştığım senaryolar üzerine yazılarımı yazmaya devam edeceğim. Umarım faydalı bir yazı olmuştur.
Yazımı okuduğunuz için teşekkürler :)