Kafka nasıl güvenli hale getirilir ve izlenir?

0 Hisse senetleri
0
0
0
0

giriiş

Apache Kafka, kümeye yalnızca yetkili personel ve uygulamaların bağlanabilmesini sağlamak için çeşitli güvenlik protokollerini ve kimlik doğrulama iş akışlarını destekler. Varsayılan yapılandırmada Kafka herkesin erişimine izin verir, ancak hiçbir güvenlik kontrolü etkin değildir. Keşif ve geliştirme için kullanışlı olsa da, üretim dağıtımlarının dış dünyaya açılmadan önce uygun şekilde güvenli hale getirilmesi gerekir. Ayrıca, sorunsuz çalışmasını sağlamak ve olası arızaları önlemek için bu tür ortamların izlenmesi gerekir.

Bu eğitimde, standart bir kullanıcı adı ve parola oturum açma akışı sağlamak için TLS trafik şifrelemesini ve SASL kimlik doğrulamasını yapılandırarak Kafka kurulumunuzu güçlendireceksiniz. Güvenli bir kümeye bağlanmak için sağlanan üretici ve tüketici betiklerini nasıl yapılandıracağınızı göreceksiniz. Ardından, Kafka metriklerini nasıl dışa aktaracağınızı ve Grafana'da nasıl görselleştireceğinizi öğreneceksiniz. Ayrıca, AKHQ tarafından sağlanan kullanımı kolay, web tabanlı bir arayüz aracılığıyla küme düğümlerinize ve konularınıza nasıl erişeceğinizi de öğreneceksiniz.

Ön koşullar
  • En az 4 GB RAM ve 2 işlemciye sahip bir droplet. Ubuntu Server için kurulum talimatları için ilk sunucu kurulumunu izleyin.
  • Apache Kafka, Droplet'inize yüklendi ve yapılandırıldı. Kurulum talimatları için Kafka'ya Başlarken eğitimini izleyin. Sadece 1. ve 2. Adımları tamamlamanız yeterli.
  • Java'nın anahtarları ve sertifikaları nasıl yönettiğini öğrenin. Daha fazla bilgi için Java Keytool Essentials: Java Anahtar Depolarıyla Çalışma eğitimine bakın.
  • Grafana sunucunuza veya yerel makinenize kuruludur. Talimatlar için lütfen Ubuntu'da Grafana'yı nasıl kuracağınıza ve güvenli hale getireceğinize dair eğitime bakın. Sadece ilk dört adımı tamamlamanız yeterlidir.
  • Tamamen kayıtlı bir alan adı droplet'ınıza işaret eder. Bu eğitimde your_domain kullanılır ve Grafana tarafından istenen alan adını işaret eder. Namecheap'ten bir alan adı satın alabilir, Freenom'dan ücretsiz bir alan adı alabilir veya tercih ettiğiniz bir alan adı kayıt kuruluşunu kullanabilirsiniz.

Adım 1 – Kafka Güvenlik Protokollerini Yapılandırın

Kafka, standart yapılandırmasında, isteğin kaynağını kontrol etmeden herkesin bağlanmasına izin verir. Bu, kümenizin varsayılan olarak herkes tarafından erişilebilir olduğu anlamına gelir. Bu, yerel makineler ve özel kurulumlar üzerindeki bakım yükünü azalttığı için test açısından iyi olsa da, üretim ve genel düzeydeki Kafka kurulumlarında yetkisiz erişimi önlemek için güvenlik özellikleri etkinleştirilmelidir.

Bu adımda, Kafka aracınızı, aracı ile tüketiciler arasındaki trafik için TLS şifrelemesini kullanacak şekilde yapılandıracaksınız. Ayrıca, kümeye bağlanırken kimlik doğrulama çerçevesi olarak SASL'yi de ayarlayacaksınız.

TLS sertifika oluşturma ve depolama

TLS kurulumu için gereken sertifikaları ve anahtarları oluşturmak için Confluent Platform Güvenlik Araçları deposunda bulunan betiği kullanacaksınız. Öncelikle, aşağıdaki komutu çalıştırarak betiği ana dizininize kopyalayın:

