OpenSearch ile Merkezi Loglama: Logstash ile File’dan Log Nasıl Toplanır?

Mustafa Dikyar
3 min readOct 24, 2024

--

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

  1. http://localhost:5601 adresine gidin.
  2. Dashboard Management > Index Patterns
  3. “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 :)

--

--

No responses yet