Splunk Universal Forwarder-ը docker-ում որպես համակարգի գրանցամատյանների հավաքիչ

Splunk Universal Forwarder-ը docker-ում որպես համակարգի գրանցամատյանների հավաքիչ

Splunk-ը առևտրային տեղեկամատյանների հավաքման և վերլուծության մի քանի ամենահայտնի արտադրանքներից մեկն է: Նույնիսկ հիմա, երբ Ռուսաստանում այլևս վաճառքներ չեն իրականացվում, սա պատճառ չէ այս ապրանքի համար հրահանգներ/ինչպես չգրելու համար:

Առաջադրանքհավաքեք համակարգի տեղեկամատյանները Splunk-ի դոկերի հանգույցներից՝ առանց հյուրընկալող մեքենայի կոնֆիգուրացիան փոխելու

Ես կցանկանայի սկսել պաշտոնական մոտեցումից, որը մի փոքր տարօրինակ է թվում Docker-ի օգտագործման ժամանակ:
Հղում դեպի 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 *********

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

Հիանալի: Պատկերը նույնիսկ արտեֆակտ չի պարունակում: Այսինքն, ամեն անգամ սկսելիս ժամանակ կպահանջվի արխիվը երկուականներով ներբեռնելու, փաթեթավորելու և կազմաձևելու համար:
Ինչ վերաբերում է 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-ի տեղադրումը կամ ավելացնեք մուտքային հանգույց, եթե տեղադրումը ներկառուցված է: Հետևաբար, այն տարայի ներսում ավելացնելու մեջ վատ բան չկա:

Եվ վերջին բանը վերագործարկումն է: Այո, փոփոխությունները կիրառելու համար անհրաժեշտ է այն վերագործարկել:

Մեր մեջ մուտքեր.conf մենք ավելացնում ենք տեղեկամատյանները, որոնք ցանկանում ենք ուղարկել Splunk-ին: Անհրաժեշտ չէ այս ֆայլը ավելացնել պատկերին, եթե, օրինակ, կոնֆիգուրացիաներ եք բաժանում տիկնիկային միջոցով: Միակ բանն այն է, որ Forwarder-ը տեսնում է կոնֆիգուրացիաները, երբ գործարկվում է դեյմոնը, հակառակ դեպքում նրան անհրաժեշտ կլինի ./splunk restart.

Ինչպիսի՞ դոկերի վիճակագրության սցենարներ են դրանք: 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 պարամետրի առկայությունը hostname- ը. Նա դեռ համառորեն գերաններ կուղարկի իր կոնտեյների id-ով հյուրընկալող դաշտում: Որպես լուծում, դուք կարող եք լեռ / 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-ի ստեղծման համար

Source: www.habr.com

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