Prometheus

Süleyman Kayabaşı
n11 Tech
Published in
11 min readMar 5, 2023

🤯 Power your metrics and alerting with the leading open-source monitoring solution💥

Photo by Rohan Makhecha on Unsplash

Motivasyon

Bir yazılım mühendisi olarak, Prometheus’un gücüne hayran kaldım. Özellikle, ölçeklenebilirliği sayesinde, büyük ölçekli sistemlerin izlenmesi konusunda büyük bir kolaylık sağlar. Bunun yanı sıra, Prometheus, farklı kaynaklardan veri toplayabilmesi, kapsamlı sorgu ve görselleştirme araçları sunması nedeniyle de oldukça kullanışlıdır.

Ayrıca, Prometheus, açık kaynak kodlu bir projedir ve geniş bir topluluğa sahiptir. Bu da, Prometheus ile ilgili sorunlarınız olduğunda veya projeye katkıda bulunmak istediğinizde size yardımcı olacak birçok kaynak bulabileceğiniz anlamına gelir.

Prometheus, modern uygulama geliştirme sürecinde önemli bir yer tutar. Bu nedenle, Prometheus hakkında bilgi sahibi olmak, kariyerinize ve projelerinize katkı sağlayabilir.

Giriş

Prometheus, antik mitolojide tanrıların ateşini çaldığı ve insanlara hediye ettiği bir kahramandır. Bugün ise “Prometheus” kelimesi, öngörü, ileriyi görme ve yenilikçilik anlamlarını da taşımaktadır. Bu nedenle, geleceği şekillendiren fikirler ve yenilikler, Prometheus’un ateşi gibi, bizlere ilham verir ve yolumuzu aydınlatır. Bu yazıda, Prometheus’un yazılımsal kısmına odaklanacağız.

Prometheus nedir ve ne için kullanılır?

Prometheus, modern bir açık kaynaklı sistem ve uygulama izleme ve alarm aracıdır. Prometheus, 2012 yılında SoundCloud tarafından geliştirilmeye başlandı ve daha sonra Cloud Native Computing Foundation (CNCF) tarafından bir proje olarak kabul edildi.

Prometheus, zaman serisi verileri toplamak, depolamak, sorgulamak ve görselleştirmek için kullanılır. Sistem ve uygulamaların performansını izleyerek, hızlı bir şekilde sorunları tespit etmenizi ve çözmenizi sağlar. Prometheus, özellikle büyük ölçekli, dağıtık ve bulut tabanlı sistemler için tasarlanmıştır.

Prometheus, birden çok dilde yazılmış bir istemci kitaplığı sağlar ve ayrıca birçok popüler sistem ve uygulama ile entegre olabilir. Prometheus, özellikle Kubernetes ve diğer bulut tabanlı teknolojilerle birlikte kullanıldığında, sistemlerin daha iyi anlaşılmasına ve yönetilmesine yardımcı olur.

Prometheus’un kullanım alanları nelerdir?

Prometheus, sistem ve uygulama izleme ve alarmı için kullanılan bir araçtır. Bu nedenle, birçok kullanım alanı vardır. İşte Prometheus’un kullanım alanlarından bazıları:

  1. Sistem performansı izleme: Prometheus, sunucu, ağ ve diğer sistem bileşenlerinin performansını izleyerek sorunları tespit etmenizi sağlar. Bu sayede, sistemlerinizdeki yavaşlamaları veya hataları hızlı bir şekilde tanımlayabilir ve çözebilirsiniz.
  2. Uygulama performansı izleme: Prometheus, uygulama performansını izleyerek uygulamanızdaki hataları, yavaşlamaları veya diğer sorunları tespit etmenizi sağlar. Bu sayede, uygulamanızın daha verimli çalışmasını sağlayabilirsiniz.
  3. Bulut tabanlı sistemlerin izlenmesi: Prometheus, bulut tabanlı sistemlerin izlenmesinde önemli bir rol oynar. Özellikle Kubernetes gibi bulut tabanlı teknolojilerle birlikte kullanıldığında, Prometheus, sistemlerin daha iyi anlaşılmasına ve yönetilmesine yardımcı olur.
  4. Kapasite planlaması: Prometheus, sistem ve uygulama performansını izleyerek kapasite planlaması yapmanıza yardımcı olur. Bu sayede, gelecekteki taleplere göre kaynakları planlayabilir ve gereksiz maliyetleri önleyebilirsiniz.
  5. Olaylar ve alarm yönetimi: Prometheus, olayları izleyerek, kullanıcı tanımlı kriterlere göre alarm ve uyarılar oluşturmanızı sağlar. Bu sayede, kritik sorunlar hakkında hızlı bir şekilde bilgilendirilerek, sorunların çözümüne yönelik zamanında müdahale edebilirsiniz.

Prometheus, birçok farklı sektörde kullanılmaktadır. Örneğin, finans, sağlık hizmetleri, e-ticaret, telekomünikasyon, hizmet sağlayıcılar gibi birçok sektörde sistem ve uygulama performans izleme ve alarm yönetimi için kullanılmaktadır.

Prometheus Mimarisi

Prometheus verileri toplayan, depolayan ve sorgulayan birçok farklı bileşenin bir araya geldiği bir mimariye sahiptir.

Prometheus Server : Prometheus sunucusu, zaman serisi verilerini toplamak, işlemek, depolamak ve sorgulamak için kullanılan ana bileşendir.

Prometheus Sunucusu, gelen verileri işlemek ve saklamak için kullanılan bir yazılım bileşenidir. Sunucu, verilerin alınmasını, analiz edilmesini ve sorgulanmasını mümkün kılar. Bunu yapmak için, sunucu içinde farklı işlevlere sahip çeşitli bileşenler bulunur.

Bunlardan ilki, verileri almak ve işlemek için kullanılan Data Retrieval Worker’dır. Bu bileşen, önceden tanımlanmış hedeflerden veri alır (pull etmek) ve bu verileri işler. Hedefler, çeşitli kaynaklardan (örneğin, sistemler, uygulamalar, iş süreçleri) toplanan verileri temsil eder. Data Retrieval Worker, verileri sıklıkla sorgular ve bu verileri zaman serilerine dönüştürür.

Daha sonra, sunucu verileri Time Series Database’de saklar. Bu veritabanı, zaman serileri verilerini depolamak ve sorgulamak için özel olarak tasarlanmıştır. Time Series Database, verileri etkin bir şekilde sorgulamak için optimize edilir ve yüksek performans sağlar.

Son olarak, Prometheus Sunucusu, kullanıcıların verileri sorgulamasına izin veren bir HTTP sunucusu olarak hizmet verir. Bu HTTP sunucusu, Prometheus Query Language (PromQL) sorgularını kabul eder ve bu sorgulara göre verileri geri döndürür. PromQL, zaman serileri verilerini sorgulamak ve analiz etmek için özel olarak tasarlanmış bir sorgu dili olarak kullanılır.

Böylece, Prometheus Sunucusu, Data Retrieval Worker, Time Series Database ve HTTP Sunucusu bileşenleri bir araya gelerek, verilerin alınmasını, işlenmesini, saklanmasını, sorgulanmasını ve analiz edilmesini sağlar.

Prometheus, ölçüm verilerini toplamak ve işlemek için bir dizi kavram kullanır. Bu kavramlardan en temel ikisi :

Target: Prometheus’un ölçüm verilerini toplamak için hedeflediği bir sistem veya uygulamayı temsil eder. Target’ler, verileri toplamak için kullanılan Exporter bileşenleri tarafından sağlanabilir. Bu hedefler, bir IP adresi, bir DNS adı veya bir port numarası şeklinde tanımlanabilir. Örneğin, bir target olarak bir web sunucusunu veya bir veritabanını hedefleyebilirsiniz.

Metric: Belirli bir özelliği ölçmek için kullanılan bir zaman serisi veri noktasıdır. Metricler, bir ad ve bir dizi etiketten oluşan bir kimlik ile tanımlanır.