git clone https://github.com/confluentinc/confluent-platform-security-tools.git ~/kafka-ssl

Şuraya git:

cd ~/kafka-ssl

Kullandığınız betiğin adı kafka-generate-ssl-automatic.sh'dir ve sizden ortam değişkenleri olarak ülkenizi, eyaletinizi, kuruluşunuzu ve şehrinizi girmenizi ister. Bu parametreler sertifikaları oluşturmak için kullanılır, ancak içerikleri önemsizdir. Ayrıca, oluşturulan Java güvenini ve anahtar deposunu güvence altına almak için kullanılan bir parola da sağlamanız gerekir.

Gerekli ortam değişkenlerini ayarlamak için, your_tls_password değerini istediğiniz değerle değiştirerek aşağıdaki komutları çalıştırın:

export COUNTRY=US
export STATE=NY
export ORGANIZATION_UNIT=SE
export CITY=New York
export PASSWORD=your_tls_password

ŞİFRE'nin en az altı karakterden oluşması gerektiğini unutmayın.

Aşağıdakileri çalıştırarak betiğe çalıştırılabilir izinler verin:

chmod +x kafka-generate-ssl-automatic.sh

Daha sonra gerekli dosyaları oluşturmak için çalıştırın:

./kafka-generate-ssl-automatic.sh

Çok sayıda çıktı olacak. Tamamlandığında, dizindeki dosyaları listeleyin:

ls -l

Çıktı şu şekilde olmalıdır:

Outputrw-rw-r-- 1 kafka kafka 964 May 13 09:33 README.md
-rw-rw-r-- 1 kafka kafka 1063 May 13 09:34 cert-file
-rw-rw-r-- 1 kafka kafka 1159 May 13 09:34 cert-signed
-rwxrw-r-- 1 kafka kafka 6016 May 13 09:33 kafka-generate-ssl-automatic.sh
-rwxrwxr-x 1 kafka kafka 7382 May 13 09:33 kafka-generate-ssl.sh
drwxrwxr-x 2 kafka kafka 4096 May 13 09:34 keystore
-rw-rw-r-- 1 kafka kafka 184929 May 13 09:33 single-trust-store-diagram.pages
-rw-rw-r-- 1 kafka kafka 36980 May 13 09:33 single-trust-store-diagram.pdf
drwxrwxr-x 2 kafka kafka 4096 May 13 09:34 truststore

Sertifika, güven ve anahtar deposunun başarıyla oluşturulduğunu göreceksiniz.

Kafka'yı TLS ve SASL için yapılandırma

Artık TLS şifrelemesini etkinleştirmek için gerekli dosyalara sahip olduğunuza göre, Kafka'yı bunları kullanacak ve SASL kullanarak kullanıcıları kimlik doğrulaması yapacak şekilde yapılandıracaksınız.

Kurulum dizininin config/kraft bölümündeki server.properties dosyasını değiştireceksiniz. Önkoşulların bir parçası olarak ana dizininizdeki Kafka'ya kurdunuz. Dosyaya ulaşmak için şu komutu çalıştırın:

cd ~/kafka

Düzenleme için ana yapılandırma dosyasını açın:

nano config/kraft/server.properties

Aşağıdaki satırları bulun:

...
listeners=PLAINTEXT://:9092,CONTROLLER://:9093
# Name of listener used for communication between brokers.
inter.broker.listener.name=PLAINTEXT
# Listener name, hostname and port the broker will advertise to clients.
# If not set, it uses the value for "listeners".
advertised.listeners=PLAINTEXT://localhost:9092

Bunları aşağıdaki şekilde değiştirin, PLAINTEXT'i BROKER ile değiştirin:

...
listeners=BROKER://:9092,CONTROLLER://:9093
# Name of listener used for communication between brokers.
inter.broker.listener.name=BROKER
# Listener name, hostname and port the broker will advertise to clients.
# If not set, it uses the value for "listeners".
advertised.listeners=BROKER://localhost:9092

Daha sonra listener.security.protocol.map satırını bulun:

# Maps listener names to security protocols, the default is for them to be the same. See the config documentation for more details
listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL

