I am trying to use a Python Custom Sensor to ssh to a device, run a single command, capture the output and return that to the channel sensor.
My SSH code works great on its own :-)
Ideally I like to pass the username and password to the script also but for now its static in the initiateSSH function
When I set up the Sensor and pass the %host parameter to this script PRTG throws out an error:
XML: Structural error in xml file, 8 open items. -- JSON: The returned json does not match the expected structure (Invalid JSON.). (code: PE231)
This is my code, any help would be greatly appreciated.
#Imports import logging import time import datetime import sys import subprocess import os import sys import json def initiateSSH (host): import paramiko import cmd import time import sys import socket import os usrpassword = 'password' cmd = 'show clock’ delay = int(5) ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(host, username='admin', password=usrpassword) chan = ssh.invoke_shell() time.sleep(delay) #Send command: chan.send(cmd) time.sleep(delay) chan.send('\n') resp = chan.recv(99999) logging.info (resp) time.sleep(delay) chan.send('\n') resp = chan.recv(99999) return resp ssh.close #get CustomSensorResult from paepy package from paepy.ChannelDefinition import CustomSensorResult if __name__ == "__main__": # interpret first command line parameter as json object data = json.loads(sys.argv[1]) #SSH to Host sshGet = initiateSSH(data) #Return Result to PRTG result = CustomSensorResult("Result from SSH " + sshGet) # add primary channel result.add_channel(channel_name="Percentage", unit="Percent", value=87, is_float=False, primary_channel=True, is_limit_mode=True, limit_min_error=10, limit_max_error=90, limit_error_msg="Percentage too high") # add additional channel result.add_channel(channel_name="Response Time", unit="TimeResponse", value="4711") # print sensor result to std print(result.get_json_result())
Hello fishfingerbandit,
Thank you very much for your contact.
We'll need additional information from the sensors, that's why I'd like to ask to contact use directly via email to support@paessler.com.
Please enable the "Write sensor result to disk" option from the sensor's "Settings" tab. After the next sensor scan, PRTG will create and store additional log files for debugging purposes in the "/Logs (Sensor)" sub directory in the PRTG data folder on the Probe system the sensor is running on. The file name will contain the sensor ID such as "Result of Sensor [ID].x". The sensor ID can be found in the sensor's "Overview" tab.
Please attach this file when contacting us.
Thank you in advance.
Sebastian
Dec, 2017 - Permalink