मॉड्यूल पाठ (2/4)
अपाचे लॉग पार्सर
अपाचे लॉग (संयुक्त प्रारूप) की एक सटीक संरचना होती है:
127.0.0.1 - - [10/Oct/2024:13:55:36 +0000] "GET /index.html HTTP/1.1" 200 1234नामित समूहों वाला एक पैटर्न प्रत्येक फ़ील्ड को एक बार में निकालता है:
^(?<ip>\d+\.\d+\.\d+\.\d+)\s+\S+\s+\S+\s+\[[^\]]+\]\s+"(?<metodo>\w+)\s+(?<path>\S+)\s+\S+"\s+(?<status>\d+)\s+(?<size>\d+)यह राक्षसी दिखता है, लेकिन यह सरल पैटर्न का संयोजन है:
(?<ip>\d+\.\d+\.\d+\.\d+)-- स्रोत IPv4.\s+\S+\s+\S+-- उपयोगकर्ता आईडी (आमतौर पर-)।\[[^\]]+\]-- वर्गाकार कोष्ठक में तारीख।"(?<metodo>\w+)\s+(?<path>\S+)\s+\S+"-- HTTP विधि, पथ और संस्करण के साथ उद्धरण चिह्नों में अनुरोध।(?<status>\d+)\s+(?<size>\d+)-- स्थिति कोड और बाइट्स भेजे गए।
सामान्य रणनीति
- वास्तविक लाइन से शुरू करें और डिलीमीटर को पिन करें: रिक्त स्थान, उद्धरण, कोष्ठक।
- सीमांकक के बीच, टोकन के प्रकार (आईपी, शब्द, संख्या) की पहचान करें।
- **नामित समूहों में केवल वही लपेटें जो आपको निकालना है।
जटिल लॉग को पार्स करना
लॉग पार्सिंग में, फ़ील्ड को आमतौर पर स्थान-पृथक किया जाता है, सिवाय इसके कि जब उनमें उद्धृत स्ट्रिंग या ब्रैकेट होते हैं (उदाहरण के लिए उपयोगकर्ता-एजेंट)। वाइल्डकार्ड डॉट के बजाय एक्सक्लूडिंग कैरेक्टर क्लासेस का उपयोग करने से कई कॉलमों को गलत तरीके से मर्ज होने से रोका जा सकता है।
इसे अजमाएं
प्रत्येक लॉग लाइन की शुरुआत में IPv4 को नामित समूह `ip` के रूप में निकालें।
संकेत दिखाएँ
लाइन की शुरुआत में ^ और एम ध्वज के साथ एंकर करें, और आईपी को (?<ip>...) में लपेटें।
3 प्रयासों के बाद समाधान उपलब्ध है
व्यायाम की समीक्षा करें
उद्धरणों के बीच HTTP विधि और अनुरोध के पथ को समूह `metodo` और `path` के रूप में निकालें।
संकेत दिखाएँ
" से खोलें, फिर (?<metodo>\\w+)\\s+(?<path>\\S+).
3 प्रयासों के बाद समाधान उपलब्ध है
अतिरिक्त चुनौती
Extract only the date and time part enclosed in brackets in logs, e.g. `10/Oct/2024:13:55:36 +0000`, as a named group `timestamp`.
संकेत दिखाएँ
Use \[(?<timestamp>[^\]]+)\] to prevent the engine from matching past the closing bracket.
3 प्रयासों के बाद समाधान उपलब्ध है