BROKER'ı SASL_SSL'e eşlemek için tanımı şu değerle gömün:

# Maps listener names to security protocols, the default is for them to be the same. See the config documentation for more details
listener.security.protocol.map=BROKER:SASL_SSL,CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL

Burada, dinleyicilerde kullandığınız BROKER takma adı tanımını eklediniz ve bunu SASL_SSL'e eşlediniz; bu, hem SSL'nin (TLS'nin eski adı) hem de SASL'nin kullanılması gerektiğini belirtir.

Daha sonra dosyanın sonuna gidin ve aşağıdaki satırları ekleyin:

ssl.truststore.location=/home/kafka/kafka-ssl/truststore/kafka.truststore.jks
ssl.truststore.password=your_tls_password
ssl.keystore.location=/home/kafka/kafka-ssl/keystore/kafka.keystore.jks
ssl.keystore.password=your_tls_password
ssl.key.password=your_tls_password
ssl.client.auth=required
sasl.enabled.mechanisms=PLAIN
sasl.mechanism.controller.protocol=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN
authorizer.class.name=org.apache.kafka.metadata.authorizer.StandardAuthorizer
allow.everyone.if.no.acl.found=false
super.users=User:admin

Öncelikle, oluşturduğunuz güven ve anahtar depoları için konumları ve parolaları tanımlarsınız. ssl.client.auth parametresini gerekli olarak ayarlayarak Kafka'ya geçerli bir TLS sertifikası sunmayan tüm bağlantıları reddetmesini söylersiniz. Ardından, SASL mekanizmasını PLAIN olarak ayarlayarak etkinleştirirsiniz. PLAIN, şifreli bir bağlantı gerektirmesi ve her ikisinin de kullanıcı adı ve parola kombinasyonuna dayanması bakımından PLAINTEXT'ten farklıdır.

Son olarak, yetkilendirme sınıfını StandardAuthorizer olarak ayarlayın. Bu sınıf, kimlik bilgilerini yakında oluşturacağınız yapılandırma dosyasıyla karşılaştırır. Ardından, allow.everyone.if.no.acl.found parametresini false olarak ayarlayarak uygunsuz kimlik bilgilerine sahip bağlantıların erişimini kısıtlayın. Ayrıca, kümede yönetim görevlerini gerçekleştirmek için en az bir yönetici kullanıcı olması gerektiğinden, yönetici kullanıcısını süper kullanıcı olarak seçin.

your_tls_password kısmını bir önceki bölümde scripte girdiğiniz şifre ile değiştirmeyi ve dosyayı kaydedip kapatmayı unutmayın.

Artık Kafka'yı yapılandırdığınıza göre, bağlantı için izin verilen kimlik bilgilerini tanımlayan bir dosya oluşturmanız gerekiyor. Kafka, kimlik doğrulama iş akışlarını uygulamak için bir çerçeve olan Java Kimlik Doğrulama ve Yetkilendirme Hizmeti'ni (JAAS) destekler ve kimlik bilgisi tanımlarını JAAS biçiminde kabul eder.

Bunları config/kraft dizinindeki kafka-server-jaas.conf adlı bir dosyaya kaydedeceksiniz. Aşağıdaki komutu çalıştırarak dosyayı oluşturup düzenlemeye açabilirsiniz:

nano config/kraft/kafka-server-jaas.conf

Aşağıdaki satırları ekleyin:

KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="admin"
password="admin"
user_admin="admin";
};

Kullanıcı adı ve parola, kümedeki birden fazla düğüm olduğunda aracılar arasında iletişim kurmak için kullanılacak birincil kimlik bilgilerini belirtir. user_admin satırı, kullanıcı adı admin ve parolası admin olan ve dışarıdan aracıya bağlanabilen bir kullanıcıyı tanımlar. İşiniz bittiğinde dosyayı kaydedip kapatın.

Kafka, ana yapılandırmayı tamamladığı için kafka-server-jaas.conf dosyasının farkında olmalıdır. Kafka systemd servis yapılandırmasını değiştirmeniz ve buna bir referans vermeniz gerekir. Servisi düzenlemeye açmak için aşağıdaki komutu çalıştırın:

sudo systemctl edit --full kafka

