PDF

Anwendungsfälle

Wartungsmodus-Skript

Dieses Python-Skript versetzt einen Knoten in den Status 'Überwachung deaktiviert' und setzt die angegebene Nachricht im Feld info1.

Dies kann verwendet werden, um falsch positive Alarme an Knoten, die gerade gewartet werden, zu vermeiden und andere Personen zu informieren, dass deaktivierter Zustand beabsichtigt ist.

Voraussetzungen:

  • Python3
  • argparse lib (pip install argparse)
  • requests lib (pip install requests)

Anwendung

./python maintenance-mode.py 192.168.0.50 disable -msg Maintenance
  1. Als Erstes fügen Sie eine Anwendung in NetCrunch hinzu. Im Abschnitt Einleitung erfahren Sie, wie Sie eine Anwendung hinzufügen

  2. Das Skript enthält zwei Codezeilen, die aktualisiert werden müssen:

    • nc_address = "NetCrunch-Adresse"
    • nc_api_key = "API-Schlüssel der Anwendung"
  3. Erforderliche Argumente zum Ausführen des Skripts sind:

    • Knoten (ID, IP-Adresse oder Name)
    • Aktion (aktivieren oder deaktivieren)

    Optional können Sie die Nachricht im Feld Info1 festlegen, indem Sie das Argument -msg angeben. Wenn das Argument -msg nicht angegeben wird, wird das Feld info1 gelöscht.

Skriptdatei

maintenance-mode.py

import requests import argparse

nc_address = "NetCrunch Address" nc_api_key = "Application API-Key"

def send_request(url, request): headers = { "content-type":"application/json", 'x-api-key': nc_api_key } if (request == "delete"): r = requests.delete(url, headers = headers) print ("Status Code:" , r.status_code ,", " "NetCrunch response: " , r.text) return r elif(request == "put"): r = requests.put(url, headers = headers) print ("Status Code:" , r.status_code ,", " "NetCrunch response: " , r.text) return r

parser = argparse.ArgumentParser() parser.add_argument("node", help="Node to change monitoring state (id, ip address or dns name)") parser.add_argument("action", help="Monitoring state (enable, disable)") parser.add_argument("-msg", nargs='?', help="Optional: Set Message to info1 field, ommit to clear info1 field") args = parser.parse_args()

if(args.action == "enable"): action = "on" else: action = "off"

url = "http://" + nc_address + "/api/rest/2/nodes/" + args.node + "/monitoring/" + action print("Changing monitoring state:") send_request(url, "put")

if(args.msg != None): url = "http://" + nc_address + "/api/rest/2/nodes/" + args.node + "/custom-fields/Info%201?"+ nc_api_key +"&value="+args.msg print("Adding Info1 field:") send_request(url, "put") else: url = "http://" + nc_address + "/api/rest/2/nodes/" + args.node + "/custom-fields/Info%201?"+ nc_api_key print("Removing data from Info1 Field: ") send_request(url, "delete")

Knoten aus CSV-Datei importieren

Diese Javascript-Datei kann verwendet werden, um die Knoten aus CSV-Datei zu NetCrunch hinzuzufügen. Darüber hinaus fügt dieser Anwendungsfall zwei benutzerdefinierte Felder (Standort und Info2) zu jedem Knoten hinzu.

Das Skript wird mit zwei Dateien geliefert - Skriptdatei (add-node.js) und Daten (data.csv).

Voraussetzungen

  • NodeJS

Anwendung

node add-nodes.js
  1. Als Erstes fügen Sie eine Anwendung in NetCrunch hinzu. Im Abschnitt Einleitung erfahren Sie, wie Sie eine Anwendung hinzufügen
  2. Das Skript enthält zwei Einträge, die geändert werden müssen, damit es funktioniert:
    • Hostname: 'NetCrunch-Adresse oder DNS-Name'
    • "x-api-key": 'API-Schlüssel der Anwendung' (in Schritt 1 generiert)
  3. Skript erfordert keine zusätzlichen Parameter - es werden alle Daten aus der Datei data.csv übernommen und an NetCrunch gesendet

Zusätzliche Informationen

Das Skript kann geändert werden, um weitere benutzerdefinierte Felder aufzunehmen. Fügen Sie weitere 'else if' mit dem Namen des benutzerdefinierten Felds wie im Beispiel hinzu. Stellen Sie sicher, dass das benutzerdefinierte Feld, das hinzugefügt werden soll, in NetCrunch definiert ist, bevor Sie das Skript ausführen.

Für zusätzliche Felder wie Display Name - fügen Sie den Namen des Parameters in der ersten Zeile von CSV und in die Zeilen ein. (Die verfügbaren Parameter finden Sie in der Liste der Knoteneigenschaften. )

Skriptdateien

add-nodes.js

const http = require('http'), fs = require('fs'), readline = require('readline'), nodesFile = (__dirname + '/data.csv'), options = { method: 'POST', hostname: 'IP or Name of NC server', path: '/api/rest/2/nodes', headers: { 'Content-Type': 'application/json', "x-api-key": 'api-key' } };

function sendRequest(payload) { const req = http.request(options, res => { res.setEncoding('utf8'); if(res.statusCode != 200){ console.log("Error: Status code: " + res.statusCode + " Message: " + res.statusMessage); } else{ res.on('data', chunk => { let response = JSON.parse(chunk); if (response.info === "Already monitored"){ console.log("Warning: ID: "+ response.id + " Node is already monitored"); } else console.log("OK: ID:" + response.id + " Node is added"); }); } }); req.write(JSON.stringify(payload)); req.end(); } function addNodesFromFile(fileName) { console.log("Reading file and adding nodes..."); const rl = readline.createInterface({ input: fs.createReadStream(fileName), crlfDelay: Infinity }); let header; rl.on('line', line => { if (header == null) { header = line.split(','); } else { const properties = line.split(','), data = { customFields: {} }; header.forEach((name, ix) => { if (properties[ix] || "" !== "") { if (name === "Location") { data.customFields.Location = properties[ix]; } else if (name === "Info 2") { data.customFields["Info 2"] = properties[ix]; } else { data[name] = properties[ix]; } } }); sendRequest(data); } }); } addNodesFromFile(nodesFile);

Datendatei

data.csv

dnsname,networkAddress,osMonitorType,Location,Info 2
vm-test-0066.ac.acme,10.20.16.66,Windows,Server-Rack-1,VM-For-Testing
vm-test-0084.ac.acme,10.20.16.84,Windows,Server-Rack-2,VM-For-Testing
cam-0015.ac.acme,10.20.16.15,none,Server-Room,Camera
cam-0057.ac.acme,10.20.16.57,none,Office,Camera