Splunk ir viens no vairākiem atpazīstamākajiem komerciālajiem žurnālu vākšanas un analīzes produktiem. Pat tagad, kad Krievijā vairs nenotiek tirdzniecība, tas nav iemesls nerakstīt instrukcijas/pamācības šim produktam.
Uzdevums: apkopojiet sistēmas žurnālus no docker mezgliem programmā Splunk, nemainot resursdatora konfigurāciju
Es gribētu sākt ar oficiālo pieeju, kas, izmantojot Docker, izskatās nedaudz dīvaina.
Kas mums ir:
1. Pullim attēls
$ docker pull splunk/universalforwarder:latest2. Iedarbiniet konteineru ar nepieciešamajiem parametriem
$ docker run -d -p 9997:9997 -e 'SPLUNK_START_ARGS=--accept-license' -e 'SPLUNK_PASSWORD=<password>' splunk/universalforwarder:latest3. Mēs ieejam konteinerā
docker exec -it <container-id> /bin/bashTālāk mums tiek lūgts doties uz dokumentācijā zināmu adresi.
Un konfigurējiet konteineru pēc tā palaišanas:
./splunk add forward-server <host name or ip address>:<listening port>
./splunk add monitor /var/log
./splunk restart
Pagaidiet. Kas?
Bet ar to pārsteigumi nebeidzas. Ja palaižat konteineru no oficiālā attēla interaktīvajā režīmā, redzēsit tālāk norādīto.
Mazliet vilšanās
$ 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 *********
ну и так далее...
Lieliski. Attēlā pat nav artefakta. Tas nozīmē, ka katru reizi, kad sākat, būs nepieciešams laiks, lai lejupielādētu arhīvu ar binārajiem failiem, izsaiņotu un konfigurētu.
Kā ar Docker-way un visu to?
Nē paldies. Mēs iesim citu ceļu. Ko darīt, ja visas šīs darbības veicam montāžas stadijā? Tad ejam!
Lai neaizkavētos pārāk ilgi, tūlīt parādīšu galīgo attēlu:
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" ]Tātad, kas ir ietverts
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 eofPirmajā startā Splunk lūdz ievadīt pieteikumvārdu/paroli, BET šie dati tiek izmantoti tikai lai izpildītu administratīvās komandas konkrētajai instalācijai, tas ir, konteinera iekšpusē. Mūsu gadījumā mēs vienkārši gribam palaist konteineru, lai viss strādā un baļķi plūst kā upe. Protams, tas ir cietais kods, bet es neesmu atradis citus veidus.
Tālāk tiek izpildīts saskaņā ar skriptu
/splunkforwarder/bin/splunk install app /splunkclouduf.spl -auth admin:changemesplunkclouduf.spl — Šis ir Splunk Universal Forwarder akreditācijas datu fails, ko var lejupielādēt no tīmekļa saskarnes.
Kur noklikšķināt, lai lejupielādētu (attēlos)
Šis ir parasts arhīvs, ko var izpakot. Iekšpusē ir sertifikāti un parole, lai izveidotu savienojumu ar mūsu SplunkCloud un outputs.conf ar mūsu ievades gadījumu sarakstu. Šis fails būs aktuāls līdz brīdim, kad atkārtoti instalēsit Splunk instalāciju vai pievienosit ievades mezglu, ja instalēšana notiek uz vietas. Tāpēc nav nekas slikts, pievienojot to konteinerā.
Un pēdējā lieta ir restartēšana. Jā, lai lietotu izmaiņas, tas ir jārestartē.
Mūsu ievades.conf mēs pievienojam žurnālus, kurus vēlamies nosūtīt pakalpojumam Splunk. Šis fails nav jāpievieno attēlam, ja, piemēram, izplatāt konfigurācijas, izmantojot marioneti. Vienīgais, ka Forwarder redz konfigurācijas, kad dēmons sākas, pretējā gadījumā tas būs vajadzīgs ./splunk restart.
Kādi docker statistikas skripti tie ir? Vietnē Github ir vecs risinājums no , skripti tika ņemti no turienes un pārveidoti, lai tie darbotos ar pašreizējām Docker (ce-17.*) un Splunk (7.*) versijām.
Izmantojot iegūtos datus, varat izveidot sekojošo
informācijas paneļi: (pāris bildes)
Domuzīmju avota kods ir raksta beigās sniegtajā saitē. Lūdzu, ņemiet vērā, ka ir 2 atlases lauki: 1 - indeksa atlase (meklē pēc maskas), saimniekdatora/konteinera atlase. Iespējams, jums būs jāatjaunina indeksa maska atkarībā no izmantotajiem nosaukumiem.
Nobeigumā es vēlos vērst jūsu uzmanību uz funkciju sākt() в
ieejas punkts.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
}Manā gadījumā katrai videi un katrai atsevišķai entītijai, neatkarīgi no tā, vai tā ir lietojumprogramma konteinerā vai resursdatorā, mēs izmantojam atsevišķu indeksu. Tādā veidā meklēšanas ātrums necietīs, ja būs ievērojama datu uzkrāšanās. Indeksu nosaukšanai tiek izmantots vienkāršs noteikums: _. Tāpēc, lai konteiners būtu universāls, pirms paša dēmona palaišanas mēs nomainām slāpes-th aizstājējzīme vides nosaukumam. Vides nosaukuma mainīgais tiek nodots caur vides mainīgajiem. Izklausās smieklīgi.
Ir arī vērts atzīmēt, ka kāda iemesla dēļ docker parametra klātbūtne neietekmē Splunk hostname. Viņš joprojām spītīgi sūtīs žurnālus ar sava konteinera ID saimnieka laukā. Kā risinājumu varat uzstādīt / etc / hostname no resursdatora mašīnas un startēšanas laikā veiciet indeksa nosaukumiem līdzīgus nomaiņus.
Piemērs 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:roKopsavilkums
Jā, iespējams, risinājums nav ideāls un noteikti nav universāls visiem, jo tādu ir daudz "cietais kods". Bet, pamatojoties uz to, ikviens var izveidot savu attēlu un ievietot to savā privātajā artefakcijā, ja, kā tas notiek, jums ir nepieciešams Splunk Forwarder programmā Docker.
Saites:
Avots: www.habr.com