-full komutunu geçtiğinizde, hizmetin tüm içeriğine erişebilirsiniz. ExecStart satırını bulun:

...
User=kafka
ExecStart=/bin/sh -c '/home/kafka/kafka/bin/kafka-server-start.sh /home/kafka/kafka/config/kraft/server.properties > /home/kafka/kafka/kafka.log 2>&1'
...

Üstüne şu satırı ekleyin, böylece şu şekilde görünecektir:

...
User=kafka
Environment="KAFKA_OPTS=-Djava.security.auth.login.config=/home/kafka/kafka/config/kraft/kafka-server-jaas.conf"
ExecStart=/bin/sh -c '/home/kafka/kafka/bin/kafka-server-start.sh /home/kafka/kafka/config/kraft/server.properties > /home/kafka/kafka/kafka.log 2>&1'
...

Bu, yapılandırmadaki java.security.auth.login.config parametresini, ana Kafka yapılandırmasından ayırarak JAAS yapılandırma dosyasının yoluna ayarlayacaktır. İşiniz bittiğinde dosyayı kaydedip kapatın. Hizmet tanımını şu komutu çalıştırarak yeniden yükleyin:

sudo systemctl daemon-reload

Daha sonra Kafka'yı yeniden başlatın:

sudo systemctl restart kafka

Kafka kurulumunuz için TLS şifrelemesini ve SASL kimlik doğrulamasını artık yapılandırdınız ve şimdi sağlanan konsol komut dosyalarıyla bunlara nasıl bağlanacağınızı öğreneceksiniz.

Adım 2 – Güvenli bir kümeye bağlanın

Bu adımda, sağlanan konsol betikleriyle JAAS yapılandırma dosyalarını kullanarak güvenli bir Kafka kümesine nasıl bağlanacağınızı öğreneceksiniz.

İleti üretimi ve tüketim konularını yönetmek için sağlanan betikler dahili olarak Java kullanır ve bu nedenle güven ve anahtar deposunun konumlarını ve SASL kimlik doğrulamasını tanımlayan JAAS yapılandırmasını kabul eder.

Bu yapılandırmayı ana dizininizdeki client-jaas.conf adlı bir dosyaya kaydedeceksiniz. Dosyayı oluşturun ve düzenlemek üzere açın:

nano ~/client-jaas.conf

Aşağıdaki satırları ekleyin:

security.protocol=SASL_SSL
ssl.truststore.location=/home/kafka/kafka-ssl/truststore/kafka.truststore.jks
ssl.truststore.password=your_tls_password
ssl.keystore.location=/home/kafka/kafka-ssl/keystore/kafka.keystore.jks
ssl.keystore.password=your_tls_password
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="admin";
ssl.endpoint.identification.algorithm=

Daha önce olduğu gibi, protokolü SASL_SSL olarak ayarlayıp oluşturduğunuz anahtar depoları ve güven depoları için yolları ve parolayı sağlayın. Ardından, SASL mekanizmasını PLAIN olarak ayarlayın ve admin kullanıcısı için kimlik bilgilerini sağlayın. Bağlantı sorunlarını önlemek için ssl.endpoint.identification.algorithm parametresini açıkça temizleyin, çünkü ilk betikler sertifika uç noktası olarak çalıştıkları makinenin ana bilgisayar adını ayarlar ve bu doğru olmayabilir.

your_tls_password değerini uygun değerle değiştirin, ardından dosyayı kaydedip kapatın.

Bu dosyayı betiklere aktarmak için --command-config parametresini kullanabilirsiniz. Aşağıdaki komutla kümede yeni bir konu oluşturun:

bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic new_topic --command-config ~/client-jaas.conf

Komut başarıyla çalışmalıdır:

Output...
Created topic new_topic.

Oluşturulduğunu doğrulamak için kümedeki tüm iş parçacıklarını şu komutu çalıştırarak listeleyin:

bin/kafka-topics.sh --bootstrap-server localhost:9092 --list --command-config ~/client-jaas.conf

Çıktı new_topic'in var olduğunu gösterecektir:

Output__consumer_offsets
new_topic
...

