Splunk Universal Forwarder αž“αŸ…αž€αŸ’αž“αž»αž„ Docker αž‡αžΆαž’αŸ’αž“αž€αž”αŸ’αžšαž˜αžΌαž›αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž”αŸ’αžšαž–αŸαž“αŸ’αž’

Splunk Universal Forwarder αž“αŸ…αž€αŸ’αž“αž»αž„ Docker αž‡αžΆαž’αŸ’αž“αž€αž”αŸ’αžšαž˜αžΌαž›αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž”αŸ’αžšαž–αŸαž“αŸ’αž’

Splunk αž‚αžΊαž‡αžΆαž•αž›αž·αžαž•αž›αž˜αž½αž™αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαŸ„αž˜αž•αž›αž·αžαž•αž›αžœαž·αž—αžΆαž‚ αž“αž·αž„αž”αŸ’αžšαž˜αžΌαž›αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž–αžΆαžŽαž·αž‡αŸ’αž‡αž€αž˜αŸ’αž˜αžŠαŸ‚αž›αž’αžΆαž…αž‘αž‘αž½αž›αžŸαŸ’αž‚αžΆαž›αŸ‹αž”αžΆαž“αž…αŸ’αžšαžΎαž“αž”αŸ†αž•αž»αžαŸ” αžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚αž₯αž‘αžΌαžœαž“αŸαŸ‡ αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž€αžΆαžšαž›αž€αŸ‹αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαž‘αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž‘αŸαžŸαžšαž»αžŸαŸ’αžŸαŸŠαžΈαž‘αŸ€αžαž‘αŸ αž“αŸαŸ‡αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž αŸαžαž»αž•αž›αžŠαŸ‚αž›αž˜αž·αž“αžαŸ’αžšαžΌαžœαžŸαžšαžŸαŸαžšαž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†/αžšαž”αŸ€αž”αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž•αž›αž·αžαž•αž›αž“αŸαŸ‡αž‘αŸαŸ”

αž‚αŸ„αž›αž”αŸ†αžŽαž„αŸ– αž”αŸ’αžšαž˜αžΌαž›αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž–αžΈαžαŸ’αž“αžΆαŸ†αž„ docker αž€αŸ’αž“αž»αž„ Splunk αžŠαŸ„αž™αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ

αžαŸ’αž‰αž»αŸ†αž…αž„αŸ‹αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž•αŸ’αž›αžΌαžœαž€αžΆαžšαžŠαŸ‚αž›αž˜αžΎαž›αž‘αŸ…αž…αž˜αŸ’αž›αŸ‚αž€αž”αž“αŸ’αžαž·αž…αž“αŸ…αž–αŸαž›αž”αŸ’αžšαžΎ Docker αŸ”
αž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αž˜αž‡αŸ’αžˆαž˜αžŽαŸ’αžŒαž› Docker
αžαžΎαž™αžΎαž„αž˜αžΆαž“αž’αŸ’αžœαžΈαžαŸ’αž›αŸ‡αŸ–

1. αžšαžΌαž”αž—αžΆαž– Pullim

$ docker pull splunk/universalforwarder:latest

2. αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž’αž»αž„αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž…αžΆαŸ†αž”αžΆαž…αŸ‹

$ docker run -d  -p 9997:9997 -e 'SPLUNK_START_ARGS=--accept-license' -e 'SPLUNK_PASSWORD=<password>' splunk/universalforwarder:latest

3. αž™αžΎαž„αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αž’αž»αž„

docker exec -it <container-id> /bin/bash

αž”αž“αŸ’αž‘αžΆαž”αŸ‹ αž™αžΎαž„β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αžŸαŸ’αž“αžΎβ€‹αž±αŸ’αž™β€‹αž‘αŸ…β€‹αž€αžΆαž“αŸ‹β€‹αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“β€‹αžŠαŸ‚αž›β€‹αž‚αŸβ€‹αžŸαŸ’αž‚αžΆαž›αŸ‹β€‹αž€αŸ’αž“αž»αž„β€‹αž―αž€αžŸαžΆαžšαŸ”

