Logstash Eğitimi: E-posta Bildirimlerini Kolaylaştırmak için Logstash'i Kullanma
Yayınlanan: 2022-03-11Hataları ve istisnaları bildirmek için ana mekanizma olarak e-postaları kullanan uygulamalar, ilk başta her zaman iyi bir fikir gibi görünür. Java Geliştiricileri olarak "hey, bir şeyler ters gittiğinde hemen anlarım!" diye düşünüyoruz.
Ancak, bir noktada, hata e-postalarının sizden uzaklaştığını fark edeceksiniz ve e-posta gelen kutunuzu temizlemeniz gerekiyor. 404'leri (çoğu zaman) görmezden gelebilirsiniz ve yeni kayıtların bildirimlerini almak güzel olabilir, ancak günün sonunda biraz fazla telaşlı veya zaman alıcı olabilir.
Er ya da geç, "harekete geçirilebilir" e-postaları anlamsız bildirimlerden ayırt etmek zorlaşır. Postanıza kurallar ve filtreler koyabilirsiniz, ancak bunlar bile yönetilemez hale gelebilir.
Bu Java öğreticisi, kontrolü yeniden kazanmak ve e-posta gelen kutunuzu temizlemek ve hata e-postalarınızı yeniden yönetilebilir hale getirmek için Logstash'i uygulamanızda tek bir şeyi değiştirmeden kullanma olasılığını inceleyecektir.
Logstash Kurulumu ve Girişi
Logstash eğitimimizin ilk adımı, sisteminizden aldığınız tüm e-postaların tek bir klasöre gitmesini sağlamaktır. Tüm sıralama ve yönetme işlemlerini gelen kutunuzun dışına taşıdığımızdan, bunun artık büyük bir klasör olması önemli değil. Devam edin ve önceden kurduğunuz tüm klasörleri ve filtreleri kaldırın ve bunu bir klasöre ve bir filtreye indirin.
Tüm e-postaları “[email protected]” adresinden “MyAwesomeAppEmails” klasörüne taşıyın. Bu e-postalar için ayrı bir posta kutunuz varsa, o zaman daha da kolay olacaktır.
Artık bu klasörü yoklamak ve IMAP eklentisini kullanarak postaları ayrıştırmak için Logstash'i kurabiliriz. Sürüm 1.4.2 yalnızca Gelen Kutusundan e-postaların alınmasını destekler, ancak sürüm 1.5'te belirli bir klasörü sorgulamaya izin vermek için uygulanan nispeten basit bir düzeltme vardır. Ayrı bir posta kutunuz yoksa, devam etmeden önce lütfen yamayı Logstash örneğinizdeki IMAP eklentisine uygulayın.
# /etc/logstash/conf.d/01-imap-input.conf input { imap { host => "imap.yourmailserver.com" user => "username" password => "password" secure => true fetch_count => 15 folder => "MyAwesomeAppEmails" # This line will only work if you apply the above mentioned patch } }
Bu, yeni e-postaları kontrol etmeye ve bunları Logstash olaylarına ayrıştırmaya başlayacaktır.
Günlük Deposu Filtresi
E-postalardan birçok yararlı veri farklı olay özelliklerine ayrıştırılır - e-posta zaman damgasının olay için "@zaman damgası" olarak kullanıldığına dikkat edin. Daha da ötesi, yalnızca başlıklardan, hatanın kaynaklandığı ana bilgisayarı tanımlamak gibi şeyler yapabiliriz:
filter { mutate { replace => [ "received", "%{[received][-1]}" ] } grok { match => [ "received", "from %{HOSTNAME:hostname} \(%{HOSTNAME:full_hostname} \[%{IP:ip}\]\)" ] } mutate { remove_field => [ "received" ] } }
Ancak bu, hata e-postalarınızı evcilleştirmek için yeterli değildir. Biraz daha fazlasına ihtiyacımız var, özellikle aşağıdaki üç adımı açıklayan:
- Hatanın türü
- Hatanın ciddiyeti
- E-postada yer alan tüm hata ayrıntıları
Hatanın adını, örneğin “Widget Failed” ve “ERROR” hatasının ciddiyetini şu şekilde e-postanın konusuna yerleştirdiğinizi varsayalım: “ERROR: Widget Failed in /var/www/myapp/foobar .php 20”.

