Bosh sahifa Wiki Logstash

Logstash

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

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:

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.

Persistent queue:

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

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