ప్రధాన కంటెంట్‌కు వెళ్లండి
మాడ్యూల్ 8 · 4లో పాఠం 2కోర్సులో 30/32~12 min
మాడ్యూల్ పాఠాలు (2/4)

అపాచీ లాగ్ పార్సర్

అపాచీ లాగ్‌లు (కలిపి ఫార్మాట్) ఖచ్చితమైన నిర్మాణాన్ని కలిగి ఉంటాయి:

Code
127.0.0.1 - - [10/Oct/2024:13:55:36 +0000] "GET /index.html HTTP/1.1" 200 1234

పేరున్న సమూహాలు ఉన్న నమూనా ప్రతి ఫీల్డ్‌ను ఒకే షాట్‌లో సంగ్రహిస్తుంది:

Code
^(?<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+ -- వినియోగదారు IDలు (సాధారణంగా -).
  • \[[^\]]+\] -- చదరపు బ్రాకెట్లలో తేదీ.
  • "(?<metodo>\w+)\s+(?<path>\S+)\s+\S+" -- HTTP పద్ధతి, మార్గం మరియు సంస్కరణతో కోట్‌లలో అభ్యర్థన.
  • (?<status>\d+)\s+(?<size>\d+) -- స్థితి కోడ్ మరియు బైట్‌లు పంపబడ్డాయి.

సాధారణ వ్యూహం

  1. నిజమైన లైన్ నుండి ప్రారంభించండి మరియు డిలిమిటర్‌లను పిన్ చేయండి: ఖాళీలు, కోట్‌లు, బ్రాకెట్‌లు.
  2. డిలిమిటర్ల మధ్య, టోకెన్ (IP, పదం, సంఖ్య) రకంని గుర్తించండి.
  3. పేరుగల సమూహాలలో వ్రాప్ చేయండి మీరు సంగ్రహించాల్సిన వాటిని మాత్రమే.

సంక్లిష్ట లాగ్‌లను అన్వయించడం

లాగ్ పార్సింగ్‌లో, ఫీల్డ్‌లు కోట్ చేయబడిన స్ట్రింగ్‌లు లేదా బ్రాకెట్‌లను (ఉదా. వినియోగదారు-ఏజెంట్) కలిగి ఉన్నప్పుడు మినహా సాధారణంగా ఖాళీ-వేరు చేయబడతాయి. వైల్డ్‌కార్డ్ డాట్‌కు బదులుగా అక్షర తరగతులను మినహాయించడం ద్వారా బహుళ నిలువు వరుసలను తప్పుగా విలీనం చేయడాన్ని నిరోధిస్తుంది.

దీనిని ప్రయత్నించండి

వ్యాయామం#regex.m8.l2.e1
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

ప్రతి లాగ్ లైన్ ప్రారంభంలో IPv4ని పేరున్న సమూహం `ip`గా సంగ్రహించండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

^ మరియు m ఫ్లాగ్‌తో లైన్ ప్రారంభానికి యాంకర్ చేయండి మరియు IPని (?<ip>...)లో చుట్టండి.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

వ్యాయామం సమీక్షించండి

వ్యాయామం#regex.m8.l2.e2
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

HTTP పద్ధతి మరియు కోట్‌ల మధ్య అభ్యర్థన యొక్క మార్గాన్ని `metodo` మరియు `path` సమూహాలుగా సంగ్రహించండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

"తో తెరవండి, ఆపై (?<metodo>\\w+)\\s+(?<path>\\S+).

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

అదనపు సవాలు

వ్యాయామం#regex.m8.l2.e3
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

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 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది