Splunk Universal Forwarder dalam docker sebagai pengumpul log sistem

Splunk Universal Forwarder dalam docker sebagai pengumpul log sistem

Splunk ialah salah satu daripada beberapa koleksi log komersial dan produk analisis yang paling dikenali. Malah sekarang, apabila jualan tidak lagi dibuat di Rusia, ini bukan alasan untuk tidak menulis arahan/cara-cara untuk produk ini.

Petugas: kumpulkan log sistem daripada nod docker dalam Splunk tanpa mengubah konfigurasi mesin hos

Saya ingin bermula dengan pendekatan rasmi, yang kelihatan agak pelik apabila menggunakan Docker.
Pautan ke hab Docker
Apa yang kita ada:

1. Imej Pullim

$ docker pull splunk/universalforwarder:latest

2. Mulakan bekas dengan parameter yang diperlukan

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

3. Kami masuk ke dalam bekas

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

Seterusnya, kami diminta untuk pergi ke alamat yang diketahui dalam dokumentasi.

Dan konfigurasikan bekas selepas ia bermula:


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

Tunggu. Apa?

Tetapi kejutan tidak berakhir di sana. Jika anda menjalankan bekas daripada imej rasmi dalam mod interaktif, anda akan melihat perkara berikut:

Sedikit kekecewaan


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

Π½Ρƒ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅...

Hebat. Imej itu tidak mengandungi artifak pun. Iaitu, setiap kali anda memulakan ia akan mengambil masa untuk memuat turun arkib dengan binari, membongkarnya dan mengkonfigurasinya.
Bagaimana dengan docker-way dan semua itu?

Tidak, Terima kasih. Kami akan mengambil laluan yang berbeza. Bagaimana jika kita melakukan semua operasi ini di peringkat pemasangan? Lepas tu jom!

Untuk tidak berlengah terlalu lama, saya akan menunjukkan kepada anda imej akhir dengan segera:

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

Jadi apa yang terkandung dalam

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

Pada permulaan pertama, Splunk meminta anda memberikan log masuk/kata laluan, TETAPI data ini digunakan sahaja untuk melaksanakan arahan pentadbiran untuk pemasangan tertentu itu, iaitu, di dalam bekas. Dalam kes kami, kami hanya mahu melancarkan kontena supaya semuanya berfungsi dan balak mengalir seperti sungai. Sudah tentu, ini adalah kod keras, tetapi saya tidak menemui sebarang cara lain.

Selanjutnya mengikut skrip dilaksanakan

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

splunkclouduf.spl β€” Ini ialah fail kelayakan untuk Splunk Universal Forwarder, yang boleh dimuat turun daripada antara muka web.

Di mana untuk mengklik untuk memuat turun (dalam gambar)Splunk Universal Forwarder dalam docker sebagai pengumpul log sistem

Splunk Universal Forwarder dalam docker sebagai pengumpul log sistem
Ini adalah arkib biasa yang boleh dibongkar. Di dalamnya terdapat sijil dan kata laluan untuk menyambung ke SplunkCloud kami dan outputs.conf dengan senarai contoh input kami. Fail ini akan relevan sehingga anda memasang semula pemasangan Splunk anda atau menambah nod input jika pemasangan berada di premis. Oleh itu, tidak ada salahnya menambahnya di dalam bekas.

Dan perkara terakhir ialah mulakan semula. Ya, untuk menggunakan perubahan, anda perlu memulakannya semula.

Dalam kami inputs.conf kami menambah log yang kami ingin hantar ke Splunk. Ia tidak perlu menambah fail ini pada imej jika, sebagai contoh, anda mengedarkan konfigurasi melalui boneka. Satu-satunya perkara ialah Forwarder melihat konfigurasi apabila daemon bermula, jika tidak, ia akan memerlukannya ./splunk mulakan semula.

Apakah jenis skrip statistik buruh pelabuhan itu? Terdapat penyelesaian lama pada Github dari orang luar biasa, skrip telah diambil dari sana dan diubah suai untuk berfungsi dengan versi semasa Docker (ce-17.*) dan Splunk (7.*).

Dengan data yang diperoleh, anda boleh membina perkara berikut

papan pemuka: (beberapa gambar)Splunk Universal Forwarder dalam docker sebagai pengumpul log sistem

Splunk Universal Forwarder dalam docker sebagai pengumpul log sistem
Kod sumber untuk sengkang ada dalam pautan yang disediakan di penghujung artikel. Sila ambil perhatian bahawa terdapat 2 medan pilihan: 1 - pemilihan indeks (dicari dengan topeng), pemilihan hos/bekas. Anda mungkin perlu mengemas kini topeng indeks, bergantung pada nama yang anda gunakan.

Kesimpulannya, saya ingin menarik perhatian anda kepada fungsi tersebut mula () Π²

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
}

Dalam kes saya, untuk setiap persekitaran dan setiap entiti individu, sama ada aplikasi dalam bekas atau mesin hos, kami menggunakan indeks yang berasingan. Dengan cara ini, kelajuan carian tidak akan terjejas apabila terdapat pengumpulan data yang ketara. Peraturan mudah digunakan untuk menamakan indeks: _. Oleh itu, agar bekas menjadi universal, sebelum melancarkan daemon itu sendiri, kami menggantikannya sed-kard bebas ke atas nama persekitaran. Pembolehubah nama persekitaran dihantar melalui pembolehubah persekitaran. Kelakar bunyinya.

Perlu juga diperhatikan bahawa atas sebab tertentu Splunk tidak terjejas oleh kehadiran parameter docker nama hos. Dia akan tetap berdegil menghantar log dengan id bekasnya di medan hos. Sebagai penyelesaian, anda boleh memasang / etc / hostname daripada mesin hos dan pada permulaan buat penggantian serupa dengan nama indeks.

Contoh 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

Jumlah

Ya, mungkin penyelesaiannya tidak sesuai dan sudah tentu tidak universal untuk semua orang, kerana terdapat banyak "kod keras". Tetapi berdasarkannya, semua orang boleh membina imej mereka sendiri dan meletakkannya di dalam artifak peribadi mereka, jika, seperti yang berlaku, anda memerlukan Splunk Forwarder dalam Docker.

Rujukan:

Penyelesaian dari artikel
Penyelesaian daripada outcoldman yang memberi inspirasi kepada kami untuk menggunakan semula beberapa fungsi
Daripada. dokumentasi untuk menyediakan Universal Forwarder

Sumber: www.habr.com

Tambah komen