𝗖𝗲𝗻𝘁𝗿𝗮𝗹𝗶𝘇𝗲𝗱 𝗟𝗼𝗴𝗴𝗶𝗻𝗴 𝗪𝗶𝘁𝗵 𝗚𝗿𝗮𝗳𝗮𝗻𝗮 𝗔𝗹𝗹𝗼𝘆 𝗮𝗻𝗱 𝗟𝗼𝗸𝗶

లాగ్స్ (logs) కనుగొనాలంటే గతంలో నిర్దిష్ట సర్వర్‌లకు SSH చేయాల్సి వచ్చేది మరియు grep రన్ చేయాల్సి వచ్చేది.

ఏదైనా ఇన్సిడెంట్ (incident) జరిగినప్పుడు, ఏ సర్వర్‌లో ఎర్రర్ ఉందో మీకు తరచుగా తెలియకపోవచ్చు. దీనివల్ల మీరు ఒక హోస్ట్ నుండి మరొక హోస్ట్‌కు మారుతూ, కంటితో టైమ్‌స్టాంప్‌లను (timestamps) సరిపోల్చడానికి ప్రయత్నించాల్సి వస్తుంది. వేగంగా స్పందించాల్సిన అవసరం ఉన్నప్పుడు ఈ ప్రక్రియ విఫలమవుతుంది.

నేను సెంట్రలైజ్డ్ లాగింగ్‌కు మారాను. ఇప్పుడు, ప్రతి సర్వర్ నుండి వచ్చే ప్రతి లాగ్ లైన్ ఒకే చోట ఉంటుంది. లాగ్స్‌ను Lokiకి పంపడానికి నేను ప్రతి హోస్ట్‌పై Grafana Alloyని ఉపయోగిస్తున్నాను.

ఈ స్టాక్ (stack) ఎందుకు?

  • ELK బరువుగా ఉంటుంది. Elasticsearch కి చాలా మెయింటెనెన్స్ మరియు హార్డ్‌వేర్ అవసరం.
  • Loki పూర్తి టెక్స్ట్‌కు బదులుగా లేబుల్స్‌ను (labels) ఇండెక్స్ చేస్తుంది. దీనివల్ల ఇది తక్కువ ఖర్చుతో మరియు సులభంగా నడుస్తుంది.
  • మీ సర్వర్ల సంఖ్య (fleet) పెరిగే కొద్దీ SaaS టూల్స్ ఖరీదైనవిగా మారుతాయి.
  • Alloy అనేది Grafana నుండి వచ్చిన కొత్త స్టాండర్డ్ ఏజెంట్. ఇది సమర్థవంతమైనది మరియు నమ్మదగినది.

సెటప్ (The Setup)

Alloy ప్రతి హోస్ట్‌లోని ఫైళ్లను చదువుతుంది. ఇది host, environment, మరియు service వంటి లేబుల్స్‌ను జోడిస్తుంది. ఆ తర్వాత వీటిని Lokiకి పంపిస్తుంది. నేను ఒక Slack బాట్‌ను కూడా తయారుచేశాను. ఇది Loki APIని ఉపయోగిస్తుంది, తద్వారా టీమ్ తమ చాట్ ఛానెల్‌ని వదిలి వెళ్లకుండానే లాగ్స్‌ను పొందవచ్చు.

నేను ఎదుర్కొన్న వాస్తవ ప్రపంచ సవాళ్లు:

  • Permissions: Alloy దాని స్వంత యూజర్‌గా రన్ అవుతుంది. మీ యాప్ లాగ్స్‌కు పరిమితులు (restrictions) ఉంటే, Alloy ఎటువంటి ఎర్రర్ చూపించకుండా విఫలమవుతుంది. మీరు alloy యూజర్‌ను మీ యాప్ గ్రూపులకు జోడించాలి.
  • Mixed OS fleets: మీ వద్ద Debian, Ubuntu, మరియు RHEL బాక్స్‌లు ఉండవచ్చు. ప్రతి దాని కోసం సరైన ప్యాకేజీ మేనేజర్లను ఉపయోగించాలి.
  • Legacy agents: పాత లాగ్ షిప్పర్లు డబుల్-షిప్పింగ్‌కు కారణం కావచ్చు. రోల్‌అవుట్ సమయంలో వాటిని గుర్తించి తొలగించాలి.
  • Multiline logs: Java stack traces అనేక లైన్లలో విస్తరించి ఉంటాయి. మల్టీలైన్ regex లేకపోతే, ఒకే ఎర్రర్ నలభై వేర్వేరు, ఉపయోగం లేని ఎంట్రీలుగా మారుతుంది.

లేబుల్స్ యొక్క గోల్డెన్ రూల్ (The Golden Rule of Labels)

లేబుల్స్‌లో హై-కార్డినాలిటీ (high-cardinality) డేటాను ఉంచకండి. రిక్వెస్ట్ IDలు లేదా యూజర్ IDలను ఎప్పుడూ లేబుల్స్‌గా ఉపయోగించకండి. ఇది మీ ఇండెక్స్‌ను దెబ్బతీస్తుంది. సర్వీస్ పేరు లేదా ఎన్విరాన్మెంట్ వంటి వాటి కోసం లేబుల్స్‌ను ఉపయోగించండి. మిగిలిన వాటి కోసం ఫిల్టర్లను ఉపయోగించండి.

ఫలితం (The Result)

సెంట్రలైజ్డ్ లాగింగ్ లాగ్స్‌ను మెట్రిక్స్‌గా మారుస్తుంది. ఒక సమస్యను మనిషి గమనించే వరకు వేచి ఉండకుండా, మీరు ఎర్రర్ రేట్ల (error rates) ఆధారంగా అలర్ట్‌లను సెట్ చేసుకోవచ్చు. ఏదైనా ఇన్సిడెంట్ జరిగినప్పుడు, కేవలం ఒక Slack కమాండ్‌తో సమాధానం పొందవచ్చు.

మూలం (Source): https://dev.to/azeemsidd3/centralized-logging-across-a-mixed-os-server-fleet-with-grafana-alloy-and-loki-51c6

ఐచ్ఛిక అభ్యాస సమూహం (Optional learning community): https://t.me/GyaanSetuAi