Prometheus’ta dört farklı metric tipi vardır:

  1. Counter: Artan bir sayıyı ölçer veya sıfırlanır. Bu metric, sıklıkla sayısal olayların sayısını ölçmek için kullanılır. Örneğin, HTTP isteklerinin sayısını ölçmek için bir counter kullanabilirsiniz.
  2. Gauge: Bir değerin belirli bir anlık değerini ölçer. Gauge’lar, ayrıca artan veya azalan değerleri de ölçebilirler. Örneğin, CPU kullanımını ölçmek için bir gauge kullanabilirsiniz.
  3. Histogram: Değerlerin dağılımını ölçer. Histogramlar, ölçümleri belirli bir aralıkta gruplar ve her grup için ayrı ayrı sayısal bir özet sağlar. Örneğin, bir HTTP isteğinin işlem süresini ölçmek için bir histogram kullanabilirsiniz.
  4. Summary: Histogram gibi ölçümlerin dağılımını ölçer ancak farklı bir özetleme algoritması kullanır. Summary’ler, belirli bir aralıkta ölçülen değerlerin yüzdesini sağlar. Örneğin, bir HTTP isteğinin işlem süresini ölçmek için bir summary kullanabilirsiniz.

Örneğin, bir HTTP isteği sayısını ölçmek için “http_requests_total” adında bir metric kullanabilirsiniz. Bu metric, bir “method” etiketiyle (“GET”, “POST” vb.) ve bir “handler” etiketiyle (örneğin, “/api/v1/users”) birlikte tanımlanabilir.

# HELP http_requests_total The total number of HTTP requests
# TYPE http_requests_total counter
http_requests_total{method="GET", handler="/api/v1/users"} 10
http_requests_total{method="POST", handler="/api/v1/users"} 5

Bu örnek, toplam HTTP istek sayısını temsil eden http_requests_total isimli bir Counter metric tipidir. İsim, Metric'e özel bir tanımlayıcıdır. counter tipi, Metric'in Counter tipi olduğunu belirtir. Son olarak, method ve handler etiketleri, her istek türünü ve işleyici yolunu temsil eder. Bu metric, GET ve POST isteklerinin her birinin sayısını ölçer ve saklar.

Exporter : Bir uygulamanın veya sistem bileşeninin Prometheus tarafından toplanabilecek metriklerini, Prometheus’a uygun formatta sunan bir araçtır. Bu metrikler, Prometheus tarafından sorgulanabilir ve analiz edilebilir hale getirilir. Birçok popüler uygulama ve sistem bileşeni için Exporter mevcuttur ve ayrıca özelleştirilmiş bir exporter oluşturmak da mümkündür. En popüler olanlarından bazıları Node Exporter, Prometheus JMX Exporter ve cAdvisor’dur.

Client Library : Prometheus’un ölçümleri toplamasına yardımcı olan bir yazılımdır. Bu kütüphaneler, bir uygulamanın metriklerini toplamasına, işlemesine ve Prometheus’a göndermesine izin verir. Prometheus, Java, Go, Python, Ruby, Rust, C ++, JavaScript ve diğer birçok programlama dili için client library’ler sağlar. Örneğin, Java geliştiricileri, Prometheus JMX Exporter veya Micrometer gibi birçok farklı Java Client Library’si aracılığıyla uygulamalarını Prometheus’a entegre edebilirler.

Verileri Nasıl Toplanır ve Saklanır ?

Prometheus, verileri toplamak için Pull modeli kullanır. Bu yöntemde, Prometheus hedefleri olarak adlandırılan uygulamalar ve sistemler, Prometheus’a veri göndermez. Bunun yerine, Prometheus hedeflerin sağladığı HTTP arayüzleri ile kendisi verileri toplar. Bu, hedeflerin güvenliğini korur ve Prometheus’a yük getirmez.

Prometheus, hedeflerin verilerini toplamak için bir dizi önceden tanımlanmış araç sağlar. Bunlar arasında Node Exporter, Blackbox Exporter, Redis Exporter gibi araçlar bulunur. Bu araçlar, belirli bir uygulamanın veya sistem bileşeninin sağladığı ölçümleri toplar ve Prometheus’un bu ölçümleri alabilmesi için bir HTTP arayüzü sağlar.

Prometheus, hedefleri scrape ederek (tarayarak) ölçümleri alır. Bu işlem, her hedef için ayrı bir scrape işlemi oluşturur ve ölçümleri bir zaman serisine dönüştürür. Bu zaman serileri, her bir etiket, değer ve zaman bilgisi içerir.

Prometheus, hedefleri scrape etmek için bir scrape_interval (tarayıcı aralığı) değeri kullanır. Bu değer, Prometheus’un bir hedefi ne sıklıkla scrape ettiğini belirler. Varsayılan olarak, scrape_interval 1 dakikadır ve bu, genellikle yeterli bir aralıktır. Ancak, scrape_interval ayarlanarak ölçeklenebilirlik ve performans artırılabilir.

Prometheus verileri, zaman serileri adı verilen veriler olarak saklar. Her zaman serisi, bir dizi zaman etiketi ve eşleşen bir değer etiketi kümesinden oluşur. Örneğin, bir HTTP istek hızı zaman serisi, aşağıdaki etiketlerle tanımlanabilir:

  • method: GET
  • status_code: 200
  • endpoint: /users
  • instance: server-1

Bu zaman serisinde, her bir etiket, HTTP isteğinin özelliklerini temsil eder ve “instance” etiketi, zaman serisinin hangi hedef uygulamadan geldiğini belirtir. Bu şekilde Prometheus, birden fazla uygulamanın ölçümlerini bir arada saklayabilir ve her bir ölçüm için ayrıntılı sorgular yapılabilir.

Prometheus verileri, varsayılan olarak hafızada saklanır ve bellek boyutu ayarlanarak performans artırılabilir. Ancak, Prometheus aynı zamanda verileri diske yazarak kalıcı hale getirebilir. Bu, verilerin uzun süreli depolanması ve daha uzun süreli analiz için kullanılması için önemlidir.

Prometheus, verileri daha fazla ölçeklenebilirlik ve yedeklilik sağlamak için Federated Prometheuses (birbirine bağlı Prometheus’lar) adı verilen bir ağ modeli kullanır. Bu sayede, büyük ölçekli sistemlerde veri toplama işlemi daha etkili hale gelir.

Bazı durumlarda, hedeflerin verileri scrape edilmesi mümkün değildir. Örneğin, bir işin kısa bir süre içinde tamamlanması gerektiği durumlarda. Bu durumlarda, verileri push edebileceğimiz bir Push Gateway bileşenine ihtiyaç duyulur.

Push Gateway Prometheus’un bir bileşenidir ve Prometheus’a veri göndermek için bir arayüz sağlar. Hedefler, Push Gateway’e verileri HTTP POST isteğiyle gönderirler. Push Gateway, bu verileri bir zaman serisi olarak saklar ve Prometheus tarafından scrape edilebilir hale getirir.

Push Gateway’in bir diğer avantajı, hedeflerin yanıt verememesi durumunda verileri saklama imkanı sunmasıdır. Bu, hedeflerin ölçümleri kaybetmemesini ve sonradan Prometheus’a göndermelerini sağlar.

Push Gateway, genellikle önbellek verileri veya geçici işlerin verileri gibi belirli senaryolarda kullanılır. Örneğin bir batch-job veya scheduler-job sonuçları Push Gateway'e göndererek tamamlanır ve sonuçları daha sonra Prometheus tarafından scrape edilir.

Prometheus Verileri Nasıl Analiz Eder ?

PromQL (Prometheus Query Language), Prometheus’ta saklanan zaman serisi verilerini sorgulamak ve analiz etmek için kullanılan bir sorgu dilidir. PromQL, verileri gruplandırma, filtreleme, hesaplama ve görselleştirme gibi bir dizi işlem yapmak için kullanılabilir.

PromQL’nin temel özelliklerinden bazıları ve bu özellikleri kullanarak örnek sorgular:

  • Metrik Adı (Metric Name)

Metrik adı, verilerin hangi zaman serisine ait olduğunu belirtir. Bu özellikle birden fazla hedefin verilerini tek bir Prometheus sunucusunda sakladığımızda önemlidir.

Örnek sorgu:

Bu örnekte, “http_requests_total” metrik adı kullanılarak tüm zaman serileri sorgulanacaktır.

  • Etiket (Label)

2.Etiket (Label)

Etiketler, zaman serisine ekstra bilgi eklemek için kullanılır. Bu, verileri daha ayrıntılı bir şekilde filtrelemek ve gruplamak için kullanılabilir.

Örnek sorgu:

http_requests_total{method="GET", endpoint="/home"}
  • Fonksiyonlar (Functions)

Fonksiyonlar, verileri hesaplama, filtreleme ve gruplama işlemleri yapmak için kullanılır.

Örnek sorgu:

rate(http_requests_total{job="webserver"}[5m])

