Splunk๋ ๊ฐ์ฅ ์ ์๋ ค์ง ์์
์ฉ ๋ก๊ทธ ์์ง ๋ฐ ๋ถ์ ์ ํ ์ค ํ๋์
๋๋ค. ๋ฌ์์์์ ๋ ์ด์ ํ๋งค๊ฐ ์ด๋ฃจ์ด์ง์ง ์๋ ์ง๊ธ๋ ์ด ์ ํ์ ๋ํ ์ง์นจ/์ฌ์ฉ ๋ฐฉ๋ฒ์ ์์ฑํ์ง ์์ ์ด์ ๋ ์์ต๋๋ค.
ํ์คํฌ: ํธ์คํธ ์์คํ
๊ตฌ์ฑ์ ๋ณ๊ฒฝํ์ง ์๊ณ Splunk์ Docker ๋
ธ๋์์ ์์คํ
๋ก๊ทธ๋ฅผ ์์งํฉ๋๋ค.
Docker๋ฅผ ์ฌ์ฉํ ๋ ์ฝ๊ฐ ์ด์ํด ๋ณด์ด๋ ๊ณต์์ ์ธ ์ ๊ทผ ๋ฐฉ์๋ถํฐ ์์ํ๊ณ ์ถ์ต๋๋ค.
์ฐ๋ฆฌ๋ ๋ฌด์์ ๊ฐ์ง๊ณ ์์ต๋๊น?
1. ํ๋ฆผ ์ด๋ฏธ์ง
$ 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์ ๊ทธ ๋ชจ๋ ๊ฒ์ ์ด๋ป์ต๋๊น?
๊ณ ๋ง์ง ๋ง ์ฌ์ ํ ๊ฒ. ์ฐ๋ฆฌ๋ ๋ค๋ฅธ ๊ธธ์ ํํ ๊ฒ์ ๋๋ค. ์ด ๋ชจ๋ ์์ ์ ์กฐ๋ฆฝ ๋จ๊ณ์์ ์ํํ๋ค๋ฉด ์ด๋จ๊น์? ๊ทธ๋ผ ๊ฐ์!
๋๋ฌด ์ค๋ ์ง์ฒดํ์ง ์๊ธฐ ์ํด ์ต์ข ์ด๋ฏธ์ง๋ฅผ ๋ฐ๋ก ๋ณด์ฌ๋๋ฆฌ๊ฒ ์ต๋๋ค.
๋์ปค ํ์ผ
# ะขัั ั ะบะพะณะพ ะบะฐะบะธะต ะฟัะตะดะฟะพััะตะฝะธั
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" ]
๊ทธ๋ผ ๊ทธ ์์ ๋ฌด์์ด ๋ค์ด์๋์ง
์ฒซ_์์.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๋ ๋ก๊ทธ์ธ/๋น๋ฐ๋ฒํธ๋ฅผ ๋ฌป๋ ๋ฉ์์ง๋ฅผ ํ์ํ์ง๋ง ์ด ๋ฐ์ดํฐ๋ ์ฌ์ฉ๋ฉ๋๋ค. ๋ง ํน์ ์ค์น, ์ฆ ์ปจํ ์ด๋ ๋ด๋ถ์ ๋ํ ๊ด๋ฆฌ ๋ช ๋ น์ ์คํํฉ๋๋ค. ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ ๋ชจ๋ ๊ฒ์ด ์๋ํ๊ณ ๋ก๊ทธ๊ฐ ๊ฐ์ฒ๋ผ ํ๋ฅด๋๋ก ์ปจํ ์ด๋๋ฅผ ์์ํ๋ ค๊ณ ํฉ๋๋ค. ๋ฌผ๋ก ์ด๊ฒ์ ํ๋์ฝ๋์ด์ง๋ง ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฐพ์ง ๋ชปํ์ต๋๋ค.
์ถ๊ฐ๋ก ์คํฌ๋ฆฝํธ์ ๋ฐ๋ผ ์คํ๋ฉ๋๋ค.
/splunkforwarder/bin/splunk install app /splunkclouduf.spl -auth admin:changeme
splunkclouduf.spl โ ์ด๋ ์น ์ธํฐํ์ด์ค์์ ๋ค์ด๋ก๋ํ ์ ์๋ Splunk Universal Forwarder์ฉ ์๊ฒฉ ์ฆ๋ช ํ์ผ์ ๋๋ค.
๋ค์ด๋ก๋๋ฅผ ์ํด ํด๋ฆญํ๋ ๊ณณ(์ฌ์ง ์ฐธ์กฐ)
์์ถ์ ํ ์ ์๋ ์ผ๋ฐ ์์นด์ด๋ธ์
๋๋ค. ๋ด๋ถ์๋ SplunkCloud์ ์ฐ๊ฒฐํ๊ธฐ ์ํ ์ธ์ฆ์์ ๋น๋ฐ๋ฒํธ๊ฐ ์์ต๋๋ค. ์ถ๋ ฅ.conf ์
๋ ฅ ์ธ์คํด์ค ๋ชฉ๋ก์ ์ฌ์ฉํฉ๋๋ค. ์ด ํ์ผ์ Splunk ์ค์น๋ฅผ ๋ค์ ์ค์นํ๊ฑฐ๋ ์จํ๋ ๋ฏธ์ค ์ค์น์ธ ๊ฒฝ์ฐ ์
๋ ฅ ๋
ธ๋๋ฅผ ์ถ๊ฐํ ๋๊น์ง ๊ด๋ จ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ปจํ
์ด๋ ๋ด๋ถ์ ์ถ๊ฐํด๋ ์๋ฌด๋ฐ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ ์ฌ์์์ ๋๋ค. ์, ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ๋ ค๋ฉด ๋ค์ ์์ํด์ผ ํฉ๋๋ค.
์ฐ๋ฆฌ์ ์ ๋ ฅ.conf Splunk์ ๋ณด๋ด๋ ค๋ ๋ก๊ทธ๋ฅผ ์ถ๊ฐํฉ๋๋ค. ์๋ฅผ ๋ค์ด, Puppet์ ํตํด ๊ตฌ์ฑ์ ๋ฐฐํฌํ๋ ๊ฒฝ์ฐ์๋ ์ด ํ์ผ์ ์ด๋ฏธ์ง์ ์ถ๊ฐํ ํ์๊ฐ ์์ต๋๋ค. ์ ์ผํ ๊ฒ์ Forwarder๊ฐ ๋ฐ๋ชฌ์ด ์์๋ ๋ ๊ตฌ์ฑ์ ํ์ธํ๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๊ตฌ์ฑ์ด ํ์ํฉ๋๋ค. ./splunk ์ฌ์์.
์ด๋ค ์ข
๋ฅ์ Docker ํต๊ณ ์คํฌ๋ฆฝํธ์ธ๊ฐ์? Github์๋ ์ค๋๋ ์๋ฃจ์
์ด ์์ต๋๋ค.
์ป์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
๋์๋ณด๋: (์ฌ์ง ๋ ์ฅ)
๋์์ ์์ค ์ฝ๋๋ ๊ธฐ์ฌ ๋์ ์ ๊ณต๋ ๋งํฌ์ ์์ต๋๋ค. 2๊ฐ์ ์ ํ ํ๋๊ฐ ์์ต๋๋ค. 1 - ์ธ๋ฑ์ค ์ ํ(๋ง์คํฌ๋ก ๊ฒ์), ํธ์คํธ/์ปจํ
์ด๋ ์ ํ. ์ฌ์ฉํ๋ ์ด๋ฆ์ ๋ฐ๋ผ ์ธ๋ฑ์ค ๋ง์คํฌ๋ฅผ ์
๋ฐ์ดํธํด์ผ ํ ์๋ ์์ต๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก ๊ธฐ๋ฅ์ ์ฃผ๋ชฉํ๊ณ ์ถ์ต๋๋ค. ์คํํธ() ะฒ
์ง์ ์ .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-ํ๊ฒฝ ์ด๋ฆ์ ๋ํ ์์ผ๋์นด๋์ ๋๋ค. ํ๊ฒฝ ์ด๋ฆ ๋ณ์๋ ํ๊ฒฝ ๋ณ์๋ฅผ ํตํด ์ ๋ฌ๋ฉ๋๋ค. ์ฌ๋ฏธ์์ ๊ฒ ๊ฐ๋ค์.
์ด๋ค ์ด์ ๋ก Splunk๋ docker ๋งค๊ฐ๋ณ์์ ์กด์ฌ ์ฌ๋ถ์ ์ํฅ์ ๋ฐ์ง ์๋๋ค๋ ์ ๋ ์ฃผ๋ชฉํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ํธ์คํธ ์ด๋ฆ. ๊ทธ๋ ์ฌ์ ํ ํธ์คํธ ํ๋์ ์๋ ์์ ์ ์ปจํ ์ด๋ ID๋ฅผ ์ฌ์ฉํ์ฌ ๋ก๊ทธ๋ฅผ ๊ณ ์ง์ค๋ฝ๊ฒ ๋ณด๋ผ ๊ฒ์ ๋๋ค. ํด๊ฒฐ์ฑ ์ผ๋ก ๋ง์ดํธํ ์ ์์ต๋๋ค. / 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
ํฉ๊ณ
์, ์๋ง๋ ํด๊ฒฐ์ฑ ์ ์ด์์ ์ด์ง ์๊ณ ๋ชจ๋ ์ฌ๋์๊ฒ ๋ณดํธ์ ์ด์ง ์์ ์๋ ์์ต๋๋ค. "ํ๋์ฝ๋". ๊ทธ๋ฌ๋ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก Docker์ Splunk Forwarder๊ฐ ํ์ํ ๊ฒฝ์ฐ ๋ชจ๋ ์ฌ๋์ด ์์ ์ ์ด๋ฏธ์ง๋ฅผ ๊ตฌ์ถํ๊ณ ๊ฐ์ธ ์ํฐํฉํธ์ ์ ์ฅํ ์ ์์ต๋๋ค.
๋งํฌ :
์ถ์ฒ : habr.com