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

ಲಾಗ್‌ಗಳನ್ನು ಹುಡುಕುವುದು ಎಂದರೆ ನಿರ್ದಿಷ್ಟ ಸರ್ವರ್‌ಗಳಿಗೆ SSH ಮಾಡುವುದು ಮತ್ತು grep ರನ್ ಮಾಡುವುದು ಎಂದರ್ಥವಾಗಿತ್ತು.

ಯಾವುದೇ ಘಟನೆ (incident) ಸಂಭವಿಸಿದಾಗ, ಯಾವ ಸರ್ವರ್‌ನಲ್ಲಿ ದೋಷವಿದೆ ಎಂಬುದು ನಿಮಗೆ ತಿಳಿಯದಿರಬಹುದು. ನೀವು ಒಂದರ ನಂತರ ಒಂದರಂತೆ ಹೋಸ್ಟ್‌ಗಳ ನಡುವೆ ಓಡಾಡುತ್ತಾ, ಕಣ್ಣಿನಿಂದಲೇ ಟೈಮ್‌ಸ್ಟ್ಯಾಂಪ್‌ಗಳನ್ನು (timestamps) ಹೊಂದಿಸಲು ಪ್ರಯತ್ನಿಸಬೇಕಾಗುತ್ತದೆ. ವೇಗ ಬೇಕಾದಾಗ ಈ ಪ್ರಕ್ರಿಯೆಯು ವಿಫಲವಾಗುತ್ತದೆ.

ನಾನು ಕೇಂದ್ರೀಕೃತ ಲಾಗಿಂಗ್‌ಗೆ (centralized logging) ಬದಲಾಗಿದ್ದೇನೆ. ಈಗ, ಪ್ರತಿಯೊಂದು ಸರ್ವರ್‌ನ ಪ್ರತಿಯೊಂದು ಲಾಗ್ ಸಾಲು ಕೂಡ ಒಂದೇ ಕಡೆ ಇರುತ್ತದೆ. ನಾನು ಪ್ರತಿಯೊಂದು ಹೋಸ್ಟ್‌ನಲ್ಲಿ Grafana Alloy ಬಳಸಿ ಲಾಗ್‌ಗಳನ್ನು Loki ಗೆ ಕಳುಹಿಸುತ್ತೇನೆ.

ಈ ಸ್ಟ್ಯಾಕ್ (stack) ಏಕೆ?

  • ELK ಭಾರವಾಗಿದೆ. Elasticsearch ಗೆ ಹೆಚ್ಚಿನ ನಿರ್ವಹಣೆ ಮತ್ತು ಹಾರ್ಡ್‌ವೇರ್ ಅಗತ್ಯವಿದೆ.
  • Loki ಪೂರ್ಣ ಪಠ್ಯದ ಬದಲಿಗೆ ಲೇಬಲ್‌ಗಳನ್ನು (labels) ಇಂಡೆಕ್ಸ್ ಮಾಡುತ್ತದೆ. ಇದು ಇದನ್ನು ಕಡಿಮೆ ವೆಚ್ಚದ ಮತ್ತು ಸುಲಭವಾಗಿ ನಡೆಸಲು ಅನುಕೂಲ ಮಾಡಿಕೊಡುತ್ತದೆ.
  • ನಿಮ್ಮ ಸರ್ವರ್‌ಗಳ ಸಂಖ್ಯೆ (fleet) ಹೆಚ್ಚಾದಂತೆ SaaS ಪರಿಕರಗಳು ಬೇಗನೆ ದುಬಾರಿಯಾಗುತ್ತವೆ.
  • Alloy ಎಂಬುದು Grafana ನ ಹೊಸ ಸ್ಟ್ಯಾಂಡರ್ಡ್ ಏಜೆಂಟ್ ಆಗಿದೆ. ಇದು ದಕ್ಷ ಮತ್ತು ವಿಶ್ವಾಸಾರ್ಹವಾಗಿದೆ.

The Setup

Alloy ಪ್ರತಿಯೊಂದು ಹೋಸ್ಟ್‌ನಲ್ಲಿರುವ ಫೈಲ್‌ಗಳನ್ನು ಓದುತ್ತದೆ. ಇದು host, environment, ಮತ್ತು service ನಂತಹ ಲೇಬಲ್‌ಗಳನ್ನು ಸೇರಿಸುತ್ತದೆ. ನಂತರ ಇವುಗಳನ್ನು Loki ಗೆ ಕಳುಹಿಸುತ್ತದೆ. ನಾನು ಒಂದು Slack ಬಾಟ್ ಅನ್ನು ಸಹ ನಿರ್ಮಿಸಿದ್ದೇನೆ. ಇದು Loki API ಅನ್ನು ಬಳಸುತ್ತದೆ, ಇದರಿಂದಾಗಿ ತಂಡವು ತಮ್ಮ ಚಾಟ್ ಚಾನಲ್‌ನಿಂದ ಹೊರಬರದೆ ಲಾಗ್‌ಗಳನ್ನು ಪಡೆಯಬಹುದು.

ನಾನು ಎದುರಿಸಿದ ನೈಜ-ಪ್ರಪಂಚದ ಸವಾಲುಗಳು:

  • ಅನುಮತಿಗಳು (Permissions): Alloy ತನ್ನದೇ ಆದ ಬಳಕೆದಾರರಾಗಿ (user) ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ. ನಿಮ್ಮ ಆ್ಯಪ್ ಲಾಗ್‌ಗಳು ನಿರ್ಬಂಧಿತವಾಗಿದ್ದರೆ, Alloy ಯಾವುದೇ ಸೂಚನೆ ನೀಡದೆ ವಿಫಲವಾಗುತ್ತದೆ. ನೀವು alloy ಬಳಕೆದಾರರನ್ನು ನಿಮ್ಮ ಆ್ಯಪ್ ಗ್ರೂಪ್‌ಗಳಿಗೆ ಸೇರಿಸಬೇಕು.
  • ಮಿಶ್ರಿತ OS ಫ್ಲೀಟ್‌ಗಳು (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