OpenTelemetry ile Observability: Log/Metric/Trace Rehberi 2025
Observability 101: OpenTelemetry ile Log/Metric/Trace Birleştirme ve Prod İzleme
Modern yazılım geliştirme süreçlerinde observability kavramı, artık lüks değil zorunluluk haline geldi. Özellikle mikroservis mimarileri ve bulut tabanlı uygulamaların yaygınlaşmasıyla birlikte, sistem davranışlarını anlama ve sorunları hızla tespit etme ihtiyacı kritik önem kazandı. OpenTelemetry, bu zorlu süreci kolaylaştıran ve tüm gözlemlenebilirlik verilerini tek bir çatı altında toplayan devrimci bir araçtır.
Geleneksel izleme yöntemlerinde log dosyaları, metrikler ve trace verileri genellikle farklı sistemlerde saklanır ve birbiriyle ilişkilendirilmesi zor olur. Bu durum, production ortamlarında yaşanan sorunların kök nedenini bulma sürecini oldukça karmaşık hale getirir. OpenTelemetry, bu üç temel gözlemlenebilirlik pillarını birleştirerek, geliştiricilere sistem davranışları hakkında bütünsel bir görüş sunar.
Bu kapsamlı rehberde, OpenTelemetry'nin temellerinden başlayarak, log, metric ve trace verilerini nasıl birleştirebileceğinizi ve production ortamlarında etkili izleme stratejileri nasıl oluşturabileceğinizi öğreneceksiniz. Özellikle KOBİ'ler için uygun maliyetli çözümler ve pratik implementasyon örnekleri ile konuyu detaylandıracağız.
OpenTelemetry Nedir ve Neden Önemlidir?
OpenTelemetry (OTel), bulut-native uygulamalar için gözlemlenebilirlik verilerini toplama, işleme ve dışa aktarma konusunda açık kaynaklı bir standart ve araç setidir. Cloud Native Computing Foundation (CNCF) projesi olan OpenTelemetry, sektörde vendor-agnostic bir çözüm sunarak, farklı gözlemlenebilirlik platformları arasında geçiş yapma esnekliği sağlar.
OpenTelemetry'nin temel bileşenleri şunlardır:
- Specification (Spesifikasyon): API'lar, SDK'lar ve veri formatları için standartları tanımlar
- APIs ve SDKs: Farklı programlama dilleri için kütüphaneler
- Instrumentation Libraries: Popüler framework'ler için hazır entegrasyonlar
- Collector: Telemetri verilerini alma, işleme ve dışa aktarma servisi
OpenTelemetry'nin İş Dünyasına Faydaları
Modern işletmeler için observability, sadece teknik bir gereklilik değil, aynı zamanda müşteri deneyimini doğrudan etkileyen kritik bir faktördür. Bir e-ticaret sitesinde yaşanan 1 saniyelik gecikme, %7 oranında conversion kaybına neden olabilir. OpenTelemetry ile:
- Hızlı sorun tespiti: Ortalama çözüm süresini %60'a kadar azaltabilir
- Proaktif izleme: Sorunlar müşterileri etkilemeden önce tespit edilir
- Maliyet optimizasyonu: Gereksiz altyapı maliyetlerini minimize eder
- Geliştirici verimliliği: Debug süreçlerini dramatik şekilde kısaltır
Koçak Yazılım'ın hizmetleri kapsamında, müşterilerimize observability konusunda danışmanlık ve implementasyon desteği sağlayarak, bu faydaları somut sonuçlara dönüştürüyoruz.
Üç Pillar: Log, Metric ve Trace Verilerinin Kapsamlı Analizi
Gözlemlenebilirliğin üç temel direği vardır ve her birinin sistem davranışlarını anlama konusunda benzersiz katkıları bulunur. Bu üç veri tipinin etkili bir şekilde birleştirilmesi, production ortamlarında güçlü bir monitoring stratejisi oluşturmanın anahtarıdır.
Logs (Günlük Kayıtları)
Log verileri, uygulamanızda gerçekleşen olayların zaman damgalı kayıtlarıdır. Traditional logging yaklaşımlarından farklı olarak, OpenTelemetry structured logging'i destekler:
{
"timestamp": "2024-01-15T10:30:00Z",
"level": "ERROR",
"message": "Database connection failed",
"service": "user-service",
"trace_id": "abc123",
"span_id": "def456",
"user_id": "user_789"
}
Metrics (Metrikler)
Metrikler, sistem performansının sayısal göstergeleridir. OpenTelemetry dört temel metric türü destekler:
- Counter: Artış gösteren değerler (HTTP request sayısı)
- Gauge: Anlık değerler (aktif kullanıcı sayısı)
- Histogram: Değer dağılımları (response time)
- Summary: Histogram'a benzer, percentile hesaplamaları içerir
Traces (İzleme)
Trace verileri, bir isteğin sistem boyunca takip edilmesini sağlar. Her trace, birden fazla span içerir ve mikroservislerde request flow'un görselleştirilmesinde kritik rol oynar.
Bu üç veri tipinin birbiriyle correlation kurulması, sorun çözme sürecinde devrim yaratır. Örneğin, bir error log'u gördüğünüzde, aynı trace_id ile ilgili metric ve trace verilerine ulaşarak, sorunun kök nedenini çok daha hızlı tespit edebilirsiniz.
OpenTelemetry Kurulumu ve Konfigürasyonu: Adım Adım Rehber
OpenTelemetry implementasyonu, projenizin ihtiyaçlarına göre farklı yaklaşımlar gerektirebilir. En yaygın senaryoları ve pratik kurulum adımlarını inceleyelim.
Auto-Instrumentation ile Hızlı Başlangıç
Java uygulamaları için auto-instrumentation kullanarak başlayabilirsiniz:
# OpenTelemetry Java Agent'ı indirin
curl -L -o opentelemetry-javaagent.jar \
https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/latest/download/opentelemetry-javaagent.jar
# Uygulamanızı çalıştırırken agent'ı ekleyin
java -javaagent:opentelemetry-javaagent.jar \
-Dotel.service.name=my-service \
-Dotel.exporter.otlp.endpoint=http://localhost:4317 \
-jar myapp.jar
Manuel Instrumentation ile Detaylı Kontrol
Daha fazla kontrol istiyorsanız, manual instrumentation kullanabilirsiniz:
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.trace.Tracer;
public class UserService {
private static final Tracer tracer =
OpenTelemetry.getGlobalTracer("user-service");
public User getUser(String userId) {
Span span = tracer.spanBuilder("getUser")
.setAttribute("user.id", userId)
.startSpan();
try {
// İş mantığınız burada
User user = database.findUser(userId);
span.setAttribute("user.found", user != null);
return user;
} finally {
span.end();
}
}
}
Collector Konfigürasyonu
OpenTelemetry Collector, telemetri verilerini toplamak ve işlemek için merkezi bir bileşendir:
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318
processors:
batch:
timeout: 1s
send_batch_size: 1024
exporters:
jaeger:
endpoint: http://jaeger:14250
tls:
insecure: true
prometheus:
endpoint: "0.0.0.0:8889"
service:
pipelines:
traces:
receivers: [otlp]
processors: [batch]
exporters: [jaeger]
metrics:
receivers: [otlp]
processors: [batch]
exporters: [prometheus]
KOBİ'ler için maliyet-etkin bir başlangıç stratejisi, önce auto-instrumentation ile deneyim kazanmak, ardından kritik iş süreçlerinde manual instrumentation'a geçmek olacaktır. Koçak Yazılım ekibi olarak, müşterilerimize bu geçiş sürecinde rehberlik ederek, optimal implementasyon stratejileri geliştiriyoruz.
Production Ortamında Etkili İzleme Stratejileri
Production ortamlarında observability implementasyonu, teorik bilgilerin pratiğe dönüştürüldüğü kritik aşamadır. Burada performans, maliyet ve güvenilirlik dengesini kurarak, sürdürülebilir bir izleme stratejisi oluşturmanız gerekir.
Sampling Stratejileri ile Maliyet Optimizasyonu
Yüksek trafikli sistemlerde her request'i trace etmek hem performans hem de maliyet açısından sürdürülemez. Akıllı sampling stratejileri kullanarak bu dengeyi kurabilirsiniz:
# Tail-based sampling konfigürasyonu
processors:
tail_sampling:
decision_wait: 10s
num_traces: 100
policies:
- name: error-sampling
type: status_code
status_code: {status_codes: [ERROR]}
- name: slow-requests
type: latency
latency: {threshold_ms: 1000}
- name: probabilistic-sampling
type: probabilistic
probabilistic: {sampling_percentage: 1}
Bu konfigürasyon ile:
- Hatalı requestlerin %100'ü saklanır
- 1 saniyeden uzun süren requestlerin %100'ü saklanır
- Diğer requestlerin %1'i rastgele örneklenir
Critical Path Monitoring
İş kritik süreçlerinizi özel olarak izleyin. E-ticaret örneğinde:
@Component
public class CheckoutService {
@Traced("checkout-process")
public CheckoutResult processOrder(OrderRequest request) {
Span span = Tracer.getCurrentSpan();
span.setAttribute("order.total", request.getTotal());
span.setAttribute("customer.type", request.getCustomerType());
// SLI (Service Level Indicator) metrikleri
Timer.Sample sample = Timer.start();
try {
CheckoutResult result = performCheckout(request);
checkoutCounter.increment("status", "success");
return result;
} catch (PaymentException e) {
span.recordException(e);
checkoutCounter.increment("status", "payment_failed");
throw e;
} finally {
sample.stop(checkoutTimer);
}
}
}
Alerting ve SLO Tanımları
Service Level Objectives (SLO) belirleyerek, proaktif alerting sistemi kurun:
- Availability SLO: %99.9 uptime
- Latency SLO: %95 requestler 200ms altında
- Error Rate SLO: %0.1'den az error rate
# Prometheus alerting rules
groups:
- name: slo-alerts
rules:
- alert: HighErrorRate
expr: rate(http_requests_total{status=~"5.."}[5m]) > 0.001
for: 2m
annotations:
summary: "Error rate SLO violation"
- alert: HighLatency
expr: histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m])) > 0.2
for: 5m
annotations:
summary: "Latency SLO violation"
Dashboard ve Görselleştirme
Grafana ile business-focused dashboard'lar oluşturun. Teknik metriklerden ziyade, iş değeri yaratan göstergelere odaklanın:
- Revenue Impact: Hata nedeniyle kaybedilen gelir
- Customer Journey: Funnel conversion oranları
- System Health: Business critical service'lerin durumu
Dijital dönüşüm süreçlerinde observability, sadece teknik bir gereklilik değil, aynı zamanda strategik bir avantaj sağlar. Production ortamında doğru izleme stratejileri, rekabet avantajı elde etmenin önemli bir unsurudur.
Troubleshooting ve Performance Optimization Teknikleri
Gerçek dünya senaryolarında, observability verilerini kullanarak sorunları tespit etmek ve çözmek, sistematik bir yaklaşım gerektirir. En yaygın production sorunları ve çözüm stratejilerini pratik örneklerle inceleyelim.
Distributed Tracing ile Root Cause Analysis
Mikroservis mimarilerinde, bir sorunun kök nedenini bulmak needle-in-haystack problemidir. Distributed tracing, bu süreci dramatik şekilde kolaylaştırır:
Senaryo: E-ticaret checkout sürecinde intermittent timeout'lar yaşanıyor.
- Trace ID ile Investigation: Başarısız olan bir checkout request'in trace ID'sini bulun
- Service Map Analysis: Trace'i visualize ederek hangi service'de gecikme olduğunu tespit edin
- Span Details: Problematik span'in attribute'larını inceleyerek kök nedeni bulun
# Jaeger Query ile problematik trace'leri bulma
curl "http://jaeger:16686/api/traces?service=checkout-service&lookback=1h&limit=100&tags={error=true}"
Memory Leak ve Resource Tespiti
OpenTelemetry runtime metrics ile JVM memory leak'lerini proaktif olarak tespit edebilirsiniz:
// Custom metric ile heap memory izleme
Gauge heapUsedGauge = Gauge.builder("jvm.memory.heap.used")
.description("Used heap memory")
.ofDoubles()
.buildWithCallback(measurement -> {
MemoryUsage heapUsage = ManagementFactory.getMemoryMXBean()
.getHeapMemoryUsage();
measurement.record(heapUsage.getUsed());
});
Database Performance Optimization
Slow query'leri ve database connection pool sorunlarını trace etmek:
# Database instrumentation konfigürasyonu
instrumentation:
jdbc:
enabled: true
capture-statement: true
capture-parameters: true
Bu sayede SQL query'lerinizi trace context'inde görebilir, N+1 problem'i gibi performance antipattern'lerini tespit edebilirsiniz.
Custom Metrics ile Business Logic Monitoring
Teknik metriklerle birlikte business metrics de toplayın:
@Service
public class InventoryService {
private final Counter stockOutCounter = Counter.builder("inventory.stock.out")
.description("Products going out of stock")
.register(Metrics.globalRegistry);
public void updateStock(String productId, int quantity) {
if (quantity <= 0) {
stockOutCounter.increment(
Tags.of("product.category", getProductCategory(productId))
);
}
// Stock güncelleme mantığı
}
}
Capacity Planning ve Auto-scaling
Historical trace ve metric verileri kullanarak capacity planning yapın:
- Traffic Pattern Analysis: Hangi saatlerde peak yoğunluk oluyor?
- Resource Utilization: CPU/Memory kullanım trendleri nasıl?
- Response Time vs Load: Hangi yükten sonra performance degradation başlıyor?
Bu analizler sayesinde predictive auto-scaling politikaları oluşturabilir ve infrastructure maliyetlerini optimize edebilirsiniz.
Koçak Yazılım'ın projeleri kapsamında, müşterilerimize bu tip performance optimization çalışmaları gerçekleştirerek, sistem performanslarında ortalama %40-60 oranında iyileşme sağlıyoruz.
En İyi Pratikler ve Güvenlik Konuları
Production ortamlarında observability implementasyonu yaparken, güvenlik ve performance dengesini korumak kritik önem taşır. Aşağıda, industry best practice'lerini ve güvenlik önlemlerini detaylandıracağız.
Sensitive Data Protection
Trace ve log verilerinde hassas bilgilerin korunması için:
// Attribute filtering ile sensitive data protection
@Component
public class PaymentTracer {
public void tracePayment(PaymentRequest request) {
Span span = tracer.spanBuilder("process-payment")
.setAttribute("payment.amount", request.getAmount())
.setAttribute("payment.currency", request.getCurrency())
// KRedi kartı numarası trace edilmez!
.setAttribute("payment.method", request.getMethod())
.setAttribute("customer.id.hash",
hashService.hash(request.getCustomerId()))
.startSpan();
}
}
GDPR ve Data Compliance
Avrupa müşterileri ile çalışan şirketler için GDPR compliance kritiktir:
# OpenTelemetry Collector - PII scrubbing
processors:
attributes:
actions:
- key: user.email
action: delete
- key: user.phone
action: hash
- key: user.name
action: hash
from_attribute: user.id
Resource Limits ve Circuit Breaker
Observability sisteminin kendisinin production'ı etkilememesi için:
# Collector resource limits
service:
extensions: [health_check]
pipelines:
traces:
receivers: [otlp]
processors: [memory_limiter, batch]
exporters: [jaeger]
processors:
memory_limiter:
limit_mib: 1000
batch:
timeout: 1s
send_batch_max_size: 1024
Multi-tenancy ve Access Control
SaaS ürünlerde tenant isolation sağlamak:
// Tenant context ile trace separation
public class TenantTracingFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
String tenantId = extractTenantId(request);
Span span = Tracer.getCurrentSpan();
span.setAttribute("tenant.id", tenantId);
span.setAttribute("tenant.tier", getTenantTier(tenantId));
try (Scope scope = Context.current().with(TENANT_KEY, tenantId).makeCurrent()) {
chain.doFilter(request, response);
}
}
}
Cost Management Stratejileri
Observability maliyetlerini kontrol altında tutmak:
- Intelligent Sampling: Business critical path'lerde %100, diğerlerinde adaptive sampling
- Data Retention Policies: Hot data 7 gün, warm data 30 gün, cold data 1 yıl
- Metric Cardinality Control: High-cardinality metric'leri sınırlandırın
# Cost-optimized exporter configuration
exporters:
otlp/primary:
endpoint: "https://high-tier-backend"
headers:
api-key: "premium-key"
otlp/secondary:
endpoint: "https://cost-effective-backend"
headers:
api-key: "basic-key"
service:
pipelines:
traces/critical:
receivers: [otlp]
processors: [attributes/critical]
exporters: [otlp/primary]
traces/standard:
receivers: [otlp]
processors: [tail_sampling, batch]
exporters: [otlp/secondary]
Disaster Recovery ve Backup
Observability verilerinin sürekli erişilebilir olması için:
- Multi-region deployment: Ana ve yedek region'larda collector deployment
- Data replication: Critical trace'lerin birden fazla backend'e gönderilmesi
- Graceful degradation: Backend'ler down olduğunda uygulama performansının etkilenmemesi
Bu best practice'leri takip ederek, hem güvenli hem de maliyetkontrollü bir observability sistemi kurabilirsiniz. Koçak Yazılım ile iletişime geçerek, observability implementasyon sürecinizde profesyonel destek alabilirsiniz.
Sonuç: Observability Yolculuğunuzda Bir Sonraki Adım
OpenTelemetry ile observability implementasyonu, modern yazılım geliştirme süreçlerinde rekabet avantajı sağlayan kritik bir yetkinliktir. Bu kapsamlı rehberde öğrendiklerinizi özetlersek:
- OpenTelemetry'nin vendor-agnostic yaklaşımı, farklı araçlar arasında geçiş esnekliği sağlar
- Log, metric ve trace verilerinin birleştirilmesi, sorun çözme süreçlerini dramatik şekilde hızlandırır
- Production ortamında doğru izleme stratejileri, sistem güvenilirliğini artırır ve maliyetleri optimize eder
- Security ve compliance önlemleri, enterprise gereksinimleri karşılar
Hemen Harekete Geçin
Observability yolculuğunuza bugün başlayabilirsiniz:
- Proof of Concept: Mevcut uygulamanızda küçük bir modül için OpenTelemetry implementasyonu yapın
- Team Education: Geliştirici ekibinizi observability konusunda eğitin
- Tool Selection: İhtiyaçlarınıza uygun backend çözümlerini değerlendirin
- Incremental Rollout: Kritik path'lerden başlayarak kademeli olarak genişletin
Koçak Yazılım Farkı
Observability implementasyonunda 15+ yıllık deneyimimiz sayesinde, müşterilerimize end-to-end çözümler sunuyoruz:
- Danışmanlık Hizmetleri: Mevcut altyapınızı analiz ederek optimal observability stratejisi geliştirme
- Implementation Support: OpenTelemetry kurulum ve konfigürasyon desteği
- Training Programs: Ekipleriniz için hands-on observability eğitimleri
- Ongoing Support: 7/24 teknik destek ve sistem optimizasyonu
Koçak Yazılım olarak, observability journey'nizde yanınızdayız. Modern yazılım geliştirme pratiklerini benimseyen, müşteri deneyimini önceleyen ve teknolojik yenilikleri takip eden ekibimizle, dijital dönüşüm sürecinizde güvenilir bir partner olarak sizlere hizmet veriyoruz.
Observability yolculuğunuzu başlatmaya hazır mısınız? Hemen bizimle iletişime geçin ve ücretsiz danışmanlık hizmeti alarak ilk adımı atın!