Splunk Universal Forwarder нь системийн бүртгэл цуглуулагчийн хувьд докер дээр

Splunk Universal Forwarder нь системийн бүртгэл цуглуулагчийн хувьд докер дээр

Splunk бол хамгийн алдартай арилжааны бүртгэл цуглуулах, дүн шинжилгээ хийх бүтээгдэхүүнүүдийн нэг юм. Орос улсад борлуулалт хийхээ больсон ч гэсэн энэ бүтээгдэхүүний зааварчилгаа бичихгүй байх шалтгаан биш юм.

Зорилго: хост машины тохиргоог өөрчлөхгүйгээр Splunk дахь докер зангилаанаас системийн бүртгэлийг цуглуул

Би Docker-ийг ашиглахад жаахан хачирхалтай харагддаг албан ёсны арга барилаас эхэлмээр байна.
Docker hub руу холбоно уу
Бидэнд юу байна:

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-тай холбогдох гэрчилгээ, нууц үг болон гаралт.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
}

Миний хувьд, орчин, бие даасан аж ахуйн нэгж бүрийн хувьд, энэ нь саванд байгаа програм эсвэл хост машин байхаас үл хамааран бид тусдаа индекс ашигладаг. Ингэснээр өгөгдөл их хэмжээгээр хуримтлагдсан үед хайлтын хурд буурахгүй. Индексийг нэрлэхэд энгийн дүрмийг ашигладаг: _. Тиймээс, савыг бүх нийтийнх болгохын тулд демоныг өөрөө эхлүүлэхийн өмнө бид солино sed-ом орчлон орчны нэр. Орчны нэрийн хувьсагч нь орчны хувьсагчаар дамждаг. Инээдтэй сонсогдож байна.

Зарим шалтгааны улмаас 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

Үр дүн

Тийм ээ, магадгүй шийдэл нь тийм ч тохиромжтой биш бөгөөд хүн бүрт түгээмэл биш байж болох юм, учир нь олон байдаг "хатуу код". Гэхдээ үүний үндсэн дээр хүн бүр өөрийн гэсэн дүр төрхийг бүтээж, хувийн олдвор дээрээ байрлуулж болно, хэрэв танд Docker дээр Splunk Forwarder хэрэгтэй бол.

Ашигласан материал:

Нийтлэлээс гарсан шийдэл
Зарим функцийг дахин ашиглахад бидэнд сүнслэг нөлөө үзүүлсэн outcoldman-ийн шийдэл
-ийн. Universal Forwarder-ийг тохируулах баримт бичиг

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх