ڊاکر ۾ اسپلڪ يونيورسل فارورڊر هڪ سسٽم لاگ ڪليڪٽر جي طور تي

ڊاکر ۾ اسپلڪ يونيورسل فارورڊر هڪ سسٽم لاگ ڪليڪٽر جي طور تي

Splunk ڪيترن ئي مان هڪ آهي سڀ کان وڌيڪ سڃاتل تجارتي لاگ گڏ ڪرڻ ۽ تجزيو پراڊڪٽس. اڃا به، جڏهن روس ۾ وڪرو نه ڪيو ويو آهي، اهو هڪ سبب ناهي ته هن پراڊڪٽ لاء هدايتون/ڪيئن-ڪيئن نه لکجي.

مقصد: سسٽم لاگ گڏ ڪريو ڊاڪر نوڊس مان Splunk ۾ ميزبان مشين جي ترتيب کي تبديل ڪرڻ کان سواء

آئون سرڪاري طريقي سان شروع ڪرڻ چاهيان ٿو، جيڪو ڊاکر استعمال ڪندي ٿورو عجيب لڳندو آهي.
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 ۽ اهو سڀ ڪجهه؟

نه مهرباني. اسان هڪ مختلف رستو وٺي وينداسين. ڇا جيڪڏهن اسان انهن سڀني عملن کي اسيمبلي اسٽيج تي انجام ڏيون؟ پوءِ اچو ته هلون!

گهڻي دير نه ڪرڻ جي لاءِ، مان توهان کي فوري تصوير ڏيکاريندس:

Dockerfile

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

پهرين شروعات ۾، اسپلڪ توهان کان پڇي ٿو ته ان کي هڪ لاگ ان/پاسورڊ ڏيو، پر هي ڊيٽا استعمال ڪيو ويندو آهي صرف انهي خاص تنصيب لاءِ انتظامي حڪمن تي عمل ڪرڻ، يعني ڪنٽينر اندر. اسان جي حالت ۾، اسان صرف ڪنٽينر کي لانچ ڪرڻ چاهيون ٿا ته جيئن هر شيء ڪم ڪري ۽ لاگز درياهه وانگر وهي. يقينا، هي هارڊ ڪوڊ آهي، پر مون کي ٻيو ڪو طريقو نه مليو آهي.

اڳتي هلي لکت جي مطابق عمل ڪيو ويندو آهي

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

splunkclouduf.spl - ھي آھي ھڪ سندي فائل اسپلڪ يونيورسل فارورڊر لاءِ، جنھن کي ويب انٽرفيس تان ڊائون لوڊ ڪري سگھجي ٿو.

ڊائون لوڊ ڪرڻ لاء ڪٿي ڪلڪ ڪريو (تصويرن ۾)ڊاکر ۾ اسپلڪ يونيورسل فارورڊر هڪ سسٽم لاگ ڪليڪٽر جي طور تي

ڊاکر ۾ اسپلڪ يونيورسل فارورڊر هڪ سسٽم لاگ ڪليڪٽر جي طور تي
هي هڪ باقاعده آرڪائيو آهي جيڪو انپيڪ ٿي سگهي ٿو. اندر اسان جي SplunkCloud سان ڳنڍڻ لاء سرٽيفڪيٽ ۽ پاسورڊ آهن outputs.conf اسان جي ان پٽ مثالن جي فهرست سان. هي فائل لاڳاپيل هوندي جيستائين توهان پنهنجي اسپلڪ انسٽاليشن کي ٻيهر انسٽال نه ڪندا يا ان پٽ نوڊ شامل نه ڪندا جيڪڏهن انسٽاليشن آن پرائمس آهي. تنهن ڪري، ان کي ڪنٽينر اندر شامل ڪرڻ ۾ ڪجھ به غلط ناهي.

۽ آخري شيء ٻيهر شروع ڪرڻ آهي. ها، تبديلين کي لاڳو ڪرڻ لاء، توهان کي ان کي ٻيهر شروع ڪرڻو پوندو.

اسان ۾ inputs.conf اسان لاگ شامل ڪندا آهيون جيڪي اسان Splunk ڏانهن موڪلڻ چاهيون ٿا. اهو ضروري ناهي ته هن فائل کي تصوير ۾ شامل ڪيو وڃي، مثال طور، توهان ڪٺ پتلي ذريعي ترتيبن کي ورهايو. صرف هڪ شيء اها آهي ته فارورڊر ترتيبن کي ڏسي ٿو جڏهن ڊيمن شروع ٿئي ٿي، ٻي صورت ۾ ان جي ضرورت پوندي ./splunk ٻيهر شروع ڪريو.

اهي ڪهڙي قسم جا ڊاکر اسٽيٽس اسڪرپٽ آهن؟ Github تي ھڪڙو پراڻو حل آھي ٻاهران ماڻهو، اسڪرپٽ اتان ورتيون ويون ۽ تبديل ڪيون ويون ڊڪر جي موجوده ورجن سان ڪم ڪرڻ لاءِ.

حاصل ڪيل ڊيٽا سان، توھان ھيٺ ڪري سگھوٿا

ڊيش بورڊ: (ڪجهه تصويرون)ڊاکر ۾ اسپلڪ يونيورسل فارورڊر هڪ سسٽم لاگ ڪليڪٽر جي طور تي

ڊاکر ۾ اسپلڪ يونيورسل فارورڊر هڪ سسٽم لاگ ڪليڪٽر جي طور تي
ڊيشز لاءِ سورس ڪوڊ مضمون جي آخر ۾ ڏنل لنڪ ۾ آهي. مهرباني ڪري نوٽ ڪريو ته 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
}

منهنجي حالت ۾، هر ماحول ۽ هر فرد جي اداري لاءِ، اها هڪ ايپليڪيشن هجي يا هڪ ميزبان مشين ۾، اسان هڪ الڳ انڊيڪس استعمال ڪندا آهيون. اهو طريقو، ڳولا جي رفتار کي نقصان نه ٿيندو جڏهن ڊيٽا جي هڪ اهم جمع آهي. ھڪڙو سادو قاعدو استعمال ڪيو ويندو آھي انڊيڪس کي نالو ڏيڻ لاء: _. تنهن ڪري، ڪنٽينر کي آفاقي هجڻ لاء، ڊيمن کي لانچ ڪرڻ کان پهريان، اسان ان کي تبديل ڪريون ٿا سي-وائلڊ ڪارڊ ماحول جي نالي تي. ماحوليات جو نالو متغير ماحولياتي متغيرن جي ذريعي گذري ٿو. عجيب لڳي ٿو.

اهو پڻ قابل ذڪر آهي ته ڪجهه سببن لاء اسپلڪ ڊاکر پيٽرولر جي موجودگي کان متاثر نه آهي ميزبان نام. هو اڃا به ضد سان لاگ موڪليندو پنهنجي ڪنٽينر جي سڃاڻپ سان ميزبان فيلڊ ۾. هڪ حل جي طور تي، توهان نصب ڪري سگهو ٿا / وغيره / 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.

حوالا:

مضمون مان حل
outcoldman مان هڪ حل جيڪو اسان کي ڪجهه ڪارڪردگي کي ٻيهر استعمال ڪرڻ لاءِ متاثر ڪيو
جي. يونيورسل فارورڊر قائم ڪرڻ لاءِ دستاويز

جو ذريعو: www.habr.com

تبصرو شامل ڪريو