Splunk
Build an inventory of the devices known to Splunk in JupiterOne: every host that sends data to your indexes, with when it was first and last seen and what kind of data it sends, and the forwarders connecting to your indexers, with their OS, IP, version and the host they run on. The Splunk instance itself and its indexes (size, retention, event range and whether each is enabled) are collected too. Find devices that stopped sending logs, or that have no forwarder, through queries and alerts. A separate JupiterOne app for Splunk also lets you send JupiterOne alerts into Splunk; see the end of the installation guide.
- Installation
- Authorization
- Data Model
- Types
Installation
This integration builds an inventory of the devices known to Splunk through the Splunk REST API on the splunkd management port. It runs two read-only summary searches as search jobs: one lists the hosts that sent data to your indexes, and one lists the forwarders connecting to your indexers. It cancels each search job once it has read the results. It never reads raw events or audit data, never changes your Splunk configuration, and doesn't touch Splunk Enterprise Security.
Prerequisites
- A Splunk Enterprise instance, or a Splunk Cloud Platform deployment with REST API access. Free trial Splunk Cloud Platform accounts can't access the REST API.
- The management URL, including the scheme and port:
- Splunk Enterprise: for example
https://splunk.example.com:8089. - Splunk Cloud Platform:
https://<deployment-name>.splunkcloud.com:8089. If port 8089 isn't open on your deployment yet, open a case with Splunk Support to enable it.
- Splunk Enterprise: for example
- A Splunk user or authentication token with the capabilities below.
- Access to JupiterOne with permission to configure integrations.
Splunk Enterprise instances usually sit inside a private network that the internet can't reach. In that case, run this integration through a JupiterOne Collector inside your network.
Configuration in Splunk
Create a dedicated role for JupiterOne, and give a user or token that role:
search: runs the hosts and forwarders searches (search/v2/jobs).- Searchable indexes (
srchIndexesAllowed): every index that holds data from the devices you want in the inventory, plus_internal, which holds the forwarder connection metrics. Hosts only appear from indexes the role can search. list_settings: reads the instance details (server/info).list_deployment_server: adds server classes, deployed apps and phone-home times to forwarders (deployment/server/clients). This is only needed if the instance is a deployment server.indexes_list_all: lists indexes (data/indexes). This is only needed whenindexes_list_allis enforced inauthorize.conf, because by default every user can list indexes.
Give the role a modest search job quota so the integration's searches don't compete with your analysts.
The integration supports two authentication methods. Pick one when you create the instance in JupiterOne.
- Username and password: a local Splunk user with the role above.
- Authentication token: recommended for Splunk Cloud Platform and for users who sign in with SSO. Token authentication must be enabled, and you create the token under Settings > Tokens for a user with the role above. See Create authentication tokens.
On Splunk Cloud Platform, point the integration at your search head. The hosts and forwarders searches work there. Splunk documents its introspection endpoints, which include server/info and data/indexes, as not applicable to Splunk Cloud Platform, and deployment server endpoints as generally not accessible there, so index data and forwarder deployment details may be limited.
Configuration in JupiterOne
To install the Splunk integration in JupiterOne, navigate to the Integrations tab in JupiterOne and select Splunk. Click New Instance to begin configuring your integration.
Creating an instance requires the following:
- The Account Name used to identify the Splunk account in JupiterOne. Ingested entities will have this value stored in
tag.AccountNamewhen theAccountNametoggle is enabled. - Description to assist in identifying the integration instance, if desired.
- Polling Interval that you feel is sufficient for your monitoring needs. You may leave this as
DISABLEDand manually execute the integration. - The Splunk Management URL, for example
https://splunk.example.com:8089. - The authentication method and its fields:
- Authentication: the Username and Password.
- API Token: the Authentication Token.
- Optionally, a CA Certificate (PEM) when
splunkdpresents a self-signed or internal-CA certificate. Disable TLS Verification is also available, but it isn't recommended. - Optionally, the Host Lookback (days) (default 30): hosts with no events in this window aren't ingested.
- Optionally, the Forwarder Lookback (days) (default 7): forwarders that haven't connected in this window aren't ingested.
Click Create once all values are provided to finalize the integration.
Data sources
All data sources are on by default. You can turn any of them off in the instance's ingestion source settings.
| Ingestion source | Data collected |
|---|---|
| Hosts | One device for each host that sent data to the indexes the role can search within the lookback window, with first and last seen times, event count, indexes and sourcetypes. Hosts that run a forwarder also get OS, IP, architecture and forwarder type and version. |
| Forwarders | Forwarders that connected to your indexers within the lookback window, from the connection metrics in _internal, with hostname, IP, OS, architecture, version, forwarder type and receiving indexers. When the instance is a deployment server, they also get DNS name, server classes, deployed app names and last phone-home time. Each forwarder is linked to the host it runs on. |
| Indexes | Splunk indexes, with type, current and maximum size, retention, oldest and newest event, and whether each is internal or enabled. |
When you run the integration container yourself instead of through JupiterOne, it doesn't read these settings and runs every data source. To turn some off, set the DISABLED_INGESTION_SOURCES environment variable to a comma-separated list of hosts, forwarders and indexes.
The instance itself (splunk_account) is always collected.
Send JupiterOne alerts to Splunk
This is a separate JupiterOne app for Splunk that works the other way around: it brings JupiterOne alert data into Splunk.
To send JupiterOne alerts to Splunk, you will first need to obtain your JupiterOne accountId and generate an API Key in JupiterOne:
- Generate your API Key: Create your API Key by following instructions on our API Key Access guide.
- Obtaining your JupiterOne
accountId: Run this query within the JupiterOne search on the app's home view:find jupiterone_account. The results column will display the value within theaccountIdcolumn.
Add JupiterOne to Splunk
With both the API Key and accountId from JupiterOne, proceed to Splunk to add JupiterOne to your Splunk workspace. This can be done either by:
-
Installing the JupiterOne app directly from the Splunk dashboard:
- On the Splunk home dashboard, use the Find More Apps link to find and install the JupiterOne Add-on and the JupiterOne app.
-
Downloading the JupiterOne add-on and app package from the Splunkbase marketplace:
- In Splunk navigate to Apps > Manage Apps by clicking the gear icon in the upper-left corner.
- Select Install app from file in the top-right.
- Choose File and select the JupiterOne add-on package or app package.
- Click Upload and follow the prompts to complete the process.
Configure the JupiterOne Add-on in Splunk
Now that JupiterOne has been added to Splunk, the last step is to finalize the configuration and input your JupiterOne credentials.
- In Splunk, navigate to the JupiterOne Add-on for Splunk, and click Configuration.
- Click Add to create a new JupiterOne account configuration on the add-on.
- Enter your JupiterOne Account Name,
accountId, and API Key. Click Add when finished.- Optional: You can add a proxy under the Proxy tab, or change the log level on the Logging tab. By default the log level is
INFO.
- Optional: You can add a proxy under the Proxy tab, or change the log level on the Logging tab. By default the log level is
- Next, go to the Inputs tab, and choose Create New Input.
- Enter the desired values for the input, and press Add once done.
This concludes the setup for the Add-on. With the Add-on configured, the JupiterOne app within Splunk will start working without additional setup.
Next steps
Now that your integration instance has been configured, it will begin running on the polling interval you provided, populating data within JupiterOne. Continue on to our Instance management guide to learn more about working with and editing integration instances.
Additional resources
Roles
RBAC roles that must be assigned to the integration principal.
Show Roles (4)
indexes_list_alllist_deployment_serverlist_settingssearch
Endpoints
API endpoints that the integration makes requests to.
Show Endpoints (7)
https://<splunk-host>:8089/services/data/indexeshttps://<splunk-host>:8089/services/deployment/server/clientshttps://<splunk-host>:8089/services/search/v2/jobshttps://<splunk-host>:8089/services/search/v2/jobs/{search_id}https://<splunk-host>:8089/services/search/v2/jobs/{search_id}/controlhttps://<splunk-host>:8089/services/search/v2/jobs/{search_id}/resultshttps://<splunk-host>:8089/services/server/info
Documentation Links
Links to provider documentation relevant to setup and configuration.
Show Documentation Links (4)
- https://github.com/splunk/splunk-sdk-python/blob/master/splunklib/client.py
- https://help.splunk.com/en/splunk-enterprise/leverage-rest-apis/rest-api-reference/10.6/deployment-endpoints/deployment-endpoint-descriptions
- https://help.splunk.com/en/splunk-enterprise/leverage-rest-apis/rest-api-reference/10.6/introspection-endpoints/introspection-endpoint-descriptions
- https://help.splunk.com/en/splunk-enterprise/leverage-rest-apis/rest-api-reference/10.6/search-endpoints/search-endpoint-descriptions
Entities
The following entities are created:
| Resources | Entity _type | Entity _class |
|---|---|---|
| Account | splunk_account | Account |
| Forwarder | splunk_forwarder | HostAgent |
| Host | splunk_host | Device |
| Index | splunk_index | DataStore |
| Service | splunk_service | Service |
Relationships
The following relationships are created:
Source Entity _type | Relationship _class | Target Entity _type |
|---|---|---|
splunk_account | PROVIDES | splunk_service |
splunk_account | HAS | splunk_index |
splunk_forwarder | MONITORS | splunk_host |
Splunk Account
splunk_account inherits from Account
| Property | Type | Description | Specifications |
|---|---|---|---|
guid * | string | null | Globally unique identifier for the Splunk instance. | |
hostname * | string | null | Fully qualified domain name of the Splunk server. | |
isForwarding * | boolean | null | Whether the instance is forwarding data. | |
licenseState * | string | null | Status of the Splunk license (OK or Expired). | |
osName * | string | null | Operating system the splunkd process runs on. | |
productType * | string | null | Splunk software product type (e.g. enterprise, lite, splunk). | |
serverRoles * | array | null | Server roles the instance holds (e.g. indexer, deployment_server, universal_forwarder). | |
startedOn * | number | null | Timestamp (ms since epoch) when the Splunk platform last started. | |
version * | string | null | Splunk platform version, including build number. |
Splunk Forwarder
splunk_forwarder inherits from HostAgent
| Property | Type | Description | Specifications |
|---|---|---|---|
appNames * | array | null | Names of the applications deployed to this client (names only, not the app payload). | |
architecture * | string | null | CPU architecture the forwarder reports (e.g. x86_64). | |
averagePhoneHomeIntervalSeconds * | number | null | Average phone-home interval of the client, in seconds. | |
build * | string | null | Splunk build number running on the deployment client. | |
connectionType * | string | null | How the forwarder sends data: cooked, cookedSSL, raw or rawSSL. | |
dnsName * | string | null | DNS lookup name of the deployment-client server. | |
firstConnectedOn * | number | null | First forwarder connection to an indexer within the lookback window (ms since epoch). | |
forwarderType * | string | null | Forwarder type reported to the indexers: uf (universal), lwf (light) or full (heavy). | |
guid * | string | null | Splunk instance GUID of the forwarder. | |
hasDeploymentError * | boolean | null | Whether the client has a deployment-error indication. | |
hostname * | string | null | Host name of the deployment-client server. | |
ipAddress * | string | null | IP address of the client reported to the deployment server. | |
lastConnectedOn * | number | null | Last forwarder connection to an indexer within the lookback window (ms since epoch). | |
lastPhoneHomeOn * | number | null | Last time the forwarder phoned home to the deployment server (ms since epoch). | |
machineType * | string | null | OS/architecture (utsname) of the deployment client. | |
managementPort * | string | null | Management port of the deployment client. | |
operatingSystem * | string | null | Operating system the forwarder reports to the indexers (e.g. Linux, Windows). | |
receivingIndexers * | array | null | Indexers that received data from the forwarder. | |
serverClasses * | array | null | Server classes the deployment client is configured to receive apps from. | |
version * | string | null | Splunk version the forwarder runs. |
Splunk Host
splunk_host inherits from Device
| Property | Type | Description | Specifications |
|---|---|---|---|
architecture * | string | null | CPU architecture reported by the forwarder on this host. | |
eventCount * | number | null | Number of events from this host within the lookback window. | |
firstSeenOn * | number | null | Time of the earliest event from this host within the lookback window (ms since epoch). | |
forwarderType * | string | null | Type of the forwarder on this host: uf (universal), lwf (light) or full (heavy). | |
forwarderVersion * | string | null | Splunk version of the forwarder on this host. | |
hostValue * | string | The host value as Splunk indexed it (hostname, FQDN or IP address). | |
indexNames * | array | null | Indexes holding data from this host (first 100, sorted by name). | |
ipAddress * | string | null | IP address of the device: the host value when it is an IP, otherwise the address its forwarder connects from. | |
isForwarderInstalled * | boolean | Whether a Splunk forwarder reporting this hostname was found. | |
sourceCount * | number | null | Number of distinct sources (files, inputs) from this host within the lookback window. | |
sourcetypes * | array | null | Sourcetypes of the data from this host, which show what kind of device it is (first 100, sorted by name). |
Splunk Index
splunk_index inherits from DataStore
| Property | Type | Description | Specifications |
|---|---|---|---|
currentDBSizeMB * | number | null | Total size, in MB, of data currently stored in the index (home, cold and thawed paths). | |
datatype * | string | null | The type of index (event or metric). | |
isEnabled * | boolean | null | Whether the index is enabled (derived by inverting the Splunk disabled flag). | |
isInternal * | boolean | null | Whether this is an internal index (e.g. _internal, _audit). | |
maxTotalDataSizeMB * | number | null | The configured maximum size of the index, in MB. | |
newestEventOn * | number | null | Timestamp (ms since epoch) of the newest event stored in the index. | |
oldestEventOn * | number | null | Timestamp (ms since epoch) of the oldest event stored in the index. |
Splunk Service
splunk_service inherits from Service