Barátkozunk az ELK-val és az Exchange-csel. 1. rész

Barátkozunk az ELK-val és az Exchange-csel. 1. rész

Elkezdtem egy cikk sorozatot, ahol megosztom tapasztalataimat az Exchange és az ELK csatlakoztatásával kapcsolatban. Ez a stack segít nagy mennyiségű napló feldolgozásában anélkül, hogy azzal kellene foglalkoznunk, hogy mekkora méret esetén hagyja cserben a megszokott naplózási eszközöket. Ismerjük meg az új harcost a naplókkal.

Az Exchange elég kiterjedt naplózási rendszerrel rendelkezik. A legkeresettebb naplók a követési naplók, amelyek nyomon követik egy adott levél lépésről lépésre történő áthaladását a levelezési szervezeten belül; a webszerver naplók, amelyek minden új felhasználói munkamenetet nyomon követnek a rendszerben, és a különböző részletességű webalkalmazások naplói. Az Exchange emellett képes tárolni az smtp, imap és pop3 protokollok nyers naplóit is.

Milyen eszközöket használhatunk a naplók feldolgozására:

  • A beépített Get-MessageTrackingLog parancsmag: kényelmes a nyomkövetési naplók feldolgozására;
  • A logparser segédprogram: a naplózás során pseudo-SQL nyelvet használ a kereséshez, és elég gyorsan működik;
  • Külső SQL-szerver: különösen specifikus esetekhez (például adatok elemzéséhez hosszú időszakokban).

Mindez jól működik, ha van néhány szerverünk és a feldolgozott naplók mérete tíz- vagy százig terjed. De mi van, ha a szerverek száma tízre emelkedik, és a naplók mérete már több terabyte? Ez a rendszer valószínűleg összeomlik.

És itt történik valami: a Get-MessageTrackingLog időkorlát miatt megáll, a logparser a 32 bites architektúra korlátaiba ütközik, a SQL-szerverbe történő exportálás pedig a legrosszabb pillanatban megbukik, amikor egy több soros kivételt nem tud feldolgozni a szolgáltatás.

Itt lép a színpadra egy új szereplő – az ELK stack, amelyet kifejezetten nagy mennyiségű napló gyors és erőforráshatékony kezelése érdekében fejlesztettek ki.

Az első részben részletesen elmondom, hogyan lehet csatlakoztatni a filebeat-et, amely az ELK stack része — felelős a különböző alkalmazások által írt egyszerű szöveges fájlok olvasásáért és küldéséért. A következő cikkekben részletesebben foglalkozunk a Logstash és Kibana komponensekkel.

Telepítés

Tehát a filebeat ügynök fájl-archívumát letölthetjük erről az oldalról.

Az egyszerű telepítést a zip-fájl tartalmának kicsomagolásával végezzük. Például a c:Program Filesfilebeat. Ezután el kell indítani a PowerShell szkriptet, install-service-filebeat.ps1, amely a csomag részét képezi, a filebeat szolgáltatás telepítéséhez.

Most már készen állunk a konfigurációs fájl beállítására.

Hibatűrés

A Filebeat garantálja a naplók célba juttatását a naplórendszerbe. Ezt a naplófájlokban tárolt bejegyzések nyilvántartásán keresztül valósítja meg. A nyilvántartás tartalmazza azokat az adatokat, amelyek már el lettek olvasva a naplófájlokból, és konkrét bejegyzések vannak megjelölve, amelyeket sikerült célba juttatni.

Ha egy bejegyzést nem sikerül célba juttatni, a Filebeat újra megpróbálja azt küldeni, amíg a fogadó rendszertől meg nem kapja a kézbesítés visszaigazolását, vagy amíg az eredeti naplófájl el nem tűnik a rotáció során.

A Filebeat szolgáltatás újraindításakor a nyilvántartásból olvassa a legutoljára elolvasott és elküldött bejegyzések adatait, és a nyilvántartásban található információk alapján olvassa az adatokat a naplófájlokból.

Ez minimalizálja a kockázatot, hogy elveszítjük a naplókra vonatkozó információkat, amelyeket el kell küldeni az elastic logstash szerverekre, váratlan leállások és a szerverek karbantartási műveletei során.

További részletekért ezt elolvashat a dokumentációban a következő szakaszokban: Hogyan tartja nyilván a Filebeat a fájlok állapotát és Hogyan biztosítja a Filebeat az egyszeri kézbesítést?

Beállítás

