OpenSearch ile Merkezi Loglama: Logstash ile File’dan Log Nasıl Toplanır?
Merhaba, bu yazıda OpenSearch Stack üzerinde Logstash kullanarak dosyalardan en basit şekilde nasıl log toplayabileceğimizi anlatacağım.
Temel Bileşenler ve İşlevleri
OpenSearch Stack, log yönetimi için üç temel bileşen kullanır:
- Logstash: Log dosyalarını okur ve OpenSearch’e iletir.
- OpenSearch: Logları depolar ve indexler.
- Dashboard: Logları görselleştirir ve analiz eder.
Kurulum ve Yapılandırma
Önce gerekli klasör yapısını oluşturalım:
mkdir opensearch-logging && cd opensearch-logging
mkdir -p logstash/pipeline logs
Docker Compose Dosyası
docker-compose.yml
dosyasını ana dizine oluşturun:
version: '3'
services:
opensearch-node1:
container_name: opensearch-node1
image: opensearchproject/opensearch:2.11.1
environment:
- discovery.type=single-node
- "DISABLE_SECURITY_PLUGIN=true"
- cluster.routing.allocation.disk.threshold_enabled=false
- "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m"
volumes:
- opensearch-data:/usr/share/opensearch/data
ports:
- 9200:9200
- 9300:9300
networks:
- opensearch-net
opensearch-dashboards:
container_name: opensearch-dashboards
image: opensearchproject/opensearch-dashboards:2.11.1
ports:
- 5601:5601
environment:
- 'OPENSEARCH_HOSTS=["http://opensearch-node1:9200"]'
- "DISABLE_SECURITY_DASHBOARDS_PLUGIN=true"
networks:
- opensearch-net
depends_on:
- opensearch-node1
logstash:
container_name: logstash
image: opensearchproject/logstash-oss-with-opensearch-output-plugin:latest
volumes:
- ./logstash/pipeline:/usr/share/logstash/pipeline
- ./logs:/logs
environment:
LS_JAVA_OPTS: "-Xms256m -Xmx256m"
OPENSEARCH_HOSTS: http://opensearch-node1:9200
networks:
- opensearch-net
depends_on:
- opensearch-node1
volumes:
opensearch-data:
networks:
opensearch-net:
Logstash Pipeline Konfigürasyonu
logstash/pipeline/logstash.conf
dosyasını oluşturun.
Bu pipeline, log dosyalarını okur, belirttiğimiz processer ile parse eder ve OpenSearch'e datayı gönderir:
input {
file {
path => "/logs/*.log"
start_position => "beginning"
type => "logs"
}
}
filter {
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:log_level} %{GREEDYDATA:log_message}" }
}
}
output {
opensearch {
hosts => ["http://opensearch-node1:9200"]
index => "logs-%{+YYYY.MM.dd}"
}
}
Sistemi Ayağa Kaldır
Servisleri başlatmak için:
docker-compose up -d
Sistem Durumunu Kontrol
Servislerin çalıştığını kontrol etmek için:
# Container durumlarını kontrol et
docker-compose ps
# OpenSearch'ün çalıştığını kontrol et
curl http://localhost:9200/_cat/health
# Logstash loglarını kontrol et
docker-compose logs -f logstash
# Dashboard'a erişim kontrolü
curl -I http://localhost:5601
Test Log’u Oluşturma
# Test log'u oluştur
echo "$(date '+%Y-%m-%d %H:%M:%S') INFO Test message" > logs/application.log
# Yeni log ekle
echo "$(date '+%Y-%m-%d %H:%M:%S') ERROR System crash" >> logs/application.log
Log Verilerini Kontrol
Logların OpenSearch’e ulaşıp ulaşmadığını kontrol etmek için:
# İndeksleri listele
curl -X GET "localhost:9200/_cat/indices?v"
# Log içeriklerini kontrol et
curl -X GET "localhost:9200/logs-*/_search?pretty"
Dashboard ile Görselleştirme
- http://localhost:5601 adresine gidin.
- Dashboard Management > Index Patterns
- “logs-*” pattern’i oluşturun.
4. Discover menüsünden logları görüntüleyin.
Sorun Giderme
Eğer sistemde sorun varsa:
# Tüm container loglarını görüntüle
docker-compose logs
# Belirli bir servisin loglarını görüntüle
docker-compose logs opensearch-node1
docker-compose logs logstashbash
Son söze gelecek olursak bu rehber’de OpenSearch stack üzerinde dosyalardan logstash aracılığıyla basit şekilde logları nasıl toplayacağımızı görmüş olduk.
Umarım fayda sağlar. Sevgiler :)