Splunk Universal Forwarder докерде системалык журналдарды чогултуучу катары

Splunk Universal Forwarder докерде системалык журналдарды чогултуучу катары

Splunk эң таанымал коммерциялык журналдарды чогултуу жана талдоо продуктуларынын бири болуп саналат. Азыр да, Россияда сатылбай калганда, бул бул продукт үчүн нускамаларды/кантипти жазбоо үчүн себеп эмес.

маселе: хост машинасынын конфигурациясын өзгөртпөстөн Splunk докер түйүндөрүнөн система журналдарын чогултуңуз

Мен расмий ыкма менен баштагым келет, ал Dockerди колдонууда бир аз кызыктай көрүнөт.
Docker хабына шилтеме
Бизде эмне бар:

1. Pullim сүрөтү

$ 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 боюнча эски чечим бар outcoldman, сценарийлер ошол жерден алынып, 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 докер параметринин болушуна таасир этпейт. түйүндүн аталышы. Ал дагы эле өжөрлүк менен хост талаасында өзүнүн контейнеринин идентификатору менен журналдарды жөнөтөт. Чечим катары сиз орното аласыз / Ж.б. / түйүндүн хост машинасынан жана ишке киргизүүдө индекс атына окшош алмаштырууларды жасаңыз.

Мисал 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

жыйынтык

Ооба, балким, чечим идеалдуу эмес жана ар бир адам үчүн универсалдуу эмес, анткени алар көп "катуу код". Бирок анын негизинде ар бир адам өзүнүн имиджин түзүп, аны жеке артефактурасына кое алат, эгерде сизге Dockerде Splunk Forwarder керек болсо.

шилтеме:

Макаладан алынган чечим
Outcoldman компаниясынын чечими, ал бизге айрым функцияларды кайра колдонууга шыктандырды
Of. Universal Forwarder орнотуу үчүн документтер

Source: www.habr.com

DDoS коргоосу, VPS VDS серверлери бар сайттар үчүн ишенимдүү хостинг сатып алыңыз 🔥 DDoS коргоосу, VPS VDS серверлери бар ишенимдүү веб-сайт хостингин сатып алыңыз | ProHoster