使用事例
Maintenance-mode スクリプト
このPythonスクリプトは、ノードを「監視無効」状態にし、指定されたメッセージを「情報1」フィールドに設定します。
これは、メンテナンス中のノードでの誤検出アラームを回避し、無効状態が意図的であることを他の人に知らせるために利用できます。
前提条件:
- Python3
- argparse lib (pip install argparse)
- requests lib (pip install requests)
利用方法
./python maintenance-mode.py 192.168.0.50 disable -msg Maintenance
-
まず、NetCrunchにアプリケーションを追加します。
「はじめに」 に掲載の各項目からアプリケーションを追加する方法をご覧ください。 -
スクリプトには、更新が必要な2行のコードが含まれています。:
- nc_address = "NetCrunch Address"
- nc_api_key = "Application API Key"
-
スクリプトを実行するために必要な引数は次のとおりです。:
- node (ID, IP Address or Name)
- action (enable or disable)
オプションとして、-msg 引数を指定して、メッセージの 「情報1」フィールドを設定できます。-msg 引数が省略された場合、「情報1」フィールドはクリアされます。
Script file
maintenance-mode.py
import requests import argparsenc_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")
CSVファイルからノードをインポートする
このjavascriptファイルを使用して、CSVファイルからNetCrunchにノードを追加できます。 さらに、このユースケースでは、各ノードの2つのカスタムフィールド(LocationおよびInfo2)に追加データを追加します。
スクリプトには、スクリプトファイル(add-nodes.js)とデータファイル(data.csv)の2つのファイルが付属しています。
Pre-requisites
- NodeJS
Usage
node add-nodes.js
- まず、NetCrunchにアプリケーションを追加します。 Getting Startedトピックにアクセスして、アプリケーションの追加方法を確認してください。
-
スクリプトには、機能させるために変更する必要がある2つのエントリが含まれています。:
- hostname: 'NetCrunchアドレスまたはDNS名'
- "x-api-key": 'アプリケーションAPIキー' (step 1で生成した値)
- スクリプトには追加のパラメーターは必要ありません-data.csvファイルからすべてのデータを取得し、NetCrunchに送信します。
Additional info
スクリプトを変更して、より多くのカスタムフィールドを含めることができます。例のように、カスタムフィールドの名前に「else if」を追加します。 スクリプトを実行する前に、追加するカスタムフィールドがNetCrunchで定義されていることを確認してください。
表示名などの追加フィールドの場合-CSVの最初の行にパラメーターの名前を追加し、行に追加します。 (使用可能なパラメーターについては、ノードプロパティリストを参照してください)
Script files
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);
Data file
data.csv
name,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