Bu bölümde, Kafka kurulumunuzu trafik için TLS şifrelemesi ve kullanıcı adı ve parola kombinasyonuyla kimlik doğrulama için SASL kullanacak şekilde yapılandırdınız. Şimdi, Prometheus kullanarak çeşitli Kafka metriklerini JMX aracılığıyla nasıl dışa aktaracağınızı öğreneceksiniz.

Adım 3 – Prometheus kullanarak Kafka JMX ölçümlerini izleyin

Bu bölümde, Kafka metriklerini toplamak ve Grafana'da sorgulanmasını sağlamak için Prometheus'u kullanacaksınız. Bunun için Kafka için bir JMX dışa aktarıcısı kurmanız ve bunu Prometheus'a bağlamanız gerekiyor.

Java Yönetim Uzantıları (JMX), geliştiricilerin çalışma zamanında uygulama performansı hakkında genel ve özel ölçümleri standart bir biçimde toplamasına olanak tanıyan bir Java uygulamaları çerçevesidir. Kafka, Java dilinde yazıldığı için JMX protokolünü destekler ve konu ve aracıların durumu gibi özel ölçümlerini bu protokol aracılığıyla sunar.

Kafka ve Prometheus'u yapılandırma

Devam etmeden önce Prometheus'u yüklemeniz gerekiyor. Ubuntu makinelerinde apt.app'i kullanabilirsiniz. Depolarını şu şekilde çalıştırabilirsiniz:

sudo apt update

Daha sonra Prometheus'u kurun:

sudo apt install prometheus -y

Diğer platformlar için lütfen resmi web sitesindeki kurulum talimatlarını izleyin.

Kurulum tamamlandıktan sonra, Prometheus için JMX dışa aktarıcı kütüphanesini Kafka kurulumunuza eklemeniz gerekir. Sürümler sayfasına gidin ve adında javaagent bulunan en son sürümü seçin. Yazım sırasında, mevcut en son sürüm 0.20.0 idi. Kafka'nın kurulu olduğu libs/ dizinine indirmek için aşağıdaki komutu kullanın:

curl https://repo.maven.apache.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.20.0/jmx_prometheus_javaagent-0.20.0.jar -o ~/kafka/libs/jmx_prometheus_javaagent.jar

Artık Kafka tarafından JMX dışa aktarma kütüphanesi seçilecek.

Dışa aktarıcıyı etkinleştirmeden önce, Prometheus'a hangi ölçümleri raporlayacağını belirtmeniz ve bu yapılandırmayı Kafka kurulumunuzun config/ dizinindeki jmx-exporter.yml adlı bir dosyaya kaydetmeniz gerekir. JMX dışa aktarıcı projesi uygun bir varsayılan yapılandırma sağlar, bu nedenle Kafka kurulumunuzun config/ dizinindeki jmx-exporter.yml olarak kaydetmek için aşağıdaki komutu çalıştırın:

curl https://raw.githubusercontent.com/prometheus/jmx_exporter/main/example_configs/kafka-2_0_0.yml -o ~/kafka/config/jmx-exporter.yml

Ardından, ihracatçıyı etkinleştirmek için Kafka systemd hizmetini değiştirmeniz gerekir. İhracatçıyı ve yapılandırmasını da içerecek şekilde KAFKA_OPTS ortam değişkenini değiştirmeniz gerekir. Hizmeti düzenlemek için aşağıdaki komutu çalıştırın:

sudo systemctl edit --full kafka

Environment satırını aşağıdaki şekilde değiştirin:

Environment="KAFKA_OPTS=-Djava.security.auth.login.config=/home/kafka/kafka/config/kraft/kafka-server-jaas.conf -javaagent:/home/kafka/kafka/libs/jmx_prometheus_javaagent.jar=7075:/home/kafka/kafka/config/jmx-exporter.yml"

Burada, JMX ihracatçısını yapılandırmasıyla başlatmak için -javaagent argümanını kullanırsınız.

İşiniz bittiğinde dosyayı kaydedip kapatın, ardından Kafka'yı şu komutu çalıştırarak başlatın:

sudo systemctl restart kafka

