Splunk Universal Forwarder في عامل الإرساء كمجمع لسجلات النظام

Splunk Universal Forwarder في عامل الإرساء كمجمع لسجلات النظام

يعد Splunk واحدًا من العديد من منتجات جمع وتحليل السجلات التجارية الأكثر شهرة. حتى الآن، عندما لم تعد تتم المبيعات في روسيا، فهذا ليس سببًا لعدم كتابة تعليمات/كيفية استخدام هذا المنتج.

مهمة: جمع سجلات النظام من عقد الإرساء في Splunk دون تغيير تكوين الجهاز المضيف

أود أن أبدأ بالنهج الرسمي، والذي يبدو غريبًا بعض الشيء عند استخدام 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 *********

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

عظيم. الصورة لا تحتوي حتى على قطعة أثرية. أي أنه في كل مرة تبدأ فيها، سيستغرق تنزيل الأرشيف بالثنائيات وفك ضغطه وتكوينه بعض الوقت.
ماذا عن طريقة الإرساء وكل ذلك؟

ًلا شكرا. سنتخذ طريقًا مختلفًا. ماذا لو قمنا بكل هذه العمليات في مرحلة التجميع؟ إذا دعنا نذهب!

وحتى لا أتأخر كثيراً، سأعرض لكم الصورة النهائية على الفور:

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

في البداية، يطلب منك 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 أو إضافة عقدة إدخال إذا كان التثبيت محليًا. ولذلك فلا حرج من إضافته داخل الحاوية.

وآخر شيء هو إعادة التشغيل. نعم، لتطبيق التغييرات، تحتاج إلى إعادة تشغيله.

في لدينا المدخلات نضيف السجلات التي نريد إرسالها إلى Splunk. ليس من الضروري إضافة هذا الملف إلى الصورة، على سبيل المثال، إذا قمت بتوزيع التكوينات عبر الدمية. الشيء الوحيد هو أن معيد التوجيه يرى التكوينات عند بدء تشغيل البرنامج الخفي، وإلا فإنه سوف يحتاج ./splunk إعادة التشغيل.

ما هو نوع البرامج النصية لإحصائيات عامل الإرساء؟ يوجد حل قديم على Github من رجل بارد، تم أخذ النصوص البرمجية من هناك وتعديلها لتعمل مع الإصدارات الحالية من Docker (ce-17.*) وSplunk (7.*).

مع البيانات التي تم الحصول عليها، يمكنك بناء ما يلي

لوحات المعلومات: (صورتان)Splunk Universal Forwarder في عامل الإرساء كمجمع لسجلات النظام

Splunk Universal Forwarder في عامل الإرساء كمجمع لسجلات النظام
الكود المصدري للشرطات موجود في الرابط الموجود في نهاية المقالة. يرجى ملاحظة أن هناك حقلين محددين: 2 - اختيار الفهرس (يتم البحث فيه بواسطة القناع)، واختيار المضيف/الحاوية. ستحتاج على الأرجح إلى تحديث قناع الفهرس، اعتمادًا على الأسماء التي تستخدمها.

وفي الختام، أود أن ألفت انتباهكم إلى هذه الوظيفة بداية() в

نقطة الدخول.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

مجموع

نعم، ربما الحل ليس مثالياً وبالتأكيد ليس شاملاً للجميع، فهناك الكثير "الرمز الثابت". ولكن بناءً على ذلك، يمكن للجميع إنشاء صورتهم الخاصة ووضعها في مصنعهم الخاص، إذا كنت بحاجة إلى Splunk Forwarder في Docker.

المراجع:

الحل من المقال
حل من رجل غريب ألهمنا لإعادة استخدام بعض الوظائف
ل. وثائق لإعداد Universal Forwarder

المصدر: www.habr.com

إضافة تعليق