Splunk Universal Forwarder í docker sem kerfisskráasafnari

Splunk Universal Forwarder í docker sem kerfisskráasafnari

Splunk er ein af mörgum þekktustu vörum fyrir söfnun og greiningu á annálum í atvinnuskyni. Jafnvel núna, þegar sala er ekki lengur í Rússlandi, er þetta ekki ástæða til að skrifa ekki leiðbeiningar/leiðbeiningar um þessa vöru.

Verkefni: safnaðu kerfisskrám frá hafnarhnútum í Splunk án þess að breyta stillingum hýsingarvélarinnar

Mig langar að byrja á opinberu nálguninni, sem lítur svolítið undarlega út þegar þú notar Docker.
Tengill á Docker miðstöð
Hvað höfum við:

1. Pullim mynd

$ docker pull splunk/universalforwarder:latest

2. Ræstu ílátið með nauðsynlegum breytum

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

3. Við förum inn í gáminn

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

Næst erum við beðin um að fara á þekkt heimilisfang í skjölunum.

Og stilltu ílátið eftir að það byrjar:


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

Bíddu. Hvað?

En óvart enda ekki þar. Ef þú keyrir gáminn frá opinberu myndinni í gagnvirkum ham muntu sjá eftirfarandi:

Smá vonbrigði


$ 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 *********

ну и так далее...

Frábært. Myndin inniheldur ekki einu sinni grip. Það er að segja, í hvert skipti sem þú byrjar mun það taka tíma að hlaða niður skjalasafninu með tvöföldum skrám, taka upp og stilla.
Hvað með docker-way og allt það?

Nei takk. Við munum fara aðra leið. Hvað ef við framkvæmum allar þessar aðgerðir á samsetningarstigi? Þá skulum við fara!

Til að tefja ekki of lengi mun ég sýna þér lokamyndina strax:

Dockerfil

# Тут у кого какие предпочтения
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" ]

Svo hvað er innifalið í

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

Við fyrstu ræsingu biður Splunk þig um að gefa honum innskráningu/lykilorð, EN þessi gögn eru notuð aðeins til að framkvæma stjórnunarskipanir fyrir þá tilteknu uppsetningu, það er að segja inni í gámnum. Í okkar tilviki viljum við bara ræsa gáminn þannig að allt virki og stokkarnir renni eins og fljót. Auðvitað er þetta hardcode, en ég hef ekki fundið neinar aðrar leiðir.

Nánar í samræmi við handritið er framkvæmt

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

splunkclouduf.spl — Þetta er skilríkisskrá fyrir Splunk Universal Forwarder, sem hægt er að hlaða niður úr vefviðmótinu.

Hvar á að smella til að hlaða niður (í myndum)Splunk Universal Forwarder í docker sem kerfisskráasafnari

Splunk Universal Forwarder í docker sem kerfisskráasafnari
Þetta er venjulegt skjalasafn sem hægt er að pakka niður. Inni eru vottorð og lykilorð til að tengjast SplunkCloud okkar og outputs.conf með lista yfir inntakstilvik okkar. Þessi skrá mun skipta máli þar til þú setur Splunk uppsetninguna upp aftur eða bætir við inntakshnút ef uppsetningin er á staðnum. Þess vegna er ekkert að því að bæta því inn í ílátið.

Og það síðasta er endurræsing. Já, til að beita breytingunum þarftu að endurræsa það.

Í okkar inputs.conf við bætum við loggunum sem við viljum senda til Splunk. Það er ekki nauðsynlegt að bæta þessari skrá við myndina ef þú dreifir til dæmis stillingum í gegnum puppet. Málið er bara að Forwarder sér stillingarnar þegar púkinn byrjar, annars þarf hann ./splunk endurræsa.

Hvers konar tölfræðiforskriftir eru það? Það er gömul lausn á Github frá útkallaður, handritin voru tekin þaðan og breytt til að vinna með núverandi útgáfum af Docker (ce-17.*) og Splunk (7.*).

Með gögnunum sem aflað er geturðu byggt upp eftirfarandi

mælaborð: (nokkrar myndir)Splunk Universal Forwarder í docker sem kerfisskráasafnari

Splunk Universal Forwarder í docker sem kerfisskráasafnari
Kóðinn fyrir strik er í tenglinum sem fylgir í lok greinarinnar. Vinsamlegast athugaðu að það eru 2 valdar reitir: 1 - vísitöluval (leitt eftir grímu), val á hýsingaraðili/gáma. Þú þarft líklega að uppfæra vísitölugrímuna, allt eftir nöfnunum sem þú notar.

Að lokum vil ég vekja athygli þína á aðgerðinni byrja() в

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
}

Í mínu tilviki, fyrir hvert umhverfi og hverja einingu, hvort sem það er forrit í gámi eða hýsingarvél, notum við sérstaka vísitölu. Þannig mun leitarhraðinn ekki líða fyrir þegar umtalsverð gagnasöfnun er. Einföld regla er notuð til að nefna vísitölur: _. Þess vegna, til þess að ílátið sé alhliða, áður en púkinn sjálft er ræst, skiptum við út sed-sta algildismerki við heiti umhverfisins. Umhverfisheitabreytan er send í gegnum umhverfisbreytur. Hljómar fyndið.

Það er líka athyglisvert að af einhverjum ástæðum hefur Splunk ekki áhrif á tilvist docker færibreytunnar gestgjafi. Hann mun samt þrjóskulega senda logs með auðkenni gámsins síns í hýsilreitnum. Sem lausn er hægt að festa / etc / hostname frá hýsingarvélinni og við ræsingu skiptu út svipað og vísitöluheiti.

Dæmi 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

Samtals

Já, kannski er lausnin ekki tilvalin og alls ekki algild fyrir alla, þar sem þær eru margar "hardcode". En út frá því getur hver og einn byggt upp sína eigin mynd og sett hana í sína einkagervi, ef, eins og það gerist, þú þarft Splunk Forwarder í Docker.

Tilvísanir:

Lausn úr greininni
Lausn frá outcoldman sem hvatti okkur til að endurnýta hluta af virkninni
Af. skjöl til að setja upp Universal Forwarder

Heimild: www.habr.com

Bæta við athugasemd