Splunk Universal Forwarder di buruh pelabuhan sebagai pengumpul log sistem

Splunk Universal Forwarder di buruh pelabuhan sebagai pengumpul log sistem

Splunk adalah salah satu dari beberapa produk pengumpulan dan analisis log komersial yang paling dikenal. Bahkan sekarang, ketika penjualan tidak lagi dilakukan di Rusia, ini bukan alasan untuk tidak menulis instruksi/cara untuk produk ini.

Tugas: mengumpulkan log sistem dari node buruh pelabuhan di Splunk tanpa mengubah konfigurasi mesin host

Saya ingin memulai dengan pendekatan resmi, yang terlihat agak aneh saat menggunakan Docker.
Tautan ke hub Docker
Apa yang kita punya:

1. Gambar Pullim

$ docker pull splunk/universalforwarder:latest

2. Mulai wadah dengan parameter yang diperlukan

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

3. Kita masuk ke dalam wadah

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

Selanjutnya kita diminta pergi ke alamat yang diketahui di dokumentasi.

Dan konfigurasikan wadah setelah dimulai:


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

Tunggu. Apa?

Namun kejutannya tidak berakhir di situ. Jika Anda menjalankan container dari image resmi dalam mode interaktif, Anda akan melihat yang 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 *********

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

Besar. Gambar tersebut bahkan tidak mengandung artefak. Artinya, setiap kali Anda memulai, diperlukan waktu untuk mengunduh arsip dengan binari, membongkar, dan mengonfigurasi.
Bagaimana dengan cara buruh pelabuhan dan sebagainya?

Tidak, terima kasih. Kami akan mengambil rute yang berbeda. Bagaimana jika kita melakukan semua operasi ini pada tahap perakitan? Kalau begitu ayo pergi!

Agar tidak menunda terlalu lama, saya akan segera menunjukkan gambar akhirnya:

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 di dalamnya

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 login/kata sandi, TETAPI data ini digunakan hanya untuk menjalankan perintah administratif untuk instalasi tertentu, yaitu di dalam container. Dalam kasus kami, kami hanya ingin meluncurkan container sehingga semuanya berfungsi dan batang kayu mengalir seperti sungai. Tentu saja ini hardcode, tetapi saya belum menemukan cara lain.

Selanjutnya sesuai skrip dijalankan

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

splunkclouduf.spl β€” Ini adalah file kredensial untuk Splunk Universal Forwarder, yang dapat diunduh dari antarmuka web.

Di mana mengklik untuk mengunduh (dalam gambar)Splunk Universal Forwarder di buruh pelabuhan sebagai pengumpul log sistem

Splunk Universal Forwarder di buruh pelabuhan sebagai pengumpul log sistem
Ini adalah arsip biasa yang dapat dibongkar. Di dalamnya terdapat sertifikat dan kata sandi untuk menghubungkan ke SplunkCloud kami dan keluaran.conf dengan daftar contoh masukan kami. File ini akan relevan sampai Anda menginstal ulang instalasi Splunk atau menambahkan node input jika instalasi dilakukan di lokasi. Oleh karena itu, tidak ada salahnya menambahkannya ke dalam wadah.

Dan yang terakhir adalah restart. Ya, untuk menerapkan perubahan, Anda perlu memulai ulang.

Di kami input.conf kami menambahkan log yang ingin kami kirim ke Splunk. File ini tidak perlu ditambahkan ke gambar jika, misalnya, Anda mendistribusikan konfigurasi melalui boneka. Satu-satunya hal adalah Forwarder melihat konfigurasi ketika daemon dimulai, jika tidak maka akan diperlukan ./splunk memulai ulang.

Skrip statistik buruh pelabuhan macam apa itu? Ada solusi lama di Github dari orang luar biasa, skrip diambil dari sana dan dimodifikasi agar berfungsi dengan versi Docker saat ini (ce-17.*) dan Splunk (7.*).

Dengan data yang diperoleh, Anda dapat membangun yang berikut ini

dasbor: (beberapa gambar)Splunk Universal Forwarder di buruh pelabuhan sebagai pengumpul log sistem

Splunk Universal Forwarder di buruh pelabuhan sebagai pengumpul log sistem
Kode sumber tanda hubung ada di tautan yang disediakan di akhir artikel. Harap dicatat bahwa ada 2 bidang pilihan: 1 - pemilihan indeks (dicari berdasarkan topeng), pemilihan host/kontainer. Anda mungkin perlu memperbarui masker indeks, bergantung pada nama yang Anda gunakan.

Sebagai kesimpulan, saya ingin menarik perhatian Anda pada fungsinya Mulailah() Π²

titik masuk.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 kasus saya, untuk setiap lingkungan dan setiap entitas individual, baik itu aplikasi dalam wadah atau mesin host, kami menggunakan indeks terpisah. Dengan cara ini, kecepatan pencarian tidak akan berkurang ketika terdapat akumulasi data yang signifikan. Aturan sederhana digunakan untuk memberi nama indeks: _. Oleh karena itu, agar containernya bersifat universal, sebelum meluncurkan daemon itu sendiri, kami menggantinya sed-karakter pengganti ke nama lingkungan. Variabel nama lingkungan diteruskan melalui variabel lingkungan. Terdengar lucu.

Perlu juga dicatat bahwa karena alasan tertentu Splunk tidak terpengaruh oleh keberadaan parameter buruh pelabuhan hostname. Dia masih akan dengan keras kepala mengirimkan log dengan id wadahnya di bidang host. Sebagai solusinya, Anda bisa melakukan mount / etc / hostname dari mesin host dan saat startup lakukan penggantian yang mirip dengan nama indeks.

Contoh buruh pelabuhan-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

Total

Ya, mungkin solusinya tidak ideal dan tentunya tidak universal untuk semua orang, karena ada banyak solusinya "Kode keras". Namun berdasarkan hal tersebut, setiap orang dapat membangun image mereka sendiri dan menaruhnya di artefak pribadi mereka, jika, kebetulan, Anda memerlukan Splunk Forwarder di Docker.

Бсылки:

Solusi dari artikel tersebut
Solusi dari outcoldman yang menginspirasi kami untuk menggunakan kembali beberapa fungsi
Dari. dokumentasi untuk menyiapkan Universal Forwarder

Sumber: www.habr.com

Tambah komentar