ग्रोक के साथ असंरचित डेटा की संरचना करना
यदि आप इलास्टिक (ईएलके) स्टैक का उपयोग कर रहे हैं और कस्टम लॉगस्टैश लॉग को इलास्टिक्स खोज में मैप करने में रुचि रखते हैं, तो यह पोस्ट आपके लिए है।
ELK स्टैक तीन ओपन सोर्स प्रोजेक्ट्स का संक्षिप्त रूप है: Elasticsearch, Logstash और Kibana। वे मिलकर एक लॉग प्रबंधन प्लेटफ़ॉर्म बनाते हैं।
- Elasticsearch एक खोज और विश्लेषणात्मक प्रणाली है.
- Logstash एक सर्वर-साइड डेटा प्रोसेसिंग पाइपलाइन है जो एक साथ कई स्रोतों से डेटा प्राप्त करती है, इसे रूपांतरित करती है, और फिर इसे इलास्टिक्स खोज जैसे "स्टैश" में भेजती है।
- Kibana उपयोगकर्ताओं को Elasticsearch में चार्ट और ग्राफ़ का उपयोग करके डेटा को विज़ुअलाइज़ करने की अनुमति देता है।
बीट्स बाद में आया और यह एक हल्का डेटा शिपर है। बीट्स की शुरूआत ने एल्क स्टैक को इलास्टिक स्टैक में बदल दिया, लेकिन बात यह नहीं है।
यह लेख ग्रोक के बारे में है, जो लॉगस्टैश में एक सुविधा है जो आपके लॉग को स्टैश में भेजे जाने से पहले बदल सकती है। हमारे उद्देश्यों के लिए, मैं केवल लॉगस्टैश से इलास्टिक्स खोज में डेटा संसाधित करने के बारे में बात करूंगा।
ग्रोक लॉगस्टैश के अंदर एक फ़िल्टर है जिसका उपयोग असंरचित डेटा को संरचित और क्वेरी योग्य चीज़ में पार्स करने के लिए किया जाता है। यह रेगुलर एक्सप्रेशन (रेगेक्स) के शीर्ष पर बैठता है और लॉग फ़ाइलों में स्ट्रिंग्स से मिलान करने के लिए टेक्स्ट पैटर्न का उपयोग करता है।
जैसा कि हम निम्नलिखित अनुभागों में देखेंगे, जब कुशल लॉग प्रबंधन की बात आती है तो ग्रोक का उपयोग एक बड़ा अंतर बनाता है।
ग्रोक के बिना आपका लॉग डेटा असंरचित है
ग्रोक के बिना, जब लॉग को लॉगस्टैश से इलास्टिक्स खोज में भेजा जाता है और किबाना में प्रस्तुत किया जाता है, तो वे केवल संदेश मान में दिखाई देते हैं।
इस स्थिति में सार्थक जानकारी को क्वेरी करना कठिन है क्योंकि सभी लॉग डेटा एक ही कुंजी में संग्रहीत होता है। यदि लॉग संदेश बेहतर ढंग से व्यवस्थित होते तो बेहतर होता।
लॉग से असंरचित डेटा
localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0
यदि आप कच्चे डेटा को बारीकी से देखते हैं, तो आप देखेंगे कि इसमें वास्तव में अलग-अलग हिस्से होते हैं, प्रत्येक को एक स्थान से अलग किया जाता है।
अधिक अनुभवी डेवलपर्स के लिए, आप शायद अनुमान लगा सकते हैं कि प्रत्येक भाग का क्या अर्थ है और एपीआई कॉल से वह लॉग संदेश क्या है। प्रत्येक आइटम की प्रस्तुति नीचे दी गई है।
हमारे डेटा का संरचित दृश्य
- लोकलहोस्ट == वातावरण
- प्राप्त करें == विधि
- /v2/applink/5c2f4bb3e9fda1234edc64d == url
- 400 == प्रतिक्रिया_स्थिति
- 46ms == प्रतिक्रिया_समय
- 5bc6e716b5d6cb35fc9687c0 == user_id
जैसा कि हम संरचित डेटा में देखते हैं, असंरचित लॉग के लिए एक आदेश है। अगला चरण कच्चे डेटा की सॉफ़्टवेयर प्रोसेसिंग है। यहीं पर ग्रोक चमकता है।
ग्रोक टेम्पलेट्स
अंतर्निहित ग्रोक टेम्पलेट्स
लॉगस्टैश असंरचित डेटा को संरचित करने के लिए 100 से अधिक अंतर्निहित टेम्पलेट्स के साथ आता है। जब भी संभव हो आपको Apache, Linux, haproxy, aws इत्यादि जैसे सामान्य syslogs के लिए निश्चित रूप से इसका लाभ उठाना चाहिए।
हालाँकि, क्या होता है जब आपके पास उपरोक्त उदाहरण की तरह कस्टम लॉग होते हैं? आपको अपना खुद का ग्रोक टेम्पलेट बनाना होगा।
कस्टम ग्रोक टेम्पलेट्स
आपको अपना स्वयं का ग्रोक टेम्पलेट बनाने का प्रयास करना होगा। मैंनें इस्तेमाल किया
ध्यान दें कि ग्रोक टेम्पलेट सिंटैक्स इस प्रकार है: %{SYNTAX:SEMANTIC}
पहली चीज़ जो मैंने करने की कोशिश की वह टैब पर जाना था खोजे ग्रोक डिबगर में। मैंने सोचा कि यह अच्छा होगा यदि यह उपकरण स्वचालित रूप से एक ग्रोक पैटर्न उत्पन्न कर सके, लेकिन यह बहुत उपयोगी नहीं था क्योंकि इसमें केवल दो मिलान मिले।
इस खोज का उपयोग करते हुए, मैंने इलास्टिक जीथब पेज पर पाए गए सिंटैक्स का उपयोग करके ग्रोक डिबगर में अपना स्वयं का टेम्पलेट बनाना शुरू किया।
विभिन्न सिंटैक्स के साथ खेलने के बाद, मैं अंततः लॉग डेटा को अपनी इच्छानुसार संरचित करने में सक्षम हो गया।
ग्रोक डिबगर लिंक
मूललेख:
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"
]
]
}
हाथ में ग्रोक टेम्पलेट और मैप किए गए डेटा के साथ, अंतिम चरण इसे लॉगस्टैश में जोड़ना है।
Logstash.conf कॉन्फ़िगरेशन फ़ाइल को अद्यतन कर रहा है
उस सर्वर पर जहां आपने ईएलके स्टैक स्थापित किया है, लॉगस्टैश कॉन्फ़िगरेशन पर जाएं:
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" ]
}
}
अपने परिवर्तनों को सहेजने के बाद, लॉगस्टैश को पुनरारंभ करें और यह सुनिश्चित करने के लिए इसकी स्थिति जांचें कि यह अभी भी काम कर रहा है।
sudo service logstash restart
sudo service logstash status
अंततः, यह सुनिश्चित करने के लिए कि परिवर्तन प्रभावी हो गए हैं, किबाना में लॉगस्टैश के लिए अपने इलास्टिक्स खोज सूचकांक को अपडेट करना सुनिश्चित करें!
ग्रोक के साथ, आपका लॉग डेटा संरचित है!
जैसा कि हम ऊपर की छवि में देख सकते हैं, ग्रोक इलास्टिक्स खोज के साथ लॉग डेटा का स्वचालित रूप से मिलान करने में सक्षम है। इससे लॉग प्रबंधित करना और जानकारी को त्वरित रूप से क्वेरी करना आसान हो जाता है। डीबग करने के लिए लॉग फ़ाइलों को खंगालने के बजाय, आप बस जो खोज रहे हैं उसके आधार पर फ़िल्टर कर सकते हैं, जैसे कोई वातावरण या यूआरएल।
ग्रोक अभिव्यक्तियाँ आज़माएँ! यदि आपके पास ऐसा करने का कोई अन्य तरीका है या ऊपर दिए गए उदाहरणों में कोई समस्या है, तो मुझे बताने के लिए बस नीचे एक टिप्पणी लिखें।
पढ़ने के लिए धन्यवाद—और अधिक दिलचस्प सॉफ्टवेयर इंजीनियरिंग लेखों के लिए कृपया मुझे यहां मीडियम पर फॉलो करें!
Ресурсы
पुनश्च
टेलीग्राम चैनल द्वारा
स्रोत: www.habr.com