Splunk Universal Forwarder, sistem jurnalının toplayıcısı kimi docker-də

Splunk Universal Forwarder, sistem jurnalının toplayıcısı kimi docker-də

Splunk ən tanınmış kommersiya jurnallarının toplanması və təhlili məhsullarından biridir. Hətta indi, Rusiyada satışlar artıq həyata keçirilmədikdə, bu, bu məhsul üçün təlimatlar/necə aparılacağını yazmamaq üçün səbəb deyil.

Tapşırıq: host maşın konfiqurasiyasını dəyişdirmədən Splunk-da docker qovşaqlarından sistem qeydlərini toplayın

Docker-dən istifadə edərkən bir qədər qəribə görünən rəsmi yanaşma ilə başlamaq istərdim.
Docker mərkəzinə keçid
Bizdə nə var:

1. Pullim şəkli

$ docker pull splunk/universalforwarder:latest

2. Konteyneri lazımi parametrlərlə işə salın

$ docker run -d  -p 9997:9997 -e 'SPLUNK_START_ARGS=--accept-license' -e 'SPLUNK_PASSWORD=<password>' splunk/universalforwarder:latest

3. Biz konteynerə giririk

docker exec -it <container-id> /bin/bash

Sonra bizdən sənədlərdə məlum olan ünvana getməyimiz xahiş olunur.

Və konteyneri işə saldıqdan sonra konfiqurasiya edin:


./splunk add forward-server <host name or ip address>:<listening port>
./splunk add monitor /var/log
./splunk restart

Gözləmək. Nə?

Ancaq sürprizlər bununla bitmir. Konteyneri rəsmi şəkildən interaktiv rejimdə işlədirsinizsə, aşağıdakıları görəcəksiniz:

Bir az məyusluq


$ 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 *********

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

Əla. Şəkildə hətta artefakt yoxdur. Yəni hər dəfə başladığınız zaman arxivi binarlarla yükləmək, paketdən çıxarmaq və konfiqurasiya etmək üçün vaxt lazımdır.
Bəs docker-way və bütün bunlar?

Xeyr, təşəkkürlər. Fərqli bir yol tutacağıq. Bütün bu əməliyyatları montaj mərhələsində yerinə yetirsək necə olar? Onda gedək!

Çox gecikməmək üçün sizə dərhal son şəkli göstərəcəyəm:

Docker faylı

# Тут у кого какие предпочтения
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" ]

Beləliklə, tərkibində nə var

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

İlk başlanğıcda Splunk sizdən ona giriş/parol vermənizi xahiş edir, AMMA bu məlumatlar istifadə olunur yalnız həmin quraşdırma üçün, yəni konteyner daxilində inzibati əmrləri yerinə yetirmək. Bizim vəziyyətimizdə biz sadəcə konteyneri işə salmaq istəyirik ki, hər şey işləsin və loglar çay kimi axsın. Əlbəttə ki, bu sərt koddur, amma başqa yol tapmadım.

Daha sonra skriptə uyğun olaraq həyata keçirilir

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

splunkclouduf.spl — Bu Splunk Universal Forwarder üçün etimadnamə faylıdır və onu veb-interfeysdən endirmək olar.

Yükləmək üçün hara klikləyin (şəkillərdə)Splunk Universal Forwarder, sistem jurnalının toplayıcısı kimi docker-də

Splunk Universal Forwarder, sistem jurnalının toplayıcısı kimi docker-də
Bu, açıla bilən adi arxivdir. İçəridə SplunkCloud-a qoşulmaq üçün sertifikatlar və parol və çıxışlar.conf daxiletmə nümunələrimizin siyahısı ilə. Bu fayl siz Splunk quraşdırmanızı yenidən quraşdırana və ya quraşdırma yerindədirsə, giriş node əlavə edənə qədər aktual olacaq. Ona görə də qabın içinə əlavə etməyin heç bir eybi yoxdur.

Və son şey yenidən başladın. Bəli, dəyişiklikləri tətbiq etmək üçün onu yenidən başlatmalısınız.

Bizim inputs.conf Splunk-a göndərmək istədiyimiz qeydləri əlavə edirik. Məsələn, kukla vasitəsilə konfiqurasiyaları paylasanız, bu faylı şəkilə əlavə etmək lazım deyil. Yeganə odur ki, Ekspeditor demon başlayanda konfiqurasiyaları görür, əks halda ona lazım olacaq ./splunk yenidən başladın.

Onlar hansı docker stats skriptləridir? Github-da köhnə bir həll var outcoldman, skriptlər oradan götürüldü və Docker (ce-17.*) və Splunk (7.*) proqramlarının cari versiyaları ilə işləmək üçün dəyişdirildi.

Əldə edilən məlumatlarla aşağıdakıları qura bilərsiniz

tablosuna: (bir neçə şəkil)Splunk Universal Forwarder, sistem jurnalının toplayıcısı kimi docker-də

Splunk Universal Forwarder, sistem jurnalının toplayıcısı kimi docker-də
Tire üçün mənbə kodu məqalənin sonunda verilmiş linkdədir. Nəzərə alın ki, 2 seçim sahəsi var: 1 - indeks seçimi (maska ​​ilə axtarılır), host/konteyner seçimi. Çox güman ki, istifadə etdiyiniz adlardan asılı olaraq indeks maskasını yeniləməlisiniz.

Sonda diqqətinizi funksiyaya cəlb etmək istərdim başlamaq() в

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
}

Mənim vəziyyətimdə, hər bir mühit və hər bir fərdi qurum üçün, istər konteynerdəki proqram, istərsə də host maşın, biz ayrıca indeksdən istifadə edirik. Bu yolla, əhəmiyyətli məlumat yığılması olduqda axtarış sürəti zərər görməyəcək. İndeksləri adlandırmaq üçün sadə qaydadan istifadə olunur: _. Buna görə də, konteynerin universal olması üçün demonun özünü işə salmadan əvvəl əvəz edirik sed-mühitin adının joker simvolu. Mühit adı dəyişəni mühit dəyişənləri vasitəsilə ötürülür. Gülməli səslənir.

Onu da qeyd etmək lazımdır ki, nədənsə Splunk docker parametrinin mövcudluğundan təsirlənmir. hostname. O, yenə də inadkarlıqla ana sahəyə konteynerinin id-si ilə loglar göndərəcək. Həll olaraq, montaj edə bilərsiniz / etc / hostname əsas maşından və işə salındıqda indeks adlarına oxşar dəyişikliklər edin.

Misal 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

Ümumi

Bəli, bəlkə də həll ideal deyil və əlbəttə ki, hamı üçün universal deyil, çünki çoxları var "sərt kod". Ancaq buna əsaslanaraq, hər kəs öz imicini yarada və şəxsi artifakturasına yerləşdirə bilər, əgər baş verdiyi kimi, Docker-də Splunk Forwarder lazımdırsa.

Referanslar:

Məqalədən həll
Outcoldman-dan bəzi funksionallıqlardan yenidən istifadə etməyimizə ilham verən bir həll
Of. Universal Ekspeditorun qurulması üçün sənədlər

Mənbə: www.habr.com

Добавить комментарий