Zabbix ile Prometheus Metrik Formatında Kafka İzleme
Tags: zabbix, prometheus, kafka, monitoring
Published: 2024-05-27 05:37:29

#Prometheus: Zaman Serisi Veritabanı Nedir?
Prometheus, sistemler ve servislerden veri toplamak için kullanılan açık kaynaklı bir zaman serisi veritabanıdır. Verileri "pull" modeli aracılığıyla alır, yani Prometheus, tanımlı hedeflerden düzenli aralıklarla veri çeker. Bu veriler, Prometheus'un yerleşik arayüzünde PromQL (Prometheus Query Language) kullanılarak sorgulanabilir ve görselleştirilebilir. Grafana gibi araçlarla entegrasyonu sayesinde, daha zengin görselleştirme ve kapsamlı dashboard oluşturma imkanı sunar.

#Exporter Nedir?
Exporter'lar, çeşitli kaynaklardan metrikleri toplayan ve bu verileri Prometheus'un anlayabileceği formatta HTTP üzerinden sunan araçlardır. Bu, Prometheus'un hedef sistemlerde doğrudan çalışmasına gerek kalmadan dış kaynaklardan veri toplamasını sağlar.

#Zabbix ile Prometheus Metriklerinin Entegrasyonu

Zabbix, güçlü bir açık kaynak izleme çözümüdür ve Prometheus metriklerini entegre etmek mümkündür. Bu rehber, Prometheus'dan toplanan metriklerin Zabbix kullanılarak nasıl izlenebileceğini adım adım açıklar.

#Gereksinimlerin Listesi:

- **Zabbix sunucusu:** İzleme yapılacak ana sistem.
- **Exporter:** Bu rehberde kullanılacak olan JMX Exporter.
- **Kafka sunucusu:** Metrik kaynağı olarak hizmet veren sunucu.

Docker kullanarak Kafka sunucusunu ve bağlantılı Zookeeper servisini başlatıyoruz. 

```bash
kafka@kafka:~$ docker ps
CONTAINER ID   IMAGE                      COMMAND                  CREATED         STATUS         PORTS                                                                                                      NAMES
7e5f046d5fa4   bitnami/zookeeper:latest   "/opt/bitnami/script…"   6 minutes ago   Up 6 minutes   2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp, :::2181->2181/tcp, 8080/tcp                                    kafka_zookeeper_1
5a28b5f7ca84   bitnami/kafka:latest       "/opt/bitnami/script…"   6 minutes ago   Up 6 minutes   0.0.0.0:9091-9092->9091-9092/tcp, :::9091-9092->9091-9092/tcp, 0.0.0.0:9999->9999/tcp, :::9999->9999/tcp   kafka_kafka_1
```

## Adım 1: Metrik Seçimi ve Tanımlama

Kafka sunucumda çalışan ve 192.168.1.9:9091 adresinde erişilebilen Exporter üzerinden, belirli bir Kafka topic'i için trafik metriklerini seçiyorum.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ylve8krfuiqp8tluok9m.png)

Seçilen metrikler, topic üzerinden gelen ve giden veri akışını ve talep sayısını içerir.

```bash
kafka_server_brokertopicmetrics_meanrate{name="BytesInPerSec",topic="test_topic",} 82.34778932997635
kafka_server_brokertopicmetrics_meanrate{name="BytesOutPerSec",topic="test_topic",} 112.90497508080351
kafka_server_brokertopicmetrics_meanrate{name="TotalFetchRequestsPerSec",topic="test_topic",}
```

## Adım 2: Zabbix Template Oluşturma

Zabbix içinde "Prometheus Metrics" adında bir template oluşturarak, seçilen metrikleri bu template altına item olarak ekleyeceğim.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kzwywuqtvh8krh2eti25.png)


## Adım 3: HTTP Agent oluşturulmalı

Zabbix sunucusunda, Exporter'dan metrikleri çekecek bir HTTP Agent kuruyorum. Bu agent, metriklerin düzenli olarak Zabbix sunucusuna aktarılmasını sağlar.

Yeni bir item oluşturarak "Prometheus Metrics" template'ine ekliyorum.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8r209yxm5efomk2soaat.png)

Item yapılandırmasını tamamladıktan sonra, 'Test' butonuna tıklayarak HTTP Agent'ın düzgün çalışıp çalışmadığını kontrol ediyorum. 


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fht3hbxejmws7rwuacdf.png)

## Adım 4: Bağımlı Öğelerin (Dependent Item) Oluşturulması

Bağımlı öğeler, ana metriklerden türetilen ve daha detaylı analiz için kullanılan veri öğeleridir.

Bu adımda, 'BytesInPerSec' metriğine dayalı olarak "topic_bytes_in_rate" adında bir dependent item oluşturuyorum. Bu dependent item, belirli bir Kafka topic'inden gelen veri akış hızını temsil eder ve ölçümleri daha spesifik bir kontekste yerleştirir.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o4r30otboqlngh7bz5p9.png)

Oluşturduğum dependent item için preprocessing sekmesine giderek "add" butonuna tıklayarak yeni bir preprocessing kuralı ekliyorum. Bu kural, Prometheus'un metrik formatını Zabbix'in anlayacağı formata dönüştürür. 

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ae9b8c7snaygst3hrfru.png)

Kullanılacak parametre, Prometheus Pattern'dir ve metrik değerlerini doğru bir şekilde parse etmek için önceden belirlenen Prometheus sorgusu kullanılır.

Örneğin, `kafka_server_brokertopicmetrics_meanrate{name="BytesInPerSec", topic="test_topic"}` metriği, Kafka sunucusundaki belirli bir topic'e gelen veri miktarını ölçer. Bu örnek metrik, rehberimizde kullanılan örnek bir metrik değeridir.

Bu sürecin çalışması için, seçilen her metrik için ayrı bir dependent item oluşturulmalıdır.

## Adım 5: Kafka Server'a Template Ekleme

Oluşturduğumuz bu template'i, izlemek istediğimiz Kafka sunucusuna ekliyoruz.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9oifwlv53ionxd30x8kf.png)

## Adım 6: Metrikleri Kontrol Etme

Son adım olarak, Zabbix arayüzünden 'Monitoring > Hosts > Kafka Sunucusu > Latest Data' yolunu takip ederek sunucumuzda izlemekte olduğumuz metriklerin güncel verilerine ulaşıyoruz.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a69kkh6g9df5ami0rghx.png)


# Sonuç
Bu rehber, Prometheus ve Zabbix kullanarak Kafka sunucusundan metrik toplama sürecini adım adım ele almakta ve bu süreci nasıl yöneteceğinizi açıklamaktadır. Prometheus'un güçlü zaman serisi veri toplama kabiliyeti ve Zabbix ile olan entegrasyonu sayesinde, karmaşık sistemlerin izlenmesi ve yönetilmesi kolaylaşmaktadır.