सिस्टम लॉग कलेक्टर के रूप में डॉकर में स्प्लंक यूनिवर्सल फारवर्डर

सिस्टम लॉग कलेक्टर के रूप में डॉकर में स्प्लंक यूनिवर्सल फारवर्डर

स्प्लंक सबसे अधिक पहचाने जाने वाले व्यावसायिक लॉग संग्रह और विश्लेषण उत्पादों में से एक है। अब भी, जब रूस में बिक्री नहीं होती है, तो यह इस उत्पाद के लिए निर्देश/कैसे-करें न लिखने का कोई कारण नहीं है।

कार्य: होस्ट मशीन कॉन्फ़िगरेशन को बदले बिना स्प्लंक में डॉकर नोड्स से सिस्टम लॉग एकत्र करें

मैं आधिकारिक दृष्टिकोण से शुरुआत करना चाहूंगा, जो डॉकर का उपयोग करते समय थोड़ा अजीब लगता है।
डॉकर हब से लिंक करें
हमारे पास क्या है:

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" ]

तो इसमें क्या निहित है

फर्स्ट_स्टार्ट.श

#!/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 — यह स्प्लंक यूनिवर्सल फ़ॉरवर्डर के लिए एक क्रेडेंशियल फ़ाइल है, जिसे वेब इंटरफ़ेस से डाउनलोड किया जा सकता है।

डाउनलोड करने के लिए कहां क्लिक करें (चित्रों में)सिस्टम लॉग कलेक्टर के रूप में डॉकर में स्प्लंक यूनिवर्सल फारवर्डर

सिस्टम लॉग कलेक्टर के रूप में डॉकर में स्प्लंक यूनिवर्सल फारवर्डर
यह एक नियमित संग्रह है जिसे अनपैक किया जा सकता है। अंदर हमारे स्प्लंकक्लाउड से कनेक्ट करने के लिए प्रमाणपत्र और एक पासवर्ड है आउटपुट.conf हमारे इनपुट उदाहरणों की सूची के साथ। यह फ़ाइल तब तक प्रासंगिक रहेगी जब तक आप अपने स्प्लंक इंस्टॉलेशन को पुनः इंस्टॉल नहीं करते हैं या यदि इंस्टॉलेशन ऑन-प्रिमाइसेस है तो इनपुट नोड नहीं जोड़ते हैं। इसलिए, इसे कंटेनर के अंदर जोड़ने में कुछ भी गलत नहीं है।

और आखिरी चीज है पुनरारंभ करें। हां, परिवर्तनों को लागू करने के लिए, आपको इसे पुनः आरंभ करना होगा।

हमारे में इनपुट्स.कॉन्फ हम वे लॉग जोड़ते हैं जिन्हें हम स्प्लंक को भेजना चाहते हैं। यदि, उदाहरण के लिए, आप पपेट के माध्यम से कॉन्फ़िगरेशन वितरित करते हैं, तो इस फ़ाइल को छवि में जोड़ना आवश्यक नहीं है। केवल एक चीज यह है कि डेमॉन शुरू होने पर फारवर्डर कॉन्फ़िगरेशन देखता है, अन्यथा इसकी आवश्यकता होगी ./स्प्लंक पुनरारंभ करें.

वे किस प्रकार की डॉकर आँकड़े स्क्रिप्ट हैं? Github पर एक पुराना समाधान मौजूद है आउटकोल्डमैन, स्क्रिप्ट वहां से ली गईं और डॉकर (सीई-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
}

मेरे मामले में, प्रत्येक वातावरण और प्रत्येक व्यक्तिगत इकाई के लिए, चाहे वह कंटेनर या होस्ट मशीन में कोई एप्लिकेशन हो, हम एक अलग इंडेक्स का उपयोग करते हैं। इस तरह, डेटा का महत्वपूर्ण संचय होने पर खोज गति प्रभावित नहीं होगी। अनुक्रमणिका को नाम देने के लिए एक सरल नियम का उपयोग किया जाता है: _. इसलिए, कंटेनर को सार्वभौमिक बनाने के लिए, डेमॉन को लॉन्च करने से पहले, हम उसे बदल देते हैं प्यास-पर्यावरण के नाम पर वाइल्डकार्ड। पर्यावरण नाम चर को पर्यावरण चर के माध्यम से पारित किया जाता है। मज़ाकिया लगता है।

यह भी ध्यान देने योग्य है कि किसी कारण से स्प्लंक डॉकर पैरामीटर की उपस्थिति से प्रभावित नहीं होता है मेजबाननाम. वह अब भी मेजबान क्षेत्र में अपने कंटेनर की आईडी के साथ लॉग भेजने की जिद करेगा। समाधान के रूप में, आप माउंट कर सकते हैं / Etc / होस्ट नाम होस्ट मशीन से और स्टार्टअप पर इंडेक्स नामों के समान प्रतिस्थापन करें।

उदाहरण 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

एक टिप्पणी जोड़ें