Loki + Grafana ile Tomcat Log İzleme (Alloy Kurulum Rehberi)
Bu yazıda Tomcat loglarını Grafana üzerinde canlı olarak nasıl izleyebileceğinizi adım adım ele alıyoruz. Loki, Grafana Alloy ve Grafana kullanarak güçlü, merkezi ve üretim ortamına uygun bir log izleme sistemi kurabilirsiniz.
Spring Boot ve Tomcat tarafındaki güvenlik akışlarını da izlemek istiyorsanız Token Nedir? Access ve Refresh Token rehberine de göz atabilirsiniz.
Loki Nedir?
Loki, Grafana ekosisteminde log toplama ve indeksleme için kullanılan modern bir sistemdir. Prometheus benzeri bir mantıkla çalışır ve logları tam metin yerine çoğunlukla label tabanlı şekilde organize eder.
- Düşük disk kullanımı
- Prometheus benzeri label mantığı
- Grafana ile güçlü entegrasyon
- Docker ve Kubernetes desteği
Grafana Alloy Nedir?
Grafana Alloy, log ve metrik toplamak için kullanılan yeni nesil bir ajandır. Bu rehberde Alloy, Tomcat’in host üzerindeki log dosyalarını okuyacak ve bu logları Loki’ye iletecek.
Tomcat Logs → Grafana Alloy → Loki → Grafana Dashboard
Sistem Gereksinimleri
- Linux Server
- Docker
- Docker Compose
- Tomcat Server
- Grafana
Docker Compose ile Monitoring Stack Kurulumu
Aşağıdaki docker-compose yapısı ile Grafana, Loki ve Alloy servislerini ayağa kaldırabilirsiniz. Bu yapı Tomcat loglarını host makineden okuyacak şekilde tasarlanmıştır.
version: "3.8"
networks:
monitoring:
driver: bridge
volumes:
grafana_data:
loki_data:
alloy_data:
services:
grafana:
image: grafana/grafana:10.4.0
container_name: grafana
restart: unless-stopped
networks:
- monitoring
ports:
- "3000:3000"
volumes:
- grafana_data:/var/lib/grafana
loki:
image: grafana/loki:3.6.7
container_name: loki
restart: unless-stopped
networks:
- monitoring
ports:
- "3100:3100"
volumes:
- ./loki/loki-config.yaml:/etc/loki/config.yaml
- loki_data:/loki
command: -config.file=/etc/loki/config.yaml
alloy:
image: grafana/alloy:v1.13.2
container_name: alloy
restart: unless-stopped
networks:
- monitoring
ports:
- "12345:12345"
volumes:
- ./alloy/config.alloy:/etc/alloy/config.alloy
- /home/apache-tomcat/logs:/var/log/tomcat
- alloy_data:/var/lib/alloy
command:
- "run"
- "--server.http.listen-addr=0.0.0.0:12345"
- "/etc/alloy/config.alloy"
depends_on:
- loki
Buradaki kritik nokta, Tomcat log dizininin container içine mount edilmesidir:
/home/apache-tomcat/logs:/var/log/tomcat
Loki Konfigürasyonu
Loki için loki-config.yaml dosyasını aşağıdaki gibi oluşturabilirsiniz:
auth_enabled: false
server:
http_listen_port: 3100
common:
path_prefix: /loki
storage:
filesystem:
chunks_directory: /loki/chunks
rules_directory: /loki/rules
replication_factor: 1
ring:
kvstore:
store: inmemory
schema_config:
configs:
- from: 2024-01-01
store: tsdb
object_store: filesystem
schema: v13
index:
prefix: index_
period: 24h
Bu yapı, küçük ve orta ölçekli log izleme senaryoları için oldukça yeterlidir.
Alloy ile Tomcat Loglarını Okuma
Alloy tarafında config.alloy dosyası ile hangi log dosyalarının okunacağını belirtmemiz gerekir. Aşağıdaki yapı Tomcat loglarını okuyup Loki’ye gönderir.
local.file_match "tomcat_logs" {
path_targets = [
{
__path__ = "/var/log/tomcat/*.log",
job = "tomcat",
},
{
__path__ = "/var/log/tomcat/catalina.out",
job = "tomcat",
},
]
}
loki.source.file "tomcat_logs" {
targets = local.file_match.tomcat_logs.targets
forward_to = [loki.write.default.receiver]
}
loki.write "default" {
endpoint {
url = "http://loki:3100/loki/api/v1/push"
}
}
Bu yapı sayesinde Alloy, Tomcat log dosyalarını tail ederek yeni satırları anlık biçimde Loki’ye iletir.
Servisleri Başlatma
Tüm servisleri başlatmak için aşağıdaki komutu çalıştırın:
docker compose up -d
Servislerin durumunu kontrol etmek için:
docker ps
Alloy loglarında tail routine started benzeri satırlar görüyorsanız,
Tomcat log dosyaları başarıyla okunuyor demektir.
Grafana’da Loki Datasource Ekleme
Grafana arayüzüne giriş yaptıktan sonra Loki datasource eklemelisiniz.
- Connections → Data Sources
- Add data source
- Loki seçin
Datasource URL:
http://loki:3100
Ardından Save & Test ile bağlantıyı doğrulayabilirsiniz.
Tomcat Loglarını Görüntüleme
Grafana Explore bölümünde aşağıdaki sorgu ile Tomcat loglarını görebilirsiniz:
{job="tomcat"}
Yalnızca error loglarını görmek için:
{job="tomcat"} |= "ERROR"
Exception loglarını görmek için:
{job="tomcat"} |= "Exception"
Canlı Log Akışı (Live Logs)
Grafana üzerinden canlı log akışı görmek için:
- Explore ekranını açın
- Loki datasource seçin
{job="tomcat"}sorgusunu çalıştırın- Live Mode veya Live tail özelliğini aktif edin
Bu sayede yeni gelen Tomcat logları anlık olarak ekrana düşer. Dashboard tarafında da en yeni logların üstte görünmesi için logs panelinde Descending sıralama ve kısa refresh süresi kullanılabilir.
Test Log Gönderme
Sistemin gerçekten çalıştığını hızlıca test etmek için host makinede aşağıdaki komutu çalıştırabilirsiniz:
echo "LOKI_TEST $(date)" >> /home/apache-tomcat/logs/catalina.out
Daha sonra Grafana’da şu sorguyu çalıştırın:
{job="tomcat"} |= "LOKI_TEST"
Test satırı görünüyorsa Tomcat → Alloy → Loki → Grafana hattı başarıyla çalışıyor demektir.
Production Best Practices
- Tomcat log klasörünü sadece read-only mount edin
- Loki için kalıcı volume kullanın
- Dashboard refresh süresini ihtiyaca göre 5s veya 10s yapın
- ERROR ve Exception logları için ayrı paneller oluşturun
- İlerleyen aşamada alerting ile hata bildirimleri ekleyin
Sonuç
Bu rehberde Loki, Grafana Alloy ve Grafana kullanarak Tomcat loglarını merkezi olarak toplama ve analiz etme sürecini adım adım ele aldık.
- Tomcat loglarını merkezi olarak toplayabilirsiniz
- Grafana üzerinden canlı log akışı görebilirsiniz
- Error ve Exception loglarını analiz edebilirsiniz
- Dashboard ile log metriklerini izleyebilirsiniz
Özellikle DevOps, Java backend ve production monitoring senaryolarında bu yapı oldukça güçlü bir log observability çözümü sunar.
JVM ve uygulama metriklerini de izlemek istiyorsanız JavaMelody rehberine de göz atabilirsiniz.