Splunk AppDynamics

AppD Inventory Website

Sravan__Sukhava
Explorer

Hi,

I would like to create an AppD inventory Website with the following details.

EAI, Application Name, Agent Type, Agent Version, Environment (PROD,QA, INT & DEV). 

What are the best practices to create this? Do we have any scripts or plugins to do that? I'm thinking about doing it on WordPress by automating the data from CSV or excel. 

Thanks,

Sravan

Labels (3)
0 Karma
1 Solution

Gunnar_Svanberg
Path Finder

Replace mydomain.com in all places

replace uid and pwd in "usage statment"

replace prodserver and testserver with your controllers

replace (if using elastic) esuid and espwd

You need python 3

Produces output like this for each node:

{'appAgentVersion': 'Server Agent #4.5.7.24863 v4.5.7 GA compatible with 4.4.1.0 radaa5f09cafb67679c435337aa86ecda35877078 master', 'machineAgentVersion': '', 'agentType': 'APP_AGENT', 'type': 'Other', 'machineName': 'sso73-openshift-customiz-47-tzc9c', 'appAgentPresent': True, 'nodeUniqueLocalId': '', 'machineId': 271232, 'machineOSType': 'Linux', 'tierId': 2727, 'tierName': 'CD_DEV_sso', 'machineAgentPresent': False, 'name': 'CD_DEV_sso73-openshift-customiz-47-tzc9c', 'ipAddresses': None, 'id': 586157, 'application': 'CD_DEV_sso', 'date': '2019-10-31T13:09:33.468978', 'description': ''}

import requests
import json
from requests.utils import requote_uri
import string
import urllib.parse
from ast import literal_eval
import datetime
import urllib3
import sys


'''
function to loop through all applications based on it's ID
'''
def load(appl):
ID = str(appl['id'])
# use the global variable!
global app_name
global description
app_name = appl['name']
description = appl['description']
url = f"https://{controller}.mydomain.com:8181/controller/rest/applications/{ID}/nodes?output=json"
r = requests.get(url, auth=(uid, pwd), verify=False)
tiers = r.json()

for data in tiers:
loop_tiers(data)


'''
loop throough json array as datatype dict
'''
def loop_tiers(data):
global app_name
global description
#add stuff to the dictionary
data['application'] = app_name
data['date'] = datetime.datetime.utcnow().isoformat()
data['description'] = description
print(data)
# Post it off to elastic
year = str(datetime.datetime.now().year)

esuid = 'elastic'
espwd = 'my_elasticpwd'
esurl = f"https://myelasticserver.mydomain.com:9243/appd-(year)/_doc/"
headers = {'content-type': 'application/json'}
requests.post(esurl, data=json.dumps(data), auth=(esuid, espwd), headers=headers, verify=False)


'''
usage stement
'''
#set up incoming arguments
urllib3.disable_warnings()
if len(sys.argv) != 2:
print(f"\n To few or to many arguments expects either prod or test as first argumet \n Usage: python {(sys.argv[0])} appdyn_heapsize.py prod|test")
exit()
env = str.lower(sys.argv[1])
if env == 'prod':
controller = 'prodserver.mydomain.com'
uid = 'uid@customer1'
pwd = 'mypwd'
elif env == 'test':
controller = 'testserver.mydomain.com'
uid = 'uid@customer1'
pwd = 'mypwd'
else:
print('\n first argument must be either prod or test \n')
exit()

'''
Get all applications and their ID
'''
url = f"https://{controller}.mydomain.com:8181/controller/rest/applications?output=json"
app_name = ''
description = ''
r = requests.get(url, auth=(uid, pwd), verify=False)
applications = r.json()
# Call load function for each application's ID
for a_name in applications:
load(a_name)

exit(0)

View solution in original post

Gunnar_Svanberg
Path Finder

Hi. Not sure if you can post json data to WordPress? If so I can share a pythyon script I use for pushing stuff to elastic to get you started.

Sravan__Sukhava
Explorer

Yes Please Share it along with the process and any additional steps I need to do. Thanks for your help.

