I have a requirement where I need to make an API call and write the data to a lookup file that I can use locally. The API calls returns data in a CSV format.
Previously, I used the Ad-on builder to create a python script that would make make the API request and index this data. However, I have a new requirement to skip the index entirely and write to a local lookup on the search head. The Ad-on builder wont help as it only shows examples of how to write the data to an index.
Thank you!
I would suggest using a custom Python command with the help of Splunklib as input is not recommended on the search head. Here is some parts of the code:
commands.conf
[lookupgen]
filename = lookup_gen.py
chunked = true
lookup_gen.py
import os
import sys
import csv
from splunklib.searchcommands import dispatch, GeneratingCommand, Configuration, Option, validators
HEADERS = ['ip','mac','hostname'] # change this as per your need
LOOKUP_NAME = 'my_lookup.csv'
@Configuration()
class LookupGen(GeneratingCommand):
def get_data_from_your_data_source(self):
pass # write your logic to fetch the data here
def update_lookup_file(self, lookup_file_path, data):
with open(lookup_file_path, 'w') as f:
csv_writer = csv.writer(f)
csv_writer.writerow(HEADERS)
csv_writer.writerows(data)
def generate(self):
data = self.get_data_from_your_data_source()
lookup_path = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))),
os.path.join('lookups', LOOKUP_NAME))
self.update_lookup_file(lookup_path, data)
dispatch(LookupGen, sys.argv, sys.stdin, sys.stdout, __name__)
You will need to add this python file into your bin folder along with splunklib (Python SDK for Splunk) - https://pypi.org/project/splunklib/
https://github.com/splunk/splunk-sdk-python
And you can schedule a search/report using this command at regular internal.
You don't need the Add-on Builder to do that. You already have a Python script so just replace the part the indexes the data with a few lines of code to write it to ../lookups/mylookup.csv (or whatever you want to call the file).
interesting. So should I use the Ad-On builder but at the very end of the script have it overwrite the lookup table?
For background, the reason why I used the ad-on builder was because I was getting really confused with the authentication and safely pulling the API keys out of the passwords.conf. So the ad-on builder really helped with retrieval of secrets.
Are you suggesting overwriting the lookup using the REST endpoint? If so, how do i do that without authenticating ? I see a lot of the curl commands require you to pass admin credentials; however, i dont want to hardcode any creds in my script.
AoB helps with the hard parts. Writing data to a disk file is not a hard part. Because scripted inputs run on the Splunk server, they have access to the file system there. Just use normal pythonic methods for opening and writing to a text file. You don't need REST.
The input itself (at least with the input functionality) cannot write to a lookup.
You need a script that manipulates lookup using REST API. It has nothing to do with indexing.