ग्राफाना लोकी एक लॉग एकत्रीकरण प्रणाली है जो अनुप्रयोगों और बुनियादी ढांचे से लॉग को संग्रहीत और क्वेरी करती है। हालांकि आम बात है, लॉग सिस्टम संचालन के बारे में महत्वपूर्ण जानकारी रखते हैं और डिबगिंग और समस्या निवारण जानकारी का एक मूल्यवान स्रोत हैं। लॉग का उपयोग अक्सर दुर्भावनापूर्ण गतिविधि को पहचानने और ट्रैक करने के लिए, या बस व्यावसायिक खुफिया जानकारी प्रदान करने के लिए उपयोगकर्ता गतिविधि को ट्रैक करने के लिए किया जाता है।
पिछले ब्लॉग पोस्ट, ग्राफाना लोकी और मिनिओ के साथ लॉगिंग में, हमने लोकी के घटकों और उनकी समग्र वास्तुकला का एक सिंहावलोकन प्रदान किया था। लॉग के लिए लोकी को मेट्रिक्स के लिए प्रोमेथियस के समान समझें। लोकी हल्का और लागत प्रभावी है क्योंकि यह केवल मेटाडेटा को अनुक्रमित और क्वेरी करता है। प्रोमटेल एजेंट लोकी को भेजने से पहले लॉग एकत्र करते हैं, लेबल करते हैं और उन्हें रूपांतरित करते हैं। फिर लोकी मेटाडेटा को अनुक्रमित करता है और प्रविष्टियों को स्ट्रीम में समूहित करता है जिन्हें लेबल के साथ अनुक्रमित किया जाता है। फिर ग्राफाना का उपयोग लोकी से लॉग जानकारी को विज़ुअलाइज़ करने और क्वेरी करने के लिए किया जाता है। संस्करण 2.0 के अनुसार, लोकी डेटा को मिनिओ जैसे एकल ऑब्जेक्ट स्टोरेज बैकएंड में संग्रहीत करता है। जबकि पिछले ब्लॉग पोस्ट में मिनिओ को लोकी डेटा को सहेजने के फायदे बताए गए थे, यह ब्लॉग पोस्ट एक ट्यूटोरियल है जो आपको सिखाता है कि कैसे।
सबसे पहले, हम आपको सिखाएंगे कि डॉकर कंटेनरों का उपयोग करके लोकी और मिनिओ को कैसे तैनात किया जाए, इसके बाद स्रोत से इंस्टॉल करने के निर्देश दिए जाएंगे।
हमने डॉकर कंटेनर, कुछ स्क्रिप्टिंग और एक गिट रिपॉजिटरी का उपयोग करके एक डेमो बनाया। हमने ग्राफाना लोकी रिपॉजिटरी के साथ शुरुआत की, और मिनिओ के लिए कॉन्फ़िगरेशन yaml और कंटेनर और लोकी डेटा के लिए मिनिओ बाल्टी बनाने और उजागर करने के लिए एक स्क्रिप्ट जोड़ी। निम्नलिखित चरणों के परिणामस्वरूप ये पाँच छवियाँ डॉकर कंटेनरों में स्थानीय रूप से चलेंगी:
पहले तीन स्पष्ट रूप से लोकी, प्रोमटेल और ग्राफाना के लिए आवश्यक हैं। वे लोकी रिपॉजिटरी के तहत ग्राफाना से पहले से ही उपलब्ध थे (एक लघु वीडियो व्याख्याता है)। मिनिओ लोकी के लिए ऑब्जेक्ट स्टोरेज है, और अंतिम कंटेनर एक स्क्रिप्ट चलाएगा जो लोकी लक्ष्य के रूप में बकेट बनाता है।
लोकी को loki.yaml
का उपयोग करके लॉग डेटा को MiniIO में सहेजने के लिए कॉन्फ़िगर किया गया है। विशेष महत्व का अनुभाग है:
storage_config: boltdb_shipper: active_index_directory: /loki/index cache_location: /loki/index_cache resync_interval: 5s shared_store: s3 aws: s3: http://minioadmin:minioadmin@minio.:9000/loki s3forcepathstyle: true
MiniIO के लिए S3 पते में बिंदु नोट करें। इसका उपयोग इसलिए किया जाता है क्योंकि AWS क्षेत्र निर्दिष्ट करने की कोई आवश्यकता नहीं है।
हम docker-compose.yaml
फ़ाइल का उपयोग करके एक Docker वातावरण बनाते हैं। हम कंटेनर, वॉल्यूम, पोर्ट, नेटवर्क कॉन्फ़िगर करेंगे और स्टार्टअप कमांड प्रदान करेंगे।
loki
छवि को वॉल्यूम के माध्यम से लोकी कॉन्फ़िगरेशन तक पहुंच के साथ एक कंटेनर के रूप में चलाने के लिए:
services: loki: image: grafana/loki:latest volumes: - <your-local-path>/loki/production:/home/loki/production ports: - "3100:3100" command: -config.file=/home/loki/production/loki.yaml networks: - loki
पहला कॉन्फ़िगरेशन जो आपको करने की आवश्यकता होगी वह यह सुनिश्चित करना है कि आपके production
का स्थानीय फ़ोल्डर कंटेनर के साथ साझा किया जा रहा है। होस्ट सिस्टम पर स्थानीय फ़ोल्डर को संदर्भित करने के लिए कृपया अपने docker-compose.yaml
के volumes
अनुभाग को संपादित करें जहां आपने production
फ़ोल्डर डाउनलोड किया है। हम loki.yaml
पढ़ने के लिए होस्ट पथ को कंटेनर पथ पर मैप कर रहे हैं।
docker-compose.yaml
में, हम एक नेटवर्क को भी परिभाषित करते हैं और MiniIO सर्वर चलाने वाले कंटेनर के पोर्ट को उजागर करते हैं। इस मामले में, ब्राउज़र के साथ मिनिओ सर्वर तक पहुंचने के लिए पोर्ट 9000 और 9001 को आपकी स्थानीय मशीन पर प्रदर्शित किया जाएगा।
Console UI: minio: image: minio/minio:latest ports: - "9000:9000" - "9001:9001" networks: - loki command: server ~ --address ':9000' --console-address ':9001'
हम loki
नेटवर्क साझा करने वाले सभी कंटेनरों के साथ नेटवर्क को कॉन्फ़िगर करते हैं। प्रत्येक कंटेनर दूसरे को पिंग कर सकता है और उनके एपीआई का उपयोग कर सकता है। अपने कंटेनरों के लिए निश्चित आईपी पते का उपयोग न करें। इसे आसान बनाने के लिए, हमने उपयुक्त कंटेनर को हल करने के लिए अपने वातावरण में loki
और minio
कॉन्फ़िगर किया है। उदाहरण के लिए:
http://minio:9000 for MinIO http://loki:3100 for Loki http://loki:3000 for Grafana
docker-compose.yaml
द्वारा की गई अगली कार्रवाई मिनियो सर्वर को कॉन्फ़िगर करने के लिए एक कंटेनर में मिनियो क्लाइंट (एमसी) को चलाने, लोकी डेटा के लिए गंतव्य बकेट बनाने और आवश्यकतानुसार एक्सेस नीति को public
के लिए सेट करना है।
createbuckets: image: minio/mc networks: - loki depends_on: - minio entrypoint: > /bin/sh -c " /usr/bin/mc config host add myminio http://minio:9000 minioadmin minioadmin; /usr/bin/mc rm -r --force myminio/loki; /usr/bin/mc mb myminio/loki; /usr/bin/mc policy set public myminio/loki; exit 0; "
प्रोमटेल, एक छोटा गो प्रोग्राम है, जिसका उपयोग वितरित लॉग फ़ाइलों को ट्रैक करने या एकत्र करने और उन्हें लोकी तक पहुंचाने के लिए किया जाता है। इस डेमो के लिए Promtail को इसके कंटेनर में एक कॉन्फ़िगरेशन फ़ाइल के साथ तैनात किया गया है जो /var/log निर्देशिका को स्क्रैप करता है। इस डेमो को चलाने के लिए और उस स्थान पर लॉग फ़ाइलों को संसाधित करने के लिए किसी बदलाव की आवश्यकता नहीं है - /var/log।
इस ट्यूटोरियल के अंत में हम देखेंगे कि प्रोमटेल को लॉग फ़ाइलों के लिए सिस्टम पर अन्य स्थानों को कैसे स्क्रैप करना है।
अब जब आप समझ गए हैं कि लोकी, प्रोमटेल और अपने डॉकर वातावरण को कैसे कॉन्फ़िगर किया जाए, तो कृपया डेमो वातावरण को कॉन्फ़िगर करने और चलाने के लिए इन चरणों का पालन करें। निम्न चरणों में docker-compose.yaml
, loki.yaml
और डिफ़ॉल्ट Promtail कॉन्फ़िगरेशन का उपयोग यह प्रदर्शित करने के लिए किया जाता है कि लोकी मिनिओ के साथ कैसे काम करता है। हमारी फ़ाइलें डाउनलोड करने के बाद, उन्हें अपने परिवेश के लिए संपादित करें।
इस रिपॉजिटरी को क्लोन करें https://github.com/cniackz/loki :
git clone https://github.com/cniackz/loki.git minio-loki-tutorial
निर्देशिका को अपने स्थानीय production
फ़ोल्डर में बदलें:
https://github.com/cniackz/loki/tree/main/production
cd <your-local-path>/minio-loki-tutorial/production Edit docker-compose.yaml to reference your local home directory If necessary, edit promtail.yaml
अपना स्थानीय डॉकर वातावरण बनाएं:
docker-compose build --no-cache
स्थानीय डॉकर कंटेनर लॉन्च करें:
docker-compose up -d
यह पुष्टि करने के लिए कि लोकी डेटा मिनिओ में सहेजा जा रहा है, http://localhost:9001
या http://minio:9001
पर मिनियो कंसोल में लॉग इन करें। यह ट्यूटोरियल निम्नलिखित क्रेडेंशियल्स का उपयोग करता है:
user: minioadmin password: minioadmin
लॉग इन करने के बाद Buckets पर क्लिक करें। आपको देखना चाहिए कि लोकी बकेट बन गया है।
दाईं ओर, नव निर्मित बकेट की सामग्री देखने के लिए ब्राउज़ पर क्लिक करें। आपको loki
अंतर्गत fake
निर्देशिका देखनी चाहिए। यहीं पर लोकी डेटा सेव करेगा।
fake
निर्देशिका खोलने के लिए उसके नाम पर क्लिक करें। लोकी एक कॉन्फ़िगर अंतराल के लिए मेमोरी में लॉग रखता है और फिर उन्हें ऑब्जेक्ट स्टोरेज में लिखता है। डिफ़ॉल्ट 5 मिनट का अंतराल है, इसलिए कृपया अपने बकेट में डेटा प्रदर्शित होने के लिए 5 मिनट प्रतीक्षा करें।
इस बिंदु पर, प्रोमटेल लोकी को लॉग भेज रहा है और लोकी मिनिओ को डेटा सहेज रहा है। अब, लोकी लॉग देखने के लिए ग्राफाना को सेट करें। ग्राफाना 6.0 और उच्चतर में लोकी के लिए अंतर्निहित समर्थन शामिल है। ग्राफाना 6.3 और उच्चतर में लॉगक्यूएल कार्यक्षमता के लिए समर्थन शामिल है।
http://loki:3000
पर ग्राफाना में लॉग इन करें (डिफ़ॉल्ट क्रेडेंशियल एडमिन: एडमिन हैं)।
ग्राफाना में, कॉन्फ़िगरेशन और फिर डेटा स्रोतों पर जाने के लिए बाएं साइडबार पर कॉग आइकन पर क्लिक करें। बड़े डेटा स्रोत जोड़ें बटन पर क्लिक करें और फिर लोकी का चयन करें।
डॉकर पोर्ट मैपिंग का उपयोग करके स्थानीय रूप से चलने वाले हमारे लोकी सर्वर के लिए http URL फ़ील्ड को संपादित करें: http://loki:3100
।
फिर सेव एंड टेस्ट पर क्लिक करें।
लॉग तुरंत देखने के लिए, एक्सप्लोर पर क्लिक करें। आप बाएं साइडबार में एक्सप्लोर पर क्लिक करके भी लॉग देख सकते हैं। हालाँकि आप एक्सप्लोर करते हैं, फिर शीर्ष-बाएँ ड्रॉपडाउन में लोकी डेटास्रोत का चयन करें, और फिर लॉग लेबल बटन का उपयोग करके एक लॉग स्ट्रीम चुनें।
आप एक LogQL क्वेरी टाइप कर सकते हैं और रन क्वेरी पर क्लिक कर सकते हैं। हालाँकि, यदि आप अभी तक LogQL नहीं जानते हैं, तो आप लॉग और क्वेरी पैरामीटर का चयन करने के लिए GUI का उपयोग कर सकते हैं।
लोकी में मौजूद लॉग को तुरंत देखने के लिए, लॉग ब्राउज़र पर क्लिक करें, फिर 1. Select labels to search in
और job
चुनें, फिर 2. Find values for the selected labels
अपने काम के नाम पर क्लिक करें ( promtail-local-config.yaml
से) promtail-local-config.yaml
). इस मामले में मैंने varlogs
पर क्लिक किया है। फिर शो लॉग्स बटन पर क्लिक करें।
आप समय सीमा का चयन कर सकते हैं और ब्राउज़र विंडो के शीर्ष दाईं ओर क्वेरी का ताज़ा अंतराल सेट कर सकते हैं।
लॉग के अधिक विवरण देखने के लिए, नीचे स्क्रॉल करें और लॉग प्रविष्टियों में से एक पर क्लिक करें, यह लॉग प्रविष्टि से संबंधित अतिरिक्त जानकारी प्रदान करेगा।
वास्तव में एक शक्तिशाली सुविधा आइकन पर क्लिक करके लॉग विवरण से सीधे labels
और fields
के बारे में आंकड़ों को फ़िल्टर करने या देखने की क्षमता है। यह समस्या निवारण को सरल बनाता है क्योंकि इससे आवर्ती त्रुटियों को देखना और खोज शब्दों के बीच पिवोट करना आसान हो जाता है।
एक बार डेमो चलने के बाद, अगला कदम प्रोमटेल को फ़ाइलों के एक अलग सेट को स्क्रैप करना है जो आपके उपयोग के मामले में अधिक दिलचस्प हो सकता है। ऐसा करने के लिए हमें एक कॉन्फ़िगरेशन फ़ाइल का उपयोग करके चलाने के लिए Promtail की आवश्यकता है जिसे हम संपादित कर सकें। इसे प्राप्त करने का एक तरीका डॉकर में वॉल्यूम का उपयोग करना है।
Promtail कंटेनर से पहुंच योग्य 2 नए वॉल्यूम बनाने के लिए docker-compose.yaml
फ़ाइल को संपादित करें। पहला होस्ट सिस्टम पर उस निर्देशिका तक पहुंच प्रदान करता है जहां नई कॉन्फ़िगरेशन फ़ाइल बनाई जाएगी। दूसरा एक निर्देशिका तक पहुंच प्रदान करता है जिसमें रुचि की लॉग फ़ाइलें होंगी। इसके अतिरिक्त, Promtail को नई कॉन्फ़िग फ़ाइल का संदर्भ देते हुए लॉन्च किया जाएगा, जिसे हमने promtail-local-config.yaml
कहा है:
version: "3" networks: loki: services: loki: image: grafana/loki:latest volumes: - <your-local-path>/loki/minio-loki-tutorial/production:/home/loki/production ports: - "3100:3100" command: -config.file=/home/loki/production/loki.yaml networks: - loki promtail: image: grafana/promtail:2.4.2 volumes: - /var/log:/var/log -- <your-local-path>/loki/minio-loki-tutorial/production:/home/loki/production -- <your-local-path>/access_logs:/home/loki/access_logs command: -config.file=/home/loki/production/promtail-local-config.yaml networks: - loki grafana: image: grafana/grafana:latest ports: - "3000:3000" networks: - loki minio: image: minio/minio:latest ports: - "9000:9000" - "9001:9001" networks: - loki command: server ~ --address ':9000' --console-address ':9001' createbuckets: image: minio/mc networks: - loki depends_on: - minio entrypoint: > /bin/sh -c " /usr/bin/mc config host add myminio http://minio:9000 minioadmin minioadmin; /usr/bin/mc rm -r --force myminio/loki; /usr/bin/mc mb myminio/loki; /usr/bin/mc policy set public myminio/loki; exit 0; "
ग्राफाना में लॉग डेटा के साथ आप और भी बहुत कुछ कर सकते हैं। शुरुआत के लिए, आप लोकी से अधिक लॉग जोड़ने के लिए अधिक स्थानों पर प्रोमटेल स्थापित कर सकते हैं। निष्पादन योग्य और promtail-local-config.yaml
अन्य मशीनों/इंस्टेंस/कंटेनरों में कॉपी करें, Promtail कॉन्फ़िगरेशन में वर्णित कॉन्फ़िगरेशन को संपादित करें और इसे चलाएं।
अब हमें लोकी को स्थानीय सिस्टम लॉग भेजने के लिए Promtail config फ़ाइल, promtail-local-config.yaml
बनाने की आवश्यकता है। ग्राफाना से एक नमूना कॉन्फ़िग फ़ाइल डाउनलोड करें और संपादित करें। जिस अनुभाग पर ध्यान केंद्रित करना है वह scrape_configs
है क्योंकि यहीं पर प्रोमटेल को बताया जाता है कि कौन से लॉग को खींचना है, उन्हें कैसे प्रारूपित करना है और उन्हें कहां भेजना है। कृपया प्रोमटेल को कॉन्फ़िगर करने के बारे में अधिक जानकारी के लिए लोकी में लॉग प्राप्त करें देखें।
scrape_configs
अनुभाग में निम्नलिखित शामिल हैं:
static_configs
के लिए वैकल्पिक। हालाँकि, इसे अक्सर परिभाषित किया जाता है क्योंकि Promtail के पुराने संस्करणों में यह वैकल्पिक नहीं था। यह सीधे प्रोमेथियस सेवा खोज कोड का उपयोग करने से प्राप्त एक कलाकृति थी, जिसके लिए इस प्रविष्टि की आवश्यकता थी।
server: http_listen_port: 9080 grpc_listen_port: 0 positions: filename: /tmp/positions.yaml clients: - url: http://loki:3100/loki/api/v1/push scrape_configs: - job_name: apache static_configs: - targets: - localhost labels: job: access_logs __path__: /home/loki/access_logs/*log
प्रोमटेल में स्क्रैपिंग के लिए विभिन्न कॉन्फ़िगरेशन विकल्पों को समझना महत्वपूर्ण है, और ग्राफाना बहुत सारे विवरण प्रदान करता है।
एप्लिकेशन की पूर्ण क्षमताओं को देखने के लिए पूर्ण प्रोमटेल कॉन्फ़िगरेशन संदर्भ से परामर्श करना सहायक हो सकता है।
अंत में, कुछ अपाचे वेब सर्वर एक्सेस लॉग को होस्ट सिस्टम पर docker-compose.yaml
फ़ाइल में निर्दिष्ट निर्देशिका में रखें। ये वे लॉग हैं जिन्हें प्रोमटेल ग्रहण करेगा और प्रसंस्करण के लिए लोकी को भेजेगा:
-- <your-local-path>/access_logs:/home/loki/access_logs
एक बार संपादन हो जाने और नमूना अपाचे एक्सेस लॉग स्थापित हो जाने के बाद, कंटेनरों को नीचे लाएँ और डॉकर कंपोज़ के साथ बैकअप लें:
docker-compose down docker-compose up -d
प्रोमटेल बाद में नई अपाचे एक्सेस लॉग फ़ाइलों को लोड करेगा और उन्हें लोकी के लिए उपलब्ध कराएगा।
इस ट्यूटोरियल में हमने जो वातावरण बनाया है वह लोकी के साथ शुरुआत करने में मददगार है, लेकिन यह उत्पादन के लिए तैयार नहीं है। अगला कदम कुबेरनेट्स के लिए डॉकर को छोड़ना और एकल उदाहरण के बजाय वितरित मिनिओ का उपयोग करना होगा। अंततः, लोकी डेटा इतना बड़ा हो जाता है कि इसे त्वरित सूचकांक खोजों के लिए बाहरी डेटाबेस से लाभ मिलता है। कृपया अधिक जानकारी के लिए स्केलेबिलिटी - ग्राफाना लोकी के साथ स्केलिंग देखें।
Grafana, Prometheus और AlertManager के अवलोकनीयता स्टैक को लोकी के साथ एक शक्तिशाली वृद्धि प्राप्त हुई (BTW, हमारे पास MiniIO पर Grafana, Prometheus और AlertManager के लिए एक ट्यूटोरियल भी है)। वितरित सिस्टम, विशेष रूप से जब कुबेरनेट्स द्वारा कंटेनरीकृत और ऑर्केस्ट्रेटेड होते हैं, तो उनके अनुप्रयोगों और माइक्रोसर्विसेज के लिए कई लॉग होते हैं। मिनिओ के साथ संयुक्त लोकी लॉग एकत्र करने, संग्रहीत करने और क्वेरी करने का एक लागत प्रभावी तरीका है।
यदि आपके कोई प्रश्न हैं, तो कृपया हमें [email protected] पर एक ईमेल भेजें, या मिनियो स्लैक चैनल से जुड़ें और पूछें।
यहाँ भी प्रकाशित किया गया है.