Ang Splunk ay isa sa ilan sa mga pinakakilalang komersyal na koleksyon ng log at mga produkto ng pagsusuri. Kahit ngayon, kapag ang mga benta ay hindi na ginawa sa Russia, hindi ito dahilan para hindi magsulat ng mga tagubilin/paano para sa produktong ito.
Gawain: mangolekta ng mga log ng system mula sa mga docker node sa Splunk nang hindi binabago ang configuration ng host machine
Gusto kong magsimula sa opisyal na diskarte, na mukhang kakaiba kapag gumagamit ng Docker.
Ano ang mayroon tayo:
1. Pullim na imahe
$ docker pull splunk/universalforwarder:latest
2. Simulan ang lalagyan gamit ang mga kinakailangang parameter
$ docker run -d -p 9997:9997 -e 'SPLUNK_START_ARGS=--accept-license' -e 'SPLUNK_PASSWORD=<password>' splunk/universalforwarder:latest
3. Pumunta kami sa lalagyan
docker exec -it <container-id> /bin/bash
Susunod, hinihiling sa amin na pumunta sa isang kilalang address sa dokumentasyon.
At i-configure ang lalagyan pagkatapos nitong magsimula:
./splunk add forward-server <host name or ip address>:<listening port>
./splunk add monitor /var/log
./splunk restart
Teka. Ano?
Ngunit ang mga sorpresa ay hindi nagtatapos doon. Kung patakbuhin mo ang lalagyan mula sa opisyal na larawan sa interactive na mode, makikita mo ang sumusunod:
Medyo disappointment
$ 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 *********
Π½Ρ ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅...
Malaki. Wala man lang artifact ang larawan. Ibig sabihin, sa tuwing magsisimula ka ay magtatagal upang i-download ang archive gamit ang mga binary, i-unpack at i-configure.
Paano ang docker-way at lahat ng iyon?
Salamat nalang. Magkaibang ruta ang tatahakin natin. Paano kung gagawin natin ang lahat ng mga operasyong ito sa yugto ng pagpupulong? Tapos tayo na!
Upang hindi masyadong maantala, ipapakita ko sa iyo ang huling larawan kaagad:
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" ]
Kaya kung ano ang nakapaloob sa
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
Sa unang pagsisimula, hinihiling sa iyo ng Splunk na bigyan ito ng login/password, PERO ang data na ito ay ginagamit lamang upang magsagawa ng mga administratibong utos para sa partikular na pag-install, iyon ay, sa loob ng lalagyan. Sa aming kaso, gusto lang naming ilunsad ang lalagyan upang gumana ang lahat at ang mga troso ay dumadaloy na parang ilog. Siyempre, ito ay hardcode, ngunit wala akong nakitang iba pang paraan.
Ang karagdagang ayon sa script ay naisakatuparan
/splunkforwarder/bin/splunk install app /splunkclouduf.spl -auth admin:changeme
splunkclouduf.spl β Ito ay isang file ng kredensyal para sa Splunk Universal Forwarder, na maaaring ma-download mula sa web interface.
Kung saan i-click para mag-download (sa mga larawan)
Ito ay isang regular na archive na maaaring i-unpack. Nasa loob ang mga sertipiko at isang password para sa pagkonekta sa aming SplunkCloud at mga output.conf na may listahan ng aming mga instance ng input. Magiging may-katuturan ang file na ito hanggang sa muling i-install mo ang iyong Splunk installation o magdagdag ng input node kung nasa lugar ang pag-install. Samakatuwid, walang masama sa pagdaragdag nito sa loob ng lalagyan.
At ang huling bagay ay i-restart. Oo, upang mailapat ang mga pagbabago, kailangan mong i-restart ito.
Sa aming inputs.conf idinagdag namin ang mga log na gusto naming ipadala sa Splunk. Hindi kinakailangang idagdag ang file na ito sa larawan kung, halimbawa, namamahagi ka ng mga config sa pamamagitan ng puppet. Ang tanging bagay ay nakikita ng Forwarder ang mga config kapag nagsimula ang daemon, kung hindi, kakailanganin nito ./splunk restart.
Anong uri ng mga script ng docker stats ang mga ito? Mayroong isang lumang solusyon sa Github mula sa
Gamit ang data na nakuha, maaari kang bumuo ng mga sumusunod
mga dashboard: (isang pares ng mga larawan)
Ang source code para sa mga gitling ay nasa link na ibinigay sa dulo ng artikulo. Pakitandaan na mayroong 2 piling field: 1 - index selection (hinanap sa pamamagitan ng mask), host/container selection. Malamang na kakailanganin mong i-update ang index mask, depende sa mga pangalan na iyong ginagamit.
Sa konklusyon, nais kong iguhit ang iyong pansin sa pag-andar simulan() Π²
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
}
Sa aking kaso, para sa bawat kapaligiran at bawat indibidwal na entity, maging ito ay isang application sa isang lalagyan o isang host machine, gumagamit kami ng isang hiwalay na index. Sa ganitong paraan, hindi maghihirap ang bilis ng paghahanap kapag may malaking akumulasyon ng data. Ang isang simpleng panuntunan ay ginagamit upang pangalanan ang mga index: _. Samakatuwid, upang maging unibersal ang lalagyan, bago ilunsad ang mismong daemon, papalitan namin uhaw-ika wildcard sa pangalan ng kapaligiran. Ang variable ng pangalan ng kapaligiran ay ipinapasa sa mga variable ng kapaligiran. Parang nakakatawa.
Dapat ding tandaan na sa ilang kadahilanan ay hindi apektado ang Splunk ng pagkakaroon ng parameter ng docker hostname. Magpapadala pa rin siya ng mga log na may id ng kanyang container sa host field. Bilang solusyon, maaari kang mag-mount / etc / hostname mula sa host machine at sa startup ay gumawa ng mga kapalit na katulad ng mga pangalan ng index.
Halimbawa 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
Kabuuan
Oo, marahil ang solusyon ay hindi perpekto at tiyak na hindi pangkalahatan para sa lahat, dahil marami "hardcode". Ngunit batay dito, lahat ay maaaring bumuo ng kanilang sariling imahe at ilagay ito sa kanilang pribadong artifactory, kung, habang nangyayari ito, kailangan mo ng Splunk Forwarder sa Docker.
Link:
Pinagmulan: www.habr.com