Ang Splunk usa sa pipila sa labing nailhan nga komersyal nga koleksyon sa troso ug mga produkto sa pagtuki. Bisan karon, kung ang pagbaligya wala na gihimo sa Russia, dili kini hinungdan nga dili isulat ang mga panudlo / kung giunsa kini nga produkto.
Tumong: pagkolekta sa mga log sa sistema gikan sa mga docker node sa Splunk nga walay pagbag-o sa configuration sa host machine
Gusto kong magsugod sa opisyal nga pamaagi, nga medyo katingad-an kung gigamit ang Docker.
Unsay naa nato:
1. Pullim nga hulagway
$ docker pull splunk/universalforwarder:latest2. Sugdi ang sudlanan nga adunay gikinahanglan nga mga parameter
$ docker run -d -p 9997:9997 -e 'SPLUNK_START_ARGS=--accept-license' -e 'SPLUNK_PASSWORD=<password>' splunk/universalforwarder:latest3. Mosulod mi sa sudlanan
docker exec -it <container-id> /bin/bashSunod, gihangyo kami nga moadto sa nahibal-an nga adres sa dokumentasyon.
Ug i-configure ang sudlanan pagkahuman magsugod:
./splunk add forward-server <host name or ip address>:<listening port>
./splunk add monitor /var/log
./splunk restart
Hulat. Unsa?
Apan ang mga sorpresa wala matapos didto. Kung gipadagan nimo ang sudlanan gikan sa opisyal nga imahe sa interactive mode, imong makita ang mosunod:
Usa ka gamay nga kasagmuyo
$ 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 *********
ну и так далее...
Nindot. Ang imahe wala bisan usa ka artifact. Kana mao, sa matag higayon nga magsugod ka magkinahanglan og panahon aron ma-download ang archive nga adunay mga binary, i-unpack ug i-configure.
Unsa man ang bahin sa docker-way ug tanan niana?
Dili salamat. Lahi nga ruta ang atong agian. Unsa kaha kung buhaton naton kini nga tanan nga mga operasyon sa yugto sa asembliya? Unya lakaw ta!
Aron dili malangan ug dugay, akong ipakita kanimo ang kataposang hulagway diha-diha dayon:
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" ]Busa unsa ang anaa sa
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 eofSa una nga pagsugod, gihangyo ka sa Splunk nga hatagan kini usa ka login / password, PERO kini nga datos gigamit lamang aron ipatuman ang mga administratibong sugo alang nianang partikular nga pag-instalar, nga mao, sulod sa sudlanan. Sa among kaso, gusto lang namo nga ilunsad ang sudlanan aron ang tanan molihok ug ang mga troso modagayday sama sa usa ka suba. Siyempre, kini usa ka hardcode, apan wala ako'y nakit-an nga ubang mga paagi.
Dugang pa sumala sa script gipatuman
/splunkforwarder/bin/splunk install app /splunkclouduf.spl -auth admin:changemesplunkclouduf.spl — Kini usa ka file sa kredensyal alang sa Splunk Universal Forwarder, nga mahimong ma-download gikan sa web interface.
Asa i-klik aron ma-download (sa mga hulagway)
Kini usa ka regular nga archive nga mahimong ma-unpack. Sa sulod adunay mga sertipiko ug usa ka password alang sa pagkonektar sa among SplunkCloud ug outputs.conf uban ang usa ka lista sa among mga higayon sa pag-input. Kini nga file mahimong may kalabutan hangtud nga imong i-install pag-usab ang imong Splunk nga pag-install o pagdugang usa ka input node kung ang pag-install naa sa lugar. Busa, walay sayop sa pagdugang niini sa sulod sa sudlanan.
Ug ang katapusan nga butang mao ang pagsugod pag-usab. Oo, aron magamit ang mga pagbag-o, kinahanglan nimo nga i-restart kini.
Sa among inputs.conf gidugang namon ang mga troso nga gusto namon ipadala sa Splunk. Dili kinahanglan nga idugang kini nga file sa imahe kung, pananglitan, nag-apod-apod ka sa mga config pinaagi sa puppet. Ang bugtong butang mao nga ang Forwarder nakakita sa mga config kung magsugod ang daemon, kung dili kini kinahanglan ./splunk restart.
Unsang klaseha sa docker stats scripts sila? Adunay usa ka daan nga solusyon sa Github gikan sa , ang mga script gikuha gikan didto ug giusab aron magamit sa kasamtangan nga mga bersyon sa Docker (ce-17.*) ug Splunk (7.*).
Uban sa datos nga nakuha, mahimo nimong tukuron ang mosunod
mga dashboard: (usa ka magtiayon nga mga litrato)
Ang source code para sa mga dash naa sa link nga gihatag sa katapusan sa artikulo. Palihug timan-i nga adunay 2 ka pinili nga mga natad: 1 - index selection (gipangita pinaagi sa maskara), host/container selection. Lagmit kinahanglan nimo nga i-update ang index mask, depende sa mga ngalan nga imong gigamit.
Sa konklusyon, gusto nako nga ipunting ang imong atensyon sa function magsugod() в
entrypoint.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
}Sa akong kaso, alang sa matag palibot ug matag indibidwal nga entidad, kini usa ka aplikasyon sa usa ka sudlanan o usa ka host machine, naggamit kami usa ka lahi nga indeks. Niining paagiha, ang katulin sa pagpangita dili mag-antos kung adunay usa ka hinungdanon nga pagtipon sa datos. Usa ka yano nga lagda ang gigamit sa pagngalan sa mga indeks: _. Busa, aron ang sudlanan mahimong unibersal, sa wala pa ilunsad ang daemon mismo, among gipulihan sed-ika wildcard sa ngalan sa palibot. Ang variable nga ngalan sa palibot gipasa pinaagi sa mga variable sa palibot. Morag kataw-anan.
Angay usab nga hinumdoman nga sa usa ka hinungdan ang Splunk wala maapektuhan sa presensya sa parameter sa docker hostname. Gahi gihapon siyang magpadala og mga troso nga adunay id sa iyang sudlanan sa host field. Ingon usa ka solusyon, mahimo ka mag-mount / etc / hostname gikan sa host machine ug sa pagsugod paghimo mga kapuli nga susama sa mga ngalan sa indeks.
Pananglitan 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:roAng resulta
Oo, tingali ang solusyon dili maayo ug siguradong dili unibersal alang sa tanan, tungod kay daghan "hardcode". Apan base niini, ang matag usa makahimo sa ilang kaugalingon nga imahe ug ibutang kini sa ilang pribadong artifactory, kung, kung kini mahitabo, kinahanglan nimo ang Splunk Forwarder sa Docker.
Mga reperensiya:
Source: www.habr.com
