Ceci est une ancienne révision du document !


Utilisation avancée

Tout objet dans PRTG est identifié par un numéro unique, ainsi chaque groupe, sous-groupe, équipement ainsi que capteur sont numérotés. Il est possible de manipuler ces éléments via l'api fourni par PRTG afin d'effectuer des actions en masse telles que:

  1. Ajout d'éléments
  2. Clonage d'élément
  3. Changement de paramètres
  4. Suppression d'éléments

Les scripts prennent en entrée un certain nombre d'élément selon leur rôle, mais ils ont tous en commun plusieurs paramètres:

  1. Nom du serveur PRTG
  2. fichier csv
  3. identifiants PRTG

Ajout d'équipement

Script

# Ce script permet l'ajout d'objets, que ce soit un groupe, un sous-groupe ou un équipement. Pour cela il clone un objet déjà existant dans PRTG il est donc nécessaire d'avoir un template ou un objet de référence.
import requests
import sys
import csv
 
requests.packages.urllib3.disable_warnings()
 
# Cette fonction va permettre de cloner un objet déjà présent dans PRTG. Elle prend en paramètres l'url du serveur PRTG, l'objet à cloner, l'objet cible, le nom et les identifiants PRTG et va faire appel à l'api de prtg sur l'url /api/duplicateobject.htm en lui passant en paramètres ceux reçus précédemment.
def clone_object(prtg_server_url, object_to_clone, target_object_id,name, prtg_username, prtg_password):
    url_clone = "%s/api/duplicateobject.htm?id=%s&name=%s&targetid=%s&username=%s&password=%s" % (prtg_server_url, object_to_clone,name, target_object_id, prtg_username,prtg_password)
    return requests.get(url_clone, verify=False)
 
# Cette fonction va permettre de modifier un objet et de lui modifier certaines propriétés comme son nom ou son adresse ip. Elle prend en paramètres l'url du serveur PRTG, l'id de l'objet créé, le nom de la propriété à changer, et la valeur de cette propriété enfin les identifiants PRTG et va faire appel à l'api de prtg sur l'url /api/setobjectproperty.htm en lui passant en paramètres ceux reçus précédemment.
def change_property(prtg_server_url, object_id, property_name, new_property_value, prtg_username, prtg_password):
    url_change = "%s/api/setobjectproperty.htm?id=%s&name=%s&value=%s&username=%s&password=%s" % (prtg_server_url, object_id, property_name,new_property_value, prtg_username,prtg_password)
    return requests.get(url_change, verify=False)
 
# Cette fonction va permettre de mettre l'objet créé en route. Elle prend en paramètre l'url du serveur PRTG, l'id de l'objet créé et les identifiants PRTG et va faire appel à l'api de prtg sur l'url /api/pause.htm.
def unpause_object(prtg_server_url, new_sensor_id, prtg_username, prtg_password):
    url_unpause = "%s/api/pause.htm?id=%s&action=1&username=%s&password=%s" % (prtg_server_url, new_sensor_id, prtg_username, prtg_password)
    return requests.get(url_unpause, verify=False)
 
#Cette fonction va permettre de parser le fichier CSV rentré en paramètre du script.
def reader (path):
     return csv.reader(open(path,"rt"),delimiter=';')
 
if __name__ == '__main__':
# Récupération dans des variables les paramètres passés au script
    prtg_server_url = sys.argv[1]
    property_name = "name"
    path_to_list = sys.argv[2]
    prtg_username = sys.argv[3]
    prtg_password= sys.argv[4]
 
    for row in reader(path_to_list):
        try:
# Récupération dans des variables les différents champs du fichier CSV
            groupe_parent = row[0]
            device_name = row[1]
            device_ip = row[2]
            object_to_clone = row[3]
# Le script fait appel à la fonction clone_object et lui donne en paramètre le serveur PRTG, l'objet à cloner (CSV), le groupe parent (CSV), le nom (CSV) et les identifiants PRTG
            clone_request_object = clone_object(prtg_server_url,object_to_clone,groupe_parent,device_name,prtg_username,prtg_password)
 
# Récupération de l'id du nouvel objet
            new_object_id = clone_request_object.history[1].url.split('=')[1]
 
# On change les propriétés de l'équipement créé:
#"name",device_name : on change la propriété "name" du capteur pour lui donner le nom récupéré dans le fichier CSV.
#"host",device_ip : on change la propriété "host" du capteur pour lui donner l'id récupérée dans le fichier CSV.
            change_property(prtg_server_url,new_object_id,"name",device_name,prtg_username,prtg_password)
            change_property(prtg_server_url,new_object_id,"host",device_ip,prtg_username,prtg_password)
            print(new_object_id,";",device_name)
 
# Le script met l'objet en route
            unpause_object(prtg_server_url,new_object_id,prtg_username, prtg_password)
 
# Si une erreur est levée, elle est affichée dans la console et le nom de l'objet en question est écrit dans un fichier.
        except Exception as e:
            print str(e)
            file = open("error_import_sensor.txt","a")
            file.write(row[1]+"\n")

Exemple: Le script va cloner le template nommé Serveur Linux avec l'ID 12345 et l'ip 1.1.1.0, créer l'objet Serveur Linux avec un autre ID et la même IP, il va ensuite modifier le nom Serveur Linux en Serveur web et changer son adresse ip en 1.1.1.1.

Commande