Bir dakika sonra, 7075 portunun kullanımda olup olmadığını sorgulayarak JMX ihracatçısının çalıştığını kontrol edin:

sudo ss -tunelp | grep 7075

Çıktı şu şekilde olmalıdır:

Outputtcp LISTEN 0 3 *:7075 *:* users:(("java",pid=6311,fd=137)) uid:1000 ino:48151 sk:8 cgroup:/system.slice/kafka.service v6only:0 <->

Bu satır, JMX ihracatçısına işaret eden Kafka servisi tarafından başlatılan bir Java işlemi tarafından 7075 portunun kullanıldığını gösterir.

Şimdi Prometheus'u dışa aktarılan JMX metriklerini izleyecek şekilde yapılandıracaksınız. Ana yapılandırma dosyası /etc/prometheus/prometheus.yml konumunda bulunduğundan, düzenlemek için açın:

sudo nano /etc/prometheus/prometheus.yml

Aşağıdaki satırları bulun:

...
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# Override the global default and scrape targets from this job every 5 seconds.
scrape_interval: 5s
scrape_timeout: 5s
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
- job_name: node
# If prometheus-node-exporter is installed, grab stats about the local
# machine by default.
static_configs:
- targets: ['localhost:9100']

Prometheus'un hangi uç noktaları izlemesi gerektiğini belirten scrape_configs bölümüne, Kafka ölçümlerini kazımak için yeni bir bölüm ekleyin:

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# Override the global default and scrape targets from this job every 5 seconds.
scrape_interval: 5s
scrape_timeout: 5s
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
- job_name: node
# If prometheus-node-exporter is installed, grab stats about the local
# machine by default.
static_configs:
- targets: ['localhost:9100']
- job_name: 'kafka'
static_configs:
- targets: ['your_domain:7075']

Bir Kafka işinin, JMX dışa aktarma uç noktasını işaret eden bir hedefi vardır.

your_domain ifadesini alan adınızla değiştirmeyi unutmayın, ardından dosyayı kaydedip kapatın. Ardından Prometheus'u şu komutu çalıştırarak başlatın:

sudo systemctl restart prometheus

Tarayıcınızda, alan adınızın 9090 numaralı portuna gidin. Prometheus arayüzüne erişeceksiniz. Durum bölümünde, işleri listelemek için Hedefler'e tıklayın:

Prometheus'un Kafka işini devraldığını ve metriklerini toplamaya başladığını fark ettiniz mi? Şimdi bunlara Grafana'da nasıl erişeceğinizi öğreneceksiniz.

Grafana'da metrikleri sorgulama

Önkoşulların bir parçası olarak, Grafana'yı Droplet'inize yüklediniz ve your_domain'inize yerleştirdiniz. Tarayıcınızda Grafana'ya gidin ve kenar çubuğunun Bağlantılar bölümünde Yeni Bağlantı Ekle'ye tıklayın, ardından arama alanına Prometheus yazın.

Prometheus'a tıklayın, ardından sağ üstteki Yeni Veri Kaynağı Ekle düğmesine tıklayın. Prometheus örneğinin adresini girmeniz istenecektir:

Gerçek alan adınızı değiştirerek http://alan_adınız:9090 adresini girin, ardından aşağı kaydırıp Kaydet ve test et'e basın. Başarılı bir mesaj almalısınız:

Prometheus bağlantısı Grafana'ya eklendi. Kenar çubuğundaki Keşfet'e bastığınızda bir metrik seçmeniz istenecektir. Kümeyle ilgili tüm metrikleri listelemek için kafka_ yazabilirsiniz, gösterildiği gibi:

Örneğin, her bölümdeki dahili disk günlüğünün boyutunu gösteren kafka_log_log_size metriğini seçin ve ardından sağ üst köşedeki Sorguyu çalıştır'a basın. Kullanılabilir konuların her biri için zaman içinde ortaya çıkan boyutları göreceksiniz:

Bu noktada, Kafka'nın sağladığı JMX dışa aktarıcı metriklerini ayarladınız ve Prometheus'u bunları toplayacak şekilde yapılandırdınız. Ardından, Grafana içinden bağlanıp Kafka metrikleri üzerinde bir sorgu gerçekleştirdiniz. Artık bir web arayüzü kullanarak bir Kafka kümesini nasıl yöneteceğinizi öğreneceksiniz.

