Splunk эң таанымал коммерциялык журналдарды чогултуу жана талдоо продуктуларынын бири болуп саналат. Азыр да, Россияда сатылбай калганда, бул бул продукт үчүн нускамаларды/кантипти жазбоо үчүн себеп эмес.
маселе: хост машинасынын конфигурациясын өзгөртпөстөн Splunk докер түйүндөрүнөн система журналдарын чогултуңуз
Мен расмий ыкма менен баштагым келет, ал Dockerди колдонууда бир аз кызыктай көрүнөт.
Бизде эмне бар:
1. Pullim сүрөтү
$ docker pull splunk/universalforwarder:latest2. Контейнерди керектүү параметрлер менен баштаңыз
$ docker run -d -p 9997:9997 -e 'SPLUNK_START_ARGS=--accept-license' -e 'SPLUNK_PASSWORD=<password>' splunk/universalforwarder:latest3. Биз контейнерге киребиз
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:changemesplunkclouduf.spl — Бул Splunk Universal Forwarder үчүн эсептик маалымат файлы, аны веб-интерфейстен жүктөп алууга болот.
Жүктөп алуу үчүн кайда басуу керек (сүрөттө)
Бул кадимки архив, аны ачууга болот. Ичинде биздин SplunkCloud менен туташуу үчүн сертификаттар жана сырсөз бар outputs.conf биздин киргизүү учурларынын тизмеси менен. Бул файл Splunk орнотууңузду кайра орнотмоюнча же орнотуу жеринде болсо, киргизүү түйүн кошмоюнча актуалдуу болот. Андыктан аны идиштин ичине кошуп коюунун эч кандай жаман жери жок.
Жана акыркы нерсе - кайра баштоо. Ооба, өзгөртүүлөрдү колдонуу үчүн, аны кайра иштетүү керек.
Биздин inputs.conf биз Splunkко жөнөткүбүз келген журналдарды кошобуз. Эгер, мисалы, куурчак аркылуу конфигурацияларды таратсаңыз, бул файлды сүрөткө кошуунун кереги жок. Бир гана нерсе, экспедитор демон башталганда конфигурацияларды көрөт, антпесе ага керек болот ./splunk кайра баштоо.
Алар кандай докер статистикалык сценарийлери? Github боюнча эски чечим бар , сценарийлер ошол жерден алынып, Docker (ce-17.*) жана Splunk (7.*) учурдагы версиялары менен иштөө үчүн өзгөртүлгөн.
Алынган маалыматтар менен сиз төмөнкүлөрдү түзө аласыз
башкаруу такталары: (бир нече сүрөт)
Тирелердин баштапкы коду макаланын аягында берилген шилтемеде. 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 керек болсо.
шилтеме:
Source: www.habr.com
