Saya memulai serangkaian artikel di mana saya ingin berbagi pengalaman saya menghubungkan Exchange dan ELK. Tumpukan ini akan membantu Anda memproses log dalam jumlah besar dan tidak bertanya-tanya berapa ukuran yang akan ditolak oleh alat logging biasa untuk membantu kami. Mari berkenalan dengan petarung baru dengan log.
Exchange memiliki sistem logging yang cukup luas. Log yang paling populer adalah log pelacakan, yang melacak bagian langkah demi langkah dari surat tertentu dalam organisasi pos; log server web, yang melacak setiap sesi pengguna baru di sistem, dan log aplikasi web tertentu dengan berbagai tingkat perincian sesi. Exchange juga dapat menyimpan log protokol smtp, imap, dan pop3 mentah.
Alat apa yang dapat kami gunakan untuk bekerja dengan log:
- Standar Get-MessageTrackingLog cmdlet: nyaman untuk memproses log pelacakan;
- Utilitas logparser: menggunakan bahasa pencarian pseudo-SQL untuk logging dan bekerja cukup cepat;
- Server SQL eksternal: untuk kasus yang sangat spesifik (misalnya, menganalisis data dalam jangka waktu yang lama).
Semua ini berfungsi dengan baik ketika kami memiliki beberapa server dan volume log yang diproses diukur dalam puluhan atau ratusan gigabyte. Tetapi bagaimana jika ada puluhan server, dan ukuran log telah melebihi satu terabyte? Skema ini kemungkinan besar mulai runtuh.
Dan inilah yang terjadi: Get-MessageTrackingLog mulai jatuh karena waktu tunggu, logparser mencapai batas atas arsitektur 32-bit, dan mengunggah ke server SQL akan berhenti pada saat yang paling tidak tepat, tanpa mencerna pengecualian multi-baris dari layanan.
Di sini pemain baru memasuki arena - tumpukan ELK, yang dirancang khusus untuk menangani volume log yang besar dalam kerangka waktu yang wajar dan dengan konsumsi sumber daya yang dapat ditoleransi.
Pada bagian pertama saya akan menjelaskan secara detail bagaimana menghubungkan filebeat, yang merupakan bagian dari tumpukan ELK- Bertanggung jawab untuk membaca dan mengirim file teks sederhana ke mana aplikasi yang berbeda menulis log mereka. Pada artikel berikut, kita akan membahas komponen Logstash dan Kibana secara lebih rinci.
Instalasi
Jadi, arsip file dari filebeat agent dapat diunduh dari situs ini .
Kami akan menyelesaikan penginstalan hanya dengan membongkar konten file zip. Misalnya, di
c:\Program Files\filebeat. Kemudian Anda perlu menjalankan skrip PowerShell install-service-filebeat.ps1yang disertakan dengan kit untuk menginstal layanan filebeat.
Kami sekarang siap untuk mulai menyesuaikan file konfigurasi.
toleransi kesalahan
Filebeat menjamin pengiriman log ke sistem pengumpulan log. Ini dilakukan dengan menyimpan daftar entri di file log. Registri menyimpan informasi tentang catatan yang dibaca dari file log, dan menandai catatan tertentu yang dikirim ke tujuan.
Jika beberapa record tidak dapat dikirim, maka filebeat akan mencoba mengirimnya lagi hingga menerima konfirmasi pengiriman dari sistem penerima atau file log asli dihapus selama rotasi.
Ketika layanan di-restart, filebeat akan membaca informasi tentang catatan terakhir yang dibaca dan dikirim dari registri dan akan membaca catatan dalam file log berdasarkan informasi di registri.
Hal ini memungkinkan Anda meminimalkan risiko kehilangan informasi tentang log yang perlu dikirim ke server elastik \ logstash dalam proses kegagalan tak terduga dan melakukan operasi pemeliharaan server.
Anda dapat membaca lebih lanjut tentang ini dalam dokumentasi di paragraf : Bagaimana Filebeat menjaga status file dan Bagaimana Filebeat memastikan pengiriman setidaknya sekali?
Pengaturan
Semua konfigurasi dilakukan dalam file konfigurasi format
yml, yang dibagi menjadi beberapa bagian. Mari kita lihat beberapa dari mereka yang terlibat dalam mengumpulkan log dari server Exchange.
Unit pemrosesan log
Blok pemrosesan log dimulai dengan bidang:
filebeat.inputs:
Kami akan menggunakan alat pengumpulan log umum:
- type: log
Selanjutnya, kami menunjukkan status (diaktifkan) dan jalur ke folder dengan log. Misalnya, untuk log IIS, pengaturannya adalah sebagai berikut:
enabled: true
paths:
- C:\inetpub\logs\LogFiles\W3SVC1\*.log
- C:\inetpub\logs\LogFiles\W3SVC2\*.log
Pengaturan penting lainnya adalah bagaimana pemukul file harus membaca catatan multi-baris. Secara default, filebeat menganggap satu baris file log menjadi satu record. Ini berfungsi dengan baik selama kami tidak mulai menerima pengecualian terkait dengan operasi layanan yang salah di log kami. Dalam kasus ini, pengecualian dapat mencakup beberapa baris. Oleh karena itu pemukul file harus memperlakukan rekaman multi-baris sebagai satu jika baris berikutnya dimulai dengan tanggal. Format untuk merekam log di Exchange adalah sebagai berikut: setiap catatan baru di file log dimulai dengan tanggal. Dalam konfigurasinya, kondisi ini terlihat seperti ini:
multiline:
pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
negate: true
match: after
Masuk akal untuk menambahkan tag ke posting yang Anda kirim, misalnya:
tags: ['IIS', 'ex-srv1']
Dan jangan lupa untuk mengecualikan baris yang dimulai dengan karakter hash dari pemrosesan:
exclude_lines: ['^#']
Jadi, blok untuk membaca log akan terlihat seperti ini:
filebeat.inputs:
- type: log
enabled: true
paths:
- C:\inetpub\logs\LogFiles\W3SVC1\*.log
- C:\inetpub\logs\LogFiles\W3SVC2\*.log
multiline:
pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
negate: true
match: after
tags: ['IIS', 'ex-srv1']
exclude_lines: ['^#']
Blok pengiriman log
Filebeat mengirimkan entri individu dalam file log sebagai objek json, di mana entri tertentu dari log terdapat dalam satu bidang pesan. Jika kami ingin bekerja dengan informasi ini, pertama-tama kami harus mengurai bidang ini menjadi bidang terpisah. Ini bisa dilakukan, misalnya di logstash. Ini akan menjadi penerima catatan dari filebeat. Ini adalah tampilannya di file konfigurasi pemukulan file:
output.logstash:
hosts: ["logstash1.domain.com:5044"]
Jika ada beberapa server, maka penyeimbangan dapat diaktifkan untuk mereka: lalu filebeat akan mengirim log bukan ke server pertama yang tersedia dari daftar, tetapi akan mendistribusikan log yang dikirim di antara beberapa server:
hosts: ["logstash1.domain.com:5044", "logstash2.domain.com:5044"]
loadbalance: true
Filebeat, saat memproses log ke json terkirim, selain catatan log yang terdapat di kolom pesan, menambahkan sejumlah metadata, yang memengaruhi ukuran dokumen yang menjadi elastis. Metadata ini dapat dihapus secara selektif dari pengiriman. Ini dilakukan di blok prosesor menggunakan prosesor
drop_fields. Anda dapat mengecualikan, misalnya, bidang berikut:
processors:
- drop_fields:
fields: ["agent.ephemeral_id", "agent.hostname", "agent.id", "agent.type", "agent.version", "agent", "ecs.version", "ecs", "input.type", "input", "log.offset", "version"]
Pilihan bidang yang dikecualikan harus dilakukan dengan hati-hati, karena beberapa di antaranya dapat digunakan di sisi elastis untuk membangun indeks.
Jadi, blok untuk mengirim log akan terlihat seperti ini:
output.logstash:
hosts: ["logstash1.domain.com:5044", "logstash2.domain.com:5044"]
loadbalance: true
processors:
- drop_fields:
fields: ["agent.ephemeral_id", "agent.hostname", "agent.id", "agent.type", "agent.version", "agent", "ecs.version", "ecs", "input.type", "input", "log.offset", "version"]
Pengaturan filebeat logging
Masuk akal untuk mengatur pengaturan logging berikut:
- Info tingkat pencatatan;
- Kami menulis log ke file yang terletak secara default (direktori logs, di direktori instalasi filebeat);
- Nama file log adalah filebeat;
- Simpan 10 file log terakhir;
- Mulai rotasi saat ukurannya mencapai 1MB.
Terakhir, blok pengaturan logging akan terlihat seperti ini:
logging.level: info
logging.to_files: true
logging.files:
name: filebeat
keepfiles: 10
rotateeverybytes: 1048576
Konfigurasi akhir
Kami telah mengumpulkan konfigurasinya, dan sekarang terlihat seperti ini:
filebeat.inputs:
- type: log
enabled: true
paths:
- C:\inetpub\logs\LogFiles\W3SVC1\*.log
- C:\inetpub\logs\LogFiles\W3SVC2\*.log
multiline:
pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
negate: true
match: after
tags: ['IIS', 'ex-srv1']
exclude_lines: ['^#']
output.logstash:
hosts: ["logstash1.domain.com:5044", "logstash2.domain.com:5044"]
loadbalance: true
processors:
- drop_fields:
fields: ["agent.ephemeral_id", "agent.hostname", "agent.id", "agent.type", "agent.version", "agent", "ecs.version", "ecs", "input.type", "input", "log.offset", "version"]
logging.level: info
logging.to_files: true
logging.files:
name: filebeat
keepfiles: 10
rotateeverybytes: 1048576
Penting untuk dipahami bahwa format file konfigurasi adalah yml. Oleh karena itu, penting untuk menempatkan spasi dan tanda minus dengan benar.
Filebeat dapat memeriksa file konfigurasi dan, jika sintaks berisi kesalahan, ini akan menunjukkan di baris mana dan di baris mana sintaksnya salah. Pemeriksaan dilakukan sebagai berikut:
.\filebeat.exe test config
Filebeat juga dapat memeriksa ketersediaan jaringan penerima log. Pemeriksaan dimulai seperti ini:
.\filebeat.exe test output
Di bagian selanjutnya saya akan berbicara tentang konektivitas Exchange dan persahabatan dengan komponen Logstash dan Kibana.