Splunk Universal Forwarder dockeris süsteemi logide kogujana

Splunk Universal Forwarder dockeris süsteemi logide kogujana

Splunk on üks paljudest kõige äratuntavamatest kaubanduslike palkide kogumise ja analüüsi toodetest. Isegi praegu, kui Venemaal enam müüki ei tehta, ei ole see põhjus mitte kirjutada selle toote kohta juhiseid/õpetust.

Ülesanne: kogub süsteemiloge Splunki dokkimissõlmedest ilma hostmasina konfiguratsiooni muutmata

Tahaksin alustada ametlikust lähenemisest, mis tundub Dockeri kasutamisel pisut kummaline.
Link Dockeri jaoturile
Mis meil on:

1. Pullim pilt

$ docker pull splunk/universalforwarder:latest

2. Käivitage konteiner vajalike parameetritega

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

3. Me läheme konteinerisse

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

Järgmisena palutakse meil minna dokumentides teadaolevale aadressile.

Ja konfigureerige konteiner pärast selle käivitumist:


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

Oota. Mida?

Kuid üllatused ei lõpe sellega. Kui käivitate konteineri ametlikult pildilt interaktiivses režiimis, näete järgmist.

Natuke pettumus


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

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

Suurepärane. Pilt ei sisalda isegi artefakti. See tähendab, et iga kord, kui käivitate, võtab binaarfailidega arhiivi allalaadimine, lahtipakkimine ja konfigureerimine aega.
Aga docker-way ja kõik see?

Ei aitäh. Me valime teistsuguse marsruudi. Mis siis, kui teeme kõik need toimingud montaažifaasis? Siis lähme!

Et mitte liiga kaua viivitada, näitan teile kohe lõplikku pilti:

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

Mida siis sisaldab

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

Esimesel käivitamisel palub Splunk sisestada sisselogimise/parooli, KUID neid andmeid kasutatakse ainult administratiivsete käskude täitmiseks selle konkreetse installi jaoks, st konteineri sees. Meie puhul tahame lihtsalt konteineri vette lasta, et kõik toimiks ja palgid voolaksid nagu jõgi. Loomulikult on see kõvakood, kuid ma ei leidnud muid võimalusi.

Edasi täidetakse vastavalt skriptile

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

splunkclouduf.spl — See on Splunk Universal Forwarderi mandaadifail, mille saab alla laadida veebiliidesest.

Kus allalaadimiseks klõpsata (piltidel)Splunk Universal Forwarder dockeris süsteemi logide kogujana

Splunk Universal Forwarder dockeris süsteemi logide kogujana
See on tavaline arhiiv, mida saab lahti pakkida. Sees on sertifikaadid ja parool meie SplunkCloudiga ühenduse loomiseks ja väljundid.conf koos meie sisendjuhtumite loendiga. See fail on asjakohane seni, kuni installite oma Splunki installi uuesti või lisate sisendsõlme, kui installimine toimub kohapeal. Seetõttu pole selle anumasse lisamisel midagi halba.

Ja viimane asi on taaskäivitamine. Jah, muudatuste rakendamiseks peate selle taaskäivitama.

Meie sisendid.conf lisame Splunkile logid, mida tahame saata. Seda faili ei ole vaja pildile lisada, kui levitate konfiguratsioone näiteks nuku kaudu. Ainus asi on see, et Forwarder näeb konfiguratsioone, kui deemon käivitub, muidu läheb vaja ./splunk taaskäivitage.

Mis tüüpi dokkide statistika skriptid need on? Githubis on vana lahendus ülekülm, võeti sealt skriptid ja muudeti töötama Dockeri (ce-17.*) ja Splunk (7.*) praeguste versioonidega.

Saadud andmete abil saate ehitada järgmise

armatuurlauad: (paar pilti)Splunk Universal Forwarder dockeris süsteemi logide kogujana

Splunk Universal Forwarder dockeris süsteemi logide kogujana
Kriipsude lähtekood on artikli lõpus oleval lingil. Pange tähele, et valikus on 2 välja: 1 - indeksi valik (otsitakse maski järgi), hosti/konteineri valik. Sõltuvalt kasutatavatest nimedest peate tõenäoliselt indeksi maski värskendama.

Kokkuvõtteks tahaksin juhtida teie tähelepanu funktsioonile start () в

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

Minu puhul kasutame iga keskkonna ja iga üksiku olemi jaoks eraldi indeksit, olgu see siis konteineris olev rakendus või hostmasin. Nii ei kannata otsingukiirus märkimisväärse andmete kogunemise korral. Indeksite nimetamiseks kasutatakse lihtsat reeglit: _. Seetõttu, et konteiner oleks universaalne, vahetame enne deemoni enda käivitamist välja janu-th metamärk keskkonna nimele. Keskkonnanime muutuja edastatakse keskkonnamuutujate kaudu. Kõlab naljakalt.

Samuti väärib märkimist, et mingil põhjusel ei mõjuta dockeri parameetri olemasolu Splunk hostname. Ta saadab ikka kangekaelselt oma konteineri ID-ga palke hostväljal. Lahendusena saate paigaldada / etc / hostname hostmasinast ja käivitamisel tehke indeksinimedele sarnaseid asendusi.

Näide 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

Summaarne

Jah, võib-olla pole lahendus ideaalne ja kindlasti mitte kõigile universaalne, kuna neid on palju "kõvakood". Kuid selle põhjal saab igaüks luua oma pildi ja panna selle oma privaatsesse artefaktuuri, kui teil on Dockeris Splunk Forwarderit vaja.

Lingid:

Lahendus artiklist
Outcoldmani lahendus, mis inspireeris meid mõnda funktsiooni uuesti kasutama
of. dokumentatsioon universaalse ekspediitori seadistamiseks

Allikas: www.habr.com

Lisa kommentaar