GROK ашиглан бүтэцгүй өгөгдлийг бүтэцжүүлэх
Хэрэв та Elastic (ELK) стек ашиглаж байгаа бөгөөд Logstash бүртгэлийг Elasticsearch-д буулгах сонирхолтой байгаа бол энэ нийтлэл танд зориулагдсан болно.
ELK стек нь Elasticsearch, Logstash, Kibana гэсэн гурван нээлттэй эхийн төслийн товчлол юм. Тэд хамтдаа бүртгэлийн удирдлагын платформыг бүрдүүлдэг.
- Elasticsearch хайлт, аналитик систем юм.
- Logstash Энэ нь олон эх сурвалжаас өгөгдлийг нэгэн зэрэг шингээж, хувиргаж, дараа нь Elasticsearch гэх мэт "нугас" руу илгээдэг сервер талын өгөгдөл боловсруулах хоолой юм.
- Кибана нь хэрэглэгчдэд Elasticsearch дээр диаграм, график ашиглан өгөгдлийг дүрслэх боломжийг олгодог.
Beats дараа нь ирсэн бөгөөд хөнгөн жинтэй өгөгдөл тээвэрлэгч юм. Beats-ийн танилцуулга нь Elk Stack-ийг Elastic Stack болгон өөрчилсөн боловч энэ нь гол зүйл биш юм.
Энэ нийтлэл нь Grok-ийн тухай бөгөөд энэ нь Logstash-ийн онцлог бөгөөд таны бүртгэлийг хадгалах газар руу илгээхээс өмнө өөрчлөх боломжтой юм. Бидний зорилгын үүднээс би Logstash-аас Elasticsearch руу өгөгдөл боловсруулах талаар л ярих болно.
Grok нь Logstash доторх шүүлтүүр бөгөөд бүтэцгүй өгөгдлийг бүтэцтэй, хайлт хийх боломжтой зүйл болгон задлахад ашигладаг. Энэ нь ердийн илэрхийлэл (regex) дээр байрладаг бөгөөд лог файл дахь мөрүүдийг тохируулахын тулд текстийн хэв маягийг ашигладаг.
Дараах хэсгүүдэд бид Grok-ийг ашиглах нь бүртгэлийн үр ашигтай менежментийн талаар ихээхэн өөрчлөлт авчрах болно.
Grok-гүйгээр таны бүртгэлийн өгөгдөл бүтэцгүй болно
Grok-гүй бол логуудыг Logstash-аас Elasticsearch руу илгээж, Kibana-д үзүүлэх үед тэдгээр нь зөвхөн мессежийн утгад харагдана.
Бүх бүртгэлийн өгөгдөл нь нэг түлхүүрт хадгалагддаг тул ийм нөхцөлд утга учиртай мэдээлэл хайхад хэцүү байдаг. Бүртгэлийн мессежийг илүү сайн зохион байгуулбал илүү дээр байх болно.
Бүртгэлээс бүтцгүй өгөгдөл
localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0
Хэрэв та түүхий өгөгдлийг анхааралтай ажиглавал энэ нь үнэндээ өөр өөр хэсгүүдээс бүрдэх бөгөөд тус бүр нь зайгаар тусгаарлагдсан болохыг харах болно.
Илүү туршлагатай хөгжүүлэгчдийн хувьд та хэсэг бүр нь юу гэсэн үг болохыг болон API дуудлагаас ямар бүртгэлийн мессеж байгааг тааж магадгүй юм. Зүйл бүрийн танилцуулгыг доор харуулав.
Манай өгөгдлийн бүтэцлэгдсэн харагдац
- localhost == орчин
- GET == арга
- /v2/applink/5c2f4bb3e9fda1234edc64d == url
- 400 == хариу_төлөв
- 46мс == хариулах_хугацаа
- 5bc6e716b5d6cb35fc9687c0 == user_id
Бүтэцлэгдсэн өгөгдлөөс бидний харж байгаагаар бүтэцгүй бүртгэлийн захиалга байдаг. Дараагийн алхам бол түүхий өгөгдлийг програм хангамжаар боловсруулах явдал юм. Энд Грок гэрэлтдэг.
Grok загварууд
Суулгасан Grok загварууд
Logstash нь бүтэцгүй өгөгдлийг бүтцэд оруулах 100 гаруй загвартай ирдэг. Та үүнийг apache, linux, haproxy, aws гэх мэт ерөнхий системүүдийн хувьд боломжтой бол ашиглах нь гарцаагүй.
Гэсэн хэдий ч, дээрх жишээн дээрх шиг захиалгат бүртгэлтэй бол юу болох вэ? Та өөрийн Grok загвараа бүтээх ёстой.
Захиалгат Grok загварууд
Та өөрийн Grok загвараа бүтээхийг хичээх хэрэгтэй. би хэрэглэсэн
Grok загварын синтакс дараах байдалтай байгааг анхаарна уу. %{SYNTAX:SEMANTIC}
Миний хийх гэж оролдсон хамгийн эхний зүйл бол таб руу орох явдал байв Discover Grok дибаг дээр. Энэ хэрэгсэл нь Grok загварыг автоматаар үүсгэж чадвал сайхан байх болно гэж би бодсон, гэхдээ энэ нь зөвхөн хоёр таарч олсон тул тийм ч ашигтай биш байсан.
Энэхүү нээлтийг ашиглан би Elastic Github хуудаснаас олдсон синтаксийг ашиглан Grok дибаггер дээр өөрийн загвараа үүсгэж эхэлсэн.
Өөр өөр синтаксуудтай тоглосны дараа би эцэст нь бүртгэлийн өгөгдлийг хүссэнээрээ зохион байгуулж чадсан.
Grok Debugger холбоос
Эх бичвэр:
localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0
Хээ:
%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}
Эцэст нь юу болов
{
"environment": [
[
"localhost"
]
],
"method": [
[
"GET"
]
],
"url": [
[
"/v2/applink/5c2f4bb3e9fda1234edc64d"
]
],
"response_status": [
[
"400"
]
],
"BASE10NUM": [
[
"400"
]
],
"response_time": [
[
"46ms"
]
],
"user_id": [
[
"5bc6e716b5d6cb35fc9687c0"
]
]
}
Grok загвар болон газрын зурагтай өгөгдөлтэй бол хамгийн сүүлийн алхам бол үүнийг Logstash-д нэмэх явдал юм.
Logstash.conf тохиргооны файлыг шинэчилж байна
ELK стекийг суулгасан сервер дээрээ Logstash тохиргоо руу очно уу:
sudo vi /etc/logstash/conf.d/logstash.conf
Өөрчлөлтүүдийг буулгана уу.
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" ]
}
}
Өөрчлөлтүүдээ хадгалсны дараа Logstash-ийг дахин эхлүүлж, ажиллаж байгаа эсэхийг нь шалгана уу.
sudo service logstash restart
sudo service logstash status
Эцэст нь өөрчлөлтүүд хүчин төгөлдөр болсон эсэхийг шалгахын тулд Kibana дахь Logstash-ийн Elasticsearch индексээ шинэчлэхээ мартуузай!
Grok-ийн тусламжтайгаар таны бүртгэлийн өгөгдөл бүтэцлэгдсэн байна!
Дээрх зургаас харж байгаагаар Grok нь Elasticsearch-тэй бүртгэлийн өгөгдлийг автоматаар тааруулах чадвартай. Энэ нь бүртгэлийг удирдах, мэдээллийг хурдан хайхад хялбар болгодог. Дебаг хийхийн тулд бүртгэлийн файлуудыг ухахын оронд та орчин эсвэл url гэх мэт хайж буй зүйлээрээ шүүж болно.
Grok илэрхийлэлийг туршаад үзээрэй! Хэрэв танд үүнийг хийх өөр арга байгаа эсвэл дээрх жишээнүүдэд ямар нэгэн асуудал байгаа бол доор сэтгэгдэл бичээд надад мэдэгдээрэй.
Уншсанд баярлалаа, мөн Medium дээр намайг дагаж програм хангамжийн инженерийн талаар илүү сонирхолтой нийтлэлүүдийг үзнэ үү!
Нөөц
Telegram суваг
Эх сурвалж: www.habr.com