Archiv
LogMan.io Receiver archiv je neměnný, sloupcově orientovaný a pouze přídavný úložiště dat z přijatých surových logů.
Každý komunikační kanál dodává data do streamu.
Stream je nekonečná tabulka s poli.
Název streamu je složen z předpony received.
, názvu tenanta a komunikačního kanálu (např. received.mytenant.udp-8889
).
Archivní stream obsahuje následující pole pro každý logový záznam:
raw
: Surový log (řetězec, digitálně podepsaný)row_id
: Primární identifikátor řádku unikátní napříč všemi streamy (64bitové neznaménkové celé číslo)collected_at
: Datum a čas sběru logu na sběračireceived_at
: Datum a čas přijetí logu na přijímačisource
: Popis zdroje logu (řetězec)
Pole source
obsahuje:
- pro TCP vstupy:
<ip adresa> <port> S
(S označuje stream) - pro UDP vstupy:
<ip adresa> <port> D
(D označuje datagram) - pro souborové vstupy: název souboru
- pro ostatní vstupy: volitelná specifikace zdroje
Pole source
pro log doručený přes UDP
192.168.100.1 61562 D
Log byl nasbírán z IP adresy 192.168.100.1 a portu UDP/61562.
Partice
Každý stream je rozdělen na partice. Partice stejného streamu mohou být umístěny na různých instancích přijímače.
Info
Partice mohou sdílet identická časová období. To znamená, že záznamy dat ze stejného časového rozmezí mohou být nalezeny ve více než jedné partici.
Každá partice má své číslo (part_no
), začínající od 0.
Toto číslo se monotónně zvyšuje pro nové partice v archivu, napříč streamy.
Číslo partice je globálně unikátní v rámci clusteru.
Číslo partice je zakódováno do názvu partice.
Název partice je 6 znakový název, který začíná aaaaaa
(tedy partice #0) a pokračuje aaaaab
(partice #1) a tak dále.
Partici lze prozkoumat v Zookeeperu:
/lmio/receiver/db/received.mytenant.udp-8889/aaaaaa.part
partno: 0 # Číslo partice se překládá na aaaaaa
count: 4307 # Počet řádků v této partici
size: 142138 # Velikost partice v bajtech (nekomprimováno)
created_at:
iso: '2023-07-01T15:22:53.265267'
unix_ms: 1688224973265267
closed_at:
iso: '2023-07-01T15:22:53.283168'
unix_ms: 1688224973283167
extra:
address: 192.168.100.1 49542 # Adresa sběrače
identity: ABCDEF1234567890 # Identita sběrače
stream: udp-8889
tenant: mytenant
columns:
raw:
type: string
collected_at:
summary:
max:
iso: '2023-06-29T20:33:18.220173'
unix_ms: 1688070798220173
min:
iso: '2023-06-29T18:25:03.363870'
unix_ms: 1688063103363870
type: timestamp
received_at:
summary:
max:
iso: '2023-06-29T20:33:18.549359'
unix_ms: 1688070798549359
min:
iso: '2023-06-29T18:25:03.433202'
unix_ms: 1688063103433202
type: timestamp
source:
summary:
token:
count: 2
type: token:rle
Tip
Protože je název partice globálně unikátní, je možné partici přesunout na sdílené úložiště, např. NAS nebo cloudové úložiště z různých uzlů clusteru. Celoživotní cyklus je navržen tak, aby se názvy particí nekolidovaly, takže data nebudou přepsána různými přijímači, ale správně sestavena na "sdíleném" úložišti.
Životní cyklus
Životní cyklus partice je definován pomocí fází.
Ingest partice jsou partice, které přijímají data. Jakmile je příjem dokončen, tedy přestane se do této partice zapisovat, je uzavřena. Partice nemohou být znovu otevřeny.
Když je partice uzavřena, začíná její životní cyklus. Každá fáze je konfigurována tak, aby ukazovala na specifický adresář na souborovém systému.
Životní cyklus je definován na úrovni streamu, ve vstupu /lmio/receiver/db/received...
v ZooKeeperu.
Tip
Partice lze také ručně přesunout do požadované fáze pomocí API volání.
Výchozí životní cyklus
Výchozí životní cyklus se skládá ze tří fází: hot, warm a cold.
graph LR
I(Ingest) --> H[Hot];
H --1 týden--> W[Warm];
W --6 měsíců--> D(Smazání);
H --ihned-->C[Cold];
C --18 měsíců--> CD(Smazání);
Příjem je prováděn ve hot fázi. Jakmile je příjem dokončen a partice uzavřena, je partice zkopírována do cold fáze. Po týdnu je partice přesunuta do warm fáze. To znamená, že partice je duplikována - jedna kopie je ve úložišti cold fáze, druhá kopie je ve úložišti warm fáze.
Partice v úložišti warm fáze je smazána po 6 měsících.
Partice v úložišti cold fáze je komprimována pomocí xz/LZMA. Partice je smazána z cold fáze po 18 měsících.
Definice výchozího životního cyklu
define:
type: jizera/stream
ingest: # (1)
phase: hot
rotate_size: 30G
rotate_time: daily
lifecycle:
hot:
- move: # (2)
age: 1w
phase: warm
- copy: # (3)
phase: cold
warm:
- delete: # (4)
age: 6M
cold:
- compress: # (5)
type: xz
preset: 6
threads: 4
- delete: # (6)
age: 18M
- Příjem nových logů do hot fáze.
- Po jednom týdnu přesunout partici z hot do warm fáze.
- Ihned po uzavření příjmu zkopírovat partici do cold fáze.
- Smazat partici po 6 měsících.
- Partici komprimovat okamžitě po příchodu do cold fáze.
- Smazat partici po 18 měsících z cold fáze.
Doporučení pro ukládání fází:
- Hot fáze by měla být umístěna na SSD
- Warm fáze by měla být umístěna na HDD
- Cold fáze je archiv, může být umístěna na NAS nebo pomalých HDD.
Note
Pro více informací navštivte Administrativní manuál, kapitolu o Diskovém úložišti.
Pravidla životního cyklu
move
: Přesunout partici ve specifikovanémage
do specifikovanéphase
.copy
: Zkopírovat partici ve specifikovanémage
do specifikovanéphase
.delete
: Smazat partici ve specifikovanémage
.
age
může být např. "3h" (tři hodiny), "5M" (pět měsíců), "1y" (jeden rok) a podobně.
Podporované postfixy age
:
y
: rok, resp. 365 dníM
: měsíc, resp. 31 dníw
: týdend
: denh
: hodinam
: minuta
Note
Pokud není age
zadáno, pak je věk nastaven na 0, což znamená, že akce životního cyklu je provedena ihned.
Pravidlo komprese
compress
: Komprimovat data při příjmu do fáze.
Aktuálně je podporován type: xz
s následujícími možnostmi:
preset
: Xz kompresní úroveň.
Komprese může být zhruba rozdělena do tří kategorií:
0...2
Rychlé úrovně s relativně nízkou paměťovou náročností. 1 a 2 by měly poskytnout kompresní rychlost a poměr srovnatelný s bzip2 1 a bzip2 9, resp.
3...5
Dobré kompresní poměry s nízkou až střední paměťovou náročností. Tyto úrovně jsou výrazně pomalejší než úrovně 0-2.
6...9
Vynikající komprese se střední až vysokou paměťovou náročností. Tyto úrovně jsou také pomalejší než nižší úrovně.
Výchozí je úroveň 6.
Pokud nechcete maximalizovat kompresní poměr, pravděpodobně nechcete použít úroveň vyšší než 7 kvůli rychlosti a paměťové náročnosti.
threads
: Maximální počet CPU vláken použitých pro kompresi.
Výchozí je 1.
Nastavte na 0 pro použití tolika vláken, kolik je jader procesoru.
Manuální dekomprese
Můžete použít xz --decopress
nebo unxz
z XZ Utils.
Můžete použít 7-Zip pro dekompresi souborů archivu na Windows.
Vždy pracujte s kopiemi souborů v archivu; nejprve zkopírujte všechny soubory z archivu a neměňte (dekomprimujte) soubory v archivu.
Pravidlo replikace
replica
: Určuje počet kopií dat (replik), které by měly být přítomny ve fázi.
Repliky jsou uloženy na různých instancích přijímače, takže počet replik by NEMĚL být vyšší než počet přijímačů v clusteru, který provozuje danou fázi. Jinak "nadměrné" repliky nebudou vytvořeny, protože se nenalezne dostupná instance přijímače.
Replikace ve fázi hot
define:
type: jizera/stream
lifecycle:
hot:
- replica:
factor: 2
...
factor
: Počet kopií dat ve fázi, výchozí hodnota je 1.
Rotace
Partice rotace je mechanismus, který uzavírá partice pro příjem za specifických podmínek. Když je partice pro příjem uzavřena, nová data jsou ukládána do nově vytvořené další partice pro příjem. Tím je zajištěno více či méně rovnoměrné rozdělení nekonečného proudu dat.
Rotace je konfigurována na úrovni streamu pomocí:
rotate_time
: období (např.daily
), po které může být partice v režimu příjmurotate_size
: maximální velikost partice; postfixyT
,G
,M
ak
jsou podporovány pomocí základu 10.
Obě možnosti mohou být použity současně.
Výchozí rotace streamu je daily
a 30G
.
Plán
Pouze možnost daily
je momentálně dostupná pro rotate_time
.
Vydávání dat
Data mohou být extrahována z archivu (např. pro zpracování třetími stranami, migraci a podobně) kopírováním adresáře dat particí v rámci vydávání.
Použijte Zookeeper k identifikaci, které partice jsou v rámci vydávání a kde jsou fyzicky umístěny na úložištích.
Sloupec raw
může být přímo zpracován nástroji třetích stran.
Pokud jsou data komprimována konfigurací životního cyklu, může být potřeba dekomprese.
Note
To znamená, že nemusíte partici přesouvat například z cold fáze do warm nebo hot fáze.
Přehrávání dat
Archivované logy lze přehrát do následných centrálních komponent.
Nenapadnutelnost
Archiv je kryptograficky zabezpečený, navržený pro sledovatelnost a nenapadnutelnost. Digitální podpisy se používají k ověření autenticity a integrity dat, což poskytuje jistotu, že logy nebyly pozměněny a byly skutečně vygenerovány uvedeným zdrojem logu.
Tento přístup založený na digitálních podpisech k udržování logů je zásadním prvkem bezpečných logovacích praktik a pilířem robustního informačního bezpečnostního management systému. Tyto logy jsou klíčové nástroje pro forenzní analýzu během reakcí na incidenty, detekci anomálií nebo škodlivých aktivit, auditování a dodržování předpisů.
K zajištění bezpečnosti logů používáme následující kryptografické algoritmy: SHA256, ECDSA.
Hashovací funkce, SHA256, je aplikována na každý surový logový záznam. Tato funkce vezme vstupní surový logový záznam a vytvoří řetězec bajtů pevné délky. Výstup (nebo hash) je unikátní pro vstupní data; mírná změna ve vstupu vytvoří dramaticky odlišný výstup, což je charakteristika známá jako "efekt laviny".
Tento unikátní hash je poté podepsán pomocí privátního podpisového klíče prostřednictvím ECDSA algoritmu, který generuje digitální podpis, který je unikátní jak pro data, tak pro klíč. Tento digitální podpis je uložen spolu se surovými logovými daty, což certifikuje, že data logu pocházejí z daného zdroje logu a nebyla během uložení pozměněna.
Digitální podpisy sloupců raw
jsou uloženy v ZooKeeperu (kanonické umístění) a v souborovém systému pod názvem col-raw.sig
.
Každá partice je také vybavena jedinečným SSL podpisovým certifikátem, pojmenovaným signing-cert.der
.
Tento certifikát, ve spojení s digitálním podpisem, může být použit k ověření, že col-raw.data
(původní surové logy) nebyly pozměněny, což zajišťuje integritu dat.
Important
Uvědomte si, že přidružený privátní podpisový klíč není uložen nikde, kromě procesní paměti, z bezpečnostních důvodů. Privátní klíč je odstraněn, jakmile partice dokončí svůj příjem dat.
Podpisový certifikát je vydáván interním Certifikačním úřadem (CA).
Certifikát certifikačního úřadu je dostupný v ZooKeeperu na /lmio/receiver/ca/cert.der
.
Ověření digitálního podpisu
Můžete ověřit digitální podpis pomocí následujících příkazů OpenSSL:
```shell $ openssl x509 -inform der -in signing-cert