rsyslog/tests/omhttp-batch-lokirest-retry.sh
Dan Molik 8793a88987
omhttp: add basic support for Loki Rest
Loki is a new message indexer and querier from Grafana Labs. See
https://github.com/grafana/loki for details on Loki.

This change provides the initial message structure to send bulk message
payloads to the Loki Rest endpoint. omhttp, recieved a new bulk message
format called lokirest. Additionally, the plugin relies on the user to
provide the correct "stream" read message format.

A loki template must be json compatible and include a "stream" key of
key value tags, and a values key of an array of 2 element arrays, where
each 2 element array is the unix epoch in nanoseconds followed by an
unstrectured message.

An example:

    template(name="array_loki" type="string" string="{\"stream\":{\"host\":\"%HOSTNAME%\",\"facility\":\"%syslogfacility-text%\",\"priority\":\"%syslogpriority-text%\",\"syslogtag\":\"%syslogtag%\"},\"values\": [[ \"%timegenerated:::date-unixtimestamp%000000000\", \"%msg%\" ]]}")
2019-11-22 09:03:10 -05:00

79 lines
1.6 KiB
Bash
Executable File

#!/bin/bash
# This file is part of the rsyslog project, released under ASL 2.0
# Starting actual testbench
. ${srcdir:=.}/diag.sh init
export NUMMESSAGES=50000
port="$(get_free_port)"
omhttp_start_server $port --fail-every 100
generate_conf
add_conf '
module(load="../contrib/omhttp/.libs/omhttp")
main_queue(queue.dequeueBatchSize="2048")
template(name="tpl" type="string"
string="{\"msgnum\":\"%msg:F,58:2%\"}")
# Echo message as-is for retry
template(name="tpl_echo" type="string" string="%msg%")
ruleset(name="ruleset_omhttp_retry") {
action(
name="action_omhttp"
type="omhttp"
errorfile="'$RSYSLOG_DYNNAME/omhttp.error.log'"
template="tpl_echo"
server="localhost"
serverport="'$port'"
restpath="my/endpoint"
batch="on"
batch.maxsize="100"
batch.format="lokirest"
retry="on"
retry.ruleset="ruleset_omhttp_retry"
# Auth
usehttps="off"
) & stop
}
ruleset(name="ruleset_omhttp") {
action(
name="action_omhttp"
type="omhttp"
errorfile="'$RSYSLOG_DYNNAME/omhttp.error.log'"
template="tpl"
server="localhost"
serverport="'$port'"
restpath="my/endpoint"
batch="on"
batch.maxsize="100"
batch.format="lokirest"
retry="on"
retry.ruleset="ruleset_omhttp_retry"
# Auth
usehttps="off"
) & stop
}
if $msg contains "msgnum:" then
call ruleset_omhttp
'
startup
injectmsg
shutdown_when_empty
wait_shutdown
omhttp_get_data $port my/endpoint lokirest
omhttp_stop_server
seq_check
exit_test