Yazının diğer makaleleri için alttaki linkleri kullanabilirsiniz.
- Prometheus'a Giriş
- Prometheus Instrumentation ve Node Exporter Kullanımı
- PromQL Kullanımı
- Prometheus Kural Tanımlama
- Prometheus Alertmanager Kullanımı
- Prometheus Blackbox Exporter Kullanımı
- Prometheus Pushgateway Exporter Kullanımı
- Prometheus Service Discovery
- Prometheus Grafana Entegrasyonu
Merhaba arkadaşlar
Bu yazımızda service discovery kavramını anlamaya çalışacağız.Şimdiye kadar prometheus.yml dosyasına tanımladığımız exporter'lar da aslında birer service tanımlaması.
Öncelikle nedir ne değildir mimari kurgusu üzerinden anlamaya çalışalım. İlgili servisin (varsa) desteklenen service tanımlaması ile metrik toplamak mümkün olacaktır.
Prometheus resmi konfigürasyon referans sayfasına bakacak olursak aşağıdaki gibi bir liste göreceğiz.
En çok kullanılanlardan bazılarını işaretledim. Birkaçını inceleyelim.
Node exporter üzerinden örnek verecek olursak bütün makinelere node exporter kurduktan sonra makineleri Prometheus'a tanıtmak için scrape_configs içine file_sd_config tanımlaması yapmak yeterli.
Bunun için json veya yaml uzantılı dosya kullanılabilir.
Öncekile prometheus.yml dosyasına dosyamızı tanımlıyoruz.
scrape_configs:
- job_name: 'node'
file_sd_configs:
- files:
- 'targets.json'
target.json dosyamızın içeriği aşağıdaki gibi olabilir.
[
{
"targets": [ "sunucu1:9100", "sunucu2:9100", "sunucu3:9100" ],
"labels": {
"env": "prod_sunuculari",
"job": "web_sunuculari"
}
}
]
Bu şekilde kullanmanın en büyük faydası da yeni eklediğimiz sunucular için sistemi restart etmek zorunda olamamız.
Sadece json olarak tanımlanabilir.
Öncekile prometheus.yml dosyasına json tipinde target'larımızı döndürecek url'i tanımlıyoruz.
scrape_configs:
- job_name: 'node'
http_sd_configs:
- url: http://localhost/http_sd_targets
basic_auth:
username: aaaa
password: bbbb
URL aşağıdakine benzer bir json formatında veri döndürmelidir. Burada yapabileceklerimiz tabii ki bununla sınırlı değil. Eğer takip edeceğimiz http servisleri oauth2 standardı kullanarak hizmet veriyorsa bunu kurgulamak da mümkün. Proxy varsa eğer arada bunu ayarlamak da mümkün. Daha fazlası için resmi dokümanları inceleyebilirsiniz.
[
{
"targets": ["10.0.10.2:9100", "10.0.10.3:9100", "10.0.10.4:9100", "10.0.10.5:9100"],
"labels": {
"__meta_datacenter": "london",
"__meta_prometheus_job": "node"
}
},
{
"targets": ["10.0.40.2:9100", "10.0.40.3:9100"],
"labels": {
"__meta_datacenter": "london",
"__meta_prometheus_job": "alertmanager"
}
},
{
"targets": ["10.0.40.2:9093", "10.0.40.3:9093"],
"labels": {
"__meta_datacenter": "newyork",
"__meta_prometheus_job": "alertmanager"
}
}
]
Kubernetes için çok detaylı konfigürasyon seçenekleri Bulunuyor. Resmi doküman için şu linke bakınız.
Kubernetes Discovery Service ayarları ile sadece Kubernetes node'larını değil aynı zamanda servisleri, pod'ları, ingress tanımlarını da monitör edebilirsiniz.
Ancak genellikle Prometheus Kubernetes için kullanılcaksa external bir Prometheus ayağa kaldırmaktansa community daha çok doğrudan Kubernetes içinden ayağa kaldırıp monitör etmeyi tercih ediyor. Bu şekilde kurulum yapmak isterseniz internette bir çok kaynak bulabilirsiniz.
Umarım faydalı olmuştur.
Yazının diğer makaleleri için alttaki linkleri kullanabilirsiniz.