Logstash — event va log ma’lumotlarini turli manbalardan qabul qilish, filterlar orqali qayta ishlash va bir yoki bir nechta manzilga yuborish uchun ishlatiladigan data processing pipeline vositasi.
Logstash input, filter va output pluginlaridan tashkil topgan pipeline modelidan foydalanadi.
Pipeline
Asosiy oqim:
input → filter → output
Input eventni oladi.
Filter uni parse va transform qiladi.
Output storage yoki boshqa tizimga yuboradi.
Bir Logstash instance’da bir nechta mustaqil pipeline bo‘lishi mumkin.
Event
Logstash eventi fieldlardan tashkil topgan structured obyekt.
Misol:
@timestamp
message
service
level
host
trace_id
Field nested bo‘lishi mumkin.
Metadata fieldlari outputga yozilmasdan pipeline ichida routing uchun ishlatilishi mumkin.
Input
Input plugin ma’lumot manbasini ulaydi.
Misollar:
Har input delivery va acknowledgement semantikasiga ega.
UDP input packet yo‘qolishini tiklay olmaydi, queue input esa qayta yetkazishi mumkin.
File input
File input logni tail yoki read mode’da o‘qishi mumkin.
U qaysi fayl va offsetgacha o‘qilganini maxsus metadata faylida saqlaydi.
Log rotation:
- rename;
- truncate;
- yangi inode;
- eski file handle
holatlarini to‘g‘ri boshqarish kerak.
Filter
Filter eventni o‘zgartiradi.
Keng vazifalar:
- matnni parse qilish;
- field conversion;
- date parsing;
- geo enrichment;
- conditional routing;
- field delete;
- redaction;
- fingerprint.
Filter tartibi keyingi filterga kiradigan recordni belgilaydi.
Grok
Grok tayyor patternlar va regex orqali unstructured logni fieldlarga ajratadi.
Masalan, web access logdan:
- IP;
- method;
- path;
- status;
- duration
olinadi.
Grok pattern juda murakkab bo‘lsa CPU sarfi oshadi.
Structured JSON log parsing odatda soddaroq.
Dissect
Dissect ma’lum delimiter va qat’iy formatdagi matnni ajratadi.
U regex backtracking ishlatmaydi va barqaror formatda tez bo‘lishi mumkin.
Log field tartibi o‘zgaruvchan bo‘lsa Grok yoki boshqa parser kerak.
Date filter
Log ichidagi vaqt @timestampga aylantiriladi.
Format, locale va time zone aniq belgilanadi.
Parse qilinmasa ingestion vaqti ishlatilishi mumkin, bu historical log query’sini noto‘g‘ri qiladi.
Mutate
Mutate filter:
- rename;
- replace;
- convert;
- split;
- join;
- lowercase;
- remove field
amallarini bajaradi.
Type conversion xato bo‘lsa tag yoki log orqali aniqlanadi.
Conditional
Event fieldiga qarab filter yoki output tanlanadi.
Masalan:
level == "error"
environment == "prod"
Condition ichida missing field va type conversion hisobga olinadi.
Output
Output plugin eventni:
- Elasticsearch;
- file;
- queue;
- HTTP;
- object storage;
- monitoring system
ga yuboradi.
Bir event bir nechta outputga yuborilishi mumkin.
Bitta sekin output butun pipeline’ga ta’sir qilmasligi uchun arxitektura ajratilishi mumkin.
Batch
Worker eventlarni batch bilan filter va outputga uzatadi.
Batch hajmi:
- throughput;
- memory;
- latency;
- output request hajmi
ga ta’sir qiladi.
Juda katta batch failure’da ko‘p eventni qayta yuborishi mumkin.
Worker
Pipeline workerlar parallel event qayta ishlaydi.
Ko‘proq worker CPU parallelizmini oshiradi.
Ammo ordering talab qilinsa va filter thread-safe bo‘lmasa cheklov kerak.
Persistent queue
Input va filter/output orasida disk-backed queue ishlatilishi mumkin.
Bu process crash yoki output uzilishida eventlarni saqlashga yordam beradi.
- disk;
- checkpoint;
- capacity;
- page;
- recovery
sozlamalariga ega.
U tashqi message brokerning barcha imkoniyatlarini almashtirmaydi.
Dead letter queue
Ayrim output qaytarib bo‘lmaydigan eventni rad etsa dead letter queue’ga yozilishi mumkin.
Masalan, mapping xatosi.
Keyinchalik event:
- tahlil;
- tuzatish;
- replay
qilinadi.
DLQ doimiy unutilgan storagega aylanmasligi kerak.
Backpressure
Output sekinlashsa queue to‘ladi va inputga bosim qaytadi.
TCP sender sekinlashishi mumkin.
UDP yoki file rotation holatida data yo‘qolishi ehtimoli bor.
Capacity va monitoring zarur.
Pipeline-to-pipeline
Murakkab konfiguratsiyada bitta pipeline eventni boshqa pipeline’ga uzatadi.
Bu:
- umumiy ingestion;
- alohida output;
- failure isolation;
- qayta ishlatiladigan pipeline
uchun qo‘llanadi.
Cycle va blocked pipeline xavfi nazorat qilinadi.
Monitoring
Kuzatiladi:
- event rate;
- queue depth;
- worker utilization;
- filter duration;
- output failure;
- retry;
- JVM memory;
- garbage collection;
- rejected event.
Faqat process ishlayotgani data pipeline sog‘lomligini anglatmaydi.
Codec
Codec input yoki outputdagi event framing va encodingni boshqaradi. JSON lines, plain text va multiline kabi formatlar codec orqali ajratilishi mumkin.
ECSga mos fieldlar
Bir xil semantik field nomlari ishlatilsa turli source loglarini umumiy dashboard va query bilan tahlil qilish osonlashadi. Custom fieldlar conflict qilmasligi uchun namespace bilan yoziladi.
Pipeline reload
Configuration fayli o‘zgarganda pipeline qayta yuklanishi mumkin. Yangi pipeline ishga tushmasdan eski pipeline to‘xtatilsa ingestion uzilishi ehtimoli bor.
Ordering
Bir nechta worker va batch parallel ishlaganda eventlar original tartibda chiqishi kafolatlanmasligi mumkin. Ordering talab qiluvchi oqim uchun bitta worker yoki sequence field ishlatiladi.
JVM
Logstash JVM heapidan foydalanadi. Heap juda kichik bo‘lsa GC va out-of-memory, juda katta bo‘lsa uzun pause paydo bo‘lishi mumkin. Persistent queue disk sig‘imi heapdan alohida rejalashtiriladi.
Config test
Pipeline productionga yuborilishidan oldin syntax, plugin option va sample event bilan tekshiriladi. Grok pattern unit testlari format o‘zgarishini erta aniqlaydi.
Bog‘liq tushunchalar
Data pipeline, Input plugin, Filter plugin, Output plugin, Grok, Persistent queue, Dead letter queue, Elasticsearch, Kibana, Log aggregation