Bunu olayın birkaç özelliğini ayarlamak için kullanacağız:
filter { grok { match => [ "subject", "%{WORD:severity}: %{DATA:type} in %{PATH:path} %{POSINT:line}" ] } }
Logstash, günlüklerde ve diğer çeşitli yerlerde görmeyi bekleyebileceğiniz bir dizi önceden tanımlanmış kalıpla birlikte gelir. Grok kalıplarınızı oluşturmak ve okunmasını kolaylaştırmak için bunları kullanın. “WORD” (tek bir kelime), “DATA” (açgözlü olmayan bütünlük), “PATH” (bir Unix veya Windows dosya yolu) ve “POSINT” (pozitif bir tam sayı) kullandık. Grok kalıplarınızda hata ayıklamak için Grok Hata Ayıklayıcı'yı da kullanabilirsiniz. Şablona uymayan mesajlar “_grokparsefailure” etiketi ile etiketlenecektir.
Bu, hatanın türü, önem derecesi, kaynak dosyası ve satırıyla ilgilenir - temelde olayın tüm ilgili meta verileri. Şimdi ayrıntılara geçin.
İnce Ayar Günlük Deposu
Nazik bir insan olarak e-postanıza daha önce güzel bir üstbilgi veya altbilgi imzası eklemiş olabilirsiniz, ancak şimdi yolunda değil. Hata yığın izlemesi için e-postanın geri kalanını ayrıştırabilmemiz için, bunu mesajdan ve sondaki boşluklardan kaldıralım:
filter { mutate { # gsub takes 3 elements per substitution: field, regular expression and substitution gsub => [ "message", "Your Dev Team", "", "message", "More error details:", "" ] } mutate { strip => "message" } # Split the message into an array of lines, each containing a line of the stacktrace mutate { split => [ "message", "\n" ] } }
"gsub" mutasyonu, standart Ruby Regexp nesnesini kullanır, bu nedenle tüm seçenekler ve özellikler logstash'te de mevcuttur.
Elasticsearch ve Amazon SNS aracılığıyla çıktı
Topladığımız verileri kolayca arayıp nicelleştirebilmemiz için Logstash Elasticsearch çıktısını kullanarak bunu Elasticsearch örneğimize uygulayalım:
output { if "_grokparsefailure" not in [tags] { elasticsearch { } } }
“_grokparsefailure” etiketini kontrol ederek düzgün şekilde Grok yapmayan tüm iletileri hariç tutuyoruz. Varsayım, yalnızca konusu belirtilen konuyla eşleşen e-postaların hata e-postaları olarak yorumlanması gerektiğidir. Aksi takdirde, basit ve anlaşılır.
Logstash çok sayıda çıktıyla birlikte gelir, bu yüzden Amazon'un Basit Bildirim Hizmetini (SNS) kullanarak önemli hataları bize bildirmek için SNS çıktısını kullanarak bunu daha da geliştirelim. “Bildirilebilir” türündeki tüm hataların bir bildirim oluşturması gerektiğini varsayacağız. Bir EC2 bulut sunucusunda değilseniz, bir AWS anahtarı ve sırrı belirtmeniz gerekir.
output { if "notifiable" in [tags] { sns { region => "us-east-1" arn => "arn:aws:sns:us-east-1:1234567890123456:mytopic" access_key_id => "AWS ACCESS_KEY" # Only specify these if you're not on an EC2 instance secret_access_key => "AWS ACCESS SECRET" # Only specify these if you're not on an EC2 instance } } }
Hataları "bildirilebilir" olarak etiketlemek size kalmış. Bunu, hatanın ciddiyetine veya hatanın türüne bakarak yapabilirsiniz.
Artık önemli e-postaları tekrar okuyabilir ve önemli hata e-postalarını kaçırmayacağınızdan emin olabilirsiniz. Bir hatanın ne sıklıkla meydana geldiğini ve en son ne zaman meydana geldiğini görebildiğiniz için, hangi hataların düzeltileceği konusunda bilinçli kararlar verebilirsiniz. Bu Logstash eğitiminde özetlenen Elasticsearch'ün harika arama güçleri sayesinde belirli bir hatayı aramak da daha kolay ve hızlı.