Bu örnekte, “http_requests_total” metrik adı kullanılırken, “job” etiketi ile belirli bir web sunucusuna ait zaman serileri sorgulanacaktır. Ardından, “rate” fonksiyonu kullanılarak son 5 dakikadaki istek oranı hesaplanacaktır.

  • Operatörler (Operators)

Operatörler, PromQL’de matematiksel işlemler yapmak için kullanılır.

Örnek sorgu:

http_requests_total{job="webserver"} + http_requests_total{job="dbserver"}

Bu örnekte, “http_requests_total” metrik adı kullanılırken, “job” etiketi ile belirli bir web sunucusuna ve veritabanı sunucusuna ait zaman serileri toplanacaktır.

Bu örnekler, PromQL’nin temel özelliklerini ve bunları kullanarak nasıl sorgular oluşturabileceğimizi göstermektedir. PromQL, verileri daha ayrıntılı bir şekilde filtrelemek, gruplamak ve hesaplamak için daha karmaşık sorgular da oluşturulabilir.

Prometheus Veri Görselleştirmeyi Nasıl Yapar ?

Prometheus, verileri görselleştirmek için Grafana ve Prometheus’un kendi dahili grafik arayüzü gibi birkaç araçtan faydalanılabilir.

  • Grafana

Grafana, popüler bir açık kaynaklı veri görselleştirme aracıdır ve Prometheus verilerini görselleştirmek için yaygın olarak kullanılır. Grafana, grafik ve panel oluşturmak için bir sürükle ve bırak arayüzü sağlar. Grafana, Prometheus verilerinin yanı sıra diğer veri kaynaklarına da erişim sağlar ve kullanıcıların tüm verilerini tek bir yerden görüntülemesine olanak tanır.

  • Prometheus Grafik Arayüzü

Prometheus, kendi dahili grafik arayüzü ile verileri görselleştirmeyi de sağlar. Bu arayüz, tarayıcınızda açılabilen bir web arayüzüdür ve grafikler, tablolar ve diğer görsel öğeler ile Prometheus’ta depolanan verileri görselleştirir. Ancak, Grafana’ya kıyasla daha az özellik sunar.

  • Diğer araçlar

Prometheus, verileri görselleştirmek için Grafana ve kendi dahili arayüzü ile birlikte bir dizi üçüncü taraf aracı da destekler. Bunlar arasında Chronograf, Kibana, Cacti vb. gibi araçlar yer alır. Bu araçlar, Prometheus verilerini görüntülemek, analiz etmek ve raporlamak için kullanılabilir.

Prometheus’ da Kurallar Nasıl Tanımlanır ?

Prometheus’da “rule” (kural), belirli bir metrik veya metriklerin değerlerinin belirli bir koşula göre değerlendirilmesiyle sonuçlanan bir ifadedir. Bu kurallar, yüksek seviyeli uyarıların veya kaydedilen verilerin oluşturulmasında kullanılabilir. Örneğin, bir kural, belirli bir zaman aralığında bir metriğin belirli bir eşiği aşması durumunda bir uyarı oluşturabilir.

Bir kural tanımlamak için, “rules” bölümünde bir YAML dosyası tanımlamalısınız. Bu dosyada, “record” kuralı olarak kaydedilecek değerler ve “alert” kuralı olarak uyarı verecek değerler gibi farklı kural türleri tanımlayabilirsiniz.

Örnek olarak, aşağıdaki kural dosyası, bir metriğin belirli bir eşiği aştığı zaman bir uyarı oluşturur:

groups:
- name: example
rules:
- alert: HighRequestRate
expr: sum(rate(http_requests_total[5m])) > 100
for: 1m
labels:
severity: warning
annotations:
summary: High request rate detected

Bu örnekte, “HighRequestRate” olarak adlandırılan bir uyarı tanımlanmaktadır. “expr” parametresi, son beş dakikada HTTP isteklerinin toplam hızının 100'den büyük olduğu bir ifade tanımlar. “for” parametresi, bu koşulun en az bir dakika süreyle devam etmesi gerektiğini belirtir. “labels” ve “annotations” parametreleri, uyarıya özel etiketler ve açıklamalar eklemek için kullanılır.