0 Karma

Gunnar_Svanberg
Path Finder

Replace mydomain.com in all places

replace uid and pwd in "usage statment"

replace prodserver and testserver with your controllers

replace (if using elastic) esuid and espwd

You need python 3

Produces output like this for each node:

{'appAgentVersion': 'Server Agent #4.5.7.24863 v4.5.7 GA compatible with 4.4.1.0 radaa5f09cafb67679c435337aa86ecda35877078 master', 'machineAgentVersion': '', 'agentType': 'APP_AGENT', 'type': 'Other', 'machineName': 'sso73-openshift-customiz-47-tzc9c', 'appAgentPresent': True, 'nodeUniqueLocalId': '', 'machineId': 271232, 'machineOSType': 'Linux', 'tierId': 2727, 'tierName': 'CD_DEV_sso', 'machineAgentPresent': False, 'name': 'CD_DEV_sso73-openshift-customiz-47-tzc9c', 'ipAddresses': None, 'id': 586157, 'application': 'CD_DEV_sso', 'date': '2019-10-31T13:09:33.468978', 'description': ''}

import requests
import json
from requests.utils import requote_uri
import string
import urllib.parse
from ast import literal_eval
import datetime
import urllib3
import sys


'''
function to loop through all applications based on it's ID
'''
def load(appl):
ID = str(appl['id'])
# use the global variable!
global app_name
global description
app_name = appl['name']
description = appl['description']
url = f"https://{controller}.mydomain.com:8181/controller/rest/applications/{ID}/nodes?output=json"
r = requests.get(url, auth=(uid, pwd), verify=False)
tiers = r.json()

for data in tiers:
loop_tiers(data)


'''
loop throough json array as datatype dict
'''
def loop_tiers(data):
global app_name
global description
#add stuff to the dictionary
data['application'] = app_name
data['date'] = datetime.datetime.utcnow().isoformat()
data['description'] = description
print(data)
# Post it off to elastic
year = str(datetime.datetime.now().year)

esuid = 'elastic'
espwd = 'my_elasticpwd'
esurl = f"https://myelasticserver.mydomain.com:9243/appd-(year)/_doc/"
headers = {'content-type': 'application/json'}
requests.post(esurl, data=json.dumps(data), auth=(esuid, espwd), headers=headers, verify=False)


'''
usage stement
'''
#set up incoming arguments
urllib3.disable_warnings()
if len(sys.argv) != 2:
print(f"\n To few or to many arguments expects either prod or test as first argumet \n Usage: python {(sys.argv[0])} appdyn_heapsize.py prod|test")
exit()
env = str.lower(sys.argv[1])
if env == 'prod':
controller = 'prodserver.mydomain.com'
uid = 'uid@customer1'
pwd = 'mypwd'
elif env == 'test':
controller = 'testserver.mydomain.com'
uid = 'uid@customer1'
pwd = 'mypwd'
else:
print('\n first argument must be either prod or test \n')
exit()

'''
Get all applications and their ID
'''
url = f"https://{controller}.mydomain.com:8181/controller/rest/applications?output=json"
app_name = ''
description = ''
r = requests.get(url, auth=(uid, pwd), verify=False)
applications = r.json()
# Call load function for each application's ID
for a_name in applications:
load(a_name)

exit(0)

Got questions? Get answers!

Join the Splunk Community Slack to learn, troubleshoot, and make connections with fellow Splunk practitioners in real time!

Meet up IRL or virtually!

Join Splunk User Groups to connect and learn in-person by region or remotely by topic or industry.

Get Updates on the Splunk Community!

Unlocking Unified Insights: New Gigamon Federated Search App for Splunk

In today’s data-heavy environment, organizations are caught in a data distribution dilemma. As data volumes ...

GA: New Data Management App in Splunk Platform

Streamlining Data Management: Introducing a unified experience in Splunk Managing data at scale shouldn’t feel ...

Announcing Modern Navigation: A New Era of Splunk User Experience

We are excited to introduce the Modern Navigation feature in the Splunk Platform, available to both cloud and ...