Încep o serie de articole în care vreau să-mi împărtășesc experiența conectării Exchange cu ELK. Această stivă va ajuta la procesarea unor volume mari de loguri fără a te întreba la ce dimensiune uneltele de logare obișnuite nu ne vor mai ajuta. Haideți să ne familiarizăm cu un nou actor în domeniul logurilor.
Exchange dispune de un sistem de logare destul de complex. Cele mai solicitate loguri sunt logurile de tracking, care urmăresc parcursul pas cu pas al unui anumit mesaj în cadrul organizației poștale; logurile serverului web, care monitorizează fiecare nouă sesiune a utilizatorului în sistem, și logurile aplicațiilor web specifice, cu diferite grade de detaliere a sesiunii. De asemenea, Exchange poate stoca loguri brute pentru protocoalele smtp, imap și pop3.
Ce instrumente putem folosi pentru a lucra cu logurile:
- Cmdletul Get-MessageTrackingLog: convenient pentru procesarea logurilor de tracking;
- Utilitarul logparser: folosește un limbaj pseudo-SQL pentru căutare și funcționează destul de rapid;
- Un server SQL extern: pentru cazuri foarte specifice (de exemplu, analiza datelor pe perioade lungi de timp).
Toate acestea funcționează bine atunci când avem câteva servere și volumul logurilor procesate se măsoară în zeci-sute de gigabytes. Dar ce se întâmplă dacă numărul serverelor ajunge la zeci și dimensiunea logurilor depășește un terabyte? Această schemă, cel mai probabil, începe să cedeze.
Și iată ce se întâmplă: Get-MessageTrackingLog începe să cadă din cauza timeout-ului, logparser se lovește de plafonul arhitecturii pe 32 biți, iar exportul pe serverul SQL se întrerupe în cel mai nepotrivit moment, neputând procesa o excepție pe mai multe linii de la serviciu.
Aici intră în scenă un nou jucător – stiva ELK, care este special concepută pentru a jongla cu volume mari de loguri într-un timp rezonabil și cu un consum de resurse tolerabil.
În prima parte, voi explica detaliat, cum să conectezi filebeat, care face parte din stiva ELK — responsabil pentru citirea și trimiterea fișierelor text simple, în care diferite aplicații își scriu logurile. În articolele următoare, ne vom concentra mai mult pe componentele Logstash și Kibana.
Instalare
Așadar, arhiva agentului filebeat .
Vom efectua instalarea prin simpla extragere a conținutului arhivei zip. De exemplu, în c:Program Filesfilebeat. Apoi, trebuie să rulăm scriptul PowerShell install-service-filebeat.ps1, care este inclus în pachet, pentru a instala serviciul filebeat.
Acum suntem pregătiți să începem să configurăm fișierul de configurare.
Redundanță
Filebeat garantează livrarea jurnalele în sistemul de colectare a jurnalelor. Aceasta se realizează prin păstrarea unui registru al înregistrărilor în fișierele de jurnal. În registru se păstrează informații despre acele înregistrări care au fost citite din fișierele de jurnal, iar anumite înregistrări sunt marcate ca fiind livrate la destinație.
Dacă o înregistrare nu poate fi livrată, atunci Filebeat va încerca să o trimită din nou până când va primi o confirmare de livrare din partea sistemului receptor sau fișierul de jurnal original nu va fi șters în procesul de rotație.
La repornirea serviciului Filebeat, acesta va citi din registru informațiile despre ultimele înregistrări citite și livrate și va citi înregistrările din fișierele de jurnal, pe baza informațiilor din registru.
Acest lucru permite minimizarea riscului de pierdere a informațiilor despre jurnalele care trebuie trimise pe serverele elasticlogstash, în timpul defecțiunilor neprevăzute și în timpul operațiunilor de întreținere a serverelor.
Pentru mai multe detalii, : Cum menține Filebeat starea fișierelor și Cum asigură Filebeat livrarea cel puțin o dată?
Configurare
Toată configurarea se efectuează în fișierul de configurare în formatul yml, care este împărțit în mai multe secțiuni. Să analizăm câteva dintre ele care participă la procesul de colectare a jurnalelor de pe serverele Exchange.
Blocul de procesare a jurnalelor
Blocul de procesare a jurnalelor începe cu câmpul:
filebeat.inputs:Vom folosi un instrument comun de colectare a jurnalelor:
- tip: logApoi specificăm starea (activată) și căile către folderul cu jurnalele. De exemplu, în cazul jurnalelor IIS, configurările pot fi următoarele:
enabled: true
paths:
- C:inetpublogsLogFilesW3SVC1*.log
- C:inetpublogsLogFilesW3SVC2*.log
O altă configurare importantă: cum ar trebui să citească Filebeat înregistrările pe mai multe linii. În mod implicit, Filebeat consideră o linie din fișierul de jurnal ca o înregistrare. Aceasta funcționează bine, până când în jurnal încep să apară excepții legate de funcționarea necorespunzătoare a serviciului. În acest caz, excepțiile pot consta în mai multe linii. De aceea, Filebeat trebuie să considere o înregistrare pe mai multe linii ca una singură, dacă următoarea linie începe cu o dată. Formatul înregistrărilor de jurnal în Exchange este următorul: fiecare nouă înregistrare în fișierul de jurnal începe cu o dată. În configurație, această condiție arată astfel:
multiline:
pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
negate: true
match: afterAre we sure to add tags to the sent record, for example:
tags: ['IIS', 'ex-srv1']And do not forget to exclude from processing lines that start with a hash symbol:
exclude_lines: ['^#']So, the log reading block will look like this:
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: ['^#']Log sending block
Individual records in the filebeat log file are sent as a JSON object, where the specific log entry is contained in a single field message. If we want to work with this information somehow, we need to parse this field into separate fields beforehand. This can be done, for example, in logstash. It will be the recipient of records from filebeat. Here's what it might look like in the filebeat configuration file:
output.logstash:
hosts: ["logstash1.domain.com:5044"]
If there are multiple servers, load balancing can be enabled: then filebeat will send logs not to the first available server from the list, but will distribute the sent logs among multiple servers:
hosts: ["logstash1.domain.com:5044", "logstash2.domain.com:5044"]
loadbalance: true Filebeat, when processing logs into the sent JSON, in addition to the log entry contained in the message field, adds some amount of metadata that affects the size of the document that goes into elastic. These metadata can be selectively removed from the sending. This is done in the processor block using the drop_fields processor. drop_fields. For example, we can exclude the following fields:
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"]We should approach the choice of excluded fields carefully, as some of them may be used on the elastic side for building indices.
So, the log sending block will look like this:
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"]Filebeat logging settings
It makes sense to set the following logging settings:
- Logging level info;
- Log records are written to files located by default (the logs directory, in the filebeat installation directory);
- Log file name — filebeat;
- Keep the last 10 log files;
- Rotate when reach a size of 1MB.
Blocul final de configurare a jurnalizării va arăta astfel:
logging.level: info
logging.to_files: true
logging.files:
name: filebeat
keepfiles: 10
rotateeverybytes: 1048576Configurația finală
Am adunat configurația, iar acum arată astfel:
filebeat.inputs:
- type: log
enabled: true
paths:
- C:inetpublogsLogFilesW3SVC1*.log
- C:inetpublogsLogFilesW3SVC2*.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: 1048576Este important să înțelegem că formatul fișierului de configurare este yml. Prin urmare, este esențial să plasăm corect spațiile și semnele minus.
Filebeat poate verifica fișierul de configurare și, dacă sintaxa conține erori, va indica ce linie și ce parte a liniei este incorectă. Verificarea se face astfel:
.filebeat.exe test configDe asemenea, filebeat poate verifica accesibilitatea rețelei pentru receptorul de jurnale. Verificarea se lansează astfel:
.filebeat.exe test outputÎn următoarele părți, voi vorbi despre conectarea și colaborarea Exchange cu componentele Logstash și Kibana.
Linkuri utile
Sursa: habr.com
