Meraki Cloud Devices doesn't get pulled for monitoring when using api or snmp, need help!
Hello all,
Going all by the book, following each step on LM support page for meraki cloud monitoring, but no lock getting the devices listed.
snmp v2c, v3 no luck, providing api key from the dashboard just gives me the organizations and their device counts but no luck seeing devices.
Tried using previous existing environment we have, i still can’t get this setup for the customer specifically. Any help?
I also keep getting snmp community connection error, where it says it couldn’t communicate with snmp.
- Anonymous2 years ago
FWIW: we couldn’t use the netscan provided by LM. We had to tweak it:
excludedNetworks = []
import com.santaba.agent.util.GroovyScriptShell
import com.logicmonitor.mod.Snippets
modLoader = GroovyScriptShell.getInstance().getScript("Snippets", Snippets.getLoader()).withBinding(getBinding())
meraki = modLoader.load("cisco.meraki", "0")
def token = "<<<<<your api token here>>>>>"
List<String> orgsAllowed = ['123456789123456789']
Boolean debug = false
orgs = meraki.cachedHttpGet(token, "/organizations")
orgs.each { org ->
def orgId = org.id
if (orgsAllowed != null) {
if (!orgsAllowed.contains(orgId.toString())) {return}
}
def orgName = org.name
def networks = []
def devices = []
try {
networks = meraki.cachedHttpGet(token, "/organizations/${orgId}/networks")
devices = meraki.cachedHttpGet(token, "/organizations/${orgId}/devices")
} catch (Exception error) {
if (debug) println error.message
return
}
networks.each { network ->
def networkId = network.id
if (excludedNetworks.contains(networkId)) {return}
def networkDevices = devices.findAll{it.networkId == networkId}
if (networkDevices.size() == 0) {return}
def networkName = network.name.replaceAll('##','--')
def networkTags = network.tags.join(",")
def hostName = "${orgName.replaceAll('\\W', '')}.${networkName.replaceAll('\\W', '')}.invalid"
def displayName = "Meraki Network: ${networkName}"
println("${hostName}##${displayName}##meraki.org.name=${orgName}##meraki.org.id=${orgId}##meraki.api.key=${token}##meraki.network.id=${networkId}##meraki.network.name=${networkName}##meraki.network.tags=${networkTags}##system.categories=NoPing")
}
if (networks.size() > 0) {
println("${orgName.replaceAll('\\W', '')}.invalid##Meraki Org: ${orgName}##meraki.org.name=${orgName}##meraki.org.id=${orgId}##meraki.api.key=${token}")
}
}
apiDevice = ["api.meraki.com", "api.meraki.com", "meraki.api.key=${token}"].join("##")
println(apiDevice)
return 0Replace the token value with your token value and your orgsAllowed with the orgs you want to discover. Run it in the debug console of the collector that will be doing your collection.
If that only outputs Orgs, there might be something wrong with the permissions on your token.
After you get that working, make sure that SNMP is enabled on the network and put the community string as a property on the discovered network (snmp.community).
Also, after/if the networks get discovered, you’ll probably need to kick off discovery manually on each network. Not sure why it doesn’t work automatically.