Splunk Universal Forwarder در docker به عنوان جمع کننده گزارش سیستم

Splunk Universal Forwarder در docker به عنوان جمع کننده گزارش سیستم

Splunk یکی از شناخته‌شده‌ترین محصولات جمع‌آوری و تجزیه و تحلیل لاگ تجاری است. حتی در حال حاضر، زمانی که فروش دیگر در روسیه انجام نمی شود، این دلیلی برای ننوشتن دستورالعمل ها / نحوه انجام این محصول نیست.

کار: گزارش های سیستم را از گره های docker در Splunk بدون تغییر پیکربندی ماشین میزبان جمع آوری کنید

من می خواهم با رویکرد رسمی شروع کنم، که در هنگام استفاده از Docker کمی عجیب به نظر می رسد.
پیوند به داکر هاب
چه داریم:

1. تصویر Pullim

$ 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

در اولین شروع، Splunk از شما می خواهد که به آن یک ورود / رمز عبور بدهید، اما این داده ها استفاده می شود تنها برای اجرای دستورات اداری برای آن نصب خاص، یعنی در داخل کانتینر. در مورد ما فقط می خواهیم کانتینر را راه اندازی کنیم تا همه چیز کار کند و کنده ها مانند رودخانه جاری شوند. البته، این هاردکد است، اما من هیچ راه دیگری پیدا نکردم.

در ادامه با توجه به اسکریپت اجرا می شود

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

splunkclouduf.spl — این یک فایل اعتبار برای Splunk Universal Forwarder است که می‌توان آن را از رابط وب دانلود کرد.

برای دانلود کجا کلیک کنیم (در تصاویر)Splunk Universal Forwarder در docker به عنوان جمع کننده گزارش سیستم

Splunk Universal Forwarder در docker به عنوان جمع کننده گزارش سیستم
این یک آرشیو معمولی است که می توان آن را باز کرد. در داخل گواهینامه ها و رمز عبور برای اتصال به SplunkCloud و خروجی ها.conf با لیستی از نمونه های ورودی ما. این فایل تا زمانی که نصب Splunk خود را دوباره نصب نکنید یا اگر نصب در محل است، یک گره ورودی اضافه نکنید، مرتبط خواهد بود. بنابراین افزودن آن به داخل ظرف اشکالی ندارد.

و آخرین چیز راه اندازی مجدد است. بله، برای اعمال تغییرات، باید آن را دوباره راه اندازی کنید.

در ما inputs.conf ما گزارش هایی را که می خواهیم به Splunk ارسال کنیم اضافه می کنیم. اگر مثلاً تنظیمات را از طریق عروسک توزیع می کنید، لازم نیست این فایل را به تصویر اضافه کنید. تنها چیزی که وجود دارد این است که Forwarder هنگام شروع دیمون تنظیمات را می بیند، در غیر این صورت نیاز خواهد داشت ./splunk restart.

آنها چه نوع اسکریپت های آماری docker هستند؟ یک راه حل قدیمی در Github از وجود دارد outcoldman، اسکریپت ها از آنجا گرفته شده و برای کار با نسخه های فعلی Docker (ce-17.*) و Splunk (7.*) اصلاح شدند.

با داده های به دست آمده می توانید موارد زیر را بسازید

داشبورد: (چند تصویر)Splunk Universal Forwarder در docker به عنوان جمع کننده گزارش سیستم

Splunk Universal Forwarder در docker به عنوان جمع کننده گزارش سیستم
کد منبع خط تیره در لینک ارائه شده در انتهای مقاله موجود است. لطفاً توجه داشته باشید که 2 فیلد انتخابی وجود دارد: 1 - انتخاب فهرست (جستجو با ماسک)، انتخاب میزبان/کانتینر. بسته به نام‌هایی که استفاده می‌کنید، احتمالاً باید ماسک شاخص را به‌روزرسانی کنید.

در پایان، می خواهم توجه شما را به عملکرد جلب کنم شروع () в

نقطه ورود.ش

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
}

در مورد من، برای هر محیط و هر موجودیت جداگانه، خواه یک برنامه کاربردی در یک کانتینر یا یک ماشین میزبان، از یک شاخص جداگانه استفاده می کنیم. به این ترتیب، سرعت جستجو در صورت تجمع قابل توجهی از داده ها کاهش نمی یابد. یک قانون ساده برای نامگذاری شاخص ها استفاده می شود: _. بنابراین، برای اینکه کانتینر جهانی شود، قبل از راه اندازی خود دیمون، آن را جایگزین می کنیم SEDنویسه عام به نام محیط. متغیر نام محیط از طریق متغیرهای محیطی منتقل می شود. خنده دار به نظر می رسد.

همچنین شایان ذکر است که به دلایلی Splunk تحت تأثیر وجود پارامتر docker قرار نمی گیرد. نام میزبان. او همچنان سرسختانه سیاهههای مربوط را با شناسه کانتینر خود در فیلد میزبان ارسال می کند. به عنوان یک راه حل، می توانید سوار شوید / 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

مجموع

بله، شاید راه حل ایده آل نباشد و مطمئناً برای همه جهانی نباشد، زیرا تعداد زیادی وجود دارد "هاردکد". اما بر اساس آن، هرکسی می تواند تصویر خود را بسازد و آن را در مصنوعات خصوصی خود قرار دهد، اگر همانطور که اتفاق می افتد، به Splunk Forwarder در Docker نیاز دارید.

لینک ها:

راه حل از مقاله
راه حلی از outcoldman که الهام بخش ما برای استفاده مجدد از برخی از عملکردها بود
از. مستندات راه اندازی Universal Forwarder

منبع: www.habr.com

اضافه کردن نظر