4. Adım – AKHQ ile Kafka Kümelerini Yönetme

Bu adımda, Kafka kümelerini yönetmek için bir web uygulaması olan AKHQ'yu nasıl kuracağınızı ve kullanacağınızı öğreneceksiniz. Bu uygulama, konuları, bölümleri, tüketici gruplarını ve yapılandırma parametrelerini listelemenize ve düzenlemenize, ayrıca konulardan gelen mesajları tek bir konumdan oluşturmanıza ve kullanmanıza olanak tanır.

Yürütülebilir dosyayı ve yapılandırma dosyasını akhq adlı bir dizine kaydedeceksiniz. Aşağıdakileri çalıştırarak dosyayı ana dizininizde oluşturun:

mkdir ~/akhq

Şuraya git:

cd ~/akhq

Tarayıcınızda resmi sürümler sayfasını ziyaret edin ve en son JAR dosyasının bağlantısını kopyalayın. Yazım sırasında en son sürüm 0.24.0 idi. Ana dizininize indirmek için aşağıdaki komutu çalıştırın:

curl -L https://github.com/tchiotludo/akhq/releases/download/0.24.0/akhq-0.24.0-all.jar -o ~/akhq/akhq.jar

Artık AKHQ'yu indirdiniz ve kümenize bağlanmak için yapılandırmasını tanımlamaya hazırsınız. Bunu akhq-config.yml adlı bir dosyaya kaydedeceksiniz. Aşağıdakileri çalıştırarak dosyayı oluşturun ve düzenlemeye açın:

nano ~/akhq/akhq-config.yml

Aşağıdaki satırları ekleyin:

akhq:
connections:
localhost-sasl:
properties:
bootstrap.servers: "localhost:9092"
security.protocol: SASL_SSL
sasl.mechanism: PLAIN
sasl.jaas.config: org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="admin";
ssl.truststore.location: /home/kafka/kafka-ssl/truststore/kafka.truststore.jks
ssl.truststore.password: secret
ssl.keystore.location: /home/kafka/kafka-ssl/keystore/kafka.keystore.jks
ssl.keystore.password: secret
ssl.key.password: secret
ssl.endpoint.identification.algorithm: ""

Bu, localhost:9092 adresinde SASL ve TLS parametreleri belirtilen bir kümeyi belirten temel bir AKHQ yapılandırmasıdır. İstediğiniz kadar bağlantı tanımlayabileceğiniz için aynı anda birden fazla küme de desteklenir. Bu, AKHQ'yu Kafka yönetimi için çok yönlü hale getirir. İşiniz bittiğinde dosyayı kaydedip kapatın.

Ardından, AKHQ'yu arka planda çalıştıracak bir systemd hizmeti tanımlamanız gerekir. Systemd hizmetleri sürekli olarak başlatılabilir, durdurulabilir ve yeniden başlatılabilir.

Hizmet yapılandırmasını, systemd'nin hizmetlerini depoladığı /lib/systemd/system dizinindeki code-server.service adlı bir dosyada saklayın. Dosyayı metin düzenleyicinizi kullanarak oluşturun:

sudo nano /etc/systemd/system/akhq.service

Aşağıdaki satırları ekleyin:

[Unit]
Description=akhq
[Service]
Type=simple
User=kafka
ExecStart=/bin/sh -c 'java -Dmicronaut.config.files=/home/kafka/akhq/akhq-config.yml -jar /home/kafka/akhq/akhq.jar'
Restart=on-abnormal
[Install]
WantedBy=multi-user.target

Önce servis açıklamasını belirtin. Ardından [Servis] alanında servis türünü tanımlayın (basit, komutun basit bir şekilde çalıştırılması gerektiği anlamına gelir) ve çalıştırılacak komutu belirtin. Ayrıca, çalıştırılacak kullanıcının Kafka olduğunu ve servis sonlandırıldığında otomatik olarak yeniden başlatılacağını da belirtin.

