Overview:
steps included:
- enable persistent journald storage
- create rsyslog rule to read journald and write to json log file,file name depends on docker_appnane
remaining steps to be achieved by other Ansible roles
- docker container need to set log driver to journald and expose label docker-appname e.g
docker run --log-driver=journald \
--log-opt labels=docker-appname \
--label docker-appname=mulesoft \
- Splunk UF read /var/log/docker-{{docker_appname}}.log and forward to splunk cloud
- logrorate rule to rotate /var/log/docker-{{docker_appname}}.log
Rsyslog rule in RHEL7
#imjournal module is loaded in main syslogd.conf
$IMJournalStateFile imjournal.state
$imjournalRatelimitInterval 300
$imjournalRatelimitBurst 30000
module(load="mmjsonparse")
action(type="mmjsonparse")
#output all json fileds and remove redundant last msg field
#template(name="jsonformat" type="string" string="%$!all-json:R,ERE,1,FIELD:(.*), (\"msg\":.*)--end% }\n")
template(name="jsonformat" type="string" string="%$!all-json%\n")
if ($!DOCKER_APPNAME == "{{docker_appname}}") then {
action(type="omfile" file="/var/log/docker-{{docker_appname}}.log" template="jsonformat")
stop
}
Splunk customized source type to be set in Heavy forwarder or Indexer(universal forwarder doesn't support sourcetype defination)
props.conf
[json_realtime_timestamp] KV_MODE = json MAX_TIMESTAMP_LOOKAHEAD = 16 NO_BINARY_CHECK = 1 SHOULD_LINEMERGE = false TIME_FORMAT = %s%6N TIME_PREFIX = "_SOURCE_REALTIME_TIMESTAMP":\s*" pulldown_type = 1 TZ=UTC
inputs.conf in universal forwarder in Docker host
[monitor:///var/log/docker-mulesoft.log] disabled = true sourcetype=json_realtime_timestamp index = mulesoft