Podman एजेंट
Status200 Podman एजेंट एक कंटेनर है जिसे आप Podman होस्ट पर चलाते हैं। यह होस्ट के हर कंटेनर के आँकड़े और लॉग फ़ाइलें पढ़ता है और उन्हें Status200 को भेजता है, जहाँ होस्ट अपने कंटेनर, मेट्रिक्स और लॉग के साथ दिखता है। एक दूसरा कंटेनर, Podman AI एजेंट, Status200 AI को होस्ट की जाँच करने देता है। Podman मॉनिटर एजेंट के भेजे डेटा पर अलर्ट करते हैं।
podman run या Podman Compose से।एजेंट क्या इकट्ठा करता हैहर कंटेनर के मेट्रिक्स, लॉग और इन्वेंटरी।कंटेनर लॉग को k8s-file चाहिएजब तक आप न बदलें, Podman journald में लॉग करता है।समस्या निवारणरीस्टार्ट लूप, गायब मेट्रिक्स, गायब लॉग।यह कैसे काम करता है
एजेंट एक OpenTelemetry Collector है जिसमें Status200 का कॉन्फ़िगरेशन पहले से बना हुआ है। Podman के Docker-संगत API सॉकेट के ज़रिए यह हर 30 सेकंड में हर कंटेनर के आँकड़े पढ़ता है और हर 5 मिनट में हर कंटेनर, इमेज, नेटवर्क और वॉल्यूम की सूची बनाता है। यह कंटेनरों की लॉग फ़ाइलें फ़ॉलो करता है और सब कुछ आपकी दी गई इंजेशन कुंजी के साथ OTLP पर आपके Status200 URL को भेजता है।
आपके Podman होस्ट पर दो कंटेनर
होस्ट अपने पहले डेटा के साथ, PODMAN_HOST_NAME में आपके दिए नाम के अंतर्गत, खुद को रजिस्टर करता है। AI एजेंट वैकल्पिक है: उसे छोड़ दें, और कलेक्टर वैसे ही काम करता है।
शुरू करने से पहले
- Podman 4.0 या उसके बाद का संस्करण, और होस्ट पर root पहुँच।
/run/podman/podman.sockपर Podman का API सॉकेट। इसेsudo systemctl enable --now podman.socketसे चालू करें।- एक इंजेशन कुंजी। प्रोजेक्ट सेटिंग्स → टेलीमेट्री और APM → इंजेशन कुंजियाँ के अंतर्गत एक बनाएँ और उसका मान कॉपी करें।
- होस्ट से आपके Status200 URL तक आउटबाउंड HTTPS।
- कंटेनर लॉग के लिए, ऐसे कंटेनर जो
k8s-fileलॉग ड्राइवर उपयोग करते हैं। rootful Podman डिफ़ॉल्ट रूप सेjournaldमें लॉग करता है, जिसे एजेंट नहीं पढ़ सकता। कंटेनर लॉग को k8s-file लॉग ड्राइवर चाहिए देखें।
एजेंट इंस्टॉल करें
एजेंट शुरू करें
YOUR_STATUS200_URLको अपने Status200 URL से,YOUR_TELEMETRY_INGESTION_TOKENको इंजेशन कुंजी से, औरmy-podman-hostको इस होस्ट के किसी नाम से बदलें, जैसेprod-podman-01। होस्ट Status200 में इसी नाम से दिखता है, इसलिए इसे स्थिर रखें: नया नाम एक नया होस्ट रजिस्टर करता है।Podman CLI
podman run -d \ --name status200-podman-agent \ --user 0:0 \ --restart unless-stopped \ -v /run/podman/podman.sock:/run/podman/podman.sock:ro \ -v /var/lib/containers/storage:/var/lib/containers/storage:ro \ -e STATUS200_URL="YOUR_STATUS200_URL" \ -e STATUS200_SERVICE_TOKEN="YOUR_TELEMETRY_INGESTION_TOKEN" \ -e PODMAN_HOST_NAME="my-podman-host" \ status200/podman-agent:releaseफिर उसी मानों के साथ उसके बगल में AI एजेंट शुरू करें। AI जाँच डिफ़ॉल्ट रूप से चालू है: जब Status200 AI इस होस्ट पर किसी घटना या अलर्ट की जाँच करता है, तो वह AI एजेंट के ज़रिए, Podman के Docker-संगत API के विरुद्ध, केवल-पढ़ने वाले
dockerकमांड चलाता है, और जब तक आप सुधारों की अनुमति न दें, कुछ नहीं बदलता। AI जाँच के बिना इंस्टॉल करने के लिए यह कमांड छोड़ दें।podman run -d \ --name status200-podman-ai-agent \ --user 0:0 \ --restart unless-stopped \ --read-only --tmpfs /tmp \ -v /run/podman/podman.sock:/run/podman/podman.sock:ro \ -e STATUS200_URL="YOUR_STATUS200_URL" \ -e STATUS200_SERVICE_TOKEN="YOUR_TELEMETRY_INGESTION_TOKEN" \ -e STATUS200_AI_AGENT_RESOURCE_TYPE=podman \ -e PODMAN_HOST_NAME="my-podman-host" \ status200/resource-ai-agent:releasePodman Compose
इसे होस्ट के किसी फ़ोल्डर में
docker-compose.ymlके रूप में सहेजें। दूसरी सेवा AI एजेंट है: AI जाँच के बिना कलेक्टर चलाने के लिए उसे छोड़ दें।services: status200-podman-agent: image: status200/podman-agent:release container_name: status200-podman-agent user: "0:0" restart: unless-stopped volumes: - /run/podman/podman.sock:/run/podman/podman.sock:ro - /var/lib/containers/storage:/var/lib/containers/storage:ro environment: - STATUS200_URL=YOUR_STATUS200_URL - STATUS200_SERVICE_TOKEN=YOUR_TELEMETRY_INGESTION_TOKEN - PODMAN_HOST_NAME=my-podman-host logging: driver: json-file options: max-size: "10m" max-file: "3" status200-podman-ai-agent: image: status200/resource-ai-agent:release container_name: status200-podman-ai-agent user: "0:0" restart: unless-stopped read_only: true tmpfs: - /tmp volumes: - /run/podman/podman.sock:/run/podman/podman.sock:ro environment: - STATUS200_URL=YOUR_STATUS200_URL - STATUS200_SERVICE_TOKEN=YOUR_TELEMETRY_INGESTION_TOKEN - STATUS200_AI_AGENT_RESOURCE_TYPE=podman - PODMAN_HOST_NAME=my-podman-hostउस फ़ोल्डर में इसे शुरू करें:
podman compose up -dजाँचें कि एजेंट चल रहा है
podman ps --filter name=status200-podman-agent podman logs -f status200-podman-agentकलेक्टर शुरू होने के बाद लॉग में यह लाइन दिखनी चाहिए:
Everything is ready. Begin running and processing data.Status200 में होस्ट खोजें
उत्पाद → बुनियादी ढांचा → Podman → सभी होस्ट खोलें। होस्ट लगभग एक मिनट में अपने
PODMAN_HOST_NAMEके अंतर्गत, अपने कंटेनर, मेट्रिक्स और लॉग के साथ दिखता है। AI एजेंट होस्ट के AI एजेंट पेज पर, और उसके अवलोकन में सबसे नीचे, कनेक्टेड दिखता है। होस्ट का टोपोलॉजी पेज उसके Compose प्रोजेक्ट, कंटेनर, इमेज, नेटवर्क और वॉल्यूम एक मैप पर दिखाता है: देखें टोपोलॉजी।
एनवायरनमेंट वेरिएबल
| वेरिएबल | ज़रूरी | विवरण |
|---|---|---|
STATUS200_URL | हाँ | आपका Status200 URL, जैसे https://status200.ru या आपका सेल्फ़-होस्टेड इंस्टेंस। अगर इंस्टेंस सिर्फ़ HTTP पर है तो http:// और उसका पोर्ट उपयोग करें। |
STATUS200_SERVICE_TOKEN | हाँ | प्रोजेक्ट सेटिंग्स → टेलीमेट्री और APM → इंजेशन कुंजियाँ से इंजेशन कुंजी। |
PODMAN_HOST_NAME | नहीं | Status200 में होस्ट का नाम। डिफ़ॉल्ट podman-host है, इसलिए हर होस्ट को उसका अपना नाम दें। |
DOCKER_API_VERSION | नहीं | Docker API का वह संस्करण जिसमें एजेंट Podman सॉकेट से बात करता है। डिफ़ॉल्ट 1.44 है। अगर सॉकेट पुराना अधिकतम बताता है तो इसे घटाएँ, या इसे तय कराने के लिए खाली मान पर सेट करें (समस्या निवारण देखें)। |
कोई मान बदलने के लिए एजेंट हटाएँ और उसका कमांड फिर से चलाएँ (Podman CLI), या docker-compose.yml संपादित करें और podman compose up -d चलाएँ (Podman Compose)।
एजेंट क्या इकट्ठा करता है
| डेटा | यह क्या है |
|---|---|
| कंटेनर मेट्रिक्स | CPU (उपयोग, प्रतिशत, थ्रॉटलिंग), मेमोरी (उपयोग, सीमा, प्रतिशत), नेटवर्क और ब्लॉक I/O, अपटाइम, रीस्टार्ट और प्रक्रियाओं की संख्या, हर कंटेनर के लिए, हर 30 सेकंड में। |
| कंटेनर लॉग | हर कंटेनर का stdout और stderr, उस ctr.log फ़ाइल से जिसे k8s-file लॉग ड्राइवर लिखता है। |
| इन्वेंटरी | हर स्थिति वाला हर कंटेनर, और हर इमेज, नेटवर्क और वॉल्यूम, हर 5 मिनट में। |
हर कंटेनर के मेट्रिक्स और लॉग उस कंटेनर के नाम वाली सेवा के अंतर्गत दर्ज होते हैं। हर लॉग लाइन को उसमें बताए स्तर से गंभीरता मिलती है, जैसे [ERROR], level=warn या {"level":"info"}; जो लाइन कोई स्तर नहीं बताती वह अपनी स्ट्रीम की गंभीरता लेती है: stderr ERROR है, stdout INFO। व्हाइटस्पेस या बंद कोष्ठक से शुरू होने वाली लाइनें पिछली लाइन से जुड़ जाती हैं, इसलिए स्टैक ट्रेस एक रिकॉर्ड के रूप में आता है। एजेंट के अपने लॉग छोड़ दिए जाते हैं।
Podman मॉनिटर हर मेट्रिक और उसका अर्थ सूचीबद्ध करता है।
कंटेनर लॉग को k8s-file लॉग ड्राइवर चाहिए
एजेंट /var/lib/containers/storage/overlay-containers/*/userdata/ctr.log फ़ॉलो करता है, यानी वे फ़ाइलें जो Podman का k8s-file लॉग ड्राइवर लिखता है (Podman में json-file वही ड्राइवर है)। rootful Podman का डिफ़ॉल्ट ड्राइवर journald है, जो पढ़ने के लिए कोई फ़ाइल नहीं छोड़ता, और syslog जैसा रिमोट ड्राइवर भी नहीं छोड़ता। ऐसे कंटेनर के मेट्रिक्स फिर भी आते हैं; उसके लॉग नहीं।
किसी कंटेनर का लॉग ड्राइवर, और Podman का डिफ़ॉल्ट, जाँचें:
podman inspect <container> --format '{{.HostConfig.LogConfig.Type}}'
podman info --format '{{.Host.LogDriver}}'किसी कंटेनर को k8s-file के साथ चलाएँ, या किसी Compose सेवा को उस पर ले जाएँ:
podman run --log-driver k8s-file --log-opt max-size=100m ... <image>services:
my-app:
image: my-app:latest
logging:
driver: "k8s-file"
options:
max-size: "100m"या containers.conf (rootful के लिए /etc/containers/containers.conf, rootless के लिए ~/.config/containers/containers.conf) में इसे बाद में बनने वाले हर कंटेनर का डिफ़ॉल्ट बनाएँ:
[containers]
log_driver = "k8s-file"
log_size_max = 104857600फिर कंटेनर दोबारा बनाएँ। कंटेनर वही लॉग ड्राइवर रखता है जिसके साथ वह बना था, इसलिए उसे फिर से शुरू करना काफ़ी नहीं।
एजेंट अपग्रेड करना
जब एजेंट आपके Status200 से पुराना होता है, तो होस्ट के अवलोकन पर एजेंट संस्करण के बगल में एक चेतावनी चिह्न दिखता है। ये कमांड देखने के लिए उसे चुनें।
Podman CLI
podman pull status200/podman-agent:release
podman pull status200/resource-ai-agent:release
podman rm -f status200-podman-agent status200-podman-ai-agentफिर एजेंट शुरू करें के दोनों podman run कमांड फिर से चलाएँ।
Podman Compose
podman compose pull
podman compose up -drelease टैग हमेशा सबसे नई रिलीज़ की ओर इंगित करता है। कोई संस्करण पिन करने के लिए status200/podman-agent:<version> उपयोग करें, जैसे status200/podman-agent:10.0.31। यही इमेज GitHub Container Registry पर ghcr.io/status200/podman-agent:release के रूप में है।
एजेंट अनइंस्टॉल करना
Podman CLI
podman rm -f status200-podman-agent
podman rm -f status200-podman-ai-agentPodman Compose
podman compose downहोस्ट अपने भेजे डेटा के साथ Status200 में बना रहता है। अगर अब आपको उसकी ज़रूरत नहीं, तो उसके मेनू में होस्ट हटाएं से उसे हटाएँ।
AI एजेंट
ऊपर के कमांड और Compose फ़ाइल, Podman एजेंट का install.sh और उसकी [PodmanAgent डायरेक्टरी](<YOUR_STATUS200_URL>/docs/static/scripts/agents/PodmanAgent) की docker-compose.yml, सभी Podman AI एजेंट चलाते हैं: एक दूसरा कंटेनर, status200-podman-ai-agent (इमेज status200/resource-ai-agent:release), जो वे केवल-पढ़ने वाले कमांड चलाता है जो Status200 AI इस होस्ट पर किसी घटना या अलर्ट की जाँच करते समय माँगता है — Podman के Docker-संगत API के ज़रिए, docker CLI से: docker ps -a, docker logs --tail 200 web, docker container inspect web — और सिर्फ़ आपकी अनुमति होने पर किसी नामित कंटेनर को फिर से शुरू करने जैसे सुधार लागू करता है। यह कलेक्टर वाले ही STATUS200_URL, STATUS200_SERVICE_TOKEN और PODMAN_HOST_NAME पढ़ता है, इसलिए ठीक इसी होस्ट की सेवा करता है, और Status200 में होस्ट के AI एजेंट पेज पर दिखता है।
- AI जाँच डिफ़ॉल्ट रूप से चालू है। एजेंट के कनेक्ट होते ही Status200 AI इस होस्ट की घटनाओं और अलर्ट की जाँच इसके साथ करता है, और होस्ट का अवलोकन एजेंट की स्थिति दिखाता है। रोकने के लिए, जहाँ एजेंट चलता है वहाँ
STATUS200_AI_INVESTIGATION=falseसेट करें (AI एजेंट पेज पर AI क्या कर सकता है के अंतर्गत बदलें तरीका दिखाता है), या एजेंट को छोड़ दें। - यह केवल-पढ़ने वाला है, जब तक आप इसे
STATUS200_AI_ALLOW_WRITES=trueके साथ शुरू न करें;STATUS200_AI_WRITE_TARGETS(उदाहरण के लिएweb-*,api-*) सीमित करता है कि कोई सुधार किन कंटेनरों को छू सकता है। सुधार कैसे चलें यह बताने के लिए इसेSTATUS200_AI_FIXESके साथ भी शुरू करें —ask-for-approval(हर एक को एक व्यक्ति मंज़ूरी देता है),automaticयाbypass-approval— और AI एजेंट पेज इसे केवल-पढ़ने के रूप में दिखाता है (AI क्या कर सकता है, एजेंट द्वारा सेट)। - इसे कलेक्टर वाला ही सॉकेट चाहिए और यह उसे माउंट करके root के रूप में चलता है, क्योंकि सॉकेट का मालिक root है — और rootful Podman के लिए जो भी सॉकेट उपयोग कर सकता है वह इस होस्ट पर root है,
:roहो या न हो। एजेंट की कमांड नीति ही सीमा है: यह कभीexec,run,rmयाpruneनहीं चलाता, और कभी खुद को, कलेक्टर को याSTATUS200_AI_PROTECTED_TARGETS(कंटेनर नाम ग्लोब) में की किसी चीज़ को नहीं बदलता। install.sh --no-ai-agentइसे छोड़ देता है;podman rm -f status200-podman-ai-agentइसे हटाता है। इसे कलेक्टर की तरह अपग्रेड करें:podman pull status200/resource-ai-agent:release, इसे हटाएँ, और फिर से शुरू करें।
यह क्या चला सकता है, सुधार कैसे काम करते हैं और इसकी समस्याएँ कैसे सुलझाएँ: Infrastructure AI Agents।
समस्या निवारण
एजेंट "client version is too new" के साथ बार-बार फिर से शुरू होता है
एजेंट के लॉग दिखाते हैं:
Error: cannot start pipelines: failed to start "docker_stats" receiver:
Error response from daemon: client version 1.44 is too new.
Maximum supported API version is 1.41अधिकतम क्लाइंट संस्करण लागू करने वाला Docker-API सर्वर नए संस्करण को अस्वीकार करता है, इसलिए रिसीवर कभी शुरू नहीं होता और कलेक्टर भी उसके साथ बंद हो जाता है। Podman सॉकेट जो API संस्करण बताता है उसे जाँचें:
curl -s -o /dev/null -D - --unix-socket /run/podman/podman.sock http://localhost/_ping | grep -i '^api-version'फिर podman run में -e DOCKER_API_VERSION=1.41 (या जो मान आपको मिला) जोड़ें, या Compose में DOCKER_API_VERSION सेट करें। नए सर्वर अब भी पुराने API संस्करण परोसते हैं, इसलिए यह सेटिंग अपग्रेड के बाद भी मान्य रहती है।
नंबर देखना नहीं चाहते? DOCKER_API_VERSION को खाली स्ट्रिंग पर सेट करें। तब एजेंट कोई संस्करण पिन करने के बजाय सॉकेट के साथ संस्करण तय करता है (एक HEAD /_ping, फिर सॉकेट का बताया अधिकतम):
podman run -d ... -e DOCKER_API_VERSION= ...Podman सॉकेट पर अनुमति अस्वीकृत, या कोई सॉकेट नहीं
/run/podman/podman.sock पढ़ने के लिए एजेंट को root के रूप में चलना चाहिए। जाँचें कि आपके podman run कमांड में --user 0:0 है, या Compose में user: "0:0", और सॉकेट चालू है: sudo systemctl enable --now podman.socket। rootless Podman का सॉकेट इसके बजाय /run/user/<uid>/podman/podman.sock पर होता है (systemctl --user enable --now podman.socket): /run/podman/podman.sock की जगह वह पथ माउंट करें।
होस्ट डिस्कनेक्टेड दिखता है
- जाँचें कि एजेंट चल रहा है:
podman ps --filter name=status200-podman-agent - उसके लॉग में त्रुटियाँ देखें:
podman logs status200-podman-agent 2>&1 | grep -i error STATUS200_URLऔरSTATUS200_SERVICE_TOKENजाँचें: कुंजी एक मान्य इंजेशन कुंजी होनी चाहिए जो अक्षम न की गई हो।- जाँचें कि होस्ट नेटवर्क पर आपके Status200 URL तक पहुँच सकता है।
कोई मेट्रिक्स नहीं दिखते
- जाँचें कि Podman सॉकेट एजेंट में माउंट है। उसकी इमेज में कोई शेल नहीं है, इसलिए उसके माउंट साझा करने वाले एक अस्थायी कंटेनर से देखें:
podman run --rm --volumes-from status200-podman-agent alpine:3.19 ls -la /run/podman/podman.sock - उसके लॉग में एक्सपोर्ट त्रुटियाँ देखें:
podman logs status200-podman-agent 2>&1 | tail -100 - जाँचें कि इंजेशन कुंजी मान्य है और समाप्त नहीं हुई।
कंटेनर का CPU एक सपाट रेखा है
पुराना एजेंट docker_stats रिसीवर का अपना CPU आँकड़ा भेजता है, जिसे मौजूदा रीडिंग से पहले की आँकड़ों की रीडिंग चाहिए, और Podman का Docker-संगत API उसे कभी नहीं भेजता: रिसीवर किसी कंटेनर द्वारा शुरू होने के बाद से इस्तेमाल किए गए पूरे CPU को होस्ट द्वारा बूट होने के बाद से इस्तेमाल किए गए पूरे CPU से भाग देता है। रेखा मुश्किल से हिलती है और लोड के साथ नहीं बदलती, जबकि container.cpu.usage.total बदलता है। एजेंट अपग्रेड करें: अपनी दूसरी रीडिंग से यह हर कंटेनर द्वारा हर 30 सेकंड के अंतराल में इस्तेमाल किया गया CPU भेजता है। पहले से सहेजी गई रीडिंग जैसी थीं वैसी ही रहती हैं।
मेट्रिक्स आते हैं पर कंटेनर लॉग नहीं आते
आपके कंटेनर शायद journald उपयोग करते हैं, जो Podman का डिफ़ॉल्ट लॉग ड्राइवर है। जाँचें कि एजेंट कौन-सी फ़ाइलें देखता है, और कोई कंटेनर कौन-सा ड्राइवर उपयोग करता है:
podman logs status200-podman-agent 2>&1 | grep -E "Started watching file|no files match"
podman inspect <container> --format '{{.HostConfig.LogConfig.Type}}'अगर एजेंट no files match the configured criteria बताता है, तो कंटेनरों को k8s-file पर ले जाएँ और दोबारा बनाएँ, जैसा कंटेनर लॉग को k8s-file लॉग ड्राइवर चाहिए दिखाता है।
लॉग किसी दूसरे होस्ट पर पहुँचते हैं, या होस्ट का नाम podman-host है
होस्ट का नाम PODMAN_HOST_NAME से आता है। इसके बिना शुरू किया गया एजेंट podman-host बताता है, इसलिए इस तरह सेट हर होस्ट एक जैसा दिखता है; बाद में नाम बदलें, तो Status200 एक दूसरा होस्ट रजिस्टर करता है, जिसमें फिर नया डेटा होता है। हर होस्ट पर PODMAN_HOST_NAME को उसके अपने नाम पर सेट करें, और एजेंट दोबारा बनाएँ। एजेंट कौन-सा नाम बताता है, यह जाँचने के लिए:
podman inspect status200-podman-agent --format '{{range .Config.Env}}{{println .}}{{end}}' | grep PODMAN_HOST_NAME