Splunk Universal Forwarder dokeryje kaip sistemos žurnalų rinkėjas

Splunk Universal Forwarder dokeryje kaip sistemos žurnalų rinkėjas

„Splunk“ yra vienas iš kelių labiausiai atpažįstamų komercinių rąstų rinkimo ir analizės produktų. Net ir dabar, kai Rusijoje nebeparduodama, tai nėra priežastis nerašyti šio produkto instrukcijų/kaip.

Užduotis: rinkti sistemos žurnalus iš „Splunk“ doko mazgų nekeičiant pagrindinio kompiuterio konfigūracijos

Norėčiau pradėti nuo oficialaus požiūrio, kuris atrodo šiek tiek keistas naudojant „Docker“.
Nuoroda į „Docker“ centrą
Ką mes turime:

1. Pullim vaizdas

$ docker pull splunk/universalforwarder:latest

2. Paleiskite konteinerį su reikiamais parametrais

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

3. Einame į konteinerį

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

Tada mūsų prašoma kreiptis į žinomą dokumentuose nurodytą adresą.

Ir sukonfigūruokite konteinerį jam prasidėjus:


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

Laukti. Ką?

Tačiau netikėtumai tuo nesibaigia. Jei paleidžiate konteinerį iš oficialaus vaizdo interaktyviuoju režimu, pamatysite:

Truputis nusivylimas


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

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

Puiku. Nuotraukoje net nėra artefakto. Tai reiškia, kad kiekvieną kartą paleidus užtruks, kol atsisiųsite archyvą su dvejetainiais failais, išpakuosite ir sukonfigūruosite.
O kaip su Docker-way ir visa kita?

Ne, ačiū. Eisime kitu maršrutu. Ką daryti, jei visas šias operacijas atliksime surinkimo etape? Tada eime!

Kad nedelsčiau per ilgai, iš karto parodysiu galutinį vaizdą:

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

Taigi, kas yra įtraukta į

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

Pirmą kartą paleidus Splunk prašo duoti prisijungimo vardą/slaptažodį, BET šie duomenys naudojami tik vykdyti administracines komandas tam konkrečiam diegimui, tai yra konteinerio viduje. Mūsų atveju tiesiog norime paleisti konteinerį, kad viskas veiktų ir rąstai tekėtų kaip upė. Žinoma, tai yra griežtas kodas, bet aš neradau jokių kitų būdų.

Toliau vykdomas pagal scenarijų

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

splunkclouduf.spl — Tai yra „Splunk Universal Forwarder“ kredencialų failas, kurį galima atsisiųsti iš žiniatinklio sąsajos.

Kur spustelėti atsisiųsti (nuotraukose)Splunk Universal Forwarder dokeryje kaip sistemos žurnalų rinkėjas

Splunk Universal Forwarder dokeryje kaip sistemos žurnalų rinkėjas
Tai įprastas archyvas, kurį galima išpakuoti. Viduje yra sertifikatai ir slaptažodis, skirtas prisijungti prie mūsų SplunkCloud ir išėjimai.conf su mūsų įvesties atvejų sąrašu. Šis failas bus aktualus, kol iš naujo neįdiegsite „Splunk“ diegimo arba pridėsite įvesties mazgą, jei įdiegsite vietoje. Todėl nėra nieko blogo įdėti jį į konteinerį.

Ir paskutinis dalykas yra paleisti iš naujo. Taip, norėdami pritaikyti pakeitimus, turite jį paleisti iš naujo.

Mūsų inputs.conf pridedame žurnalus, kuriuos norime siųsti į „Splunk“. Nebūtina pridėti šio failo prie vaizdo, jei, pavyzdžiui, platinate konfigūracijas per lėlę. Vienintelis dalykas yra tai, kad Forwarder mato konfigūracijas, kai demonas prasideda, kitaip reikės ./splunk paleisti iš naujo.

Kokie tai yra docker statistikos scenarijai? „Github“ yra senas sprendimas peršalęs žmogus, scenarijai buvo paimti iš ten ir modifikuoti, kad veiktų su dabartinėmis „Docker“ (ce-17.*) ir „Splunk“ (7.*) versijomis.

Naudodami gautus duomenis galite sukurti šiuos dalykus

prietaisų skydeliai: (pora nuotraukų)Splunk Universal Forwarder dokeryje kaip sistemos žurnalų rinkėjas

Splunk Universal Forwarder dokeryje kaip sistemos žurnalų rinkėjas
Brūkšnelių šaltinio kodas yra nuorodoje, pateiktoje straipsnio pabaigoje. Atkreipkite dėmesį, kad yra 2 pasirinkimo laukai: 1 - indekso pasirinkimas (ieškoma pagal kaukę), pagrindinio kompiuterio / sudėtinio rodinio pasirinkimas. Tikriausiai turėsite atnaujinti indekso kaukę, atsižvelgiant į naudojamus pavadinimus.

Baigdamas norėčiau atkreipti jūsų dėmesį į funkciją pradžia () в

įėjimo taškas.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
}

Mano atveju kiekvienai aplinkai ir kiekvienam atskiram objektui, nesvarbu, ar tai būtų konteineryje esanti programa, ar pagrindiniame kompiuteryje, naudojame atskirą indeksą. Tokiu būdu paieškos greitis nenukentės, kai bus daug duomenų. Indeksams pavadinti naudojama paprasta taisyklė: _. Todėl, norėdami, kad konteineris būtų universalus, prieš paleisdami patį demoną pakeičiame troškulys- aplinkos pavadinimo pakaitos simbolis. Aplinkos pavadinimo kintamasis perduodamas per aplinkos kintamuosius. Skamba juokingai.

Taip pat verta paminėti, kad dėl tam tikrų priežasčių „Splunk“ neturi įtakos dokerio parametro buvimas hostname. Jis vis tiek atkakliai siųs žurnalus su savo konteinerio identifikatoriumi priimančiojo lauke. Kaip sprendimą galite montuoti / etc / hostname iš pagrindinio kompiuterio ir paleidžiant atlikti pakeitimus, panašius į indekso pavadinimus.

Docker-compose.yml pavyzdys

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

Visas

Taip, galbūt sprendimas nėra idealus ir tikrai ne visiems universalus, nes jų yra daug "kietasis kodas". Bet remdamasis juo, kiekvienas gali susikurti savo įvaizdį ir įdėti jį į savo asmeninį artefaktūrą, jei, kaip nutinka, jums reikia „Splunk Forwarder“ programoje „Docker“.

Nuorodos:

Sprendimas iš straipsnio
Outcoldman sprendimas, įkvėpęs mus pakartotinai panaudoti kai kurias funkcijas
Apie. universalaus ekspeditoriaus nustatymo dokumentaciją

Šaltinis: www.habr.com

Добавить комментарий