A teljes beállítás a következő formátumú konfigurációs fájlban történik yml, amely több szekcióra van felosztva. Vizsgáljunk meg néhányat közülük, amelyek részt vesznek a naplók gyűjtésének folyamatában az Exchange szerverekről.

A naplófeldolgozó blokk

A naplófeldolgozó blokk a következő mezővel kezdődik:

filebeat.inputs:

Egy közös naplógyűjtő eszközt fogunk használni:

- type: log

Ezután megadjuk az állapotot (engedélyezve) és a naplókkal rendelkező mappa elérési útját. Például, IIS naplók esetén az alábbi beállítások lehetnek érvényesek:

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

Még egy fontos beállítás: hogyan olvassa a Filebeat a többsoros bejegyzéseket. Alapértelmezés szerint a Filebeat egy log-fájl egy sorát egy bejegyzésnek tekinti. Ez jól működik, amíg a naplóba nem érkeznek olyan kivételek, amelyek a szolgáltatás hibás működésével kapcsolatosak. Ebben az esetben a kivételek több sorból állhatnak. Ezért a Filebeat-nak egy többsoros bejegyzést egynek kell tekintenie, ha a következő sor dátummal kezdődik. Az Exchange naplóbejegyzéseinek formátuma a következő: minden új bejegyzés a naplófájlba dátummal kezdődik. A konfigurációban ez a feltétel így néz ki:

multiline:
	pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
	negate: true
	match: after

Érdemes címkéket hozzáadni a küldött bejegyzéshez, például:

  tags: ['IIS', 'ex-srv1']

Ne felejtsük el kizárni azokat a sorokat, amelyek hash-jellel kezdődnek:

  exclude_lines: ['^#']

Tehát a naplófájlok olvasási blokkjának a következőknek kell lennie:

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: ['^#']

A naplók küldési blokkja

A filebeat külön bejegyzéseket küld a naplófájlban json formátumban, ahol a napló konkrét bejegyzése az egyetlen field message mezőben található. Ha valahogyan dolgozni szeretnénk ezzel az információval, először ki kell parse-olnunk ezt a mezőt külön mezőkre. Ezt például a logstash-ben lehet megtenni. Ez lesz a fogadója a filebeat bejegyzéseknek. Íme, hogyan nézhet ki ez a filebeat konfigurációs fájlban:

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

Ha több szerver is van, akkor lehetőség van a terheléselosztás bekapcsolására: így a filebeat nem az első elérhető szerverre küldi el a naplókat a listából, hanem elosztja a küldendő naplókat több szerver között:

hosts: ["logstash1.domain.com:5044", "logstash2.domain.com:5044"]
  loadbalance: true 

A filebeat a naplók feldolgozása során a küldött json-ban a message mezőn kívül több metaadatot is hozzáad, amely hatással van a dokumentum méretére, ami az elasticba kerül. Ezeket a metaadatokat szelektíven ki lehet venni a küldésből. Ezt a processor blokkban tehetjük meg a processzor segítségével. drop_fields. Kizárhatunk például a következő mezőket:

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"]

A kizárt mezők kiválasztásához óvatosan kell hozzáállni, mivel egyesek használatosak lehetnek az elastic oldalán az indexek létrehozásához.

Tehát a naplók küldésének blokkjának a következőknek kell lennie:

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"]

A filebeat naplózási beállításai

Érdemes a következő naplózási beállításokat alkalmazni:

  • A naplózás szintje info;
  • A naplókat a alapértelmezett helyre írjuk (logs mappa a filebeat telepítési könyvtárában);
  • A naplófájl neve — filebeat;
  • Az utolsó 10 naplófájl megőrzése;
  • Rotáció elindítása 1 MB méret elérésekor.

A naplómódosító beállítások véglegesen így fognak kinézni:

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

Végső konfiguráció

Összegyűjtöttük a konfigurációt, és most így néz ki:

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

Fontos megérteni, hogy a konfigurációs fájl formátuma — yml. Ezért fontos, hogy a szóközöket és a kötőjeleket helyesen helyezzük el.

A Filebeat képes ellenőrizni a konfigurációs fájlt, és ha a szintaxis hibákat tartalmaz, meg fogja mutatni, melyik sorban és hol van a hiba. Az ellenőrzést a következőképpen végzi:

.filebeat.exe test config

A Filebeat emellett képes ellenőrizni a naplóvételi receptor hálózati elérhetőségét. Az ellenőrzés így indítható:

.filebeat.exe test output

A következő részekben beszélni fogok az Exchange csatlakoztatásáról és barátságáról a Logstash és Kibana komponensekkel.

Hasznos linkek

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster