Splunk Universal Forwarder dockerissa järjestelmälokin kerääjänä

Splunk Universal Forwarder dockerissa järjestelmälokin kerääjänä

Splunk on yksi useista tunnetuimmista kaupallisista tukkien keruu- ja analysointituotteista. Vielä nyt, kun myyntiä ei enää tehdä Venäjällä, tämä ei ole syy olla kirjoittamatta tämän tuotteen ohjeita/käyttöohjeita.

Tehtävä: kerää järjestelmälokit telakointisolmuista Splunkissa muuttamatta isäntäkoneen kokoonpanoa

Haluaisin aloittaa virallisella lähestymistavalla, joka näyttää hieman oudolta Dockeria käytettäessä.
Linkki Docker-keskittimeen
Mitä meillä on:

1. Pullim-kuva

$ docker pull splunk/universalforwarder:latest

2. Käynnistä säiliö tarvittavilla parametreilla

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

3. Menemme säiliöön

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

Seuraavaksi meitä pyydetään menemään dokumentaatiossa tunnettuun osoitteeseen.

Ja määritä säilö sen käynnistymisen jälkeen:


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

Odota. Mitä?

Mutta yllätykset eivät lopu tähän. Jos suoritat säilön virallisesta kuvasta interaktiivisessa tilassa, näet seuraavan:

Pientä pettymystä


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

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

Loistava. Kuvassa ei ole edes esinettä. Toisin sanoen joka kerta kun käynnistät arkiston lataaminen binäärien kanssa, purkaminen ja konfigurointi vie aikaa.
Entä Docker-way ja kaikki se?

Ei kiitos. Otetaan eri reittiä. Mitä jos teemme kaikki nämä toiminnot kokoonpanovaiheessa? Sitten mennään!

Jotta ei viivyttele liian kauan, näytän sinulle heti lopullisen kuvan:

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

Mitä siis sisältää

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

Ensimmäisellä käynnistyksellä Splunk pyytää sinua antamaan sille kirjautumistunnuksen/salasanan, MUTTA näitä tietoja käytetään vain suorittaa järjestelmänvalvojan komentoja kyseiselle asennukselle eli säilön sisällä. Meidän tapauksessamme haluamme vain laukaista kontin niin, että kaikki toimii ja puut virtaavat kuin joki. Tietenkin tämä on kovakoodi, mutta en ole löytänyt muita tapoja.

Edelleen skriptin mukaan suoritetaan

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

splunkclouduf.spl — Tämä on Splunk Universal Forwarderin valtuustietotiedosto, joka voidaan ladata verkkokäyttöliittymästä.

Mistä ladata ladata (kuvassa)Splunk Universal Forwarder dockerissa järjestelmälokin kerääjänä

Splunk Universal Forwarder dockerissa järjestelmälokin kerääjänä
Tämä on tavallinen arkisto, joka voidaan purkaa. Sisällä on varmenteita ja salasana SplunkCloudiin yhdistämistä varten outputs.conf jossa on luettelo syöttöesiintymistämme. Tämä tiedosto on merkityksellinen, kunnes asennat Splunk-asennuksen uudelleen tai lisäät syöttösolmun, jos asennus tapahtuu paikan päällä. Siksi sen lisäämisessä säiliöön ei ole mitään väärää.

Ja viimeinen asia on uudelleenkäynnistys. Kyllä, sinun on käynnistettävä se uudelleen, jotta muutokset otetaan käyttöön.

Meidän inputs.conf lisäämme lokit, jotka haluamme lähettää Splunkille. Tätä tiedostoa ei tarvitse lisätä kuvaan, jos esimerkiksi jaat asetuksia nuken kautta. Ainoa asia on, että Forwarder näkee asetukset demonin käynnistyessä, muuten se tarvitsee ./splunk käynnistyy uudelleen.

Millaisia ​​Docker Stats -skriptejä ne ovat? Githubissa on vanha ratkaisu outo mies, komentosarjat otettiin sieltä ja muokattiin toimimaan Dockerin (ce-17.*) ja Splunkin (7.*) nykyisten versioiden kanssa.

Saatujen tietojen avulla voit rakentaa seuraavan

kojelaudat: (pari kuvaa)Splunk Universal Forwarder dockerissa järjestelmälokin kerääjänä

Splunk Universal Forwarder dockerissa järjestelmälokin kerääjänä
Viivojen lähdekoodi löytyy artikkelin lopussa olevasta linkistä. Huomaa, että valittavissa on 2 kenttää: 1 - hakemiston valinta (haetaan maskin avulla), isäntä/säilön valinta. Sinun on todennäköisesti päivitettävä hakemistomaski käyttämiesi nimien mukaan.

Lopuksi haluan kiinnittää huomionne toimintoon alkaa() в

sisääntulopiste.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
}

Minun tapauksessani käytämme erillistä hakemistoa jokaiselle ympäristölle ja jokaiselle yksittäiselle entiteetille, olipa kyseessä sitten sovellus säiliössä tai isäntäkone. Näin hakunopeus ei kärsi, kun dataa kertyy merkittävästi. Indeksien nimeämiseen käytetään yksinkertaista sääntöä: _. Siksi, jotta säiliö olisi universaali, vaihdamme ennen itse demonin käynnistämistä jano-th jokerimerkki ympäristön nimeen. Ympäristönimimuuttuja välitetään ympäristömuuttujien kautta. Kuulostaa hauskalta.

On myös syytä huomata, että Docker-parametrin läsnäolo ei jostain syystä vaikuta Splunkiin hostname. Hän lähettää silti itsepintaisesti lokeja konttinsa tunnuksella isäntäkentässä. Ratkaisuna voit asentaa / Etc / hostname isäntäkoneelta ja käynnistettäessä tehdä hakemistonimien kaltaisia ​​korvauksia.

Esimerkki 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

Koko

Kyllä, ehkä ratkaisu ei ole ihanteellinen eikä varmastikaan universaali kaikille, koska niitä on monia "kovakoodi". Mutta sen perusteella jokainen voi rakentaa oman imagonsa ja laittaa sen yksityiseen artefaktoriinsa, jos, kuten tapahtuu, tarvitset Splunk Forwarderia Dockerissa.

viitteet:

Ratkaisu artikkelista
Outcoldmanin ratkaisu, joka inspiroi meitä käyttämään uudelleen joitakin toimintoja
of. yleisen kuormatraktorin asennuksen dokumentaatio

Lähde: will.com

Lisää kommentti