Apache Günlüklerini Logstash aracılığıyla OpenSearch'e iletin


giriiş

Etkili web sunucusu günlük yönetimi, web sitenizin performansını korumak, sorunları gidermek ve kullanıcı davranışına ilişkin öngörüler elde etmek için çok önemlidir. Apache en popüler web sunucularından biridir. Değerli bilgiler içeren erişim ve hata günlükleri oluşturur. Bu günlükleri verimli bir şekilde yönetmek ve analiz etmek için Logstash'ı kullanarak bunları işleyebilir ve indeksleme ve görselleştirme amacıyla DigitalOcean'ın Yönetilen Açık Arama'sına iletebilirsiniz.

Bu eğitimde Logstash'ı bir Droplet'e kurma, Apache günlüklerinizi toplayacak şekilde yapılandırma ve bunları analiz için Managed OpenSearch'e gönderme konusunda size rehberlik edeceğiz.

Önkoşullar

  1. Apache Web sunucusunun yüklü olduğu damlacıklar.
  2. Yönetilen OpenSearch Kümesi

Adım 1 - Logstash'ı Yükleme

Logstash, ikili dosyalar kullanılarak VEYA paket depoları aracılığıyla kurulabilir. Daha kolay yönetim ve güncellemeler için genellikle paket havuzlarının kullanılması önerilir.

Bu bölümde, hem APT hem de YUM paket yöneticilerini kullanarak Logstash'ı Droplet'inize kurma konusunda size rehberlik edeceğiz.

İşletim sistemini tanımlayalım:

cat /etc/os-release

APT Tabanlı Sistemler İçin (Ubuntu/Debian)

Genel İmza Anahtarını indirip yükleyin:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elastic-keyring.gpg

Devam etmeden önce apt-transport-https paketini Debian'a kurmanız gerekebilir:

sudo apt-get install apt-transport-https

Depo tanımını /etc/apt/sources.list.d/elastic-8.x.list'e kaydedin:

echo "deb [signed-by=/usr/share/keyrings/elastic-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-8.x.list

Logstash deposunu eklemek için yukarıda açıklanan echo yöntemini kullanın. add-apt-repository'yi kullanmayın çünkü bu aynı zamanda bir deb-src girişi de ekleyecektir, ancak bir kaynak paketi sağlamıyoruz. deb-src girdisini eklediyseniz aşağıdaki gibi bir hata göreceksiniz:

Unable to find expected entry 'main/source/Sources' in Release file (Wrong sources.list entry or malformed file)

/etc/apt/sources.list dosyasından deb-src girişini silmeniz yeterlidir; kurulum beklendiği gibi çalışmalıdır.

sudo apt-get update komutunu çalıştırın; depo kullanıma hazırdır. Şunlarla yükleyebilirsiniz:

sudo apt-get update && sudo apt-get install logstash

YUM Tabanlı Sistemler için (CentOS/RHEL)

Genel imzalama anahtarını indirip yükleyin:

sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

Aşağıdakini /etc/yum.repos.d/logstash.repo dosyanıza ekleyin. Dosyayı güncellemek ve oluşturmak için 'tee'yi kullanabilirsiniz.

sudo tee /etc/yum.repos.d/logstash.repo > /dev/null <<EOF
[logstash-8.x]
name=Elastic repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF

Deponuz kullanıma hazır. Şunlarla yükleyebilirsiniz:

sudo yum install logstash

Daha fazla bilgi için lütfen Logstash Kurulum kılavuzuna bakın.

Adım 2 - Logstash'ı Günlükleri OpenSearch'e Gönderecek Şekilde Yapılandırma

Logstash işlem hattı üç ana aşamadan oluşur: giriş, filtre ve çıkış. Logstash işlem hatları eklentilerden yararlanır. Topluluk eklentilerinden yararlanabilir veya kendinizinkini oluşturabilirsiniz.

  • Girdi: Bu aşamada çeşitli kaynaklardan veriler toplanır. Logstash, günlük dosyaları, veritabanları, mesaj kuyrukları ve bulut hizmetleri gibi veri kaynaklarını yönetmek için çok sayıda giriş eklentisini destekler.

  • Filtreleme: Bu aşama, giriş aşamasında toplanan verileri işler ve dönüştürür. Filtreler, verileri daha kullanışlı ve analiz edilmesi daha kolay hale getirmek için değiştirebilir, zenginleştirebilir ve yapılandırabilir.

  • Çıktı: Bu aşamada işlenen veri bir hedefe gönderilir. Hedefler veritabanlarını, dosyaları ve OpenSearch gibi veri depolarını içerebilir.

Adım 3 - Açık Arama Çıkışı Eklentisini Yükleme

OpenSearch çıktı eklentisi aşağıdaki komut çalıştırılarak kurulabilir:

/usr/share/logstash/bin/logstash-plugin install logstash-output-opensearch

Bu logstash-output-opensearch-plugin deposunda daha fazla bilgi bulabilirsiniz.

Şimdi bir ardışık düzen oluşturalım:

/etc/logstash/conf.d/ yolunda Apache_pipeline.conf adında yeni bir dosya oluşturun ve aşağıdaki içerikleri kopyalayın.

input {
  file {
    path => "/var/log/apache2/access.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
    tags => "apache_access"
  }

  file {
    path => "/var/log/apache2/error.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
    tags => "apache_error"
  }
}

filter {
  if "apache_access" in [tags] {
    grok {
        match => { "message" => "%{HTTPD_COMBINEDLOG}" }
    }
    mutate {
        remove_field => [ "message","[log][file][path]","[event][original]" ]
      }
   } else {
   grok {
        match => { "message" => "%{HTTPD24_ERRORLOG}" }
    }
   }
}

output {
  if "apache_access" in [tags] {
  opensearch {
    hosts       => "https://<OpenSearch-Hostname>:25060"
    user        => "doadmin"
    password    => "<your_password>"
    index       => "apache_access"
    ssl_certificate_verification => true
  }

  } else {
  opensearch {
    hosts       => "https://<OpenSearch-Hostname>:25060"
    user        => "doadmin"
    password    => "<your_password>"
    index       => "apache_error"
    ssl_certificate_verification => true
  }
  }
}

kısmını OpenSearch sunucunuzun ana bilgisayar adıyla ve kısmını OpenSearch şifrenizle değiştirin.

Yukarıdaki konfigürasyonu parçalayalım.

  • GİRİŞ: Bu, olaylar için bir kaynak yapılandırmak için kullanılır. Burada ‘dosya’ giriş eklentisi kullanılıyor.

  • path => “/var/log/apache2/access.log ” : Logstash'ın okuyacağı Apache erişim günlük dosyasının yolunu belirtir.

    Logstash hizmetinin giriş yoluna erişimi olduğundan emin olun.

  • { }

  • start_position => “beginning”: Logstash'ın log dosyasını okumaya nereden başlayacağını tanımlar. "başlangıç", Logstash'ın dosyayı işlemeye sondan ziyade baştan başlaması gerektiğini belirtir

  • beridb_path => “/dev/null”: Bir beridb dosyasının yolunu belirtir. Çünküdb dosyaları, Logstash tarafından günlük dosyalarındaki mevcut konumu takip etmek için kullanılır ve yeniden başlatma veya arıza durumunda kaldığı yerden devam etmesini sağlar.

  • tags => “apache_access”: Bu girişten okunan olaylara etiket atar. Etiketler, Logstash içindeki olayları tanımlamak ve filtrelemek için kullanışlıdır ve genellikle yapılandırmanın çıktı veya filtreleme aşamalarında aşağı yönde kullanılır. İkincisi için etiketleri kullanıyoruz

  • FİLTRE: olayları işlemek için kullanılır.

    Koşullu ifadelerle başlayarak:

    (if "apache_access" in [tags]):
    

    Bu, gelen günlük etkinliklerinin [tags] alanında Apache_access etiketinin bulunup bulunmadığını kontrol eder. Apache erişimi ve hata günlükleri için uygun GROK Filtresini uygulamak için bu koşulu kullanırız.

  • Grok Filtresi (Apache Erişim Günlükleri için):

    grok {
        match => { "message" => "%{HTTPD_COMBINEDLOG}" }
    }
    

    Grok filtresi %{HTTPD_COMBINEDLOG, Apache'nin birleştirilmiş erişim günlüğü biçimini ayrıştırmak için Logstash'ta kullanılan önceden tanımlanmış bir kalıptır. Bu, gelen olayların mesaj alanından IP adresi, zaman damgası, HTTP yöntemi, URI, durum kodu vb. alanları çıkarır.

  • Mutasyon Filtresi Kaldır (isteğe bağlı): Apache günlükleri ayrıştırıldıktan sonra, belirli alanları kaldırmak için mutate-remove komutunu kullanırız.

    mutate {
        remove_field => [ "message","[log][file][path]","[event][original]" ]
    }
    
  • Else Koşulu: Eğer [tags] içerisinde Apache_access etiketi mevcut değilse else bloğu yürütülür. Bu else bloğu Apache hata günlükleri için başka bir GROK filtresi içerir.

    grok {
        match => { "message" => "%{HTTPD24_ERRORLOG}" }
    }
    

    Bu grok filtresi %{HTTPD24_ERRORLOG, Apache hata günlüğü biçimiyle eşleşen mesajları ayrıştırır. Zaman damgası, günlük düzeyi, hata mesajı vb. gibi hata günlükleriyle ilgili alanları çıkarır.

    GROK desenlerini şu adreste bulabilirsiniz: https://github.com/logstash-plugins/logstash-patterns-core/tree/main/patterns.

  • ÇIKTI: Çıkış eklentisi olayları belirli bir hedefe gönderir.

    Çıkış bloğu bir if koşuluyla başlar. Burada if koşullarını kullanıyoruz

    if "apache_access" in [tags] {}
    

    Günlükleri OpenSearch'e iki ayrı dizine, Apache_error ve Apache_access'e yönlendirmek için bu koşullu kullanılırsa.

    OpenSearch Output eklentisini inceleyelim:

    hosts            => "https://XXX:25060"  Your Open search Hostname
    user             => "doadmin"            Your Open search Username
    password         => "XXXXX"              OpenSearch Password
    index            => "apache_error"       Index name in OpenSearch
    ssl_certificate_verification => true     Enabled SSL certificate verification
    

Adım 4 - Logstash'ı başlatın

Pipeline yapılandırıldıktan sonra Logstash hizmetini başlatın:

systemctl enable logstash.service
systemctl start logstash.service
systemctl status logstash.service

Adım 5 – Sorun Giderme

Bağlantıyı Kontrol Edin

Bağlantıyı test ederek Logstash'ın OpenSearch'e bağlanabildiğini doğrulayabilirsiniz:

curl -u your_username:your_password -X GET "https://your-opensearch-server:25060/_cat/indices?v"

<opensearch-sunucunuz>'u OpenSearch sunucunuzun ana bilgisayar adı ile ve <kullanıcı_adınız>, <şifreniz>'i OpenSearch kimlik bilgilerinizle değiştirin.

Veri Kullanımı

Verilerin OpenSearch'te düzgün şekilde dizine eklendiğinden emin olun:

curl -u your_username:your_password -X GET "http://your-opensearch-server:25060/<your-index-name>/_search?pretty"

<opensearch-sunucunuz>'u OpenSearch sunucunuzun ana bilgisayar adı ile ve <kullanıcı_adınız>, <şifreniz>'i OpenSearch kimlik bilgilerinizle değiştirin. Benzer şekilde, dizin adıyla <dizin-adınız>.

Güvenlik Duvarı ve Ağ Yapılandırması

Güvenlik duvarı kurallarının ve ağ ayarlarının 25060 bağlantı noktasında Logstash ile OpenSearch arasındaki trafiğe izin verdiğinden emin olun.

Günlükler

Logstash günlükleri /var/log/logstash/logstash-plain.log adresinde bulunabilir.

Ayrıntılar için Sorun Giderme bölümüne bakın.

Çözüm

Bu kılavuzda, Apache günlüklerini toplamak ve OpenSearch'e iletmek için Logstash'ı ayarlamayı anlattık. İşte ele aldığımız konuların kısa bir özeti:

Logstash Kurulumu: Logstash'ı Droplet'inize kurmak için Linux dağıtımınıza bağlı olarak APT veya YUM paket yöneticilerinin nasıl kullanılacağını ele aldık.

Logstash'ı Yapılandırma: Apache günlüklerinin doğru şekilde ayrıştırılıp OpenSearch'e gönderilmesini sağlamak için Logstash yapılandırma dosyasını oluşturduk ve ayarladık.

OpenSearch'te Doğrulama: Günlüklerinizin düzgün şekilde dizine eklendiğini ve analiz için görünür olduğunu doğrulamak için OpenSearch Kontrol Panellerinde bir dizin modeli oluşturduk.

Bu adımlar tamamlandıktan sonra artık Logstash'ın Apache günlüklerini toplayıp OpenSearch'e gönderdiği işlevsel bir kuruluma sahip olmalısınız.

İlgili makaleler: