Splunk Universal Forwarder in Docker as 'n stelsel log versamelaar

Splunk Universal Forwarder in Docker as 'n stelsel log versamelaar

Splunk is een van verskeie van die mees herkenbare produkte vir die versameling en ontleding van kommersiële houtblokke. Selfs nou, wanneer verkope nie meer in Rusland gemaak word nie, is dit nie 'n rede om nie instruksies/hoe om vir hierdie produk te skryf nie.

Taak: versamel stelsellogboeke van docker-nodusse in Splunk sonder om die gasheermasjienkonfigurasie te verander

Ek wil graag begin met die amptelike benadering, wat 'n bietjie vreemd lyk wanneer jy Docker gebruik.
Skakel na Docker-hub
Wat het ons:

1. Pullim beeld

$ docker pull splunk/universalforwarder:latest

2. Begin die houer met die nodige parameters

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

3. Ons gaan in die houer

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

Vervolgens word ons gevra om na 'n bekende adres in die dokumentasie te gaan.

En stel die houer op nadat dit begin het:


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

Wag. Wat?

Maar die verrassings eindig nie daar nie. As jy die houer vanaf die amptelike prent in interaktiewe modus laat loop, sal jy die volgende sien:

Bietjie teleurstelling


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

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

Groot. Die beeld bevat nie eens 'n artefak nie. Dit wil sê, elke keer as jy begin, sal dit tyd neem om die argief met binaries af te laai, uit te pak en te konfigureer.
Wat van docker-way en dit alles?

Nee dankie. Ons sal 'n ander roete neem. Wat as ons al hierdie bewerkings tydens die monteerstadium uitvoer? Kom ons gaan dan!

Om nie te lank uit te stel nie, sal ek jou dadelik die finale prent wys:

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" ]

So wat is vervat in

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

Met die eerste begin vra Splunk jou om dit 'n login/wagwoord te gee, MAAR hierdie data word gebruik slegs om administratiewe opdragte vir daardie spesifieke installasie uit te voer, dit wil sê binne die houer. In ons geval wil ons net die houer lanseer sodat alles werk en die stompe soos 'n rivier vloei. Natuurlik is dit hardekode, maar ek het geen ander maniere gevind nie.

Verder volgens die script word uitgevoer

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

splunkclouduf.spl — Dit is 'n geloofsbriewelêer vir Splunk Universal Forwarder, wat vanaf die webkoppelvlak afgelaai kan word.

Waar om te klik om af te laai (in prente)Splunk Universal Forwarder in Docker as 'n stelsel log versamelaar

Splunk Universal Forwarder in Docker as 'n stelsel log versamelaar
Dit is 'n gereelde argief wat uitgepak kan word. Binne is sertifikate en 'n wagwoord om aan ons SplunkCloud en uitsette.conf met 'n lys van ons invoergevalle. Hierdie lêer sal relevant wees totdat jy jou Splunk-installasie herinstalleer of 'n invoernodus byvoeg as die installasie op die perseel is. Daarom is daar niks verkeerd om dit binne-in die houer by te voeg nie.

En die laaste ding is herbegin. Ja, om die veranderinge toe te pas, moet jy dit herbegin.

In ons insette.conf ons voeg die logs by wat ons na Splunk wil stuur. Dit is nie nodig om hierdie lêer by die prent te voeg as jy byvoorbeeld konfigurasies via marionet versprei nie. Die enigste ding is dat Forwarder die configs sien wanneer die daemon begin, anders sal dit nodig wees ./splunk herbegin.

Watter soort docker stats-skrifte is dit? Daar is 'n ou oplossing op Github vanaf outcoldman, is die skrifte van daar af geneem en aangepas om met huidige weergawes van Docker (ce-17.*) en Splunk (7.*) te werk.

Met die data wat verkry is, kan jy die volgende bou

dashboards: ('n paar foto's)Splunk Universal Forwarder in Docker as 'n stelsel log versamelaar

Splunk Universal Forwarder in Docker as 'n stelsel log versamelaar
Die bronkode vir strepies is in die skakel wat aan die einde van die artikel verskaf word. Neem asseblief kennis dat daar 2 uitgesoekte velde is: 1 - indekskeuse (gesoek deur masker), gasheer/houerkeuse. U sal waarskynlik die indeksmasker moet opdateer, afhangende van die name wat u gebruik.

Ten slotte wil ek u aandag op die funksie vestig begin() в

toegangspunt.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
}

In my geval, vir elke omgewing en elke individuele entiteit, of dit nou 'n toepassing in 'n houer of 'n gasheermasjien is, gebruik ons ​​'n aparte indeks. Op hierdie manier sal die soekspoed nie ly as daar 'n aansienlike ophoping van data is nie. 'n Eenvoudige reël word gebruik om indekse te benoem: _. Daarom, sodat die houer universeel kan wees, voordat ons die daemon self begin, vervang ons dors-de jokerteken na die naam van die omgewing. Die omgewingsnaamveranderlike word deur omgewingsveranderlikes deurgegee. Klink snaaks.

Dit is ook opmerklik dat Splunk om een ​​of ander rede nie deur die teenwoordigheid van die docker-parameter geraak word nie gasheernaam. Hy sal steeds hardnekkig logs met die id van sy houer in die gasheerveld stuur. As 'n oplossing, kan jy berg / Etc / host naam vanaf die gasheermasjien en maak by opstart vervangings soortgelyk aan indeksname.

Voorbeeld 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

Totale

Ja, miskien is die oplossing nie ideaal nie en beslis nie universeel vir almal nie, aangesien daar baie is "harde kode". Maar op grond daarvan kan almal hul eie beeld bou en dit in hul private artifactory plaas, as jy, soos dit gebeur, Splunk Forwarder in Docker nodig het.

verwysings:

Oplossing uit die artikel
'n Oplossing van outcoldman wat ons geïnspireer het om van die funksionaliteit te hergebruik
Van. dokumentasie vir die opstel van Universal Forwarder

Bron: will.com

Voeg 'n opmerking