python .\import_devices.py https://prtg.cis-valley.fr .\id.csv prtgadmin prtgadmin

Fichier CSV

Les lignes du fichier CSV sont sous la forme suivante:

<ID du groupe parent> ; <nom de l'équipement> ; <adresse ip> ; <id de l'objet à cloner>

Exemple pour le script précédent avec un équipement :

12345;équipement.cis-valley.fr;1.1.1.1;67890

Ajout de capteurs

Seules les propriétés des capteurs créés sont à modifier. Le nombre de paramètres à changer change en fonction du capteur, si il s'agit d'un simple capteur ping juste le nom est à changer, si il s'agit d'un capteur avec des paramètres personnalisés tels que des URL, il faudra changer cette propriété. Il est nécessaire d'ajouter autant de change_property que de paramètres pour le capteur.

Exemple:

“name”,device_name : on change la propriété “name” du capteur.
“host”,device_ip : on change la propriété “httpurl” du capteur.

Script

import requests
import sys
import csv
 
requests.packages.urllib3.disable_warnings()
 
def clone_object(prtg_server_url, object_to_clone, target_object_id,name, prtg_username, prtg_password):
    url_clone = "%s/api/duplicateobject.htm?id=%s&name=%s&targetid=%s&username=%s&password=%s" % (prtg_server_url, object_to_clone,name, target_object_id, prtg_username,prtg_password)
    return requests.get(url_clone, verify=False)
 
def change_property(prtg_server_url, object_id, property_name, new_property_value, prtg_username, prtg_password):
    url_change = "%s/api/setobjectproperty.htm?id=%s&name=%s&value=%s&username=%s&password=%s" % (prtg_server_url, object_id, property_name,new_property_value, prtg_username,prtg_password)
    return requests.get(url_change, verify=False)
 
def unpause_object(prtg_server_url, new_sensor_id, prtg_username, prtg_password):
    url_unpause = "%s/api/pause.htm?id=%s&action=1&username=%s&password=%s" % (prtg_server_url, new_sensor_id, prtg_username, prtg_password)
    return requests.get(url_unpause, verify=False)
 
def reader (path):
     return csv.reader(open(path,"rt"),delimiter=';')
 
if __name__ == '__main__':
 
    prtg_server_url = sys.argv[1]
    property_name = "name"
    path_to_list = sys.argv[2]
    prtg_username = sys.argv[3]
    prtg_password= sys.argv[4]
 
    for row in reader(path_to_list):
        try:
            device_id= row[0]
            object_to_clone = row[1]
            url_property = row[2]
            clone_request_object = clone_object(prtg_server_url,object_to_clone,device_id,"name",prtg_username,prtg_password)
            new_object_id = clone_request_object.history[1].url.split('=')[1]
# Début lignes à modifier #
            change_property(prtg_server_url,new_object_id,"name",url_property,prtg_username,prtg_password)
            change_property(prtg_server_url,new_object_id,"httpurl",url_property,prtg_username,prtg_password)
# Fin lignes à modifier #
            print(new_object_id)
            unpause_object(prtg_server_url,new_object_id,prtg_username, prtg_password)
        except Exception as e:
            print str(e)
            file = open("error_import_sensor.txt","a")
            file.write(row[0]+"\n")

Commande

python .\import_sensor.py https://prtg.cis-valley.fr .\id.csv prtgadmin prtgadmin

Fichier CSV

Les lignes du fichier CSV sont sous la forme suivante:

<ID équipement> ; <ID capteur> ; <paramètre>

Exemple pour le script précédent avec l'url:

12345;67890;http://url.cis-valley.fr/

Suppression d'élément

Script

import requests
import sys
import csv
 
requests.packages.urllib3.disable_warnings()
 
# Cette fonction va permettre de supprimer un élément présent dans PRTG. Elle prend en paramètres l'url du serveur PRTG, l'id de l'élément à supprimer ainsi que les identifiants de PRTG et va faire appel à l'api de prtg sur l'url /api/deleteobject.htm en lui passant en paramètres ceux reçus précédemment.
def delete_object(prtg_server_url, object_id, prtg_username, prtg_password):
    url_location = "%s/api/deleteobject.htm?id=%s&approve=1&username=%s&password=%s" % (prtg_server_url, object_id, prtg_username,prtg_password)
    return requests.get(url_location, verify=False) 
 
def reader (path):
     return csv.reader(open(path,"rt"),delimiter=';')
 
if __name__ == '__main__':
    prtg_server_url = sys.argv[1]
    path_to_list = sys.argv[2]
    prtg_username = sys.argv[3]
    prtg_password= sys.argv[4]
 
    for row in reader(path_to_list):
        try:
            device_id = row[0]
            delete_request_object = delete_object(prtg_server_url,device_id,prtg_username,prtg_password)
        except Exception as e:
            print str(e)
            file = open("error_delete_object.txt","a")
            file.write(row[0]+"\n") 

Commande

python .\delete_object.py https://prtg.cis-valley.fr .\id.csv prtgadmin prtgadmin

Fichier CSV

Les lignes du fichier CSV sont sous la forme suivante:

<id de l'objet à supprimer>

Exemple pour le script précédent :

12345
wiki/scripting.1495110280.txt.gz · Dernière modification: 2018/04/23 17:13 (modification externe)
CC0 1.0 Universal
Powered by PHP Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0 Valid HTML5