Splunk Universal Forwarder di docker de wekî berhevkarek têketina pergalê

Splunk Universal Forwarder di docker de wekî berhevkarek têketina pergalê

Splunk yek ji çend hilberên berhevkirin û analîzê yên têketinê yên bazirganî yên herî naskirî ye. Niha jî, dema ku firotan êdî li Rûsyayê nayê kirin, ev ne sedemek e ku meriv ji bo vê hilberê rêwerz/çawa nenivîsîne.

Armanc: bêyî guheztina veavakirina makîneya mêvandar têketinên pergalê ji girêkên dokerê yên li Splunk berhev bikin

Ez dixwazim bi nêzîkatiya fermî dest pê bikim, ku dema ku Docker bikar tîne hinekî xerîb xuya dike.
Girêdana navenda Docker
Çi heye:

1. Wêneyê Pullim

$ docker pull splunk/universalforwarder:latest

2. Konteynir bi pîvanên pêwîst dest pê bikin

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

3. Em diçin nav konteynerê

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

Dûv re, ji me tê xwestin ku di belgeyê de biçin navnîşanek naskirî.

Û piştî ku konteynerê dest pê dike mîheng bikin:


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

Payin. Çi?

Lê sosret bi dawî nabin. Ger hûn konteynerê ji wêneya fermî di moda înteraktîf de bimeşînin, hûn ê jêrîn bibînin:

Piçek bêhêvîbûn


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

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

Ecêb. Di wêneyê de hunerek jî tê de nîne. Ango, her gava ku hûn dest pê bikin, ew ê dem bigire ku arşîvê bi binaryan dakêşin, pak bikin û mîheng bikin.
Çi li ser docker-way û her tiştî?

Na spas. Em ê rêyek cûda bigirin. Ger em van hemî operasyonan di qonaxa civînê de bikin? Paşê em herin!

Ji bo ku pir dereng nemînim, ez ê tavilê wêneya dawîn nîşanî we bidim:

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

Ji ber vê yekê tiştê ku tê de heye

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

Di destpêka yekem de, Splunk ji we dipirse ku hûn têketinek / şîfreyek bidin, LÊ ev dane tê bikar anîn bi tenê ku emrên îdarî ji bo wê sazkirina taybetî, ango di hundurê konteynerê de bicîh bikin. Di doza me de, em tenê dixwazin konteynerê bidin destpêkirin da ku her tişt bixebite û têketin mîna çemek biherikin. Bê guman, ev koda hişk e, lê min rêyên din nedît.

Wekî din li gorî senaryoyê tê meşandin

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

splunkclouduf.spl - Ev pelek pêbaweriyê ye ji bo Splunk Universal Forwarder, ku dikare ji navrûya tevneyê were dakêşandin.

Li ku derê bikirtînin dakêşin (di wêneyan de)Splunk Universal Forwarder di docker de wekî berhevkarek têketina pergalê

Splunk Universal Forwarder di docker de wekî berhevkarek têketina pergalê
Ev arşîvek birêkûpêk e ku dikare bê pakkirin. Di hundurê de sertîfîka û şîfreyek ji bo girêdana bi SplunkCloud-a me û derdan.conf bi navnîşek mînakên têketina me. Ev pel dê têkildar be heya ku hûn sazkirina Splunk-a xwe ji nû ve saz bikin an girêkek têketinê lê zêde bikin heke sazkirin li ser bingehê be. Ji ber vê yekê, tiştek xelet tune ku wê di hundurê konteynerê de zêde bike.

Û ya dawîn ji nû ve destpêkirinê ye. Erê, ji bo pêkanîna guhertinan, hûn hewce ne ku wê ji nû ve bidin destpêkirin.

Di me de têketin.conf em têketinên ku em dixwazin ji Splunk re bişînin zêde dikin. Ne hewce ye ku hûn vê pelê li wêneyê zêde bikin heke, mînakî, hûn mîhengan bi riya puppetê belav bikin. Tiştek tenê ev e ku Forwarder gava ku daemon dest pê dike konfigurasyonan dibîne, wekî din ew ê hewce bike ./splunk ji nû ve dest pê bike.

Ew çi cûre nivîsarên statîstîkên docker in? Li ser Github ji çareseriyek kevn heye outcoldman, senaryo ji wir hatine girtin û hatine guheztin da ku bi guhertoyên heyî yên Docker (ce-17.*) û Splunk (7.*) re bixebitin.

Bi daneyên ku hatine bidestxistin, hûn dikarin jêrîn ava bikin

dashboard: (çend wêne)Splunk Universal Forwarder di docker de wekî berhevkarek têketina pergalê

Splunk Universal Forwarder di docker de wekî berhevkarek têketina pergalê
Koda çavkaniyê ji bo dakêşan di girêdana ku di dawiya gotarê de hatî peyda kirin de ye. Ji kerema xwe bala xwe bidin ku 2 qadên bijartî hene: 1 - Hilbijartina navnîşê (bi maskê tê lêgerîn), hilbijartina mêvandar / konteyner. Hûn ê hewce bikin ku li gorî navên ku hûn bikar tînin, maskeya navnîşê nûve bikin.

Di encamê de, ez dixwazim bala we bikişînim ser fonksiyonê destpêkirin() в

xala têketinê.ş

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
}

Di doza min de, ji bo her hawîrdor û her saziyek kesane, ew serîlêdanek di konteynerek an makîneyek mêvandar de be, em navnîşek cihêreng bikar tînin. Bi vî rengî, gava ku berhevbûnek girîng a daneyê hebe, leza lêgerînê dê zirarê nede. Rêgezek hêsan ji bo navên indexan tê bikar anîn: _. Ji ber vê yekê, ji bo ku konteynir gerdûnî be, berî destpêkirina daemon bixwe, em diguhezînin sed-mîna wildcard ji bo navê jîngehê. Guherbara navê jîngehê di nav guhêrbarên jîngehê re derbas dibe. Sounds funny.

Di heman demê de hêjayî gotinê ye ku ji ber hin sedeman Splunk ji hebûna pîvana docker nayê bandor kirin hostname. Ew ê dîsa jî bi serhişkî têketinên bi nasnameya konteynera xwe li qada mêvandar bişîne. Wekî çareseriyek, hûn dikarin siwar bikin / etc / hostname ji makîneya mêvandar û di dema destpêkirinê de veguheztinên mîna navên navnîşan çêbikin.

Mînak 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

Encam

Erê, dibe ku çareserî ji bo her kesî ne îdeal û bê guman ne gerdûnî ye, ji ber ku gelek hene "hardcode". Lê li ser bingeha wê, her kes dikare wêneya xwe ava bike û wê têxe nav hunera xweya taybet, heke, wekî ku diqewime, hûn hewceyê Splunk Forwarder in Docker.

References:

Çareseriya ji gotara
Çareseriyek ji outcoldman ku me teşwîq kir ku em hin fonksiyonan ji nû ve bikar bînin
Ji. belgeyên ji bo sazkirina Pêşkêşkera Gerdûnî

Source: www.habr.com

Ji bo malperên bi parastina DDoS, serverên VPS VDS mêvandariya pêbawer bikirin 🔥 Hostinga malperê ya pêbawer bi parastina DDoS, serverên VPS VDS bikirin | ProHoster