[Yükle] bölümü, sunucunuza giriş yapabildiğinizde sisteme bu hizmeti başlatmasını söyler. İşlem tamamlandığında dosyayı kaydedip kapatın.

Servis ayarlarını şu komutu çalıştırarak yükleyin:

sudo systemctl daemon-reload

Aşağıdaki komutu çalıştırarak AKHQ servisini başlatın:

sudo systemctl start akhq

Daha sonra, durumunu görüntüleyerek doğru şekilde başlatıldığını kontrol edin:

sudo systemctl status akhq

Çıktı şu şekilde olmalıdır:

Output● akhq.service - akhq
Loaded: loaded (/etc/systemd/system/akhq.service; disabled; vendor preset: enabled)
Active: active (running) since Wed 2024-05-15 07:37:10 UTC; 3s ago
Main PID: 3241 (sh)
Tasks: 21 (limit: 4647)
Memory: 123.3M
CPU: 4.474s
CGroup: /system.slice/akhq.service
├─3241 /bin/sh -c "java -Dmicronaut.config.files=/home/kafka/akhq/akhq-config.yml -jar /home/kafka/akhq/akhq.jar"
└─3242 java -Dmicronaut.config.files=/home/kafka/akhq/akhq-config.yml -jar /home/kafka/akhq/akhq.jar

AKHQ artık arka planda çalışıyor. Varsayılan olarak 8080 portunda görüntülenir. Erişim için tarayıcınızda, bu porta sahip alan adınıza gidin. Konuların bir listesini gösteren varsayılan görünümü göreceksiniz:

Tabloda konu satırına çift tıklayarak detaylı görünüme ulaşabilirsiniz:

AKHQ, konudaki mesajların yanı sıra bölümleri, tüketici gruplarını ve yapılandırmalarını görüntülemenizi sağlar. Ayrıca sağ alttaki düğmeleri kullanarak konuyu boşaltabilir veya kopyalayabilirsiniz.

new_topic konusu boş olduğundan, Konuya Üret düğmesine basın; bu, yeni mesajın parametrelerini seçmek için arayüzü açar:

AKHQ, konu adını sizin için otomatik olarak dolduracaktır. Değer alanına "Merhaba Dünya!" yazın ve ardından "Üret"e basın. Mesaj Kafka'ya gönderilecek ve Veri sekmesinde göreceksiniz:

Bir mesajın içeriği çok büyük olabileceğinden, AKHQ yalnızca ilk satırı görüntüler. Mesajın tamamını görüntülemek için, satırın ardından gelen koyu alana tıklayarak mesajı görüntüleyin.

Sol kenar çubuğunda, Düğümler'e tıklayarak kümedeki brokerları listeleyebilirsiniz. Şu anda küme yalnızca bir düğümden oluşmaktadır:

Bir düğüme çift tıklamak, yapılandırmasını açar ve ayarların herhangi birini uzaktan değiştirmenize olanak tanır:

Değişikliklerinizi yaptıktan sonra, sağ alt köşedeki "Yapılandırmaları güncelle" düğmesine basarak uygulayabilirsiniz. Benzer şekilde, her temanın yapılandırmasını, temalara erişip "Yapılandırmalar" sekmesine giderek görüntüleyebilir ve değiştirebilirsiniz.

Bu bölümde, Kafka düğümlerini ve konularını uzaktan yönetmek ve görüntülemek için kullanımı kolay bir arayüz sağlayan bir web uygulaması olan AKHQ'yu kurdunuz. Bu uygulama, konularda mesaj üretip kullanmanıza ve hem konuların hem de düğümlerin yapılandırma parametrelerini anında güncellemenize olanak tanır.

Sonuç

Bu eğitimde, şifreleme için TLS ve kullanıcı kimlik doğrulaması için SASL yapılandırarak Kafka kurulumunuzun güvenliğini sağladınız. Ayrıca, Prometheus kullanarak metrik dışa aktarımları oluşturdunuz ve bunları Grafana'da görselleştirdiniz. Ardından, Kafka kümelerini yönetmek için bir web uygulaması olan AKHQ'yu nasıl kullanacağınızı öğrendiniz.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Ayrıca Şunları da Beğenebilirsiniz