Claude Code का उपयोग करके PRTG की UPS निगरानी परिभाषा को 30 मिनट में Zabbix में माइग्रेट किया

Claude Code का उपयोग करके PRTG की UPS निगरानी परिभाषा को 30 मिनट में Zabbix में माइग्रेट किया

6 min read

माइग्रेशन / मॉनिटरिंग

हमने PRTG की UPS मॉनिटरिंग परिभाषाएँ 30 मिनट में Zabbix में माइग्रेट कीं
Claude Code का उपयोग करके #

बस एक backup फ़ाइल पास कर दीजिए। न API server चाहिए, न scratch से script लिखने की ज़रूरत।
हमने पूरा काम एक AI agent को सौंप दिया — और यह वाकई काम कर गया।

Claude Code
PRTG
Zabbix
APC UPS
SNMP
Python

PRTG से Zabbix में माइग्रेशन क्यों? #

हम अपनी facility के एक हिस्से में UPS (uninterruptible power supply) यूनिट्स की SNMP के ज़रिए निगरानी के लिए PRTG Network Monitor का उपयोग करते आ रहे हैं।
यह स्थिर था और हमें कोई खास शिकायत नहीं थी, लेकिन जब हम sensor संख्या की license सीमा के करीब पहुँचने लगे
और लागत की समीक्षा की, तो हमने माइग्रेशन के लिए जिस विकल्प पर विचार करने का निर्णय लिया, वह था Zabbix.

Zabbix ओपन सोर्स है, जिसमें host और metric की संख्या असीमित है। साथ ही Grafana के साथ समृद्ध आधिकारिक plugins भी उपलब्ध हैं।
माइग्रेट न करने की कोई वजह नहीं थी। असली मुद्दा था खुद माइग्रेशन का काम।

PRTG → Zabbix के लिए कोई one-click माइग्रेशन टूल मौजूद नहीं है।
डिवाइस ज़्यादा हों तो मैन्युअल री-कॉन्फ़िगरेशन में कई दिन लग जाते हैं।

इस बार हमने आज़माया Claude Code.
हमने PRTG की backup फ़ाइल जस-की-तस पास कर दी और parsing से लेकर script generation और execution तक सब कुछ उसे सौंप दिया।
नतीजा: सभी 12 डिवाइसों का माइग्रेशन लगभग 30 मिनट में पूरा हो गया। हालाँकि एक जगह हम अटके भी, तो उसे भी यहाँ दर्ज कर रहे हैं।

इस बार का माइग्रेशन स्कोप #

PRTG backup (PRTG Configuration.dat) का विश्लेषण करने पर हमें यह कॉन्फ़िगरेशन मिला।

मॉनिटर किए गए डिवाइस

12 APC UPS यूनिट #

सभी डिवाइस APC निर्मित UPS हैं। पूरी मॉनिटरिंग SNMP के ज़रिए एकीकृत थी।

Sensor कॉन्फ़िगरेशन

118 सेंसर #

Ping, UPS health, बैटरी की शेष क्षमता, तापमान, वोल्टेज,
ट्रैफ़िक, HTTP उपलब्धता मॉनिटरिंग आदि।

इस बार की कुंजी यह थी कि सभी डिवाइस एक ही निर्माता के हैं और एक ही प्रोटोकॉल इस्तेमाल करते हैं।
Zabbix में एक standard template पहले से मौजूद है — APC UPS by SNMP,
जो लगभग जस-का-तस काम कर जाना चाहिए (“चाहिए” पर ध्यान दें — यही आगे की कहानी का संकेत है)।

माइग्रेशन आर्किटेक्चर #

सामान्य माइग्रेशन के लिए PRTG API server का चलते रहना ज़रूरी होता है, लेकिन इस बार हमने अपनाया backup फ़ाइल को सीधे access करने का तरीका।
असल में .dat फ़ाइल अंदर से महज़ XML है, इसलिए इसे बिना किसी server के offline ही parse किया जा सकता है।

PRTG Configuration.dat  (XML file)
        │
        ▼  Pass to Claude Code only
  ┌─────────────────────────┐
  │      Claude Code        │
  │  ① Parse XML            │
  │  ② Extract device list  │
  │  ③ Generate Python script│
  │  ④ Execute Zabbix API   │
  └─────────────────────────┘
        │
        ▼
  Zabbix(Host, Interface, Template registration complete)

वास्तविक कार्य लॉग #

Claude Code को दिए गए निर्देश #

हमने टर्मिनल पर claude लॉन्च किया और नीचे दिया गया एक ही निर्देश पास कर दिया।

