
يعد Splunk واحدًا من أكثر المنتجات التجارية شهرةً لجمع السجلات وتحليلها. حتى الآن ، عندما لم تعد المبيعات في روسيا مصنوعة ، ليس هذا سببًا لعدم كتابة التعليمات / الإرشادات حول هذا المنتج.
المهمة : جمع سجلات النظام من العقد عامل ميناء في Splunk دون تغيير تكوين المضيف
أود أن أبدأ بنهج رسمي ، يبدو غريباً عند استخدام عامل ميناء.
رابط إلى محور عامل الميناءماذا لدينا:
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 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" ]
وهكذا ، ما هو وارد في
في البداية ، يسأل Splunk عن اسم مستخدم / كلمة مرور ، ولكن لا يتم استخدام هذه البيانات
إلا لتنفيذ الأوامر الإدارية لهذا التثبيت المحدد ، أي داخل الحاوية. في حالتنا ، نريد فقط تشغيل الحاوية بحيث يعمل كل شيء وتتدفق السجلات مثل الماء. بالطبع ، هذا هو hardcode ، لكنني لم أجد طرقًا أخرى.
كذلك يتم تنفيذ البرنامج النصي
/splunkforwarder/bin/splunk install app /splunkclouduf.spl -auth admin:changeme
splunkclouduf.spl - هذا هو ملف الاعتمادات لـ Splunk Universal Forwarder ، والذي يمكن تنزيله من واجهة الويب.
مكان النقر للتنزيل (بالصور) هذا أرشيف منتظم يمكنك فك ضغطه. من الداخل - شهادات وكلمة مرور للاتصال بـ SplunkCloud و
outputs.conf مع قائمة بحالات المدخلات الخاصة بنا. سيكون هذا الملف ذا صلة حتى تقوم بإعادة تثبيت تثبيت Splunk الخاص بك أو إضافة عقدة إدخال إذا كان التثبيت محليًا. لذلك ، لا بأس في إضافته داخل الحاوية.
وآخر واحد هو إعادة التشغيل. نعم ، لتطبيق التغييرات ، تحتاج إلى إعادة تشغيله.
في
مدخلاتنا. إذا أضفنا السجلات التي نريد إرسالها إلى Splunk. ليس من الضروري إضافة هذا الملف إلى الصورة إذا قمت ، على سبيل المثال ، بتشتيت التكوينات من خلال دمية.
الشيء الرئيسي
هو أن Forwarder يرى التكوينات عند بدء البرنامج الخفي ، وإلا
فستكون هناك حاجة إلى
إعادة تشغيل .
ما احصائيات عامل ميناء النصوص؟ يمتلك github حلاً قديمًا من
outcoldman ، حيث يتم إخراج النصوص من هناك ووضعها في صيغتها النهائية للعمل مع الإصدارات الحالية من Docker (ce-17. *) و Splunk (7. *).
مع البيانات التي تم الحصول عليها ، يمكنك بناء مثل هذا
لوحات المعلومات: (بضع صور) يكمن مصدر شفرة deshes في اللفت المشار إليها في نهاية المقال. يرجى ملاحظة أن هناك حقلين محددين: 1 - حدد الفهرس (يتم البحث فيه عن طريق القناع) ، حدد المضيف / الحاوية. ربما يتعين عليك تحديث قناع الفهرس ، اعتمادًا على الأسماء التي تستخدمها.
في الختام ، أريد الانتباه إلى وظيفة
start () في
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 }
في حالتي ، لكل بيئة وكل كيان فردي ، سواء كان تطبيقًا في حاوية أو جهاز مضيف ، نستخدم فهرسًا منفصلاً. لذلك لن تعاني سرعة البحث من تراكم كبير للبيانات. يتم استخدام قاعدة بسيطة لتسمية الفهارس:
<environment_name> _ <service / application / etc> . لذلك ، لجعل الحاوية عالمية ، قبل البدء في البرنامج الخفي مباشرةً ، استبدلنا بدل
sed باستخدام اسم البيئة. يتم تمرير متغير باسم اسم عبر متغيرات البيئة. هذا يبدو مضحكا.
تجدر الإشارة إلى أنه ، لسبب ما ، لا يتأثر Splunk بمعلمة
اسم مضيف عامل ميناء. على أي حال ، سوف يرسل باستمرار سجلات من معرف الحاوية الخاصة به إلى الحقل المضيف. كحل ، يمكنك تحميل
/ etc / hostname من الجهاز المضيف ، وعند بدء التشغيل ، إجراء بديل مماثل لأسماء الفهرسة.
عامل الميناء-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 في عامل النقل.
المراجع:
حل من المادةألهم حل Outcoldman لإعادة استخدام جزء من الوظيفةمن. وثائق الإعداد معيد التوجيه العالمي