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.
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)
Ĉ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
Kun la datumoj akiritaj, vi povas konstrui la jenajn
paneloj: (kelkaj bildoj)
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
fonto: www.habr.com