Sõbrustame ELK ja Exchange'iga. Osa 1

Sõbrustame ELK ja Exchange'iga. Osa 1

Alustan artiklite seeriat, kus soovin jagada oma kogemusi Exchange ja ELK ühendamise osas. See tehnoloogiate kogum aitab töötada suurte logimahu alusel, muretsemata, millisel suurusel tavalised logimistööriistad enam ei aita. Tutvume koos uue logitöötluse lahendusega.

Exchange'il on üsna keeruline logimisüsteem. Kõige nõutumad logid on jälgimislogid, mis jälgivad konkreetse kirja edasiviimist postiteenuses; veebiserveri logid, mis jälgivad iga uue kasutaja seanssi süsteemis, ning konkreetsete veebirakenduste logid erineva seansi detailitasemega. Samuti oskab Exchange salvestada tooreid logisid protokollide smtp, imap ja pop3 kohta.

Milliseid tööriistu saame logide töötlemiseks kasutada:

  • Sisseehitatud käsk Get-MessageTrackingLog: mugav jälgimislogide töötlemiseks;
  • Tööriist logparser: logimistöödeks kasutab see pseudо-SQL keeltes otsimiseks ja töötab piisavalt kiiresti;
  • Väline SQL-server: eriti spetsiifiliste juhtumite jaoks (näiteks andmete analüüs pikaajaliste ajavahemike jooksul).

See kõik töötab kenasti, kui meil on vaid paar serverit ja logide töötlemise maht ulatub kümnetesse-sajandesse gigabaiti. Aga mis juhtub, kui serverite arv läheneb kümnetele ja logide suurus ületab terabaiti? Sel juhul hakkab see tõenäoliselt alt vedama.

Ja siin on, mis juhtub: Get-MessageTrackingLog hakkab tõrke tõttu ebaõnnestuma, logparser tabab 32-bitise arhitektuuri piiri ning SQL-serveri eksport katkeb kõige vähem sobival hetkel, suudmata taluda mitmerealist välistust teenusest.

Siinkohal astub lavale uus mängija – ELK stack, mis on spetsiaalselt loodud hulkade logide arvestamiseks mõistlikes ajaraamides ja talutava ressursikasutusega.

Esimeses osas räägin ma detailsemalt, kuidas ühendada filebeat, mis kuulub ELK stacki osade hulka, — see vastutab erinevate rakenduste logide lugemise ja saatmise eest lihtsate tekstifailide kaudu. Järgmistes artiklites keskendume Logstashi ja Kibana komponentidele.

Installeerimine

Nii et filebeat agenti arhivifaili võib alla laadida sellest veebisaidilt..

Me teeme installi, lahustades zip-faili sisu. Näiteks aadressis c:Program Filesfilebeat. Seejärel tuleb käivitada PowerShelli skript. install-service-filebeat.ps1, mis on komplektis filebeat teenuse installimiseks.

Nüüd oleme valmis konfiguratsioonifaili seadistama.

Katastroofitaluvus

Filebeat tagab logide edastamise logide kogumise süsteemi. See saavutatakse logifailides salvestuste registri haldamise kaudu. Registris hoitakse teavet registreeritud logi salvestiste kohta ning märgitakse konkreetsed salvestised, mis on edastatud sihtkohta.

Kui mõne salvestise edastamine ebaõnnestub, siis filebeat proovib seda uuesti saata, kuni saab saajalt kinnitus edastamise kohta või kuni algne logifail eemaldatakse rotatsiooni käigus.

Teenuse filebeat taaskäivitamisel loeb see registrist viimaste loetud ja edastatud salvestiste teavet ning loeb logifailidest salvestisi registris hoitava teabe alusel.

See võimaldab minimeerida riski logide kaotamiseks, mida tuleb edastada elasticlogstash serveritele, ootamatute tõrgete ja serveri hooldustööde käigus.

Rohkem teavet selle kohta võib lugeda dokumentatsioonist peatükkides: Kuidas Filebeat säilitab failide olekut ja kuidas Filebeat tagab vähemalt ühe kordse kohaletoimetamise?

Seadistamine

Kogu konfiguratsioon on vormingufailis yml, mis on jagatud mitmeks jaoks. Vaatame mõningaid neist, mis osalevad Exchange'i serverite logide kogumise protsessis.

Logide töötlemise plokk

Logide töötlemise plokk algab välja:

filebeat.inputs:

Kasutame üldist logide kogumise tööriista:

- tüüp: log

Seejärel määrame staatuse (lubatud) ja logikaustade teed. Näiteks IIS logide puhul võivad seaded olla järgmised:

    enabled: true
    paths:
	- C:inetpublogsLogFilesW3SVC1*.log
	- C:inetpublogsLogFilesW3SVC2*.log

