GROK bilan tuzilmagan ma'lumotlarni tuzilish
Agar siz Elastic (ELK) stekidan foydalanayotgan bo'lsangiz va maxsus Logstash jurnallarini Elasticsearch-ga solishtirmoqchi bo'lsangiz, bu post siz uchun.
ELK stek uchta ochiq manbali loyihalarning qisqartmasi: Elasticsearch, Logstash va Kibana. Ular birgalikda jurnallarni boshqarish platformasini tashkil qiladi.
- Elasticsearch qidiruv va tahliliy tizimdir.
- logstash bir vaqtning o'zida bir nechta manbalardan ma'lumotlarni qabul qiladigan, uni o'zgartiradigan va keyin uni Elasticsearch kabi "stash" ga yuboradigan server tomonidagi ma'lumotlarni qayta ishlash quvur liniyasi.
- kibana foydalanuvchilarga Elasticsearch-da diagrammalar va grafiklar yordamida ma'lumotlarni vizualizatsiya qilish imkonini beradi.
Jang keyinroq keldi va engil ma'lumotlarni jo'natuvchi hisoblanadi. Beats-ning kiritilishi Elk Stack-ni Elastik stekga aylantirdi, ammo gap bu emas.
Ushbu maqola Grok haqida, bu Logstash-dagi xususiyat bo'lib, u sizning jurnallaringizni saqlashga yuborilishidan oldin o'zgartira oladi. Bizning maqsadlarimiz uchun men faqat Logstash-dan Elasticsearch-ga ma'lumotlarni qayta ishlash haqida gapiraman.
Grok - bu Logstash ichidagi filtr bo'lib, u tuzilmagan ma'lumotlarni tuzilgan va so'raladigan narsaga ajratish uchun ishlatiladi. U muntazam ifodaning (regex) tepasida joylashgan va jurnal fayllaridagi satrlarni moslashtirish uchun matn naqshlaridan foydalanadi.
Keyingi bo'limlarda ko'rib turganimizdek, Grok-dan foydalanish jurnallarni samarali boshqarishda katta farq qiladi.
Groksiz sizning jurnal ma'lumotlaringiz tuzilmagan
Groksiz, jurnallar Logstash-dan Elasticsearch-ga yuborilganda va Kibana-da ko'rsatilganda, ular faqat xabar qiymatida ko'rinadi.
Bunday vaziyatda mazmunli ma'lumotlarni so'rash qiyin, chunki barcha jurnal ma'lumotlari bitta kalitda saqlanadi. Jurnal xabarlari yaxshiroq tartibga solinsa yaxshi bo'lardi.
Jurnallardan tuzilmagan ma'lumotlar
localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0
Agar siz dastlabki ma'lumotlarga diqqat bilan qarasangiz, u aslida har biri bo'sh joy bilan ajratilgan turli qismlardan iborat ekanligini ko'rasiz.
Tajribali ishlab chiquvchilar uchun, ehtimol, har bir qism nimani anglatishini va bu jurnal xabari API chaqiruvidan nimani anglatishini taxmin qilishingiz mumkin. Har bir elementning taqdimoti quyida keltirilgan.
Ma'lumotlarimizning tuzilgan ko'rinishi
- localhost == muhit
- GET == usuli
- β /v2/applink/5c2f4bb3e9fda1234edc64d == url
- β 400 == javob_holati
- 46ms == javob vaqti
- β 5bc6e716b5d6cb35fc9687c0 == user_id
Strukturaviy ma'lumotlarda ko'rib turganimizdek, tuzilmagan jurnallar uchun buyurtma mavjud. Keyingi qadam xom ma'lumotlarni dasturiy ta'minot bilan qayta ishlashdir. Bu erda Grok porlaydi.
Grok shablonlar
O'rnatilgan Grok shablonlari
Logstash tuzilmagan ma'lumotlarni tuzish uchun 100 dan ortiq o'rnatilgan andozalar bilan birga keladi. Apache, linux, haproxy, aws va boshqalar kabi umumiy tizimlar uchun imkon qadar bundan albatta foydalanishingiz kerak.
Biroq, yuqoridagi misoldagi kabi maxsus jurnallarga ega bo'lsangiz nima bo'ladi? Siz o'zingizning Grok shabloningizni yaratishingiz kerak.
Maxsus Grok shablonlari
O'zingizning Grok shabloningizni yaratishga harakat qilishingiz kerak. foydalandim
Grok shablonining sintaksisi quyidagicha ekanligini unutmang: %{SYNTAX:SEMANTIC}
Men qilmoqchi bo'lgan birinchi narsa tabga o'tish edi Discover Grok tuzatuvchisida. Agar ushbu vosita avtomatik ravishda Grok naqshini yaratsa, ajoyib bo'lardi, deb o'yladim, lekin u juda foydali emas edi, chunki u faqat ikkita moslikni topdi.
Ushbu kashfiyotdan foydalanib, Elastic Github sahifasida topilgan sintaksisdan foydalanib, Grok tuzatuvchisida o'z shablonimni yaratishni boshladim.
Turli xil sintaksislar bilan o'ynaganimdan so'ng, men nihoyat jurnal ma'lumotlarini o'zim xohlagan tarzda tuza oldim.
Grok tuzatuvchisi havolasi
Asl matn:
localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0
Chizma:
%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}
Oxiri nima bo'ldi
{
"environment": [
[
"localhost"
]
],
"method": [
[
"GET"
]
],
"url": [
[
"/v2/applink/5c2f4bb3e9fda1234edc64d"
]
],
"response_status": [
[
"400"
]
],
"BASE10NUM": [
[
"400"
]
],
"response_time": [
[
"46ms"
]
],
"user_id": [
[
"5bc6e716b5d6cb35fc9687c0"
]
]
}
Grok shabloni va qo'lda xaritalangan ma'lumotlar bilan oxirgi qadam uni Logstash-ga qo'shishdir.
Logstash.conf konfiguratsiya fayli yangilanmoqda
ELK stekini o'rnatgan serverda Logstash konfiguratsiyasiga o'ting:
sudo vi /etc/logstash/conf.d/logstash.conf
O'zgarishlarni joylashtiring.
input {
file {
path => "/your_logs/*.log"
}
}
filter{
grok {
match => { "message" => "%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}"}
}
}
output {
elasticsearch {
hosts => [ "localhost:9200" ]
}
}
O'zgarishlarni saqlaganingizdan so'ng, Logstash-ni qayta ishga tushiring va u ishlayotganiga ishonch hosil qilish uchun uning holatini tekshiring.
sudo service logstash restart
sudo service logstash status
Nihoyat, o'zgarishlar kuchga kirganligiga ishonch hosil qilish uchun, Kibanadagi Logstash uchun Elasticsearch indeksingizni yangilaganingizga ishonch hosil qiling!
Grok bilan jurnal ma'lumotlaringiz tuzilgan!
Yuqoridagi rasmda ko'rib turganimizdek, Grok jurnal ma'lumotlarini Elasticsearch bilan avtomatik ravishda moslashtirishga qodir. Bu jurnallarni boshqarishni osonlashtiradi va ma'lumotlarni tezda so'raydi. Nosozliklarni tuzatish uchun jurnal fayllarini qazish o'rniga, siz shunchaki atrof-muhit yoki url kabi qidirayotgan narsangiz bo'yicha filtrlashingiz mumkin.
Grok ifodalarini sinab ko'ring! Agar buni qilishning boshqa usuli bo'lsa yoki yuqoridagi misollar bilan bog'liq muammolar bo'lsa, menga xabar berish uchun pastga sharh yozing.
O'qiganingiz uchun tashakkur va dasturiy ta'minot muhandisligi bo'yicha yanada qiziqarli maqolalar uchun Medium-da meni kuzatib boring!
Resurslar
Telegram kanali tomonidan
Manba: www.habr.com