Kural dosyanızı oluşturduktan sonra, Prometheus yapılandırma dosyanıza eklemelisiniz. Prometheus, kural dosyanızı tarayacak ve tanımlanan kuralları uygulayacaktır.

Prometheus Uyarıları Nasıl Yönetir ?

Prometheus’daki uyarılar, Alertmanager tarafından yönetilir. Alertmanager, Prometheus ile entegre olan bir hizmettir ve uyarıların yönetimi ve gönderimi için kullanılır. Alertmanager, Prometheus’un kaydettiği uyarıları alır, bunları işler ve belirli bir formatla çeşitli hedeflere gönderir.

Alertmanager konfigürasyon dosyası YAML formatındadır. Bu dosyada, uyarıların nasıl işleneceği, hangi kanallara gönderileceği ve hangi formatlarda gönderileceği tanımlanabilir.

Slack için bir örnek uyarı konfigürasyonu şöyle olabilir:

route:
group_by: ['alertname', 'severity']
receiver: slack
receivers:
- name: slack
slack_configs:
- api_url: https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK/URL
channel: '#prometheus-alerts'
send_resolved: true

Bu örnekte, “route” bölümünde, uyarıların hangi etiketlerle gruplandırılacağı ve hangi alıcıya gönderileceği belirtilir. “receiver” bölümünde, Slack’teki “slack” adlı alıcıya yönlendirme yapılır.

“receivers” bölümünde, “slack” adlı alıcı yapılandırılır. Slack için yapılandırma ayarları “slack_configs” bölümünde belirtilir. “api_url” parametresi, Slack’teki özel bir Web hook URL’si olmalıdır. “channel” parametresi, uyarıların hangi Slack kanalına gönderileceğini belirler. “send_resolved” parametresi, bir uyarının durumunun çözüldüğünde de bir mesaj gönderilip gönderilmeyeceğini belirler.

Bu örnek uyarı konfigürasyonu, “severity” etiketiyle gruplandırılan tüm uyarıları “slack” alıcısına gönderir ve uyarının durumu çözüldüğünde de bir mesaj gönderir.

Prometheus Hangi Hedefi Ne Sıklıkla Kazıyacağını Nasıl Bilir ?

Prometheus, scrape (kazıma) işlemini hedeflerin özelliklerine göre yapılandırılmış scrape konfigürasyon dosyaları kullanarak yapar. Bu konfigürasyon dosyaları, Prometheus’un hangi hedefi ne sıklıkla kazıyacağını ve hangi etiketleri ekleyeceğini belirler.

Prometheus, scrape konfigürasyon dosyalarını hedeflenen hizmetlerin IP adresleri veya DNS adlarına göre tanımlar. Bu dosyalar genellikle YAML formatındadır ve birden fazla hedef tanımlayabilirler.

Örnek bir scrape konfigürasyon dosyası aşağıdaki gibidir:

global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'example-service'
scrape_interval: 30s
static_configs:
- targets: ['10.0.0.1:8080', '10.0.0.2:8080']
labels:
environment: 'production'

Bu örnek konfigürasyon dosyası, “global” bölümünde scrape işlemi için varsayılan sıklığı belirler. “scrape_configs” bölümü ise scrape edilecek hedeflerin listesini içerir. Burada “example-service” adlı bir hedef tanımlanmıştır.

“job_name” parametresi, hedefin adını belirler. “scrape_interval” parametresi, hedefin ne sıklıkla kazınacağını belirler. “static_configs” bölümünde, scrape edilecek hedeflerin listesi ve hedeflere eklenecek etiketler yer alır. Bu örnekte, “example-service” hedefine iki adet IP adresi ve port numarası belirtilmiştir.

Bu konfigürasyon dosyası, “example-service” hedefini 30 saniyede bir kazıyacak ve “environment” etiketiyle scrape edilen verilere ekleyecektir.

Prometheus, scrape konfigürasyon dosyalarını çalıştırırken bu dosyaların bulunduğu dizindeki tüm YAML dosyalarını okur ve scrape işlemlerini bu dosyalardaki tanımlamalara göre gerçekleştirir.

🙂 Genel hatları ve özellikleriyle Prometheus’u anlattığım yazımın sonuna geldik diğer yazılarda buluşmak üzere. 👋

Benimle LinkedIn üzerinden iletişime geçebilirisiniz.

--

--