Veel üks oluline seadistus: kuidas filebeat peaks lugema mitmerealisi kirjeid. Vaikimisi loeb filebeat ühe logifaili rea ühe kirjana. See töötab hästi, kuni meie logisse hakkavad tulema teenuse haldustöötlemisega seotud erandid. Sellisel juhul võivad erandid koosneda mitmest reast. Seetõttu peaks filebeat lugema mitmerealise kirje ühe kirjana, kui järgmine rida algab kuupäevaga. Exchange'i logide kirje formaat on selline: iga uus logikirje algab kuupäevaga. Konfiguratsioonis näeb see tingimus välja selline:

mitme rea:
	must: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
	lükkamine: tõene
	võrdle: pärast

On mõistlik lisada märke saadetavale kirjele, näiteks:

  märkmed: ['IIS', 'ex-srv1']

Ja ei tohi unustada välistada töötlemisest ridu, mis algavad ristikujulise sümboliga:

  välistada_rid: ['^#']

Seega, logide lugemise plokk näeb välja järgmine:

filebeat.inputs:
- tüüp: log
  lubatud: tõene
  teed:
	- C:inetpublogsLogFilesW3SVC1*.log
	- C:inetpublogsLogFilesW3SVC2*.log
  mitme rea:
	must: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
	lükkamine: tõene
	võrdle: pärast
  märkmed: ['IIS', 'ex-srv1']
  välistada_rid: ['^#']

Logide saatmise plokk

Ainult eraldi kirjed filebeat logifailis saadetakse json-objekti kujul, kus konkreetne logikirje on sisalduv ühesainsas väljas message. Kui me tahame seda teavet töötleda, peame selle välja eelnevalt eraldama eraldi välimus. Seda saab teha näiteks logstashis. Just see saab olema logide vastuvõtja filebeatist. Nii see võib välja näha filebeati konfigureerimisfailis:

output.logstash:
  hostid: ["logstash1.domain.com:5044"]

Kui servereid on mitu, siis on võimalik aktiveerida koormuse tasakaalustamine: siis filebeat saadab logid mitte esimesele saadavalolevale serverile nimekirjast, vaid jagab saadetavad logid mitme serveri vahel:

hostid: ["logstash1.domain.com:5044", "logstash2.domain.com:5044"]
  koormus: tõsi 

Filebeat töötleb logisid, lisades saadetavasse json-faili lisaks logikirjetesse, mis on välja väljastatud field message, teatud hulga metaandmeid. Need metaandmed mõjuvad dokumendi suurusele, mis jõuab elastic-isse. Need metaandmed on võimalik vahetult eemaldada. See tehakse processor plokis kasutades protsessorit drop_fields. Saame välistada näiteks järgmised väljad:

protsessorid:
- drop_fields:
	fields: ["agent.ephemeral_id", "agent.hostname", "agent.id", "agent.type", "agent.version", "agent", "ecs.version", "ecs", "input.type", "input", "log.offset", "version"]

Väljade valimisega, mida välistada, tuleb ettevaatlikult ringi käia, kuna mõned neist võivad elasticu küljest indeksi ülesehitamiseks vajalikud olla.

Nii et logide saatmise plokk näeb välja järgmine:

output.logstash:
  hostid: ["logstash1.domain.com:5044", "logstash2.domain.com:5044"]
  koormus: tõsi
 
protsessorid:
- 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 logimise seaded

Mõistlik on seada järgmised logimise seadmed:

  • Logimise tase info;
  • Salvestame logid failidesse, mis asuvad vaikimisi (kaust logs, filebeati installatsiooni kaustas);
  • Logifaili nimi — filebeat;
  • Hoida viimaseid 10 logifaili;
  • Käivita rikutud failide suurus 1MB saavutamisel.

Lõplik logimine seadete plokk näeb välja järgmiselt:

logging.level: info
logging.to_files: true
logging.files:
  name: filebeat
  keepfiles: 10
  rotateeverybytes: 1048576

Lõplik konfiguratsioon

Oleme koostanud konfiguratsiooni ja nüüd näeb see välja järgmiselt:

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: 1048576

Oluline on mõista, et konfiguratsioonifaili formaat on yml. Seega on tähtis õigesti paigutada tühikud ja miinusmärgid.

Filebeat oskab kontrollida konfiguratsioonifaili ning kui süntaks sisaldab vigu, näitab see, millisest rea ja rea kohast süntaks on vale. Kontrollimine toimub järgmiselt:

.filebeat.exe test config

Filebeat suudab kontrollida logide vastuvõtja võrgu kättesaadavust. Kontroll käivitub järgmiselt:

.filebeat.exe test output

Järgmistes osades räägin ühendamise ja Exchange'i koostööst Logstashi ja Kibana komponentidega.

Kasulikud lingid

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster