سپلنک یونیورسل فارورڈر ڈوکر میں بطور سسٹم لاگ کلیکٹر

سپلنک یونیورسل فارورڈر ڈوکر میں بطور سسٹم لاگ کلیکٹر

اسپلنک تجارتی لاگ جمع کرنے اور تجزیہ کرنے والے بہت سے قابل شناخت مصنوعات میں سے ایک ہے۔ اب بھی، جب روس میں مزید فروخت نہیں کی جاتی ہے، تو اس کی وجہ یہ نہیں ہے کہ اس پروڈکٹ کے لیے ہدایات/کیسے کریں نہ لکھیں۔

ٹاسک: میزبان مشین کی ترتیب کو تبدیل کیے بغیر اسپلنک میں ڈوکر نوڈس سے سسٹم لاگز جمع کریں۔

میں سرکاری نقطہ نظر کے ساتھ شروع کرنا چاہوں گا، جو 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 *********

ну и так далее...

زبردست. تصویر میں ایک نمونہ بھی نہیں ہے۔ یعنی جب بھی آپ شروع کریں گے بائنریز کے ساتھ آرکائیو کو ڈاؤن لوڈ کرنے، پیک کھولنے اور ترتیب دینے میں وقت لگے گا۔
ڈاکر وے اور اس سب کے بارے میں کیا خیال ہے؟

نہیں شکریہ. ہم ایک مختلف راستہ اختیار کریں گے۔ کیا ہوگا اگر ہم ان تمام کارروائیوں کو اسمبلی کے مرحلے پر انجام دیں؟ پھر چلو!

زیادہ دیر نہ کرنے کے لیے، میں ابھی آپ کو حتمی تصویر دکھاؤں گا:

ڈاکر فائل

# Тут у кого какие предпочтения
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 - یہ اسپلنک یونیورسل فارورڈر کے لیے اسناد کی فائل ہے، جسے ویب انٹرفیس سے ڈاؤن لوڈ کیا جا سکتا ہے۔

ڈاؤن لوڈ کرنے کے لیے کہاں کلک کریں (تصاویر میں)سپلنک یونیورسل فارورڈر ڈوکر میں بطور سسٹم لاگ کلیکٹر

سپلنک یونیورسل فارورڈر ڈوکر میں بطور سسٹم لاگ کلیکٹر
یہ ایک باقاعدہ آرکائیو ہے جسے پیک کیا جا سکتا ہے۔ اندر ہمارے اسپلنک کلاؤڈ سے منسلک ہونے کے لیے سرٹیفکیٹ اور پاس ورڈ ہیں۔ outputs.conf ہماری ان پٹ مثالوں کی فہرست کے ساتھ۔ یہ فائل اس وقت تک متعلقہ رہے گی جب تک کہ آپ اپنی اسپلنک انسٹالیشن کو دوبارہ انسٹال نہیں کرتے یا اگر انسٹالیشن آن پریمائز ہے تو ان پٹ نوڈ شامل نہیں کرتے۔ اس لیے اسے کنٹینر کے اندر شامل کرنے میں کوئی حرج نہیں ہے۔

اور آخری چیز دوبارہ شروع کرنا ہے۔ ہاں، تبدیلیاں لاگو کرنے کے لیے، آپ کو اسے دوبارہ شروع کرنے کی ضرورت ہے۔

ہمارے میں inputs.conf ہم وہ لاگز شامل کرتے ہیں جو ہم Splunk کو بھیجنا چاہتے ہیں۔ اس فائل کو تصویر میں شامل کرنا ضروری نہیں ہے، مثال کے طور پر، آپ کٹھ پتلی کے ذریعے تشکیلات تقسیم کرتے ہیں۔ صرف ایک چیز یہ ہے کہ فارورڈر ڈیمون شروع ہونے پر کنفیگرس دیکھتا ہے، ورنہ اس کی ضرورت ہوگی۔ ./splunk دوبارہ شروع کریں۔.

وہ کس قسم کے ڈاکر سٹیٹس اسکرپٹ ہیں؟ سے Github پر ایک پرانا حل موجود ہے۔ آؤٹ کولڈ مین، اسکرپٹس کو وہاں سے لیا گیا اور ڈوکر (ce-17. * اور اسپلنک (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 ڈوکر پیرامیٹر کی موجودگی سے متاثر نہیں ہوتا ہے۔ میزبان کا نام. وہ پھر بھی ضد کے ساتھ میزبان فیلڈ میں اپنے کنٹینر کی آئی ڈی کے ساتھ لاگ بھیجے گا۔ ایک حل کے طور پر، آپ ماؤنٹ کر سکتے ہیں / 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

کل

ہاں، شاید حل مثالی نہیں ہے اور یقینی طور پر ہر ایک کے لیے آفاقی نہیں ہے، کیونکہ بہت سے ہیں۔ "ہارڈ کوڈ". لیکن اس کی بنیاد پر، ہر کوئی اپنی تصویر بنا سکتا ہے اور اسے اپنی پرائیویٹ آرٹفیکٹری میں رکھ سکتا ہے، اگر، جیسا کہ ایسا ہوتا ہے، آپ کو ڈوکر میں اسپلنک فارورڈر کی ضرورت ہے۔

حوالہ جات:

مضمون سے حل
آؤٹ کولڈ مین کا ایک حل جس نے ہمیں کچھ فعالیت کو دوبارہ استعمال کرنے کی ترغیب دی۔
کی یونیورسل فارورڈر ترتیب دینے کے لیے دستاویزات

ماخذ: www.habr.com

نیا تبصرہ شامل کریں