Please analyze the PRTG backup file and migrate it to Zabbix.

File: ./PRTG\ Configuration.dat

Steps:
1. Parse XML and output all device list (name, IP, sensor type) to CSV
2. Review device list, provide migration plan summary
3. Use Zabbix API (http://zabbix.example.local) to execute the following:
   - Create host group "Migrated-UPS"
   - Register each device with SNMP interface (port 161)
   - Apply templates
4. Verify import results and output difference report

Zabbix API token: xxxxxxxxxxxxxxxx

स्टेप ① XML parsing और डिवाइस extraction (लगभग 5 मिनट) #

Claude Code ने तुरंत PRTG Configuration.dat फ़ाइल पढ़ी और XML parse करने के लिए एक Python script अपने आप generate कर के execute भी कर दी।
डिवाइस नाम, IP address और sensor type को CSV में निकालने में 5 मिनट से भी कम लगे।

import xml.etree.ElementTree as ET
import csv, re

with open("PRTG Configuration.dat", encoding="utf-8-sig") as f:
    content = f.read()

# Extract device name, IP, sensor type via regex
devices = re.findall(
    r'<name[^>]*>\s*([A-Za-z0-9_\-\.]+(?:-ups-\d+|UPS-\d+)[^<]*)\s*</n',
    content
)

# CSV output
with open("prtg_export.csv", "w", newline="") as f:
    w = csv.writer(f)
    w.writerow(["name", "ip", "interface_type"])
    for name, ip in zip(device_names, device_ips):
        w.writerow([name, ip, "SNMP"])

स्टेप ② Zabbix import script का generation और execution (लगभग 10 मिनट) #

CSV तैयार होते ही Claude Code ने Zabbix API कॉल करने वाली import script generate की और तुरंत execute भी कर दी।
कोड को हाथ से copy-paste कर के खुद debug करने का overhead शून्य रहा। यही Claude Code की सबसे बड़ी ताक़त है।

import requests, csv, json

ZABBIX_URL  = "http://zabbix.example.local/api_jsonrpc.php"
API_TOKEN   = "xxxxxxxxxxxxxxxx"
TEMPLATE    = "APC UPS by SNMP"
HOST_GROUP  = "Migrated-UPS"

def zabbix_call(method, params):
    payload = {"jsonrpc": "2.0", "method": method,
               "params": params, "id": 1,
               "auth": API_TOKEN}
    r = requests.post(ZABBIX_URL, json=payload)
    return r.json().get("result")

# Create host group
group_id = zabbix_call("hostgroup.create", {"name": HOST_GROUP})["groupids"][0]

# Get template ID
tmpl = zabbix_call("template.get", {"filter": {"host": [TEMPLATE]}})
tmpl_id = tmpl[0]["templateid"]

# Read CSV and register hosts
with open("prtg_export.csv") as f:
    for row in csv.DictReader(f):
        zabbix_call("host.create", {
            "host": row["name"],
            "interfaces": [{"type": 2,  # SNMP
                            "main": 1, "useip": 1,
                            "ip": row["ip"], "dns": "",
                            "port": "161"}],
            "groups":    [{"groupid": group_id}],
            "templates": [{"templateid": tmpl_id}],
        })

⚠️ जहाँ हम अटके: वोल्टेज anomaly अलर्ट एक साथ भारी संख्या में trigger हुए #

Import के तुरंत बाद Zabbix की अलर्ट स्क्रीन पूरी लाल हो गई।
“Input voltage too high” सभी 12 डिवाइसों पर एक साथ trigger हुआ।

मूल कारण: template की वोल्टेज threshold 200V स्पेसिफिकेशन के लिए सेट थी।
“APC UPS by SNMP” के कई variants होते हैं, और जो लागू हुआ वह विदेशों के 200V उपकरणों के लिए कॉन्फ़िगर किया हुआ निकला।
इस माइग्रेशन का एनवायरनमेंट 100V सिस्टम का है, इसलिए ज्यों-की-त्यों लागू threshold ने false alarm trigger कर दिए।

सुधार निर्देश जारी करना और पुनः पंजीकरण #

हमने Claude Code को अतिरिक्त निर्देश दिए।

Voltage anomaly alerts are being triggered.
The applied template appears to be in 200V system settings.

Please perform the following:
1. Unlink the template from all 12 hosts
2. Search for the correct template "APC UPS by SNMP (100V)" and apply it
   ※ If it doesn't exist, duplicate the existing template,
     modify the input voltage trigger thresholds to 90-110V, and apply it
3. Confirm the alerts have been resolved and report the results

Claude Code ने अपने आप template unlink → threshold सुधार → पुनः लागू करने का काम कर दिया।
प्रारंभिक import समेत यह सुधार कार्य 15 मिनट के भीतर निपट गया।

सीख: template पहले से स्पष्ट रूप से निर्दिष्ट करना चाहिए।
“APC UPS by SNMP” में भी वोल्टेज संबंधी metrics की threshold सेटिंग्स अलग-अलग हो सकती हैं।
अगली बार हम निर्देशों में एक स्टेप जोड़ेंगे: निर्दिष्ट करने से पहले template.get से template सूची लाकर उसे सत्यापित करना।

परिणामों का सारांश #

कार्य समय

कुल लगभग 30 मिनट #

मैन्युअल काम में आम तौर पर आधा से पूरा दिन लग जाता।
सुधार कार्य (template समस्या) मिलाकर भी हम इसी समय में रहे।

माइग्रेशन परिणाम

12 डिवाइस, 118 sensors का माइग्रेशन पूर्ण #

शून्य errors। सुधार के बाद अलर्ट सामान्य हैं।
स्विचओवर से पहले सत्यापन के लिए PRTG के साथ समानांतर चलाया।

क्या automate हो सका और क्या नहीं #

✅ Automate हो सका

  • XML backup से डिवाइस सूची का extraction
  • Host नाम, IP और interface का पंजीकरण
  • Host groups में वितरण
  • Template लागू करना और बदलना
  • Import के बाद difference जाँच

❌ मैन्युअल हस्तक्षेप ज़रूरी रहा

  • Template चयन (वोल्टेज स्पेसिफिकेशन सत्यापन)
  • अलर्ट notification नियमों का पुनः सेटअप
  • Dashboard और map का पुनर्निर्माण
  • ऐतिहासिक डेटा माइग्रेशन (इस बार स्कोप में नहीं)

Claude Code उपयोग करने के फ़ायदे #

  1. कोड वहीं generate होकर वहीं execute हो जाता है।
    पारंपरिक AI चैट में “कोड generate करो → paste कर के चलाओ → error paste कर के फिर पूछो” का लूप ज़रूरी था।
    Claude Code सीधे टर्मिनल पर execute करता है, errors खुद पढ़ता है और उन्हें सुधारता है।
  2. API documentation खुद जाँच लेता है।
    जब हमने पूछा “Zabbix API से SNMP interface रजिस्टर करने के parameters क्या हैं?”, तो उसने यह खुद रिसर्च कर लिया।
    स्पेसिफिकेशन पढ़ने का overhead लगभग शून्य रहा।
  3. जो नहीं कर सकता, वह ईमानदारी से बता देता है।
    जब हमने PRTG-विशिष्ट sensor सेटिंग्स के पूर्ण 1:1 माइग्रेशन की माँग की,
    तो उसने उचित सीमा खींच दी: “Zabbix के साथ वैचारिक अंतर के कारण 1:1 माइग्रेशन कठिन है। इस हिस्से के लिए मैन्युअल काम की सिफ़ारिश है।”
  4. एक लाइन के सुधार निर्देश से विफलताओं से उबर सकता है।
    Template समस्या सिर्फ़ “इसे ठीक करो” कहने भर से हल हो गई।
    Debugging का तनाव लगभग नहीं के बराबर रहा।

अगली कड़ी की झलक: नेटवर्क उपकरण संस्करण #

इस बार सब कुछ आसान रहा क्योंकि सभी डिवाइस “एक जैसी कॉन्फ़िगरेशन” वाले APC UPS थे।
अगली बार हम 2023 के एक backup पर काम करने की योजना बना रहे हैं, जिसमें शामिल हैं switches, routers, wireless APs और virtual machines —
साथ ही multi-template वितरण और SNMP community string हैंडलिंग का भी परीक्षण करेंगे।

  • 10 स्विच
  • 4 राउटर
  • 4 वायरलेस AP
  • 4 HyperV hosts + 10 वर्चुअल मशीनें
उपयोग किए गए टूल: Claude Code (Anthropic) / Zabbix 7.x / PRTG Network Monitor 26.x
कार्य एनवायरनमेंट: Windows 11 + Ubuntu 24.04 (WSL2)
※ इस लेख के सभी host नाम और IP address मास्क किए गए हैं।
Updated on 2026 वर्ष 6 माह 10 दिन

What are your feelings

  • Happy
  • Normal
  • Sad