Splunk Universal Forwarder дар докер ҳамчун коллектори гузоришҳои система

Splunk Universal Forwarder дар докер ҳамчун коллектори гузоришҳои система

Splunk яке аз якчанд маҳсулоти машҳуртарини ҷамъоварӣ ва таҳлили гузоришҳои тиҷоратӣ мебошад. Ҳатто ҳоло, вақте ки фурӯш дар Русия дигар анҷом дода намешавад, ин сабабе нест, ки дастурҳо / усулҳои ин маҳсулотро нанависед.

Мақсад: сабтҳои системаро аз гиреҳҳои докер дар Splunk бидуни тағир додани конфигуратсияи мошини ҳост ҷамъ кунед

Ман мехоҳам бо равиши расмӣ оғоз кунам, ки ҳангоми истифодаи docker аҷиб менамояд.
Истинод ба маркази Docker
Мо чӣ дорем:

1. Тасвири пуллим

$ docker pull splunk/universalforwarder:latest

2. Контейнерро бо параметрҳои зарурӣ оғоз кунед

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

3. Мо ба контейнер меравем

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

Баъдан, аз мо хоҳиш карда мешавад, ки ба суроғаи маълум дар ҳуҷҷатҳо равем.

Ва контейнерро пас аз оғоз кардани он танзим кунед:


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

Интизор шавед. Чӣ?

Аммо сюрпризҳо бо ин тамом намешаванд. Агар шумо контейнерро аз тасвири расмӣ дар реҷаи интерактивӣ иҷро кунед, шумо инҳоро хоҳед дид:

Як каме ноумедӣ


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

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

бузург. Дар тасвир ҳатто артефакт мавҷуд нест. Яъне, ҳар дафъае, ки шумо оғоз мекунед, барои зеркашии бойгонӣ бо дуӣ, кушодан ва танзим кардан вақт лозим мешавад.
Дар бораи docker-way ва ҳамаи ин чӣ гуфтан мумкин аст?

Не ташаккур. Мо роҳи дигарро пеш мегирем. Чӣ мешавад, агар мо ҳамаи ин амалиётҳоро дар марҳилаи монтаж иҷро кунем? Пас биёед меравем!

Барои он ки муддати тӯлонӣ таъхир накунад, ман фавран тасвири ниҳоиро ба шумо нишон медиҳам:

файли докер

# Тут у кого какие предпочтения
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" ]

Пас, он чизе, ки дар он мавҷуд аст

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

Дар оғози аввал, Splunk номи корбар / паролро мепурсад, АММО ин маълумот истифода мешавад танҳо иҷро кардани фармонҳои маъмурӣ барои ин насбкунӣ, яъне дар дохили контейнер. Дар ҳолати мо, мо танҳо мехоҳем, ки контейнерро идора кунем, то ҳама чиз кор кунад ва чӯбҳо мисли об ҷорӣ шаванд. Албатта, ин коди сахт аст, аммо ман роҳи дигареро наёфтам.

Минбаъд мувофиқи скрипт иҷро карда мешавад

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

splunkclouduf.spl — Ин файли эътимоднома барои Splunk Universal Forwarder аст, ки онро аз интерфейси веб зеркашӣ кардан мумкин аст.

Барои зеркашӣ дар куҷо клик кунед (дар расмҳо)Splunk Universal Forwarder дар докер ҳамчун коллектори гузоришҳои система

Splunk Universal Forwarder дар докер ҳамчун коллектори гузоришҳои система
Ин бойгонии муқаррарӣ аст, ки онро кушодан мумкин аст. Дар дохили он сертификатҳо ва парол барои пайвастшавӣ ба SplunkCloud ва outputs.conf бо рӯйхати мисолҳои вуруди мо. Ин файл то он даме, ки шумо насби Splunk-и худро аз нав насб кунед ё гиреҳи вурудро илова кунед, агар насб дар бино бошад, навсозӣ мешавад. Аз ин рӯ, дар дохили контейнер илова кардани он ҳеҷ гуноҳе нест.

Ва чизи охирин аз нав оғоз кардан аст. Бале, барои татбиқи тағйирот, шумо бояд онро аз нав оғоз кунед.

Дар мо inputs.conf мо гузоришҳоеро илова мекунем, ки мо мехоҳем ба Splunk фиристем. Агар масалан, шумо конфигуратсияҳоро тавассути лӯхтак паҳн кунед, ин файлро ба тасвир илова кардан лозим нест. Муҳим он аст, ки экспедитор конфигуратсияҳоро ҳангоми оғози демон мебинад, вагарна он лозим мешавад ./splunk аз нав оғоз кунед.

Онҳо чӣ гуна скриптҳои омори докер мебошанд? Дар Github ҳалли кӯҳна мавҷуд аст одами барҷаста, скриптҳо аз он ҷо гирифта шуда, барои кор бо версияҳои ҷории Docker (ce-17.*) ва Splunk (7.*) тағир дода мешаванд.

Бо маълумоти гирифташуда, шумо метавонед зеринро созед

панелҳои идоракунӣ: (якчанд тасвирҳо)Splunk Universal Forwarder дар докер ҳамчун коллектори гузоришҳои система

Splunk Universal Forwarder дар докер ҳамчун коллектори гузоришҳои система
Рамзи ибтидоии тире дар истиноди дар охири мақола овардашуда мавҷуд аст. Лутфан таваҷҷӯҳ намоед, ки 2 майдони интихоб мавҷуд аст: 1 - интихоби индекс (бо ниқоб ҷустуҷӯ карда мешавад), интихоби мизбон/контейнер. Вобаста аз номҳое, ки шумо истифода мебаред, эҳтимол шумо бояд ниқоби индексро навсозӣ кунед.

Дар хотима, ман мехоҳам таваҷҷӯҳи шуморо ба функсия ҷалб намоям оғоз () в

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
}

Дар ҳолати ман, барои ҳар як муҳит ва ҳар як объекти инфиродӣ, хоҳ он барнома дар контейнер ё мошини ҳост бошад, мо индекси алоҳидаро истифода мебарем. Ҳамин тариқ, суръати ҷустуҷӯ ҳангоми ҷамъшавии назарраси маълумот зарар намебинад. Барои номгузории индексҳо қоидаи оддӣ истифода мешавад: _. Аз ин рӯ, барои он ки контейнер универсалӣ бошад, пеш аз оғози худи демон, мо иваз мекунем Сел- аломати ваҳшӣ ба номи муҳити зист. Тағйирёбандаи номи муҳити зист тавассути тағирёбандаҳои муҳити зист интиқол дода мешавад. Хандаовар садо медиҳад.

Инчунин бояд қайд кард, ки бо ягон сабаб ба Splunk мавҷудияти параметри докер таъсир намерасонад. номӣ. Вай то ҳол якравона гузоришҳоро бо ID-и контейнери худ дар майдони мизбон мефиристад. Ҳамчун ҳалли шумо метавонед насб кунед / etc / hostname аз мошини мизбон ва ҳангоми оғозёбӣ иваз кардани номҳои индекси шабеҳро иҷро кунед.

Намунаи 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

Натиҷа

Бале, шояд ҳалли он идеалӣ нест ва албатта барои ҳама универсалӣ нест, зеро бисёриҳо ҳастанд "коди сахт". Аммо дар асоси он, ҳар кас метавонад симои худро созад ва онро дар артифактураи хусусии худ гузорад, агар, тавре ки рӯй медиҳад, ба шумо Splunk Forwarder дар докер лозим аст.

Истинодҳо:

Ҳалли мақола
Ҳалли аз Outcoldman, ки моро илҳом бахшид, ки баъзе аз функсияҳоро дубора истифода барем
Аз. ҳуҷҷатҳо барои таъсиси Universal Forwarder

Манбаъ: will.com

Илова Эзоҳ