Splunk është një nga disa prej produkteve më të njohura komerciale të grumbullimit dhe analizës së regjistrave. Edhe tani, kur shitjet nuk bëhen më në Rusi, kjo nuk është një arsye për të mos shkruar udhëzime/si për këtë produkt.
Detyrë: mblidhni regjistrat e sistemit nga nyjet docker në Splunk pa ndryshuar konfigurimin e makinës pritëse
Do të doja të filloja me qasjen zyrtare, e cila duket pak e çuditshme kur përdorni Docker.
Çfarë kemi ne:
1. Imazhi i tërhequr
$ docker pull splunk/universalforwarder:latest
2. Filloni enën me parametrat e nevojshëm
$ docker run -d -p 9997:9997 -e 'SPLUNK_START_ARGS=--accept-license' -e 'SPLUNK_PASSWORD=<password>' splunk/universalforwarder:latest
3. Hyjmë në enë
docker exec -it <container-id> /bin/bash
Më pas, na kërkohet të shkojmë në një adresë të njohur në dokumentacion.
Dhe konfiguroni kontejnerin pasi të fillojë:
./splunk add forward-server <host name or ip address>:<listening port>
./splunk add monitor /var/log
./splunk restart
Prisni. Çfarë?
Por surprizat nuk mbarojnë me kaq. Nëse e drejtoni kontejnerin nga imazhi zyrtar në modalitetin interaktiv, do të shihni sa vijon:
Pak zhgënjim
$ 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 *********
ну и так далее...
E madhe. Imazhi nuk përmban as një objekt. Kjo do të thotë, sa herë që filloni, do të duhet kohë për të shkarkuar arkivin me binare, shpaketuar dhe konfiguruar.
Po në lidhje me docker-way dhe të gjitha këto?
Jo faleminderit. Ne do të marrim një rrugë tjetër. Po sikur të gjitha këto operacione t'i kryejmë në fazën e montimit? Atëherë le të shkojmë!
Për të mos vonuar shumë, do t'ju tregoj menjëherë imazhin përfundimtar:
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" ]
Pra, ajo që përmbahet në
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
Në fillimin e parë, Splunk ju kërkon t'i jepni një hyrje/fjalëkalim, POR këto të dhëna përdoren vetëm për të ekzekutuar komanda administrative për atë instalim të veçantë, domethënë brenda kontejnerit. Në rastin tonë, ne thjesht duam të hedhim kontejnerin në mënyrë që gjithçka të funksionojë dhe trungjet të rrjedhin si një lumë. Sigurisht, ky është kod i fortë, por nuk kam gjetur ndonjë mënyrë tjetër.
Më tej sipas skenarit ekzekutohet
/splunkforwarder/bin/splunk install app /splunkclouduf.spl -auth admin:changeme
splunkclouduf.spl — Ky është një skedar kredencialesh për Splunk Universal Forwarder, i cili mund të shkarkohet nga ndërfaqja e uebit.
Ku të klikoni për të shkarkuar (në foto)
Ky është një arkiv i rregullt që mund të shpaketohet. Brenda janë certifikatat dhe një fjalëkalim për t'u lidhur me SplunkCloud tonë dhe daljet.konf me një listë të rasteve tona hyrëse. Ky skedar do të jetë i rëndësishëm derisa të riinstaloni instalimin tuaj Splunk ose të shtoni një nyje hyrëse nëse instalimi është në premisë. Prandaj, nuk ka asgjë të keqe ta shtoni atë brenda enës.
Dhe gjëja e fundit është rifillimi. Po, për të aplikuar ndryshimet, duhet ta rinisni atë.
Në tonë hyrjet.konf shtojmë regjistrat që duam të dërgojmë te Splunk. Nuk është e nevojshme të shtoni këtë skedar në imazh nëse, për shembull, shpërndani konfigurime nëpërmjet kukullës. E vetmja gjë është që Forwarder i sheh konfigurimet kur fillon demon, përndryshe do t'i duhet ./splunk rinis.
Çfarë lloj skriptesh të statistikave docker janë ato? Ekziston një zgjidhje e vjetër në Github nga
Me të dhënat e marra, mund të ndërtoni sa vijon
tabelat: (disa foto)
Kodi burimor për vizat gjendet në lidhjen e dhënë në fund të artikullit. Ju lutemi vini re se ka 2 fusha të zgjedhura: 1 - përzgjedhja e indeksit (kërkuar me maskë), zgjedhja e hostit/kontejnerit. Me shumë mundësi do t'ju duhet të përditësoni maskën e indeksit, në varësi të emrave që përdorni.
Si përfundim, do të doja të tërhiqja vëmendjen ndaj funksionit fillimi () в
pika hyrëse.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
}
Në rastin tim, për çdo mjedis dhe çdo entitet individual, qoftë një aplikacion në një kontejner apo një makinë pritës, ne përdorim një indeks të veçantë. Në këtë mënyrë, shpejtësia e kërkimit nuk do të vuajë kur ka një grumbullim të konsiderueshëm të të dhënave. Një rregull i thjeshtë përdoret për të emërtuar indekset: _. Prandaj, në mënyrë që kontejneri të jetë universal, para se të lëshojmë vetë demonin, ne e zëvendësojmë etje-të gërmave të emrit të mjedisit. Ndryshorja e emrit të mjedisit kalohet përmes variablave të mjedisit. Tingëllon qesharake.
Vlen gjithashtu të përmendet se për disa arsye Splunk nuk ndikohet nga prania e parametrit docker hostname. Ai ende do të dërgojë me kokëfortësi trungje me ID-në e kontejnerit të tij në fushën e pritjes. Si zgjidhje, ju mund të montoni / Etc / hostname nga makina pritës dhe gjatë fillimit bëni zëvendësime të ngjashme me emrat e indeksit.
Shembull 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
Total
Po, ndoshta zgjidhja nuk është ideale dhe sigurisht jo universale për të gjithë, pasi ka shumë "kodi i fortë". Por bazuar në të, secili mund të ndërtojë imazhin e tij dhe ta vendosë në artifakrin e tij privat, nëse, siç ndodh, ju nevojitet Splunk Forwarder në Docker.
referencat:
Burimi: www.habr.com