Splunk Universal Forwarder në docker si një koleksionist i regjistrave të sistemit

Splunk Universal Forwarder në docker si një koleksionist i regjistrave të sistemit

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.
Lidhja me qendrën 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)Splunk Universal Forwarder në docker si një koleksionist i regjistrave të sistemit

Splunk Universal Forwarder në docker si një koleksionist i regjistrave të sistemit
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 njeri i jashtëzakonshëm, skriptet u morën prej andej dhe u modifikuan për të punuar me versionet aktuale të Docker (ce-17.*) dhe Splunk (7.*).

Me të dhënat e marra, mund të ndërtoni sa vijon

tabelat: (disa foto)Splunk Universal Forwarder në docker si një koleksionist i regjistrave të sistemit

Splunk Universal Forwarder në docker si një koleksionist i regjistrave të sistemit
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:

Zgjidhja nga artikulli
Një zgjidhje nga outcoldman që na frymëzoi të ripërdornim disa nga funksionalitetet
Nga. dokumentacioni për konfigurimin e Universal Forwarder

Burimi: www.habr.com

Shto një koment