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
}

Менің жағдайда, әрбір орта және әрбір жеке нысан үшін, ол контейнердегі қолданба немесе хост машинасы болсын, біз бөлек индексті қолданамыз. Осылайша, деректер айтарлықтай жинақталған кезде іздеу жылдамдығы зардап шекпейді. Индекстерді атау үшін қарапайым ереже қолданылады: _. Сондықтан, контейнер әмбебап болуы үшін, демонның өзін іске қоспас бұрын, біз ауыстырамыз sed-қоршаған орта атауының қойылмалы таңбасы. Орта атауының айнымалы мәні орта айнымалылары арқылы беріледі. Күлкілі естіледі.

Сондай-ақ, қандай да бір себептермен Splunk-қа докер параметрінің болуы әсер етпейтінін атап өткен жөн. хост атауы. Ол әлі де хост өрісінде өзінің контейнерінің идентификаторы бар журналдарды жібереді. Шешім ретінде сіз орнатуға болады / 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

Нәтиже

Иә, мүмкін шешім идеалды емес және барлығы үшін әмбебап емес, өйткені олардың көпшілігі бар "қатты код". Бірақ оның негізінде әркім өз бейнесін жасап, оны жеке артефактурасына қоя алады, егер сізге Docker жүйесінде Splunk Forwarder қажет болса.

сілтемелер:

Мақаланың шешімі
Кейбір функцияларды қайта пайдалануға шабыттандырған Outcoldman шешімі
Оның. Universal Forwarder орнатуға арналған құжаттама

Ақпарат көзі: www.habr.com

пікір қалдыру