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

ਪਹਿਲਾਂ ਲੌਗਸ (logs) ਲੱਭਣ ਦਾ ਮਤਲਬ ਹੁੰਦਾ ਸੀ ਖਾਸ ਸਰਵਰਾਂ ਵਿੱਚ SSH ਕਰਨਾ ਅਤੇ grep ਚਲਾਉਣਾ।

ਕਿਸੇ ਘਟਨਾ (incident) ਦੌਰਾਨ, ਤੁਹਾਨੂੰ ਅਕਸਰ ਪਤਾ ਨਹੀਂ ਹੁੰਦਾ ਕਿ ਕਿਹੜੇ ਬਾਕਸ (box) ਵਿੱਚ ਗਲਤੀ ਹੈ। ਤੁਸੀਂ ਵੱਖ-ਵੱਖ ਹੋਸਟਸ (hosts) ਦੇ ਵਿਚਕਾਰ ਭਟਕਦੇ ਰਹਿੰਦੇ ਹੋ ਅਤੇ ਅੱਖਾਂ ਨਾਲ ਟਾਈਮਸਟੈਂਪ (timestamps) ਮਿਲਾਉਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦੇ ਹੋ। ਜਦੋਂ ਤੁਹਾਨੂੰ ਤੇਜ਼ੀ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ, ਤਾਂ ਇਹ ਪ੍ਰਕਿਰਿਆ ਫੇਲ੍ਹ ਹੋ ਜਾਂਦੀ ਹੈ।

ਮੈਂ ਕੇਂਦਰੀਕ੍ਰਿਤ ਲੌਗਿੰਗ (centralized logging) ਵੱਲ ਵਧ ਗਿਆ ਹਾਂ। ਹੁਣ, ਹਰ ਸਰਵਰ ਦੀ ਹਰ ਲੌਗ ਲਾਈਨ ਇੱਕੋ ਜਗ੍ਹਾ 'ਤੇ ਮੌਜੂਦ ਹੁੰਦੀ ਹੈ। ਮੈਂ ਲੌਗਸ ਨੂੰ Loki ਤੱਕ ਪਹੁੰਚਾਉਣ ਲਈ ਹਰੇਕ ਹੋਸਟ 'ਤੇ Grafana Alloy ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹਾਂ।

ਇਹ ਸਟੈਕ (stack) ਕਿਉਂ?

  • ELK ਭਾਰੀ ਹੈ। Elasticsearch ਲਈ ਬਹੁਤ ਜ਼ਿਆਦਾ ਮੇਨਟੇਨੈਂਸ ਅਤੇ ਹਾਰਡਵੇਅਰ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ।
  • Loki ਪੂਰੇ ਟੈਕਸਟ ਦੀ ਬਜਾਏ ਲੇਬਲਸ (labels) ਨੂੰ ਇੰਡੈਕਸ ਕਰਦਾ ਹੈ। ਇਸ ਨਾਲ ਇਸਨੂੰ ਚਲਾਉਣਾ ਸਸਤਾ ਅਤੇ ਆਸਾਨ ਹੋ ਜਾਂਦਾ ਹੈ।
  • ਜਿਵੇਂ-ਜਿਵੇਂ ਤੁਹਾਡਾ ਫਲੀਟ (fleet) ਵਧਦਾ ਹੈ, SaaS ਟੂਲਜ਼ ਜਲਦੀ ਮਹਿੰਗੇ ਹੋ ਜਾਂਦੇ ਹਨ।
  • Alloy, Grafana ਦਾ ਨਵਾਂ ਸਟੈਂਡਰਡ ਏਜੰਟ ਹੈ। ਇਹ ਕੁਸ਼ਲ ਅਤੇ ਭਰੋਸੇਮੰਦ ਹੈ।

The Setup

Alloy ਹਰੇਕ ਹੋਸਟ 'ਤੇ ਫਾਈਲਾਂ ਪੜ੍ਹਦਾ ਹੈ। ਇਹ host, environment, ਅਤੇ service ਵਰਗੇ ਲੇਬਲਸ ਜੋੜਦਾ ਹੈ। ਫਿਰ ਇਹ ਇਹਨਾਂ ਨੂੰ Loki ਵਿੱਚ ਪੁਸ਼ (push) ਕਰਦਾ ਹੈ। ਮੈਂ ਇੱਕ Slack bot ਵੀ ਬਣਾਇਆ ਹੈ। ਇਹ Loki API ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ ਤਾਂ ਜੋ ਟੀਮ ਆਪਣੇ ਚੈਟ ਚੈਨਲ ਨੂੰ ਛੱਡੇ ਬਿਨਾਂ ਲੌਗਸ ਕੱਢ ਸਕੇ।

