Prometheus Service Discovery with Consul

Doguspeynirci
Arabam Labs

--

Modern microservice mimarileri ve distributed sistemlerin doğası gereği, hizmetlerin hızla oluşturulması ve yönetilmesini gerektiriyor. Prometheus ve Consul, bu zorluğu aşmak için güçlü bir çözüm sunuyor. Bu makalede, Prometheus’un metrik toplama yeteneklerini Consul’un hizmet keşfi özellikleriyle nasıl birleştirebileceğinizi ve bu kombinasyonun karmaşık altyapılarınızda nasıl fayda sağlayabileceğini anlatacağım.

  • Prometheus, bir açık kaynaklı sistem ve uygulama izleme ve uyarı sistemi olan bir yazılımdır. Prometheus, uygulama ve sistem metriklerini toplamak, depolamak ve sorgulamak için kullanılır ve sorunları tespit etmek ve hata ayıklamak için çok sayıda kullanışlı araç ve özellik sunar.
  • Prometheus’un “Service Discovery” (Hizmet Keşfi) özelliği, dinamik bir ortamda çalışan hizmetleri izlemek ve bu hizmetlere otomatik olarak erişim sağlamak için kullanılır. Service Discovery, Prometheus’un hedeflerini (yani izlenen hizmetleri) dinamik olarak bulmasına ve güncellemesine olanak tanır.
  • Örneğin, Kubernetes ortamında çalışan bir Prometheus örneği, Kubernetes’in kendi API’sini kullanarak etkin olan tüm pod’ları ve servisleri otomatik olarak tespit edebilir. Bu sayede yeni hizmetler ekledikçe veya hizmetler öldüğünde Prometheus, bunları otomatik olarak izlemeye devam eder.

Hashicorp Consul Nedir ?

HashiCorp Consul, modern bir mikro hizmet keşif ve yönetim platformudur. Büyük ölçekli dağıtık uygulamaların hizmetlerini otomatik olarak keşfetmek, konfigüre etmek ve yönetmek için kullanılır. Consul, aynı zamanda hizmetler arasında güvenli iletişim sağlama, uygulamaları yük dengelemesi ile optimize etme ve servislerin durumunu izleme yeteneklerine de sahiptir.

  • Consul’a servis nasıl eklenir ?

Hizmetinizi tanımlayan bir JSON verisi oluşturulmalıdır.

{
"Address": "10.10.10.31",
"ID": "tenant-node-exporter01",
"Name": "tenant-dev-kube-cluster",
"Port": 9100,
"Tags": [
"a_role=master",
"a_location=datacenter",
"a_team=devops",
"a_app=kubernetes",
"a_hostname=tenant-node-exporter01",
"a_environment=development",
"a_job=tenant-dev-kube-cluster"
]
}

Oluşturduğunuz hizmet tanımını kullanarak, Consul API'si üzerinden hizmetimizin kaydedildiğinden emin olunmalıdır. Bunu istediğiniz şekilde otomasyona bağlayabilirsiniz.

curl -X PUT — data-binary @node-exporter.json https://consul-server:8500/v1/agent/service/register

Prometheus ve Consul Entegrasyonu

Yukarıda consul’e tanımlanan servislerde dikkat ederseniz bazı etiketler kullanılmıştı. Consul üzerindeki bu etiketleri, prometheus tarafından discover ettirip, alertmanager veya grafana’ya paslayabiliriz. Örneğin, takım yaptığımız etiketler sayesinde alertmanager entegrasyonu ile, takım bazı alarm mekanizması kurabilir veya grafana gibi veri görselleştirme uygulamaları üzerinde esneklik sağlamaya yardımcı olacaktır.

Aşağıdaki gibi prometheus dynamic target'ımızı ekliyoruz.

- job_name: devops_monitoring
honor_labels: true
honor_timestamps: true
metrics_path: /metrics
scheme: http
consul_sd_configs:
- server: consul-server:8500
services: []
relabel_configs:
- source_labels: [__meta_consul_tags]
regex: .*,a_role=([^,]+),.*
replacement: ${1}
target_label: a_role
- source_labels: [__meta_consul_tags]
regex: .*,a_location=([^,]+),.*
replacement: ${1}
target_label: a_location
- source_labels: [__meta_consul_tags]
regex: .*,a_team=([^,]+),.*
replacement: ${1}
target_label: a_team
- source_labels: [__meta_consul_tags]
regex: .*,a_hostname=([^,]+),.*
replacement: ${1}
target_label: a_hostname
- source_labels: [__meta_consul_tags]
regex: .*,a_environment=([^,]+),.*
replacement: ${1}
target_label: a_environment
- source_labels: [__meta_consul_tags]
regex: .*,a_job=([^,]+),.*
replacement: ${1}
target_label: a_job
- source_labels: [__meta_consul_tags]
regex: .*,a_app=([^,]+),.*
replacement: ${1}
target_label: a_app
- source_labels: [__meta_consul_tags]
regex: .*,a_hostname=([^,]+),.*
replacement: ${1}
target_label: instance

Yukarıdaki konfigurasyon ile beraber prometheus, consul üzerindeki servisleri discover edip izlemeye alacaktır.

services: [] : Job içerisinde tanımlanan bu alan ile istediğiniz spesific servisleri discover edebilirsiniz.

Prometheus ve Consul’un entegrasyonunu kullanarak, hizmetlerinizin sağlığını izlemek ve yönetmek artık daha kolay ve etkili hale geliyor.

--

--