DigitalOcean Uygulama Platformu Loglarını DigitalOcean Yönetilen OpenSearch’e Gönderme
Giriş
Günümüzün hızla gelişen yazılım dünyasında, uygulamaların sorunsuz çalışmasını sağlamak, performans darboğazlarını tespit etmek, güvenlik açıklarını izlemek ve genel sistem sağlığını anlamak için kapsamlı bir loglama stratejisi kritik öneme sahiptir. Özellikle dağıtık sistem mimarileri ve mikroservis tabanlı uygulamalar yaygınlaştıkça, farklı bileşenlerden gelen logların merkezi bir konumda toplanması, analiz edilmesi ve görselleştirilmesi bir zorunluluk haline gelmiştir. Aksi takdirde, bir hatanın kök nedenini bulmak veya bir performans sorununu gidermek, birden fazla sunucu veya servis üzerinde manuel olarak logları incelemeyi gerektiren zaman alıcı ve hataya açık bir süreç haline gelebilir.
DigitalOcean, geliştiricilere ve işletmelere bulut altyapısı hizmetleri sunan popüler bir platformdur. Uygulama Platformu (App Platform), geliştiricilerin kodlarını kolayca dağıtmasına ve ölçeklendirmesine olanak tanıyan, yönetilen bir PaaS (Platform as a Service) çözümüdür. Bu platform, uygulamanın yaşam döngüsünü basitleştirirken, temel altyapı yönetimi yükünü ortadan kaldırır. Ancak App Platform’un sunduğu kolaylıklar arasında, uygulamaların ürettiği logların uzun süreli saklanması, gelişmiş analizi veya diğer sistemlerle entegrasyonu gibi daha derinlemesine log yönetimi yetenekleri varsayılan olarak sunulmaz.
İşte tam bu noktada DigitalOcean Yönetilen OpenSearch (Managed OpenSearch) devreye girer. OpenSearch, açık kaynaklı bir arama ve analiz motoru olup, büyük hacimli verileri depolamak, aramak ve analiz etmek için tasarlanmıştır. Log yönetimi, metrik izleme ve güvenlik bilgileri ve olay yönetimi (SIEM) gibi birçok kullanım senaryosunda güçlü bir araçtır. DigitalOcean’ın sunduğu yönetilen OpenSearch hizmeti, küme kurulumu, bakımı, ölçeklendirilmesi ve güvenliği gibi operasyonel yükleri üstlenerek geliştiricilerin ve DevOps ekiplerinin işini kolaylaştırır.
Bu makalenin temel amacı, DigitalOcean Uygulama Platformu’nda çalışan uygulamalarınızın ürettiği logları, güvenli ve verimli bir şekilde DigitalOcean Yönetilen OpenSearch kümenize nasıl gönderebileceğinizi adım adım açıklamaktır. Bu entegrasyon sayesinde, uygulama loglarınızı merkezi bir konumda toplayabilir, güçlü arama sorguları ile sorunları hızla tespit edebilir, performans eğilimlerini görselleştirebilir ve potansiyel güvenlik tehditlerine karşı proaktif uyarılar oluşturabilirsiniz. Bu sayede operasyonel görünürlüğünüzü artırırken, hata ayıklama süreçlerinizi önemli ölçüde hızlandırabilirsiniz.
DigitalOcean Uygulama Platformu Log Yapısı
DigitalOcean Uygulama Platformu, deploy edilen uygulamaların loglarını standart çıkış (stdout) ve standart hata (stderr) akışlarına yazmasını bekler. Bu, konteyner tabanlı uygulamalar için yaygın ve en iyi uygulama olarak kabul edilen bir yöntemdir. Uygulama kodunuzdan console.log() (Node.js), print() (Python) veya benzeri fonksiyonlarla yazılan her şey, App Platform tarafından toplanan loglar haline gelir.
Log Türleri ve Formatları
App Platform, uygulamanızın yanı sıra, derleme (build) ve dağıtım (deploy) süreçlerine ait logları da toplar. Ayrıca, uygulamanıza gelen HTTP isteklerini yönlendiren yük dengeleyicinin (router) loglarını da sağlar.
* Uygulama Logları: Uygulama kodunuzun doğrudan ürettiği loglardır. Genellikle JSON, Common Log Format (CLF) veya basit metin formatında olabilirler. JSON formatı, log alanlarını otomatik olarak ayrıştırmak ve daha zengin sorgular yapmak için tercih edilen bir formattır.
* Derleme Logları: Uygulamanızın kaynak kodunun derlenmesi ve konteyner imajının oluşturulması sırasında oluşan çıktılardır. Bu loglar, derleme hatalarını tespit etmek için önemlidir.
* Dağıtım Logları: Uygulamanın yeni bir sürümünün platforma dağıtılması ve çalıştırılması sırasındaki olayları gösterir.
* Router Logları: Gelen HTTP istekleri, yanıt süreleri, durum kodları ve diğer ağ trafiği bilgilerini içerir. Bu loglar, uygulamanızın performansını ve erişilebilirliğini izlemek için kritik öneme sahiptir.
App Platform’da Loglara Erişim
DigitalOcean kontrol paneli üzerinden veya doctl komut satırı aracıyla loglara erişebilirsiniz:
* DigitalOcean Kontrol Paneli: Uygulamanızın detay sayfasına giderek “Logs” sekmesinden anlık log akışını görüntüleyebilir veya geçmiş logları inceleyebilirsiniz. Ancak bu arayüz, genellikle sınırlı bir geçmişi ve temel arama yeteneklerini sunar.
* doctl Komut Satırı Aracı: doctl aracı, App Platform loglarına programatik olarak erişmek için çok daha güçlü bir yöntem sunar. Örneğin:
doctl app logs
doctl app logs --follow # Gerçek zamanlı akış
doctl app logs --tail 100 # Son 100 satırı göster
doctl app logs --component # Belirli bir bileşenin logları
Bu komutlar, logları standart çıktıya yazdırır ve bu çıktıyı başka araçlara pipe etmek veya bir dosyaya yönlendirmek mümkündür.
Neden Harici Bir Log Yönetim Sistemine İhtiyaç Duyulur?
DigitalOcean App Platform’un sağladığı yerleşik log görüntüleme yetenekleri, hızlı hata ayıklama ve anlık durum kontrolü için yeterli olabilir. Ancak daha kapsamlı ihtiyaçlar için harici bir log yönetim sistemine geçmek bir dizi avantaj sunar:
* Uzun Süreli Saklama: App Platform logları belirli bir süre sonra silinebilir. Harici bir sistem, logları daha uzun süre saklamanıza olanak tanır.
* Gelişmiş Arama ve Analiz: Büyük hacimli log verileri üzerinde karmaşık sorgular çalıştırmak, korelasyonlar bulmak ve desenleri tespit etmek için güçlü arama motorlarına ihtiyaç vardır.
* Görselleştirme: Log verilerini grafikler, tablolar ve gösterge tabloları (dashboards) aracılığıyla görselleştirmek, eğilimleri anlamayı ve sorunları daha hızlı fark etmeyi sağlar.
* Uyarı ve Bildirimler: Belirli bir hata seviyesi, anomali veya performans düşüşü tespit edildiğinde otomatik uyarılar oluşturmak, proaktif operasyonel yönetim için kritiktir.
* Merkezi Log Yönetimi: Birden fazla uygulama, bileşen veya ortamdan gelen logları tek bir yerden yönetmek, operasyonel karmaşıklığı azaltır.
* Entegrasyon: Logları diğer izleme, güvenlik veya iş zekası araçlarıyla entegre etme yeteneği.
DigitalOcean Yönetilen OpenSearch, yukarıdaki ihtiyaçların çoğunu karşılayan güçlü ve ölçeklenebilir bir çözümdür.
DigitalOcean Yönetilen OpenSearch’e Genel Bakış
OpenSearch, Amazon tarafından Elasticsearch 7.10.2 ve Kibana 7.10.2’den çatallanmış (forked) ve Apache 2.0 lisansı altında geliştirilen açık kaynaklı bir dağıtılmış arama ve analiz motorudur. Temel olarak, metin, sayısal, coğrafi ve yapılandırılmış/yapılandırılmamış tüm veri türleri için tam metin arama, yapılandırılmış arama ve analitik yetenekleri sunar.
Temel Bileşenler ve Kavramlar
* Düğüm (Node): OpenSearch kümesini oluşturan her bir sunucu veya örnek.
* Küme (Cluster): Bir veya daha fazla düğümden oluşan bir OpenSearch kurulumu.
* Dizin (Index): Benzer özelliklere sahip dokümanların mantıksal bir koleksiyonu. İlişkisel veritabanlarındaki tablolara benzer. Log analizi senaryosunda, genellikle logları tarihe göre (örn: app-logs-2023-10-27) dizinlere ayırmak yaygın bir uygulamadır.
* Doküman (Document): Bir dizindeki en küçük veri birimi. Genellikle JSON formatındadır ve bir log kaydını, bir kullanıcı profilini veya bir ürünü temsil edebilir.
* Alan (Field): Bir dokümandaki veri parçaları (örn: timestamp, level, message).
* Shard: Bir dizinin yatay olarak bölündüğü birim. Büyük dizinler, birden fazla shard’a bölünerek farklı düğümlere dağıtılabilir, bu da performansı ve ölçeklenebilirliği artırır.
* Replika (Replica): Shard’ların kopyalarıdır ve yüksek erişilebilirlik ile hata toleransı sağlar.
OpenSearch Dashboards (Kibana)
OpenSearch Dashboards, OpenSearch kümesindeki verileri görselleştirmek ve keşfetmek için kullanılan bir web arayüzüdür. Eski adıyla Kibana olarak bilinir ve OpenSearch ile birlikte gelir. Dashboards ile şunları yapabilirsiniz:
* Keşfet (Discover): Logları aramak, filtrelemek ve incelemek.
* Görselleştir (Visualize): Verilerden çeşitli grafikler, tablolar ve haritalar oluşturmak.
* Gösterge Paneli (Dashboard): Birden fazla görselleştirmeyi bir araya getirerek kapsamlı izleme panelleri oluşturmak.
* Uyarılar (Alerting): Belirli koşullar karşılandığında bildirimler göndermek.
* Anomaliler (Anomaly Detection): Verilerdeki olağandışı desenleri otomatik olarak tespit etmek.
DigitalOcean Yönetilen OpenSearch’in Avantajları
DigitalOcean’ın yönetilen hizmeti, OpenSearch’in güçlü yeteneklerini kullanırken operasyonel yükü önemli ölçüde azaltır:
* Kolay Kurulum ve Yönetim: Dakikalar içinde bir OpenSearch kümesi oluşturabilirsiniz. Altyapı provizyonu, kurulum ve ilk yapılandırma DigitalOcean tarafından yapılır.
* Otomatik Ölçeklendirme: İhtiyaçlarınıza göre küme boyutunu kolayca ayarlayabilirsiniz.
* Yüksek Erişilebilirlik ve Yedekleme: Çoğu yönetilen hizmet gibi, DigitalOcean da kümenizin yüksek erişilebilirliğini ve düzenli yedeklemelerini sağlar.
* Güvenlik: Ağ izolasyonu, TLS/SSL şifrelemesi ve IP tabanlı erişim kontrolü gibi güvenlik özellikleri varsayılan olarak sunulur.
* Otomatik Bakım ve Güncellemeler: Yazılım güncellemeleri ve yamalar DigitalOcean tarafından yönetilir, bu da güvenlik açıklarının kapatılmasına ve yeni özelliklerin hızla devreye alınmasına yardımcı olur.
* İzleme ve Destek: Kümenizin performansını izleyebilir ve DigitalOcean destek ekibinden yardım alabilirsiniz.
Bu avantajlar, geliştiricilerin ve DevOps ekiplerinin altyapı yönetimi yerine uygulama geliştirmeye ve log analizi sonuçlarından değer yaratmaya odaklanmasını sağlar.
Entegrasyon Mimarisi ve Bileşenleri
DigitalOcean Uygulama Platformu loglarını DigitalOcean Yönetilen OpenSearch’e göndermek için izlenecek genel mimari, bir log toplayıcı veya iletici (log forwarder) kullanmayı içerir. App Platform, logları doğrudan harici bir OpenSearch kümesine gönderme yeteneğine sahip değildir. Bu nedenle, logları App Platform’dan çekecek, işleyecek ve OpenSearch’e iletecek bir ara katmana ihtiyacımız var.
Log Akışının Genel Resmi
1. DigitalOcean Uygulama Platformu: Uygulama ve sistem loglarını stdout/stderr üzerinden üretir.
2. Log Forwarder Droplet: doctl aracılığıyla App Platform loglarını çeker, işler ve tamponlar.
3. DigitalOcean Yönetilen OpenSearch: İşlenmiş logları depolar, indeksler ve analiz için hazır hale getirir.
4. OpenSearch Dashboards: Kullanıcıların logları görselleştirmesi ve sorgulaması için arayüz sağlar.
+--------------------------+ +------------------------+ +--------------------------+
| DigitalOcean App Platform| | Log Forwarder Droplet |
| (Uygulama Logları) | | (Log Çekme) | | (Fluent Bit) |
+--------------------------+ +------------------------+ | |
| - Logları Okur |
| - Ayrıştırır/Dönüştürür |
| - OpenSearch'e Gönderir |
+--------------------------+
|
V
+---------------------------------+
| DigitalOcean Yönetilen OpenSearch |
| (Depolama, İndeksleme, Analiz) |
+---------------------------------+
|
V
+---------------------------------+
| OpenSearch Dashboards |
| (Görselleştirme, Sorgulama) |
+---------------------------------+
Log Toplayıcı Seçenekleri
Log Forwarder Droplet üzerinde çalıştırabileceğimiz birkaç popüler log toplayıcı veya iletici bulunmaktadır:
* Fluentd / Fluent Bit:
* Fluent Bit: Daha hafif, daha düşük kaynak tüketimine sahip ve genellikle konteynerli ortamlar veya gömülü sistemler için tercih edilen bir seçenek. Geniş bir giriş (input) ve çıkış (output) eklentisi yelpazesine sahiptir. C ile yazılmıştır.
* Fluentd: Daha güçlü dönüşüm yetenekleri sunan, Ruby ile yazılmış daha kapsamlı bir log toplayıcıdır.
* Her ikisi de Cloud Native Computing Foundation (CNCF) projesidir ve endüstri standardı olarak kabul edilir.
* Logstash:
* Elastic Stack’in (Elasticsearch, Logstash, Kibana) bir parçasıdır.
* Güçlü filtreleme ve dönüşüm yetenekleri sunar, ancak JVM tabanlı olduğu için Fluent Bit’e göre daha fazla kaynak tüketir.
* Vector:
* Rust ile yazılmış, yüksek performanslı ve bellek güvenli bir log toplayıcıdır. Fluent Bit’e benzer şekilde hafif ve etkilidir.
Bu makalede, DigitalOcean Uygulama Platformu loglarını toplamak ve OpenSearch’e göndermek için Fluent Bit‘i kullanacağız. Fluent Bit, düşük kaynak tüketimi, yüksek performans ve geniş eklenti desteği sayesinde bu senaryo için ideal bir seçimdir. Özellikle doctl çıktısını bir dosyaya yazıp bu dosyayı tail input eklentisi ile okuma yaklaşımında Fluent Bit oldukça verimlidir.
Fluent Bit’in Tercih Edilme Nedenleri
1. Hafiflik ve Düşük Kaynak Tüketimi: Küçük bir Droplet üzerinde bile verimli çalışır, bu da maliyetleri düşürür.
2. Yüksek Performans: Çok yüksek hacimli logları işleyebilir.
3. Esneklik: Çeşitli giriş (input), filtre (filter) ve çıkış (output) eklentileri sayesinde farklı log kaynaklarından veri alabilir ve farklı hedeflere gönderebilir.
4. Güvenilirlik: Log kaybını önlemek için dahili tamponlama ve yeniden deneme mekanizmalarına sahiptir.
5. OpenSearch Desteği: Doğrudan OpenSearch’e veri göndermek için özel bir çıkış eklentisine sahiptir.
Bu mimari, App Platform’dan gelen logların merkezi bir OpenSearch kümesinde toplanmasını sağlayarak, log yönetimi ve analizi için güçlü bir temel oluşturur.
Adım Adım Entegrasyon Rehberi
Bu bölümde, DigitalOcean Uygulama Platformu loglarını DigitalOcean Yönetilen OpenSearch’e göndermek için gerekli adımları ayrıntılı olarak ele alacağız.
5.1. DigitalOcean Yönetilen OpenSearch Kümesi Oluşturma
İlk adım, loglarımızı depolayacağımız bir OpenSearch kümesi oluşturmaktır.
1. DigitalOcean Kontrol Paneline Giriş Yapın: cloud.digitalocean.com adresinden hesabınıza giriş yapın.
2. Yeni Veritabanı Kümesi Oluşturun: Sol menüden “Databases” seçeneğine tıklayın ve ardından “Create a Database Cluster” butonuna basın.
3. Motor Seçimi: Veritabanı motoru olarak “OpenSearch”i seçin.
4. Sürüm Seçimi: Mevcut en son OpenSearch sürümünü seçin.
5. Plan Seçimi: İhtiyaçlarınıza uygun bir plan seçin. Log hacminiz ve saklama süreniz, seçmeniz gereken düğüm sayısını ve depolama kapasitesini etkileyecektir. Genellikle başlangıç için küçük bir plan yeterli olabilir ve daha sonra kolayca ölçeklendirebilirsiniz.
6. Veri Merkezi Bölgesi Seçimi: Log Forwarder Droplet’inizle aynı veri merkezi bölgesini seçmek, ağ gecikmesini azaltır ve performansı artırır.
7. Küme Adı: Kümenize açıklayıcı bir ad verin (örn: app-platform-logs-opensearch).
8. Güvenilen Kaynaklar (Trusted Sources) Ekleme: Bu adım kritik öneme sahiptir. Varsayılan olarak, OpenSearch kümenize hiçbir IP adresinden erişilemez. Log Forwarder Droplet’inizin genel IP adresini “Trusted Sources” listesine eklemeniz gerekir. Eğer Droplet’i henüz oluşturmadıysanız, şimdilik “Allow access from anywhere” seçeneğini işaretleyebilir (güvenlik riski taşır, test amaçlıdır) veya kendi IP adresinizi ekleyerek daha sonra Droplet IP’sini ekleyebilirsiniz. Üretim ortamında sadece gerekli IP adreslerine izin verilmelidir.
9. Küme Oluştur: “Create a Database Cluster” butonuna tıklayarak kümenizi oluşturun. Bu işlem birkaç dakika sürebilir.
10. Bağlantı Bilgilerini Not Alın: Küme oluşturulduktan sonra, “Overview” sayfasından OpenSearch kümenizin ana bilgisayar adı (hostname), bağlantı noktası (port), kullanıcı adı (varsayılan: doadmin) ve parolası gibi bağlantı bilgilerini not alın. Bu bilgiler, Fluent Bit yapılandırması için gereklidir.
5.2. Log Forwarder Droplet Oluşturma ve Yapılandırma
Logları App Platform’dan çekecek ve OpenSearch’e iletecek bir Droplet’e ihtiyacımız var.
1. Droplet Oluşturma:
* DigitalOcean kontrol panelinden “Droplets” -> “Create Droplet” yolunu izleyin.
* İşletim Sistemi: Ubuntu 22.04 (LTS) veya benzeri bir Linux dağıtımı seçin.
* Plan: Log hacmine bağlı olarak uygun bir plan seçin. Küçük veya orta büyüklükteki uygulamalar için en küçük Droplet (Basic, 1GB RAM) genellikle yeterlidir.
* Veri Merkezi Bölgesi: OpenSearch kümenizle aynı bölgeyi seçtiğinizden emin olun.
* Kimlik Doğrulama: SSH anahtarı kullanmanızı şiddetle tavsiye ederiz.
* Hostname: Droplet’inize açıklayıcı bir ad verin (örn: app-log-forwarder).
* Oluştur: Droplet’i oluşturun.
2. Droplet’e SSH ile Bağlanın: Droplet’iniz hazır olduğunda, SSH anahtarınızı kullanarak bağlanın:
ssh root@
3. Sistem Güncellemesi:
apt update && apt upgrade -y
4. doctl Kurulumu: DigitalOcean API ile etkileşim kurmak için doctl aracını kurun.
snap install doctl --classic # Ubuntu için en kolay yol
Diğer dağıtımlar için DigitalOcean dokümantasyonunu kontrol edin.
5. doctl Kimlik Doğrulaması: Bir DigitalOcean API token’ına ihtiyacınız olacak. Kontrol panelinden “API” -> “Tokens/Keys” bölümüne gidin ve yeni bir token oluşturun (Read & Write izinleriyle). Bu token’ı kullanarak doctl‘i yapılandırın:
doctl auth init
# İstendiğinde API token'ınızı yapıştırın.
6. OpenSearch Güvenilen Kaynakları Güncelleme: Log Forwarder Droplet’inizin genel IP adresini OpenSearch kümenizin “Trusted Sources” listesine eklediğinizden emin olun. Bu, OpenSearch kümenizin “Overview” sayfasından yapılabilir.
5.3. DigitalOcean App Platform Loglarını Çekme
Şimdi doctl kullanarak App Platform loglarını çekeceğiz ve Fluent Bit’in okuyabileceği bir dosyaya yönlendireceğiz.
1. App ID veya Adını Bulma:
doctl app list
# Uygulamanızın adını veya ID'sini not alın.
2. Logları Bir Dosyaya Yönlendirme:
Bu adımda, doctl komutunu sürekli olarak çalıştıracak ve çıktısını bir dosyaya yönlendirecek bir systemd servisi oluşturmak en iyi yöntemdir. Bu, Droplet yeniden başlatıldığında bile log akışının devam etmesini sağlar.
Öncelikle, log dosyasının depolanacağı bir dizin oluşturun:
mkdir -p /var/log/app_platform
Ardından, doctl komutunu çalıştıran bir shell betiği oluşturun (örn: /usr/local/bin/start_app_logs.sh):
#!/bin/bash
LOG_FILE="/var/log/app_platform/app_logs.log"
APP_ID="" # Buraya uygulamanızın ID'sini veya adını yazın
# Log dosyasının boyutunu sınırlamak için logrotate kullanacağız,
# ancak burada basit bir örnek için dosyayı sıfırlama veya boyut kontrolü eklenebilir.
# Şimdilik, sadece logları takip etmeye odaklanalım.
exec doctl app logs "$APP_ID" --follow --format json >> "$LOG_FILE" 2>&1
Betik dosyasını çalıştırılabilir yapın:
chmod +x /usr/local/bin/start_app_logs.sh
Şimdi bu betiği çalıştıran bir systemd servisi oluşturalım (/etc/systemd/system/do-app-logs.service):
[Unit]
Description=DigitalOcean App Platform Log Forwarder
After=network.target
[Service]
ExecStart=/usr/local/bin/start_app_logs.sh
Restart=always
User=root # veya daha kısıtlı bir kullanıcı
Group=root # veya daha kısıtlı bir grup
[Install]
WantedBy=multi-user.target
systemd servisini etkinleştirin ve başlatın:
systemctl daemon-reload
systemctl enable do-app-logs.service
systemctl start do-app-logs.service
Servisin durumunu kontrol edin:
systemctl status do-app-logs.service
Artık /var/log/app_platform/app_logs.log dosyasına App Platform logları akmaya başlayacaktır. Bu dosya, Fluent Bit tarafından okunacaktır.
Not: doctl çıktısı genellikle JSON formatındadır. --format json parametresi bunu sağlamaya yardımcı olur. Eğer uygulamanızın logları JSON değilse, Fluent Bit filtreleriyle ayrıştırmanız gerekecektir.
5.4. Fluent Bit Kurulumu ve Yapılandırması
Fluent Bit’i kurup, /var/log/app_platform/app_logs.log dosyasını okuyacak ve logları OpenSearch kümenize gönderecek şekilde yapılandıracağız.
1. Fluent Bit Kurulumu:
DigitalOcean’ın resmi dokümantasyonunda önerilen adımları izleyerek Fluent Bit’i kurun:
curl https://raw.githubusercontent.com/fluent/fluent-bit-docs/master/installation/debian/fluent-bit.sh | sh
Bu betik, Fluent Bit deposunu sisteminize ekler ve paketi kurar.
2. Fluent Bit Yapılandırması (/etc/fluent-bit/fluent-bit.conf):
Varsayılan fluent-bit.conf dosyasını yedekleyin ve içeriğini aşağıdaki gibi düzenleyin:
[SERVICE]
Flush 5
Daemon Off
Log_Level info
Parsers_File parsers.conf
# Storage_Path /var/log/flb-storage/ # Disk tamponlamayı etkinleştirmek için
# Storage.Sync normal
[INPUT]
Name tail
Tag app_platform.logs
Path /var/log/app_platform/app_logs.log
Parser json_parser # Eğer loglar JSON ise bu parser'ı kullanın
DB /var/log/flb-tail.db # Nerede kaldığını takip etmek için
Mem_Buf_Limit 5MB
Skip_Long_Lines On
[FILTER]
Name nest
Match app_platform.logs
Nested_log log # Eğer JSON içinde 'log' anahtarı altında log varsa
Operation lift
# Eğer loglarınızda zaman damgası farklı bir alandaysa veya yoksa,
# bu filtreyi kullanarak zaman damgasını işleyebilirsiniz.
# Name modify
# Match app_platform.logs
# Add @timestamp ${time.iso8601} # Zaman damgası ekler
[OUTPUT]
Name opensearch
Match app_platform.logs
Host # OpenSearch kümenizin hostname'i
Port # Genellikle 2433
Index app-logs-${DATE:%Y.%m.%d} # Günlük indeks rotasyonu
Type _doc
HTTP_User doadmin
HTTP_Passwd # OpenSearch kümenizin parolası
TLS On
TLS.Verify On
# TLS.CA_File /path/to/ca.pem # Gerekirse CA sertifikası
Suppress_Type_Name On # OpenSearch 7+ için önerilir
# Buffer_Size False # Büyük loglar için tampon boyutunu ayarlayın
# Retry_Limit False # Sonsuz yeniden deneme
Açıklamalar:
* [SERVICE]: Fluent Bit’in genel ayarları. Flush logların ne sıklıkla hedefe gönderileceğini belirler.
* [INPUT]: tail eklentisi, belirtilen log dosyasını gerçek zamanlı olarak okur.
* Path: Log dosyamızın yolu.
* Parser: Eğer doctl çıktısı JSON formatındaysa, json_parser kullanabiliriz. Bu parser, parsers.conf içinde tanımlıdır ve logları JSON olarak ayrıştırır.
* DB: Fluent Bit’in dosya okumasında nerede kaldığını takip etmek için kullanılır, böylece yeniden başlatmalarda log kaybı yaşanmaz.
* [FILTER]: Logları OpenSearch’e göndermeden önce işlemek için kullanılır.
* nest filtresi, eğer doctl çıktısı { "log": "gerçek log mesajı", "level": "info" } gibi nested bir yapıya sahipse, log anahtarının içeriğini ana seviyeye çıkarır. Bu, OpenSearch’te daha düzgün bir yapı sağlar.
* Eğer loglarınızda zaman damgası yoksa veya doğru formatta değilse, modify filtresi ile @timestamp alanı ekleyebilir veya dönüştürebilirsiniz.
* [OUTPUT]: opensearch eklentisi, işlenmiş logları DigitalOcean Yönetilen OpenSearch kümenize gönderir.
* ve : OpenSearch kümenizin bağlantı bilgilerini buraya yazın.
* Index: Logların OpenSearch’te hangi dizine yazılacağını belirler. ${DATE:%Y.%m.%d} ifadesi, logların günlük olarak yeni bir indekse yazılmasını sağlar (örn: app-logs-2023.10.27). Bu, indeks yönetimini kolaylaştırır.
* HTTP_User ve HTTP_Passwd: OpenSearch kümenizin doadmin kullanıcı adı ve parolası.
* TLS On ve TLS.Verify On: Güvenli bağlantı için TLS/SSL şifrelemesini etkinleştirir ve sertifika doğrulaması yapar.
parsers.conf dosyasını kontrol edin:
Eğer loglarınız JSON ise, parsers.conf dosyasında [PARSER] bölümünde json_parser‘ın tanımlı olduğundan emin olun. Genellikle varsayılan kurulumda bu mevcuttur:
[PARSER]
Name json_parser
Format json
Time_Key time # Eğer loglarınızda zaman damgası 'time' anahtarında ise
Time_Format %Y-%m-%dT%H:%M:%S.%L%z # JSON loglarınızdaki zaman damgası formatına göre ayarlayın
JSON loglarınızdaki zaman damgası formatına dikkat edin ve Time_Format‘ı buna göre ayarlayın. Eğer zaman damgası yoksa veya time anahtarında değilse, Time_Key ve Time_Format satırlarını kaldırabilir ve modify filtresi ile @timestamp ekleyebilirsiniz.
3. Fluent Bit Servisini Başlatma:
systemctl enable fluent-bit
systemctl start fluent-bit
systemctl status fluent-bit
Logların düzgün bir şekilde OpenSearch’e gönderilip gönderilmediğini kontrol etmek için Fluent Bit’in loglarını izleyebilirsiniz:
journalctl -u fluent-bit -f
5.5. Entegrasyonu Test Etme ve Doğrulama
Logların OpenSearch’e başarıyla ulaştığını doğrulamak için OpenSearch Dashboards’u kullanacağız.
1. OpenSearch Dashboards’a Erişim:
DigitalOcean kontrol panelinden OpenSearch kümenizin “Overview” sayfasına gidin. “OpenSearch Dashboards” bağlantısına tıklayın. doadmin kullanıcı adı ve OpenSearch kümenizin parolası ile giriş yapın.
2. Index Pattern Oluşturma:
OpenSearch Dashboards’a ilk kez giriş yaptığınızda veya yeni bir indeks türü eklediğinizde, bir indeks deseni (index pattern) oluşturmanız gerekir.
* Sol menüden “Stack Management” -> “Index Patterns” -> “Create index pattern” yolunu izleyin.
“Index pattern name” alanına app-logs- yazın (Fluent Bit yapılandırmamızdaki app-logs-${DATE:%Y.%m.%d} ile eşleşmesi için). “Next step”e tıklayın.
* “Time field” olarak @timestamp alanını seçin (Fluent Bit veya App Platform logları tarafından eklenen zaman damgası alanı). “Create index pattern”e tıklayın.
3. Logları Keşfetme (Discover):
Sol menüden “Discover” sekmesine tıklayın.
* Eğer loglar başarıyla geliyorsa, burada App Platform loglarınızı göreceksiniz.
* Zaman aralığını (sağ üst köşede) “Last 15 minutes” veya “Last 1 hour” gibi uygun bir değere ayarlayın.
* Log alanlarını genişleterek içeriğini inceleyebilirsiniz.
* Basit sorgular (level: error, message: "failed to connect") çalıştırarak logları filtreleyebilirsiniz.
Bu adımları tamamladığınızda, DigitalOcean App Platform loglarınız DigitalOcean Yönetilen OpenSearch kümenize gerçek zamanlı olarak akmaya başlayacaktır.
Gelişmiş Yapılandırmalar ve En İyi Uygulamalar
Log yönetimi altyapınızın güvenliğini, performansını ve dayanıklılığını artırmak için bazı gelişmiş yapılandırmalar ve en iyi uygulamalar mevcuttur.
Log Güvenliği
1. TLS/SSL Şifrelemesi: Fluent Bit ile OpenSearch arasındaki tüm iletişim TLS/SSL ile şifrelenmelidir. Yukarıdaki örnekte TLS On ve TLS.Verify On ile bu zaten etkinleştirilmiştir.
2. OpenSearch’te Kullanıcı ve Rol Yönetimi (RBAC): doadmin kullanıcısı yönetici yetkilerine sahiptir. Üretim ortamlarında, OpenSearch Dashboards’a erişen veya logları sorgulayan farklı ekipler için daha kısıtlı yetkilere sahip kullanıcılar ve roller oluşturulmalıdır.
3. Log Forwarder Droplet Güvenlik Duvarı: Droplet’inizin güvenlik duvarı (DigitalOcean Cloud Firewalls veya ufw) kurallarını yapılandırarak sadece SSH erişimine ve OpenSearch kümesine giden trafiğe izin verin. Gelen tüm diğer portları kapatın. OpenSearch kümenizin güvenlik duvarı kurallarında da sadece Log Forwarder Droplet’inizin IP adresine izin verdiğinizden emin olun.
4. Hassas Veri Maskeleme/Redaksiyonu: Loglarda kredi kartı numaraları, kişisel kimlik bilgileri (PII) veya parolalar gibi hassas veriler bulunuyorsa, Fluent Bit’in rewrite_tag veya grep filtrelerini kullanarak bu verileri OpenSearch’e göndermeden önce maskeleyebilir veya tamamen kaldırabilirsiniz. Örneğin, regex tabanlı bir filtre ile belirli desenleri bulup değiştirebilirsiniz.
Performans ve Ölçeklenebilirlik
1. Fluent Bit Kaynak Tüketimi Optimizasyonu:
* Mem_Buf_Limit: Her bir giriş eklentisi için bellek tamponu boyutunu ayarlar. Çok büyük log hacimleri için bunu artırmanız gerekebilir.
* Flush: Logların ne sıklıkta OpenSearch’e gönderileceğini ayarlar. Daha büyük bir Flush değeri, daha az ağ isteği ancak daha yüksek gecikme anlamına gelir. Dengeyi bulmak önemlidir.
2. Disk Tamponlama (Disk Buffering): Fluent Bit’in Storage_Path ayarını kullanarak disk tamponlamayı etkinleştirin. Bu, ağ kesintileri veya OpenSearch kümesinin geçici olarak erişilemez olması durumunda log kaybını önler. Loglar önce diske yazılır, ardından OpenSearch’e gönderilir.
[SERVICE]
# ...
Storage_Path /var/log/flb-storage/
Storage.Sync normal # veya full
3. Birden Fazla Log Forwarder Droplet: Çok yüksek hacimli loglarınız varsa, tek bir Droplet darboğaz haline gelebilir. Birden fazla Log Forwarder Droplet kullanarak yükü dağıtabilirsiniz. Her Droplet aynı App Platform uygulamasının loglarını çekebilir veya farklı uygulamaların loglarını çekmek üzere yapılandırılabilir.
4. OpenSearch Kümesi Boyutlandırması: Log hacminiz arttıkça veya daha uzun süre saklama ihtiyacınız olduğunda, OpenSearch kümenizi ölçeklendirmeniz gerekebilir. DigitalOcean kontrol paneli üzerinden düğüm sayısını, RAM’i ve depolama alanını kolayca artırabilirsiniz. Log hacminizi ve sorgu yükünüzü düzenli olarak izleyerek uygun boyutlandırmayı sağlayın.
Hata Yönetimi ve Dayanıklılık
1. Yeniden Deneme Mekanizmaları: Fluent Bit’in dahili yeniden deneme mekanizmaları, geçici ağ sorunlarında veya OpenSearch kümesinin kısa süreli erişilemezliğinde logların kaybolmamasını sağlar. Retry_Limit ayarını False (sonsuz yeniden deneme) olarak ayarlamak, log kaybını minimize etmek için iyi bir uygulamadır, ancak bu, birikmiş logların uzun süre diski doldurmasına neden olabilir.
2. Logrotate ile doctl Log Dosyasını Yönetme: /var/log/app_platform/app_logs.log dosyası zamanla çok büyüyebilir. logrotate kullanarak bu dosyayı düzenli olarak döndürebilir, sıkıştırabilir ve eski logları silebilirsiniz. Fluent Bit, tail eklentisi sayesinde logrotate tarafından döndürülen dosyaları sorunsuz bir şekilde takip edebilir.
Örnek logrotate yapılandırması (/etc/logrotate.d/do-app-logs):
/var/log/app_platform/app_logs.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 root root
postrotate
systemctl reload fluent-bit > /dev/null 2>&1 || true
endscript
}
Bu yapılandırma, log dosyasını günlük olarak döndürür, son 7 günü saklar, sıkıştırır ve Fluent Bit’i yeniden yükleyerek yeni dosyayı takip etmesini sağlar.
3. İzleme ve Uyarılar: Fluent Bit ve do-app-logs.service servislerinin durumunu izlemek için Prometheus/Grafana gibi araçlar kullanın. systemd servislerinin başarısız olması veya Fluent Bit’in hata logları üretmesi durumunda uyarılar oluşturun.
Log Zenginleştirme
Fluent Bit’in filtreleme yeteneklerini kullanarak loglara ek bağlam (context) ekleyebilirsiniz:
* Coğrafi Konum Bilgisi: Router loglarındaki IP adreslerini kullanarak coğrafi konum bilgisi (ülke, şehir) ekleyebilirsiniz.
* Uygulama Meta Verileri: Uygulama versiyonu, ortam (production, staging), dağıtım ID’si gibi bilgileri loglara ekleyerek daha kolay filtreleme ve analiz yapabilirsiniz. Bu bilgiler add veya modify filtreleri ile eklenebilir.
Uyarı ve Bildirimler
OpenSearch Dashboards’ta “Alerting” özelliğini kullanarak belirli koşullar altında bildirimler oluşturabilirsiniz:
* Hata Oranları: Belirli bir zaman diliminde level: error loglarının sayısının eşiği aşması durumunda bildirim.
* Performans Anomalileri: Router loglarındaki yanıt sürelerinin anormal derecede artması.
* Güvenlik Olayları: Başarısız giriş denemeleri veya şüpheli IP adreslerinden gelen istekler.
* Kritik Kelimeler: Loglarda belirli kritik kelimelerin (örn: “denied”, “failed to authenticate”) görünmesi.
Bu uyarılar e-posta, Slack, PagerDuty veya diğer bildirim kanallarına gönderilebilir, böylece operasyonel ekipler sorunlara hızla müdahale edebilir.
Sonuç
DigitalOcean Uygulama Platformu’nda çalışan uygulamaların loglarını DigitalOcean Yönetilen OpenSearch’e göndermek, modern uygulama geliştirme ve operasyonel süreçler için vazgeçilmez bir adımdır. Bu entegrasyon, logların merkezi bir konumda toplanmasını, depolanmasını ve analiz edilmesini sağlayarak geliştiricilere ve DevOps ekiplerine paha biçilmez bir görünürlük sunar.
Bu makalede özetlenen adımları takip ederek, App Platform’dan gelen logları doctl ve Fluent Bit aracılığıyla güvenli ve verimli bir şekilde OpenSearch kümenize aktarabilirsiniz. Bu sayede elde edeceğiniz faydalar şunlardır:
* Merkezi Log Yönetimi: Farklı bileşenlerden gelen tüm logları tek bir yerde toplayarak operasyonel karmaşıklığı azaltırsınız.
* Hızlandırılmış Hata Ayıklama: Güçlü arama ve filtreleme yetenekleri sayesinde sorunların kök nedenlerini çok daha hızlı tespit edebilirsiniz.
* Gelişmiş Analiz ve Görselleştirme: OpenSearch Dashboards ile log verilerinden anlamlı gösterge tabloları ve grafikler oluşturarak uygulama performansını, kullanıcı davranışlarını ve güvenlik eğilimlerini izleyebilirsiniz.
* Proaktif İzleme ve Uyarılar: Belirli koşullar altında otomatik uyarılar oluşturarak potansiyel sorunlara henüz kullanıcılar etkilenmeden müdahale edebilirsiniz.
* Operasyonel Verimlilik: Log toplama, işleme ve depolama süreçlerini otomatikleştirerek manuel müdahale ihtiyacını azaltırsınız.
DigitalOcean’ın Uygulama Platformu’nun sunduğu dağıtım kolaylığı ile Yönetilen OpenSearch’in güçlü log analizi yeteneklerini bir araya getirmek, uygulamanızın yaşam döngüsünün her aşamasında daha bilinçli kararlar almanıza olanak tanır. Bu entegrasyon, uygulamanızın ölçeklenmesi ve karmaşıklığının artmasıyla birlikte operasyonel görünürlüğünüzü korumanın ve hatta artırmanın temelini oluşturur. Gelecekte, bu altyapıyı kullanarak log tabanlı metrikler oluşturmak, yapay zeka destekli anomali tespiti yapmak veya daha derinlemesine güvenlik analizi gerçekleştirmek gibi daha gelişmiş senaryoları da kolayca uygulayabilirsiniz. DigitalOcean ekosistemi içinde bu tür entegrasyonlar, bulut tabanlı uygulamalarınızın potansiyelini tam olarak ortaya çıkarmanıza yardımcı olur.