ਮੇਰੇ ਸਾਹਮਣੇ ਆਈਆਂ ਅਸਲ ਦੁਨੀਆ ਦੀਆਂ ਚੁਣੌਤੀਆਂ:

  • Permissions: Alloy ਆਪਣੇ ਖਾਸ ਯੂਜ਼ਰ ਵਜੋਂ ਚੱਲਦਾ ਹੈ। ਜੇਕਰ ਤੁਹਾਡੇ ਐਪ ਲੌਗਸ ਸੀਮਤ (restricted) ਹਨ, ਤਾਂ Alloy ਚੁੱਪਚਾਪ ਫੇਲ੍ਹ ਹੋ ਜਾਂਦਾ ਹੈ। ਤੁਹਾਨੂੰ alloy ਯੂਜ਼ਰ ਨੂੰ ਆਪਣੇ ਐਪ ਗਰੁੱਪਾਂ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰਨਾ ਚਾਹੀਦਾ ਹੈ।
  • Mixed OS fleets: ਤੁਹਾਡੇ ਕੋਲ Debian, Ubuntu, ਅਤੇ RHEL ਬਾਕਸ ਹੋਣਗੇ। ਤੁਹਾਨੂੰ ਹਰੇਕ ਲਈ ਸਹੀ ਪੈਕੇਜ ਮੈਨੇਜਰਾਂ ਦੀ ਵਰਤੋਂ ਕਰਨੀ ਚਾਹੀਦੀ ਹੈ।
  • Legacy agents: ਪੁਰਾਣੇ ਲੌਗ ਸ਼ਿਪਰ ਦੋਹਰੀ ਸ਼ਿਪਿੰਗ (double-shipping) ਦਾ ਕਾਰਨ ਬਣ ਸਕਦੇ ਹਨ। ਤੁਹਾਨੂੰ ਰੋਲਆਊਟ ਦੌਰਾਨ ਉਹਨਾਂ ਨੂੰ ਲੱਭ ਕੇ ਹਟਾਉਣਾ ਚਾਹੀਦਾ ਹੈ।
  • Multiline logs: Java stack traces ਕਈ ਲਾਈਨਾਂ ਤੱਕ ਫੈਲੇ ਹੁੰਦੇ ਹਨ। ਮਲਟੀਲਾਈਨ regex ਤੋਂ ਬਿਨਾਂ, ਇੱਕ ਸਿੰਗਲ ਗਲਤੀ ਚਾਲੀ ਵੱਖ-ਵੱਖ, ਬੇਕਾਰ ਐਂਟਰੀਆਂ ਬਣ ਜਾਂਦੀ ਹੈ।

The Golden Rule of Labels

ਲੇਬਲਸ ਵਿੱਚ high-cardinality ਡੇਟਾ ਨਾ ਪਾਓ। ਕਦੇ ਵੀ request IDs ਜਾਂ user IDs ਨੂੰ ਲੇਬਲ ਵਜੋਂ ਵਰਤੋ ਨਾ। ਇਹ ਤੁਹਾਡੇ ਇੰਡੈਕਸ ਨੂੰ ਖਰਾਬ ਕਰ ਦੇਵੇਗਾ। ਲੇਬਲਸ ਦੀ ਵਰਤੋਂ service name ਜਾਂ environment ਵਰਗੀਆਂ ਚੀਜ਼ਾਂ ਲਈ ਕਰੋ। ਬਾਕੀ ਸਭ ਕੁਝ ਲਈ ਫਿਲਟਰਾਂ ਦੀ ਵਰਤੋਂ ਕਰੋ।

The Result

ਕੇਂਦਰੀਕ੍ਰਿਤ ਲੌਗਿੰਗ ਲੌਗਸ ਨੂੰ ਮੈਟ੍ਰਿਕਸ (metrics) ਵਿੱਚ ਬਦਲ ਦਿੰਦੀ ਹੈ। ਤੁਸੀਂ ਕਿਸੇ ਇਨਸਾਨ ਦੁਆਰਾ ਸਮੱਸਿਆ ਨੂੰ ਨੋਟ ਕਰਨ ਦੀ ਉਡੀਕ ਕਰਨ ਦੀ ਬਜਾਏ ਗਲਤੀਆਂ ਦੀ ਦਰ (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