𝗖𝗲𝗻𝘁𝗿𝗮𝗹𝗶𝘇𝗲𝗱 𝗟𝗼𝗴𝗴𝗶𝗻𝗴 𝗪𝗶𝘁𝗵 𝗚𝗿𝗮𝗳𝗮𝗻𝗮 𝗔𝗹𝗹𝗼𝘆 𝗮𝗻𝗱 𝗟𝗼𝗸𝗶
പണ്ട് ലോഗുകൾ കണ്ടെത്തുക എന്നാൽ പ്രത്യേക സെർവറുകളിലേക്ക് SSH ഉപയോഗിച്ച് കയറി grep റൺ ചെയ്യുക എന്നതായിരുന്നു.
ഒരു ഇൻസിഡന്റ് (incident) നടക്കുമ്പോൾ, ഏത് സെർവറിലാണ് എറർ ഉള്ളതെന്ന് പലപ്പോഴും നിങ്ങൾക്ക് അറിയില്ലായിരിക്കും. നിങ്ങൾ ഓരോ ഹോസ്റ്റുകളിലും മാറി മാറി കയറുകയും ടൈംസ്റ്റാമ്പുകൾ (timestamps) കണ്ണ് കൊണ്ട് നോക്കി ഒത്തുനോക്കാൻ ശ്രമിക്കുകയും ചെയ്യേണ്ടി വരും. വേഗത ആവശ്യമായ സാഹചര്യങ്ങളിൽ ഈ രീതി പരാജയപ്പെടും.
ഞാൻ സെൻട്രലൈസ്ഡ് ലോഗിംഗിലേക്ക് മാറി. ഇപ്പോൾ, ഓരോ സെർവറിലെയും എല്ലാ ലോഗ് ലൈനുകളും ഒരിടത്ത് ലഭ്യമാണ്. ഓരോ ഹോസ്റ്റിലും Grafana Alloy ഉപയോഗിച്ച് ലോഗുകൾ Loki-ലേക്ക് അയക്കുന്നു.
എന്തുകൊണ്ടാണ് ഈ സ്റ്റാക്ക് (stack) തിരഞ്ഞെടുക്കുന്നത്?
- ELK ഭാരമേറിയതാണ്. Elasticsearch-ന് അമിതമായ മെയിന്റനൻസും ഹാർഡ്വെയറും ആവശ്യമാണ്.
- Loki മുഴുവൻ ടെക്സ്റ്റിന് പകരം ലേബലുകൾ (labels) ഇൻഡക്സ് ചെയ്യുന്നു. ഇത് ഇതിനെ കുറഞ്ഞ ചിലവിലും എളുപ്പത്തിലും പ്രവർത്തിപ്പിക്കാൻ സഹായിക്കുന്നു.
- നിങ്ങളുടെ സെർവർ ശൃംഖല (fleet) വളരുന്നതിനനുസരിച്ച് SaaS ടൂളുകൾ പെട്ടെന്ന് ചിലവേറിയതാകുന്നു.
- Grafana-യുടെ പുതിയ സ്റ്റാൻഡേർഡ് ഏജന്റാണ് Alloy. ഇത് കാര്യക്ഷമവും വിശ്വസനീയവുമാണ്.
The Setup
ഓരോ ഹോസ്റ്റിലെയും ഫയലുകൾ Alloy വായിക്കുന്നു. അത് host, environment, service എന്നിങ്ങനെയുള്ള ലേബലുകൾ ചേർക്കുന്നു. തുടർന്ന് ഇവ Loki-ലേക്ക് പുഷ് ചെയ്യുന്നു. ഞാൻ ഒരു Slack ബോട്ട് കൂടി നിർമ്മിച്ചു. ഇത് Loki API ഉപയോഗിക്കുന്നതിനാൽ ടീമിന് അവരുടെ ചാറ്റ് ചാനൽ വിടാതെ തന്നെ ലോഗുകൾ എടുക്കാൻ സാധിക്കും.
ഞാൻ നേരിട്ട യഥാർത്ഥ ലോക വെല്ലുവിളികൾ:
- പെർമിഷനുകൾ (Permissions): Alloy സ്വന്തം യൂസറായിട്ടാണ് പ്രവർത്തിക്കുന്നത്. നിങ്ങളുടെ ആപ്പ് ലോഗുകൾ നിയന്ത്രിക്കപ്പെട്ടതാണെങ്കിൽ (restricted), Alloy പരാജയപ്പെടും. നിങ്ങൾ alloy യൂസറെ നിങ്ങളുടെ ആപ്പ് ഗ്രൂപ്പുകളിൽ ചേർക്കണം.
- മിക്സഡ് OS ഫ്ലീറ്റുകൾ (Mixed OS fleets): നിങ്ങളുടെ പക്കൽ Debian, Ubuntu, RHEL എന്നിവയുള്ള സെർവറുകൾ ഉണ്ടാകാം. ഓരോന്നിനും ശരിയായ പാക്കേജ് മാനേജറുകൾ ഉപയോഗിക്കേണ്ടതുണ്ട്.
- ലെഗസി ഏജന്റുകൾ (Legacy agents): പഴയ ലോഗ് ഷിപ്പറുകൾ ഡബിൾ ഷിപ്പിംഗിന് കാരണമായേക്കാം. റോളൗട്ട് സമയത്ത് അവ കണ്ടെത്തി നീക്കം ചെയ്യേണ്ടതുണ്ട്.
- മൾട്ടിലൈൻ ലോഗുകൾ (Multiline logs): Java സ്റ്റാക്ക് ട്രാസുകൾ പല വരികളിലായിരിക്കും ഉണ്ടാകുക. ഒരു മൾട്ടിലൈൻ regex ഇല്ലെങ്കിൽ, ഒരു ഒറ്റ എറർ നാൽപ്പത് ഉപയോഗശൂന്യമായ എൻട്രികളായി മാറുന്നു.
The Golden Rule of Labels
ലേബലുകളിൽ ഹൈ-കാർഡിനാലിറ്റി (high-cardinality) ഡാറ്റ ഉപയോഗിക്കരുത്. റിക്വസ്റ്റ് ഐഡികളോ (request IDs) യൂസർ ഐഡികളോ (user IDs) ഒരിക്കലും ലേബലുകളായി ഉപയോഗിക്കരുത്. ഇത് നിങ്ങളുടെ ഇൻഡക്സിനെ തകരാറിലാക്കും. സർവീസ് നെയിം അല്ലെങ്കിൽ എൻവയോൺമെന്റ് പോലുള്ള കാര്യങ്ങൾക്കായി ലേബലുകൾ ഉപയോഗിക്കുക. മറ്റെല്ലാത്തിനും ഫിൽട്ടറുകൾ ഉപയോഗിക്കുക.
The Result
സെൻട്രലൈസ്ഡ് ലോഗിംഗ് ലോഗുകളെ മെട്രിക്സുകളാക്കി മാറ്റുന്നു. ഒരു പ്രശ്നം ശ്രദ്ധയിൽപ്പെടാൻ ഒരാൾക്കായി കാത്തിരിക്കുന്നതിന് പകരം എറർ റേറ്റുകളിൽ (error rates) നിങ്ങൾക്ക് അലേർട്ടുകൾ നൽകാം. ഒരു ഇൻസിഡന്റ് ഉണ്ടാകുമ്പോൾ, ഒരു Slack കമാൻഡ് വഴി ഉത്തരം കണ്ടെത്താം.
Optional learning community: https://t.me/GyaanSetuAi
