Pushed by: admin License: 1CFBBDCA-31F (Starter) Timestamp: 2026-01-31T21:14:41.472689masterdev
parent
dd0f2f0e5f
commit
29f638f8f6
@ -0,0 +1,16 @@
|
|||||||
|
[logevent]
|
||||||
|
|
||||||
|
param.event = <string>
|
||||||
|
* Default value for event content sent to the receiver endpoint, which is eventually indexed
|
||||||
|
|
||||||
|
param.host = <string>
|
||||||
|
* Default field value of the host field of the newly indexed event
|
||||||
|
|
||||||
|
param.source = <string>
|
||||||
|
* Default field value of the source field of the newly indexed event
|
||||||
|
|
||||||
|
param.sourcetype = <string>
|
||||||
|
* Default field value of the sourcetype field of the newly indexed event
|
||||||
|
|
||||||
|
param.index = <string>
|
||||||
|
* Default field value for the destination index of the newly indexed event
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
# Log event action settings
|
||||||
|
|
||||||
|
action.log_event = [0|1]
|
||||||
|
* Enable log event action
|
||||||
|
|
||||||
|
action.logevent.param.event = <string>
|
||||||
|
* Event content sent to the receiver endpoint, which is eventually indexed
|
||||||
|
|
||||||
|
action.logevent.param.host = <string>
|
||||||
|
* Field value of the host field of the newly indexed event
|
||||||
|
|
||||||
|
action.logevent.param.source = <string>
|
||||||
|
* Field value of the source field of the newly indexed event
|
||||||
|
|
||||||
|
action.logevent.param.sourcetype = <string>
|
||||||
|
* Field value of the sourcetype field of the newly indexed event
|
||||||
|
|
||||||
|
action.logevent.param.index = <string>
|
||||||
|
* Destination index of the newly indexed event
|
||||||
|
After Width: | Height: | Size: 1.4 KiB |
@ -0,0 +1,55 @@
|
|||||||
|
from __future__ import annotations
|
||||||
|
import sys
|
||||||
|
import json
|
||||||
|
from future.moves.urllib.parse import urlencode
|
||||||
|
from future.moves.urllib.request import urlopen, Request
|
||||||
|
from future.moves.urllib.error import HTTPError, URLError
|
||||||
|
from splunk.util import unicode
|
||||||
|
|
||||||
|
def log_event(settings, event, source, sourcetype, host, index) -> bool:
|
||||||
|
if event is None:
|
||||||
|
sys.stderr.write("ERROR No event provided\n")
|
||||||
|
return False
|
||||||
|
query = [('source', source), ('sourcetype', sourcetype), ('index', index)]
|
||||||
|
if host:
|
||||||
|
query.append(('host', host))
|
||||||
|
url = '%s/services/receivers/simple?%s' % (settings.get('server_uri'), urlencode(query))
|
||||||
|
try:
|
||||||
|
encoded_body = unicode(event).encode('utf-8')
|
||||||
|
req = Request(url, encoded_body, {'Authorization': 'Splunk %s' % settings.get('session_key')})
|
||||||
|
res = urlopen(req)
|
||||||
|
if 200 <= res.code < 300:
|
||||||
|
sys.stderr.write("DEBUG receiver endpoint responded with HTTP status=%d\n" % res.code)
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
sys.stderr.write("ERROR receiver endpoint responded with HTTP status=%d\n" % res.code)
|
||||||
|
return False
|
||||||
|
except HTTPError as e:
|
||||||
|
sys.stderr.write("ERROR Error sending receiver request: %s\n" % e)
|
||||||
|
except URLError as e:
|
||||||
|
sys.stderr.write("ERROR Error sending receiver request: %s\n" % e)
|
||||||
|
except Exception as e:
|
||||||
|
sys.stderr.write("ERROR Error %s\n" % e)
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
if len(sys.argv) < 2 or sys.argv[1] != "--execute":
|
||||||
|
sys.stderr.write("FATAL Unsupported execution mode (expected --execute flag)\n")
|
||||||
|
sys.exit(1)
|
||||||
|
try:
|
||||||
|
settings = json.loads(sys.stdin.read())
|
||||||
|
config = settings['configuration']
|
||||||
|
success = log_event(
|
||||||
|
settings,
|
||||||
|
event=config.get('event'),
|
||||||
|
source=config.get('source'),
|
||||||
|
sourcetype=config.get('sourcetype'),
|
||||||
|
host=config.get('host'),
|
||||||
|
index=config.get('index')
|
||||||
|
)
|
||||||
|
if not success:
|
||||||
|
sys.exit(2)
|
||||||
|
except Exception as e:
|
||||||
|
sys.stderr.write("ERROR Unexpected error: %s\n" % e)
|
||||||
|
sys.exit(3)
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
[logevent]
|
||||||
|
python.version = latest
|
||||||
|
is_custom = 1
|
||||||
|
label = Log Event
|
||||||
|
description = Send log event to Splunk receiver endpoint
|
||||||
|
icon_path = logevent.png
|
||||||
|
payload_format = json
|
||||||
|
|
||||||
|
param.source = alert:$name$
|
||||||
|
param.sourcetype = generic_single_line
|
||||||
|
param.host =
|
||||||
|
param.index = main
|
||||||
@ -0,0 +1,18 @@
|
|||||||
|
# Version 10.0.2
|
||||||
|
#
|
||||||
|
# Splunk app configuration file
|
||||||
|
#
|
||||||
|
|
||||||
|
[ui]
|
||||||
|
is_visible = 0
|
||||||
|
label = Log Event Alert Action
|
||||||
|
|
||||||
|
[launcher]
|
||||||
|
author = Splunk
|
||||||
|
description = Log Event Alert Action
|
||||||
|
version=10.0.2
|
||||||
|
|
||||||
|
[install]
|
||||||
|
state = enabled
|
||||||
|
is_configured = 1
|
||||||
|
allows_disable = false
|
||||||
@ -0,0 +1,76 @@
|
|||||||
|
<form class="form-horizontal form-complex">
|
||||||
|
<div class="control-group">
|
||||||
|
<label class="control-label" for="logevent_event">Event</label>
|
||||||
|
|
||||||
|
<div class="controls">
|
||||||
|
<textarea name="action.logevent.param.event" id="logevent_event" style="width: 270px; max-width: 270px; height: 60px;"></textarea>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="control-group">
|
||||||
|
<div class="controls">
|
||||||
|
<span class="help-block" style="display: block; position: static; width: auto; margin-left: 0;">
|
||||||
|
Specify event text for the logged event.
|
||||||
|
<br />
|
||||||
|
<a href="{{SPLUNKWEB_URL_PREFIX}}/help?location=learnmore.alert.action.logevent" target="_blank"
|
||||||
|
title="Splunk help">Learn More <i class="icon-external"></i></a>
|
||||||
|
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="control-group">
|
||||||
|
<label class="control-label" for="logevent_source">Source</label>
|
||||||
|
|
||||||
|
<div class="controls">
|
||||||
|
<input type="text" class="input-xlarge" name="action.logevent.param.source" id="logevent_source" placeholder="alert:$name$"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="control-group">
|
||||||
|
<div class="controls">
|
||||||
|
<span class="help-block" style="display: block; position: static; width: auto; margin-left: 0;">
|
||||||
|
Value of the <span class="mono-space">source</span> field.
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="control-group">
|
||||||
|
<label class="control-label" for="logevent_sourcetype">Sourcetype</label>
|
||||||
|
|
||||||
|
<div class="controls">
|
||||||
|
<input type="text" class="input-xlarge" name="action.logevent.param.sourcetype" id="logevent_sourcetype" placeholder="generic_single_line"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="control-group">
|
||||||
|
<div class="controls">
|
||||||
|
<span class="help-block" style="display: block; position: static; width: auto; margin-left: 0;">
|
||||||
|
Value of the <span class="mono-space">sourcetype</span> field.
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="control-group">
|
||||||
|
<label class="control-label" for="logevent_host">Host</label>
|
||||||
|
|
||||||
|
<div class="controls">
|
||||||
|
<input type="text" class="input-xlarge" name="action.logevent.param.host" id="logevent_host" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="control-group">
|
||||||
|
<div class="controls">
|
||||||
|
<span class="help-block" style="display: block; position: static; width: auto; margin-left: 0;">
|
||||||
|
Value of the <span class="mono-space">host</span> field.
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="control-group">
|
||||||
|
<label class="control-label" for="logevent_index">Index</label>
|
||||||
|
|
||||||
|
<div class="controls">
|
||||||
|
<input type="text" class="input-xlarge" name="action.logevent.param.index" id="logevent_index" placeholder="main"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="control-group">
|
||||||
|
<div class="controls">
|
||||||
|
<span class="help-block" style="display: block; position: static; width: auto; margin-left: 0;">
|
||||||
|
Indicate a destination <span class="mono-space">index</span> for the logged event. Ensure that destination matches an existing index.
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
[validation:savedsearch]
|
||||||
|
# Require event to be set if logevent action is enabled
|
||||||
|
action.logevent = case('action.logevent' != "1", null(), 'action.logevent.param.event' == "action.logevent.param.event" OR 'action.logevent.param.event' == "", "No event text specified for log event action", 1==1, null())
|
||||||
@ -0,0 +1,13 @@
|
|||||||
|
# Application-level permissions
|
||||||
|
|
||||||
|
[]
|
||||||
|
access = read : [ * ], write : [ admin, power ]
|
||||||
|
|
||||||
|
[alert_actions]
|
||||||
|
export = system
|
||||||
|
|
||||||
|
[alerts]
|
||||||
|
export = system
|
||||||
|
|
||||||
|
[restmap]
|
||||||
|
export = system
|
||||||
Loading…
Reference in new issue