αž αžΎαž™αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž’αž»αž„αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαžœαžΆαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αŸ–


./splunk add forward-server <host name or ip address>:<listening port>
./splunk add monitor /var/log
./splunk restart

αžšαž„αŸ‹αž…αžΆαŸ†αŸ” αž’αŸ’αžœαžΈ?

αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αžΆαžšαž—αŸ’αž‰αžΆαž€αŸ‹αž•αŸ’αž’αžΎαž›αž˜αž·αž“αž”αž‰αŸ’αž…αž”αŸ‹αž“αŸ…αž‘αžΈαž“αŸ„αŸ‡αž‘αŸαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αž»αž„αžαžΊαž“αŸαžšαž–αžΈαžšαžΌαž”αž—αžΆαž–αž•αŸ’αž›αžΌαžœαž€αžΆαžšαž€αŸ’αž“αž»αž„αžšαž”αŸ€αž”αž’αž“αŸ’αžαžšαž€αž˜αŸ’αž˜ αž’αŸ’αž“αž€αž“αžΉαž„αžƒαžΎαž‰αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ–

αž€αžΆαžšαžαž€αž…αž·αžαŸ’αžαž”αž“αŸ’αžαž·αž…


$ docker run -it -p 9997:9997 -e 'SPLUNK_START_ARGS=--accept-license' -e 'SPLUNK_PASSWORD=password' splunk/universalforwarder:latest

PLAY [Run default Splunk provisioning] *******************************************************************************************************************************************************************************************************
Tuesday 09 April 2019  13:40:38 +0000 (0:00:00.096)       0:00:00.096 *********

TASK [Gathering Facts] ***********************************************************************************************************************************************************************************************************************
ok: [localhost]
Tuesday 09 April 2019  13:40:39 +0000 (0:00:01.520)       0:00:01.616 *********

TASK [Get actual hostname] *******************************************************************************************************************************************************************************************************************
changed: [localhost]
Tuesday 09 April 2019  13:40:40 +0000 (0:00:00.599)       0:00:02.215 *********
Tuesday 09 April 2019  13:40:40 +0000 (0:00:00.054)       0:00:02.270 *********

TASK [set_fact] ******************************************************************************************************************************************************************************************************************************
ok: [localhost]
Tuesday 09 April 2019  13:40:40 +0000 (0:00:00.075)       0:00:02.346 *********
Tuesday 09 April 2019  13:40:40 +0000 (0:00:00.067)       0:00:02.413 *********
Tuesday 09 April 2019  13:40:40 +0000 (0:00:00.060)       0:00:02.473 *********
Tuesday 09 April 2019  13:40:40 +0000 (0:00:00.051)       0:00:02.525 *********
Tuesday 09 April 2019  13:40:40 +0000 (0:00:00.056)       0:00:02.582 *********
Tuesday 09 April 2019  13:40:41 +0000 (0:00:00.216)       0:00:02.798 *********
included: /opt/ansible/roles/splunk_common/tasks/change_splunk_directory_owner.yml for localhost
Tuesday 09 April 2019  13:40:41 +0000 (0:00:00.087)       0:00:02.886 *********

TASK [splunk_common : Update Splunk directory owner] *****************************************************************************************************************************************************************************************
ok: [localhost]
Tuesday 09 April 2019  13:40:41 +0000 (0:00:00.324)       0:00:03.210 *********
included: /opt/ansible/roles/splunk_common/tasks/get_facts.yml for localhost
Tuesday 09 April 2019  13:40:41 +0000 (0:00:00.094)       0:00:03.305 *********

Π½Ρƒ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅...

αž’αžŸαŸ’αž…αžΆαžšαŸ’αž™αŸ” αžšαžΌαž”αž—αžΆαž–αž“αŸαŸ‡αž˜αž·αž“αž˜αžΆαž“αžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚αžœαžαŸ’αžαž»αž”αž»αžšαžΆαžŽαž€αŸαžŠαŸ„αž™αŸ” αž“αŸ„αŸ‡αž‚αžΊαžšαžΆαž›αŸ‹αž–αŸαž›αžŠαŸ‚αž›αž’αŸ’αž“αž€αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜ αžœαžΆαž“αžΉαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαž–αŸαž›αžœαŸαž›αžΆαžŠαžΎαž˜αŸ’αž”αžΈαž‘αžΆαž‰αž™αž€αž”αžŽαŸ’αžŽαžŸαžΆαžšαžŠαŸ„αž™αž”αŸ’αžšαžΎαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αŸ„αž›αž–αžΈαžš αž–αž“αŸ’αž›αžΆ αž“αž·αž„αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αŸ”
αž…αž»αŸ‡ docker-way αž“αž·αž„αž’αŸ’αžœαžΈαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ„αŸ‡?

αž’αžαŸ‹αž’αžΈβ€‹αž‘αŸβ€‹αž’αžšαž‚αž»αžŽβ€‹αž αžΎαž™αŸ” αž™αžΎαž„αž“αžΉαž„αžŠαžΎαžšαžαžΆαž˜αž•αŸ’αž›αžΌαžœαž•αŸ’αžŸαŸαž„αŸ” αž…αž»αŸ‡αž”αžΎαž™αžΎαž„αž’αŸ’αžœαžΎαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸαŸ‡αž“αŸ…αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž‡αž½αž”αž”αŸ’αžšαž‡αž»αŸ†αž‚αŸ’αž“αžΆ? αž’αž‰αŸ’αž…αžΉαž„αžαŸ„αŸ‡αž‘αŸ…!

αžŠαžΎαž˜αŸ’αž”αžΈαž€αž»αŸ†αž±αŸ’αž™αž–αž“αŸ’αž™αžΆαžšαž–αŸαž›αž™αžΌαžš αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž”αž„αŸ’αž αžΆαž‰αž‡αžΌαž“αž’αŸ’αž“αž€αž“αžΌαžœαžšαžΌαž”αž—αžΆαž–αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž“αŸαŸ‡αž—αŸ’αž›αžΆαž˜αŸ—αŸ–

Dockerfile

# Π’ΡƒΡ‚ Ρƒ ΠΊΠΎΠ³ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ прСдпочтСния
FROM centos:7

# Π—Π°Π΄Π°Ρ‘ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ стартС Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ…
ENV SPLUNK_HOME /splunkforwarder
ENV SPLUNK_ROLE splunk_heavy_forwarder
ENV SPLUNK_PASSWORD changeme
ENV SPLUNK_START_ARGS --accept-license

# Π‘Ρ‚Π°Π²ΠΈΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹
# wget - Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Ρ‹
# expect - понадобится для ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ запуска Splunk Π½Π° этапС сборки
# jq - ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² скриптах, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡ‚ статистику Π΄ΠΎΠΊΠ΅Ρ€Π°
RUN yum install -y epel-release 
    && yum install -y wget expect jq

# ΠšΠ°Ρ‡Π°Π΅ΠΌ, распаковываСм, удаляСм
RUN wget -O splunkforwarder-7.2.4-8a94541dcfac-Linux-x86_64.tgz 'https://www.splunk.com/bin/splunk/DownloadActivityServlet?architecture=x86_64&platform=linux&version=7.2.4&product=universalforwarder&filename=splunkforwarder-7.2.4-8a94541dcfac-Linux-x86_64.tgz&wget=true' 
    && wget -O docker-18.09.3.tgz 'https://download.docker.com/linux/static/stable/x86_64/docker-18.09.3.tgz' 
    && tar -xvf splunkforwarder-7.2.4-8a94541dcfac-Linux-x86_64.tgz 
    && tar -xvf docker-18.09.3.tgz  
    && rm -f splunkforwarder-7.2.4-8a94541dcfac-Linux-x86_64.tgz 
    && rm -f docker-18.09.3.tgz

# Π‘ shell скриптами всё понятно, Π° Π²ΠΎΡ‚ inputs.conf, splunkclouduf.spl ΠΈ first_start.sh Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² пояснСнии. Об этом расскаТу послС source тэга.
COPY [ "inputs.conf", "docker-stats/props.conf", "/splunkforwarder/etc/system/local/" ]
COPY [ "docker-stats/docker_events.sh", "docker-stats/docker_inspect.sh", "docker-stats/docker_stats.sh", "docker-stats/docker_top.sh", "/splunkforwarder/bin/scripts/" ]
COPY splunkclouduf.spl /splunkclouduf.spl
COPY first_start.sh /splunkforwarder/bin/

#  Π”Π°Ρ‘ΠΌ ΠΏΡ€Π°Π²Π° Π½Π° исполнСниС, добавляСм ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ выполняСм ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ настройку
RUN chmod +x /splunkforwarder/bin/scripts/*.sh 
    && groupadd -r splunk 
    && useradd -r -m -g splunk splunk 
    && echo "%sudo ALL=NOPASSWD:ALL" >> /etc/sudoers 
    && chown -R splunk:splunk $SPLUNK_HOME 
    && /splunkforwarder/bin/first_start.sh 
    && /splunkforwarder/bin/splunk install app /splunkclouduf.spl -auth admin:changeme 
    && /splunkforwarder/bin/splunk restart

# ΠšΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ ΠΈΠ½ΠΈΡ‚ скрипты
COPY [ "init/entrypoint.sh", "init/checkstate.sh", "/sbin/" ]

# По ТСланию. ΠšΠΎΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ локально ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΈ/Π»ΠΎΠ³ΠΈ, ΠΊΠΎΠΌΡƒ Π½Π΅Ρ‚.
VOLUME [ "/splunkforwarder/etc", "/splunkforwarder/var" ]

HEALTHCHECK --interval=30s --timeout=30s --start-period=3m --retries=5 CMD /sbin/checkstate.sh || exit 1

ENTRYPOINT [ "/sbin/entrypoint.sh" ]
CMD [ "start-service" ]

αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„

first_start.sh

#!/usr/bin/expect -f
set timeout -1
spawn /splunkforwarder/bin/splunk start --accept-license
expect "Please enter an administrator username: "
send -- "adminr"
expect "Please enter a new password: "
send -- "changemer"
expect "Please confirm new password: "
send -- "changemer"
expect eof

αž“αŸ…αž–αŸαž›αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŠαŸ†αž”αžΌαž„ Splunk αžŸαŸ’αž“αžΎαž±αŸ’αž™αž’αŸ’αž“αž€αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αžœαžΆαž“αžΌαžœαž€αžΆαžšαž…αžΌαž› / αž–αžΆαž€αŸ’αž™αžŸαž˜αŸ’αž„αžΆαžαŸ‹ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎ αžαŸ‚ αžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžšαžŠαŸ’αž‹αž”αžΆαž›αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž“αŸ„αŸ‡ αž–αŸ„αž›αž‚αžΊαž“αŸ…αžαžΆαž„αž€αŸ’αž“αž»αž„αž€αž»αž„αžαžΊαž“αŸαžšαŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžšαž”αžŸαŸ‹αž™αžΎαž„ αž™αžΎαž„αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž…αž„αŸ‹αž”αžΎαž€αž€αž»αž„αžαžΊαž“αŸαžšαžŠαžΎαž˜αŸ’αž”αžΈαž±αŸ’αž™αž’αŸ’αžœαžΈαŸ—αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αžΆαž“ αž αžΎαž™αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž αžΌαžšαžŠαžΌαž…αž‘αž“αŸ’αž›αŸαŸ” αž‡αžΆαž€αžΆαžšαž–αž·αžαžŽαžΆαžŸαŸ‹ αž“αŸαŸ‡αž‚αžΊαž‡αžΆ hardcode αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαŸ’αž‰αž»αŸ†αž˜αž·αž“αž”αžΆαž“αžšαž€αžƒαžΎαž‰αžœαž·αž’αžΈαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž‘αŸαŸ”

αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αžαž™αŸ„αž„αž‘αŸ…αžαžΆαž˜αžŸαŸ’αž‚αŸ’αžšαžΈαž”αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·

/splunkforwarder/bin/splunk install app /splunkclouduf.spl -auth admin:changeme

splunkclouduf.spl - αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž―αž€αžŸαžΆαžšαž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž’αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžŽαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Splunk Universal Forwarder αžŠαŸ‚αž›αž’αžΆαž…αž‘αžΆαž‰αž™αž€αž”αžΆαž“αž–αžΈαž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹αž‚αŸαž αž‘αŸ†αž–αŸαžšαŸ”

αž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž…αž»αž…αžŠαžΎαž˜αŸ’αž”αžΈαž‘αžΆαž‰αž™αž€ (αž€αŸ’αž“αž»αž„αžšαžΌαž”αž—αžΆαž–)Splunk Universal Forwarder αž“αŸ…αž€αŸ’αž“αž»αž„ Docker αž‡αžΆαž’αŸ’αž“αž€αž”αŸ’αžšαž˜αžΌαž›αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž”αŸ’αžšαž–αŸαž“αŸ’αž’

Splunk Universal Forwarder αž“αŸ…αž€αŸ’αž“αž»αž„ Docker αž‡αžΆαž’αŸ’αž“αž€αž”αŸ’αžšαž˜αžΌαž›αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž”αŸ’αžšαž–αŸαž“αŸ’αž’
αž“αŸαŸ‡αž‡αžΆαž”αžŽαŸ’αžŽαžŸαžΆαžšαž’αž˜αŸ’αž˜αžαžΆαžŠαŸ‚αž›αž’αžΆαž…αžŸαŸ’αžšαžΆαž™αž€αž‰αŸ’αž…αž”αŸ‹αž”αžΆαž“αŸ” αž“αŸ…αžαžΆαž„αž€αŸ’αž“αž»αž„αž˜αžΆαž“αžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αžαŸ’αžš αž“αž·αž„αž–αžΆαž€αŸ’αž™αžŸαž˜αŸ’αž„αžΆαžαŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ… SplunkCloud αžšαž”αžŸαŸ‹αž™αžΎαž„ αž“αž·αž„ outputs.conf αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž”αž‰αŸ’αž‡αžΈαž“αŸƒαž€αžšαžŽαžΈαž”αž‰αŸ’αž…αžΌαž›αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ” αž―αž€αžŸαžΆαžšαž“αŸαŸ‡αž“αžΉαž„αž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’αžšαž αžΌαžαžŠαž›αŸ‹αž’αŸ’αž“αž€αžŠαŸ†αž‘αžΎαž„αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„ Splunk αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž‘αžΎαž„αžœαž·αž‰ αž¬αž”αž“αŸ’αžαŸ‚αž˜αžαŸ’αž“αžΆαŸ†αž„αž”αž‰αŸ’αž…αžΌαž› αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αž‚αžΊαž“αŸ…αž“αžΉαž„αž€αž“αŸ’αž›αŸ‚αž„αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αžœαžΆαž˜αž·αž“αž˜αžΆαž“αž’αŸ’αžœαžΈαžαž»αžŸαž‘αŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜αžœαžΆαž“αŸ…αžαžΆαž„αž€αŸ’αž“αž»αž„αž’αž»αž„αŸ”

αž αžΎαž™αžšαžΏαž„αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž‚αžΊαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‘αžΎαž„αžœαž·αž‰αŸ” αž”αžΆαž‘/αž…αžΆαžŸ αžŠαžΎαž˜αŸ’αž”αžΈαž’αž“αž»αžœαžαŸ’αžαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžŠαžΌαžš αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž…αžΆαž”αŸ‹αž•αŸ’αžŠαžΎαž˜αžœαžΆαž‘αžΎαž„αžœαž·αž‰αŸ”

αž“αŸ…αž€αŸ’αž“αž»αž„αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ” inputs.conf αž™αžΎαž„αž”αž“αŸ’αžαŸ‚αž˜αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αžŠαŸ‚αž›αž™αžΎαž„αž…αž„αŸ‹αž•αŸ’αž‰αžΎαž‘αŸ… Splunk αŸ” αžœαžΆαž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜αž―αž€αžŸαžΆαžšαž“αŸαŸ‡αž‘αŸ…αž€αŸ’αž“αž»αž„αžšαžΌαž”αž—αžΆαž–αž‘αŸ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž§αž‘αžΆαž αžšαžŽαŸ αž’αŸ’αž“αž€αž…αŸ‚αž€αž…αžΆαž™αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžαžΆαž˜αžšαž™αŸˆαž’αžΆαž™αŸ‰αž„αŸ” αžšαžΏαž„αžαŸ‚αž˜αž½αž™αž‚αžαŸ‹αž‚αžΊαžαžΆ Forwarder αž˜αžΎαž›αžƒαžΎαž‰αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αžŠαŸαž˜αž·αž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜ αž”αžΎαž˜αž·αž“αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž‘αŸαžœαžΆαž“αžΉαž„αžαŸ’αžšαžΌαžœαž€αžΆαžš ./splunk αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‘αžΎαž„αžœαž·αž‰.

αžαžΎαžŸαŸ’αž‚αŸ’αžšαžΈαž”αžŸαŸ’αžαž·αžαž· docker αž‡αžΆαž”αŸ’αžšαž—αŸαž‘αž’αŸ’αžœαžΈ? αž˜αžΆαž“αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž…αžΆαžŸαŸ‹αž“αŸ…αž›αžΎ Github αž–αžΈ outcoldmanαžŸαŸ’αž‚αŸ’αžšαžΈαž”αžαŸ’αžšαžΌαžœαž”αžΆαž“αž™αž€αž…αŸαž‰αž–αžΈαž‘αžΈαž“αŸ„αŸ‡ αž αžΎαž™αž”αžΆαž“αž€αŸ‚αž”αŸ’αžšαŸ‚αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž€αŸ†αžŽαŸ‚αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αžšαž”αžŸαŸ‹ Docker (ce-17.*) αž“αž·αž„ Splunk (7.*)αŸ”

αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž‘αž‘αž½αž›αž”αžΆαž“ αž’αŸ’αž“αž€αž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜

αž•αŸ’αž‘αžΆαŸ†αž„αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αŸ– (αžšαžΌαž”αž—αžΆαž–αž–αžΈαžšαž”αžΈαžŸαž“αŸ’αž›αžΉαž€)Splunk Universal Forwarder αž“αŸ…αž€αŸ’αž“αž»αž„ Docker αž‡αžΆαž’αŸ’αž“αž€αž”αŸ’αžšαž˜αžΌαž›αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž”αŸ’αžšαž–αŸαž“αŸ’αž’

Splunk Universal Forwarder αž“αŸ…αž€αŸ’αž“αž»αž„ Docker αž‡αžΆαž’αŸ’αž“αž€αž”αŸ’αžšαž˜αžΌαž›αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž”αŸ’αžšαž–αŸαž“αŸ’αž’
αž€αžΌαžŠαž”αŸ’αžšαž—αž–αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαž‰αŸ’αž‰αžΆαžŠαžΆαž…αŸ‹ αŸ— αž‚αžΊαž“αŸ…αž€αŸ’αž“αž»αž„αžαŸ†αžŽαž—αŸ’αž‡αžΆαž”αŸ‹αžŠαŸ‚αž›αž”αžΆαž“αž•αŸ’αžαž›αŸ‹αž“αŸ…αž…αž»αž„αž”αž‰αŸ’αž…αž”αŸ‹αž“αŸƒαž’αžαŸ’αžαž”αž‘αŸ” αžŸαžΌαž˜αž…αŸ†αžŽαžΆαŸ†αžαžΆαž˜αžΆαž“ 2 αž€αž“αŸ’αž›αŸ‚αž„αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαŸ– 1 - αž€αžΆαžšαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž›αž·αž”αž·αž€αŸ’αžšαž˜ (αžŸαŸ’αžœαŸ‚αž„αžšαž€αžŠαŸ„αž™αžšαž”αžΆαŸ†αž„) αž€αžΆαžšαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“/αž€αž»αž„αžαžΊαž“αŸαžšαŸ” αž’αŸ’αž“αž€αž‘αŸ†αž“αž„αž‡αžΆαž“αžΉαž„αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αžšαž”αžΆαŸ†αž„αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸ αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαžˆαŸ’αž˜αŸ„αŸ‡αžŠαŸ‚αž›αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαŸ”

αžŸαžšαž»αž”αžŸαŸαž…αž€αŸ’αžαžΈαž˜αž€ αžαŸ’αž‰αž»αŸ†αž…αž„αŸ‹αž‘αžΆαž‰αž…αŸ†αžŽαžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž…αŸ†αž–αŸ„αŸ‡αž˜αž»αžαž„αžΆαžš αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜() Π²

entrypoint.sh

start() {
    trap teardown EXIT
	if [ -z $SPLUNK_INDEX ]; then
	echo "'SPLUNK_INDEX' env variable is empty or not defined. Should be 'dev' or 'prd'." >&2
	exit 1
	else
	sed -e "s/@index@/$SPLUNK_INDEX/" -i ${SPLUNK_HOME}/etc/system/local/inputs.conf
	fi
	sed -e "s/@hostname@/$(cat /etc/hostname)/" -i ${SPLUNK_HOME}/etc/system/local/inputs.conf
    sh -c "echo 'starting' > /tmp/splunk-container.state"
	${SPLUNK_HOME}/bin/splunk start
    watch_for_failure
}

αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ† αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αžšαž·αžŸαŸ’αžαžΆαž“αž“αžΈαž˜αž½αž™αŸ— αž“αž·αž„αž’αž„αŸ’αž‚αž—αžΆαž–αž“αžΈαž˜αž½αž™αŸ— αžαžΆαžαžΎαžœαžΆαž‡αžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž“αŸ…αž€αŸ’αž“αž»αž„αž€αž»αž„αžαžΊαž“αŸαžš αž¬αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“ αž™αžΎαž„αž”αŸ’αžšαžΎαžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸαžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αŸ” αžœαž·αž’αžΈαž“αŸαŸ‡ αž›αŸ’αž”αžΏαž“αžŸαŸ’αžœαŸ‚αž„αžšαž€αž“αžΉαž„αž˜αž·αž“αžšαž„αž‘αž»αž€αŸ’αžαž‘αŸ αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž˜αžΆαž“αž€αžΆαžšαž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžαž»αŸ†αž‘αž·αž“αŸ’αž“αž“αŸαž™αž™αŸ‰αžΆαž„αž…αŸ’αžšαžΎαž“αŸ” αž…αŸ’αž”αžΆαž”αŸ‹αžŸαžΆαž˜αž‰αŸ’αž‰αž˜αž½αž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαžŠαžΆαž€αŸ‹αžˆαŸ’αž˜αŸ„αŸ‡αž›αž·αž”αž·αž€αŸ’αžšαž˜αŸ– _. αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžŠαžΎαž˜αŸ’αž”αžΈαž±αŸ’αž™αž€αž»αž„αžαžΊαž“αŸαžšαž˜αžΆαž“αž›αž€αŸ’αžαžŽαŸˆαž‡αžΆαžŸαž€αž› αž˜αž»αž“αž–αŸαž›αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŠαŸαž˜αž·αž“αžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„ αž™αžΎαž„αž‡αŸ†αž“αž½αžŸ sed-th αž‡αžΆαž’αž€αŸ’αžŸαžšαž‡αŸ†αž“αž½αžŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžˆαŸ’αž˜αŸ„αŸ‡αž”αžšαž·αžŸαŸ’αžαžΆαž“αŸ” αž’αžαŸαžšαžˆαŸ’αž˜αŸ„αŸ‡αž”αžšαž·αžŸαŸ’αžαžΆαž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž†αŸ’αž›αž„αž€αžΆαžαŸ‹αž’αžαŸαžšαž”αžšαž·αžŸαŸ’αžαžΆαž“αŸ” αžŸαŸ’αžαžΆαž”αŸ‹αž‘αŸ…αž‚αž½αžšαž±αŸ’αž™αž’αžŸαŸ‹αžŸαŸ†αžŽαžΎαž…αŸ”

αžœαžΆαž€αŸαž‚αž½αžšαž±αŸ’αž™αž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž•αž„αžŠαŸ‚αžšαžαžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž αŸαžαž»αž•αž›αž˜αž½αž™αž…αŸ†αž“αž½αž“ Splunk αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ‰αŸ‡αž–αžΆαž›αŸ‹αžŠαŸ„αž™αžœαžαŸ’αžαž˜αžΆαž“αž“αŸƒαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš docker αžˆαŸ’αž˜αŸ„αŸ‡αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“. αž‚αžΆαžαŸ‹αž“αžΉαž„αž“αŸ…αžαŸ‚αžšαžΉαž„αžšαžΌαžŸαž•αŸ’αž‰αžΎαž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αžŠαŸ‚αž›αž˜αžΆαž“αž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž€αž»αž„αžαžΊαž“αŸαžšαžšαž”αžŸαŸ‹αž‚αžΆαžαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αžœαžΆαž›αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αŸ” αž‡αžΆαžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž’αŸ’αž“αž€αž’αžΆαž…αž˜αŸ‰αŸ„αž“ / etc / hostname αž–αžΈαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ αž αžΎαž™αž“αŸ…αž–αŸαž›αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αŸ†αž“αž½αžŸαžŸαŸ’αžšαžŠαŸ€αž„αž“αžΉαž„αžˆαŸ’αž˜αŸ„αŸ‡αž›αž·αž”αž·αž€αŸ’αžšαž˜αŸ”

αž§αž‘αžΆαž αžšαžŽαŸ docker-compose.yml

version: '2'
services:
  splunk-forwarder:
    image: "${IMAGE_REPO}/docker-stats-splunk-forwarder:${IMAGE_VERSION}"
    environment:
      SPLUNK_INDEX: ${ENVIRONMENT}
    volumes:
    - /etc/hostname:/etc/hostname:ro
    - /var/log:/var/log
    - /var/run/docker.sock:/var/run/docker.sock:ro

αž›αž‘αŸ’αž’αž•αž›

αž”αžΆαž‘/αž…αžΆαžŸ αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž˜αž·αž“αžŸαž˜αžŸαŸ’αžšαž”αž‘αŸ αž αžΎαž™αž”αŸ’αžšαžΆαž€αžŠαžŽαžΆαžŸαŸ‹αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαžŸαž€αž›αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž˜αž“αž»αžŸαŸ’αžŸαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αž“αžΆαž‘αŸ αž–αŸ’αžšαŸ„αŸ‡αž˜αžΆαž“αž…αŸ’αžšαžΎαž“αŸ” "αž€αžΌαžŠαžšαžΉαž„". αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž•αŸ’αž’αŸ‚αž€αž›αžΎαžœαžΆ αž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αž“αžΆαž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž–αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸ αž αžΎαž™αžŠαžΆαž€αŸ‹αžœαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αžœαžαŸ’αžαž»αž”αž»αžšαžΆαžŽαž―αž€αž‡αž“αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžŠαžΌαž…αžŠαŸ‚αž›αžœαžΆαž€αžΎαžαž‘αžΎαž„ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž€αžΆαžš Splunk Forwarder αž“αŸ…αž€αŸ’αž“αž»αž„ Docker αŸ”

αž―αž€αžŸαžΆαžšαž™αŸ„αž„:

αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž–αžΈαž’αžαŸ’αžαž”αž‘
αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž–αžΈ outcoldman αžŠαŸ‚αž›αž”αžΆαž“αž”αŸ†αž•αž»αžŸαž‚αŸ†αž“αž·αžαž™αžΎαž„αž±αŸ’αž™αž”αŸ’αžšαžΎαž˜αž»αžαž„αžΆαžšαž˜αž½αž™αž…αŸ†αž“αž½αž“αž‘αžΎαž„αžœαž·αž‰
αž“αŸƒαŸ” αž―αž€αžŸαžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŠαŸ†αž‘αžΎαž„ Universal Forwarder

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