Add an Instance to a Datasource

Last updated on 24 February, 2021

You can use LogicMonitor’s REST API to programmatically add instances to datasources that don’t have Active Discovery enabled.

Note: As with all of our API calls, authentication is required.

HTTP Method: POST

URI: /device/devices/{deviceId}/devicedatasources/{deviceDatasourceId}/instances

Where:

Request Parameters: You can include the following parameters in your POST request:

Property

Description

Required?

Type

groupId The id of the instance group associated with the datasource instance No. Defaults to the default group. Integer
displayName The instance alias. This is the descriptive name of the instance, and should be unique for the device/datasource combination. Yes String
description The description of the datasource instance No String
wildValue The variable part of the instance, used to query data from a device. For example, variable part of the SNMP OID tree. This value must be unique for the device/datasource combination, unless two-dimensional active discovery is used. Yes String
wildValue2 Only used for two dimensional active discovery. When used, during Active Discovery runs, the token ##WILDVALUE## is replaces with the value of ALIAS and the token ##WILDVALUE2## is replaced with the value of the second part alias. This value must be unique for the device/datasource/WILDVALUE combination. No String
disableAlerting Whether or not alerting is disabled for the instance No. Defaults to false. Boolean
stopMonitoring Whether or not monitoring is disabled for the instance No. Defaults to false. Boolean

Example Request

The following Python script adds an instance ‘google’ to the HTTP_Page datasource for device 38 in account api.logicmonitor.com.

#!/bin/env python

import requests
import json
import hashlib
import base64
import time
import hmac

#Account Info
AccessId ='YQQ75w6Mxx9zWIeAMq5H'
AccessKey ='f)!Z}%spR=6en+4^s2$t32r-3=NpdQ]2T{-deI)8'
Company = 'api'

#Request Info
httpVerb ='POST'
resourcePath = '/device/devices/38/devicedatasources/2214/instances'
data = '{"wildValue":"www.google.com","displayName":"google"}'

#Construct URL 
url = 'https://'+ Company +'.logicmonitor.com/santaba/rest' + resourcePath 

#Get current time in milliseconds
epoch = str(int(time.time() * 1000))

#Concatenate Request details
requestVars = httpVerb + epoch + data + resourcePath

print requestVars

#Construct signature
hmac1 = hmac.new(AccessKey.encode(),msg=requestVars.encode(),digestmod=hashlib.sha256).hexdigest()
signature = base64.b64encode(hmac1.encode())

#Construct headers
auth = 'LMv1 ' + AccessId + ':' + signature.decode() + ':' + epoch
headers = {'Content-Type':'application/json','Authorization':auth}

#Make request
response = requests.post(url, data=data, headers=headers)

#Print status and body of response
print('Response Status:',response.status_code)
print('Response Body:',response.content)
Python 3

Example Response

The response associated with the script above may look like this:

Response Status: 200
Response Body: {
  "status" : 200,
  "errmsg" : "OK",
  "data" : {
    "id" : 76780611,
    "groupId" : 2232,
    "groupName" : "@default",
    "name" : "HTTP_Page-google",
    "displayName" : "google",
    "description" : "",
    "lockDescription" : false,
    "deviceId" : 38,
    "deviceDisplayName" : "ip-172-31-36-125.us-west-2.compute.internal",
    "wildValue" : "www.google.com",
    "wildValue2" : "",
    "disableAlerting" : false,
    "stopMonitoring" : false,
    "alertStatus" : "none",
    "alertStatusPriority" : 100000,
    "sdtStatus" : "none-none-none",
    "alertDisableStatus" : "none-none-none",
    "alertingDisabledOn" : null,
    "groupsDisabledThisSource" : null,
    "sdtAt" : null,
    "dataSourceId" : 105,
    "deviceDataSourceId" : 2214
  }
}