Splunk Universal Forwarder en docker kiel sistema registro-kolektanto

Splunk Universal Forwarder en docker kiel sistema registro-kolektanto

Splunk estas unu el pluraj el la plej rekoneblaj komercaj ŝtipkolekto kaj analizproduktoj. Eĉ nun, kiam vendoj ne plu estas faritaj en Rusio, ĉi tio ne estas kialo por ne skribi instrukciojn/kiel fari por ĉi tiu produkto.

Objektivo: kolektu sistemajn protokolojn de docker-nodoj en Splunk sen ŝanĝi la gastigan maŝinan agordon

Mi ŝatus komenci per la oficiala aliro, kiu aspektas iom strange kiam vi uzas Docker.
Ligo al Docker-nabo
Kion ni havas:

1. Pullim bildo

$ docker pull splunk/universalforwarder:latest

2. Komencu la ujon kun la necesaj parametroj

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

3. Ni iras en la ujon

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

Poste, ni petas iri al konata adreso en la dokumentado.

Kaj agordu la ujon post kiam ĝi komenciĝas:


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

Atendu. Kio?

Sed la surprizoj ne finiĝas tie. Se vi rulas la ujon de la oficiala bildo en interaga reĝimo, vi vidos la jenon:

Iom da seniluziiĝo


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

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

Bonege. La bildo eĉ ne enhavas artefakton. Tio estas, ĉiufoje kiam vi komencos, necesas tempo por elŝuti la arkivon kun binaroj, malpakigi kaj agordi.
Kio pri docker-way kaj ĉio tio?

Ne, dankon. Ni prenos alian vojon. Kio se ni plenumas ĉiujn ĉi tiujn operaciojn ĉe la munta stadio? Tiam ni iru!

Por ne tro longe prokrasti, mi tuj montros al vi la finan bildon:

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

Do kio estas enhavita

unua_komenco.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

Je la unua komenco, Splunk petas vin doni al ĝi ensaluton/pasvorton, SED ĉi tiuj datumoj estas uzataj nur por ekzekuti administrajn komandojn por tiu aparta instalado, tio estas, ene de la ujo. En nia kazo, ni nur volas lanĉi la ujon por ke ĉio funkciu kaj la ŝtipoj fluu kiel rivero. Kompreneble, ĉi tio estas hardkodo, sed mi ne trovis aliajn manierojn.

Plue laŭ la skripto estas ekzekutita

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

splunkclouduf.spl — Ĉi tio estas akredit-dosiero por Splunk Universal Forwarder, kiu povas esti elŝutita de la retinterfaco.

Kie klaki por elŝuti (en bildoj)Splunk Universal Forwarder en docker kiel sistema registro-kolektanto

Splunk Universal Forwarder en docker kiel sistema registro-kolektanto
Ĉi tio estas regula arkivo, kiu povas esti malpakita. Ene estas atestiloj kaj pasvorto por konekti al nia SplunkCloud kaj eligoj.konf kun listo de niaj enigokazoj. Ĉi tiu dosiero estos grava ĝis vi reinstalos vian Splunk-instalaĵon aŭ aldonos enigan nodon se la instalado estas surloke. Tial, estas nenio malbona kun aldoni ĝin en la ujo.

Kaj la lasta afero estas rekomenco. Jes, por apliki la ŝanĝojn, vi devas rekomenci ĝin.

En nia enigaĵoj.konf ni aldonas la protokolojn, kiujn ni volas sendi al Splunk. Ne necesas aldoni ĉi tiun dosieron al la bildo se, ekzemple, vi distribuas agordojn per marioneto. La sola afero estas, ke Forwarder vidas la agordojn kiam la demono komenciĝas, alie ĝi bezonos ./splunk rekomenco.

Kiaj docker-statistikaj skriptoj ili estas? Estas malnova solvo sur Github de outcoldman, la skriptoj estis prenitaj de tie kaj modifitaj por labori kun aktualaj versioj de Docker (ce-17.*) kaj Splunk (7.*).

Kun la datumoj akiritaj, vi povas konstrui la jenajn

paneloj: (kelkaj bildoj)Splunk Universal Forwarder en docker kiel sistema registro-kolektanto

Splunk Universal Forwarder en docker kiel sistema registro-kolektanto
La fontkodo por strekoj estas en la ligilo provizita ĉe la fino de la artikolo. Bonvolu noti, ke estas 2 elekteblaj kampoj: 1 - indeksa elekto (serĉita per masko), elekto de gastiganto/ujo. Vi verŝajne devos ĝisdatigi la indeksan maskon, depende de la nomoj, kiujn vi uzas.

Konklude, mi ŝatus atentigi vin pri la funkcio komenci () в

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

En mia kazo, por ĉiu medio kaj ĉiu unuopa ento, ĉu ĝi estas aplikaĵo en ujo aŭ gastiga maŝino, ni uzas apartan indekson. Tiel, la serĉrapideco ne suferos kiam estas grava amasiĝo de datumoj. Simpla regulo estas uzata por nomi indeksojn: _. Tial, por ke la ujo estu universala, antaŭ ol lanĉi la demonon mem, ni anstataŭigas sed-th ĵokero al la nomo de la medio. La media nomvariablo estas trapasita tra mediovariabloj. Sonas amuza.

Ankaŭ indas noti, ke ial Splunk ne estas tuŝita de la ĉeesto de la docker-parametro. gastignomo. Li ankoraŭ obstine sendos ŝtipojn kun la id de sia ujo en la gastiga kampo. Kiel solvo, vi povas munti / ktp / gastignomo de la gastiga maŝino kaj ĉe ekfunkciigo faru anstataŭaĵojn similajn al indeksaj nomoj.

Ekzemplo 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

La rezulto

Jes, eble la solvo ne estas ideala kaj certe ne universala por ĉiuj, ĉar estas multaj "malmola kodo". Sed surbaze de ĝi, ĉiu povas konstrui sian propran bildon kaj meti ĝin en sian privatan artefaĵon, se, kiel okazas, vi bezonas Splunk Forwarder en Docker.

Referencoj

Solvo el la artikolo
Solvo de outcoldman, kiu inspiris nin reuzi iujn el la funkcioj
De. dokumentado por starigi Universalan Forwarder

fonto: www.habr.com

Aldoni komenton