Splunk Universal Forwarder am Docker als System Log Sammler

Splunk Universal Forwarder am Docker als System Log Sammler

Splunk ass ee vun e puer vun den erkennbarsten kommerziellen Log Sammlung an Analyse Produkter. Och elo, wann de Verkaf net méi a Russland gemaach gëtt, ass dëst kee Grond fir d'Instruktioune / Wéi-ze fir dëst Produkt net ze schreiwen.

Objective: Sammelt System Logbicher vun Docker Noden am Splunk ouni d'Hostmaschinn Konfiguratioun z'änneren

Ech wéilt gär mat der offizieller Approche ufänken, déi e bësse komesch ausgesäit wann Dir Docker benotzt.
Link zum Docker Hub
Wat hu mir:

1. Pullim Bild

$ docker pull splunk/universalforwarder:latest

2. Start de Container mat den néidege Parameteren

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

3. Mir ginn an de Container

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

Als nächst gi mir gefrot op eng bekannt Adress an der Dokumentatioun ze goen.

A konfiguréieren de Container nodeems et ufänkt:


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

Waart. Waat?

Awer d'Iwwerraschungen enden net do. Wann Dir de Container aus dem offiziellen Bild am interaktiven Modus leeft, gesitt Dir déi folgend:

E bëssen Enttäuschung


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

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

Super. D'Bild enthält net emol en Artefakt. Dat ass, all Kéier wann Dir ufänkt, dauert et Zäit fir d'Archiv mat Binären erofzelueden, auszepaken an ze konfiguréieren.
Wat iwwer docker-way an all dat?

Nee Merci. Mir huelen en anere Wee. Wat wa mir all dës Operatiounen op der Montagestadium ausféieren? Da loosse mer goen!

Fir net ze laang ze verzögeren, weisen ech Iech direkt dat lescht Bild:

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

Also wat ass an

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

Um éischte Start freet Splunk Iech e Login / Passwuert ze ginn, MEE dës Donnéeë ginn benotzt nëmmen fir administrativ Befehle fir déi speziell Installatioun auszeféieren, dat heescht am Container. An eisem Fall wëlle mir just de Container starten, sou datt alles funktionnéiert an d'Logbicher fléissen wéi e Floss. Natierlech ass dëst Hardcode, awer ech hunn keng aner Weeër fonnt.

Weider no dem Skript gëtt ausgefouert

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

splunkclouduf.spl - Dëst ass eng Umeldungsdatei fir Splunk Universal Forwarder, déi aus der Webinterface erofgeluede ka ginn.

Wou klickt fir erofzelueden (a Biller)Splunk Universal Forwarder am Docker als System Log Sammler

Splunk Universal Forwarder am Docker als System Log Sammler
Dëst ass e reegelméissegen Archiv deen auspacke ka ginn. Bannen sinn Certificaten an e Passwuert fir mat eisem SplunkCloud ze verbannen an Ausgänge.conf mat enger Lëscht vun eisen Input Instanzen. Dës Datei wäert relevant sinn bis Dir Är Splunk Installatioun nei installéiert oder en Input Node bäidréit wann d'Installatioun on-premise ass. Dofir ass et näischt falsch fir et am Container ze addéieren.

An déi lescht Saach ass Restart. Jo, fir d'Ännerungen z'applizéieren, musst Dir se nei starten.

An eisem inputs.conf mir addéieren d'Logbicher déi mir op Splunk schécken wëllen. Et ass net néideg dës Datei op d'Bild ze addéieren, wann Dir zum Beispill Configuratiounen iwwer Marionette verdeelt. Déi eenzeg Saach ass datt Forwarder d'Konfiguratioun gesäit wann den Daemon ufänkt, soss brauch et ./splunk Restart.

Wat fir eng Docker Statistik Scripte sinn et? Et gëtt eng al Léisung op Github vun outcoldman, d'Skripte goufen vun do geholl a geännert fir mat aktuellen Versioune vum Docker (ce-17.*) a Splunk (7.*) ze schaffen.

Mat den kritt Donnéeën, kënnt Dir déi folgend bauen

Dashboards: (e puer Biller)Splunk Universal Forwarder am Docker als System Log Sammler

Splunk Universal Forwarder am Docker als System Log Sammler
De Quellcode fir Bindestricher ass am Link um Enn vum Artikel. Notéiert w.e.g. datt et 2 ausgewielte Felder sinn: 1 - Indexauswiel (op der Mask gesicht), Host / Containerauswiel. Dir musst wahrscheinlech d'Indexmaske aktualiséieren, ofhängeg vun den Nimm déi Dir benotzt.

Als Ofschloss wëll ech Iech op d'Funktioun opmierksam maachen ufänken () в

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
}

A mengem Fall, fir all Ëmfeld an all eenzel Entitéit, sief et eng Applikatioun an engem Container oder enger Hostmaschinn, benotze mir en separaten Index. Op dës Manéier wäert d'Sichgeschwindegkeet net leiden wann et eng bedeitend Akkumulation vun Daten ass. Eng einfach Regel gëtt benotzt fir Indexen ze nennen: _. Dofir, fir datt de Container universell ass, ier Dir den Daemon selwer lancéiert, ersetzen mir zb-th Wildcard op den Numm vun der Ëmwelt. D'Ëmfeldnumm Variabel gëtt duerch d'Ëmfeldsvariablen weidergeleet. Kléngt witzeg.

Et ass och ze bemierken datt aus iergendengem Grond Splunk net vun der Präsenz vum Docker-Parameter beaflosst ass Numm vum Host. Hie wäert ëmmer nach haartnäckege Logbicher mat der ID vu sengem Container am Hostfeld schécken. Als Léisung kënnt Dir montéieren / etc / HostName vun der Hostmaschinn a beim Startup ersetzen ähnlech wéi Indexnamen.

Beispill 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

D 'Resultat

Jo, vläicht ass d'Léisung net ideal a sécher net universell fir jiddereen, well et vill sinn "hardcode". Awer op der Basis kann jidderee säin eegent Bild bauen an et an hir privat Artifactory setzen, wann, wéi et geschitt, Dir Splunk Forwarder am Docker braucht.

Referenzen:

Léisung vum Artikel
Eng Léisung vum outcoldman déi eis inspiréiert huet e puer vun der Funktionalitéit ze benotzen
Vun. Dokumentatioun fir d'Ariichten vun Universal Forwarder

Source: will.com

Setzt e Commentaire