Sistem günlüğü toplayıcı olarak Docker'da Splunk Universal Forwarder

Sistem günlüğü toplayıcı olarak Docker'da Splunk Universal Forwarder

Splunk, en tanınmış ticari log toplama ve analiz ürünlerinden biridir. Şu anda bile, Rusya'da artık satış yapılmadığında, bu, bu ürün için talimat/nasıl yapılır yazmamak için bir neden değildir.

Görev: Ana makine yapılandırmasını değiştirmeden Splunk'taki liman işçisi düğümlerinden sistem günlüklerini toplayın

Docker kullanırken biraz tuhaf görünen resmi yaklaşımla başlamak istiyorum.
Docker hub'ına bağlantı
Bizim neyimiz var:

1. Pullim görseli

$ docker pull splunk/universalforwarder:latest

2. Kabı gerekli parametrelerle başlatın

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

3. Konteynere giriyoruz

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

Daha sonra dokümanlarda bilinen bir adrese gitmemiz isteniyor.

Ve kapsayıcıyı başladıktan sonra yapılandırın:


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

Beklemek. Ne?

Ancak sürprizler bununla bitmiyor. Konteyneri resmi görüntüden etkileşimli modda çalıştırırsanız aşağıdakileri göreceksiniz:

biraz hayal kırıklığı


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

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

Harika. Görüntüde herhangi bir eser bile bulunmuyor. Yani, her başladığınızda arşivi ikili dosyalarla indirmek, paketi açmak ve yapılandırmak zaman alacaktır.
Peki ya liman işçisi yolu ve tüm bunlar?

Hayır, teşekkürler. Farklı bir rota izleyeceğiz. Tüm bu işlemleri montaj aşamasında yapsak nasıl olur? O zaman gidelim!

Çok fazla gecikmemek adına size hemen son görseli göstereceğim:

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

Peki içinde ne var

ilk_başlangıç.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

İlk başlangıçta Splunk sizden bir kullanıcı adı/şifre vermenizi ister, ANCAK bu veriler kullanılır sadece söz konusu kurulum için, yani konteynerin içinde yönetimsel komutları yürütmek için. Bizim durumumuzda, her şeyin çalışması ve kütüklerin bir nehir gibi akması için konteyneri başlatmak istiyoruz. Elbette bu sabit koddur, ancak başka bir yol bulamadım.

Ayrıca senaryoya göre yürütülür

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

splunkclouduf.spl — Bu, Splunk Universal Forwarder için web arayüzünden indirilebilen bir kimlik bilgisi dosyasıdır.

İndirmek için nereye tıklanır (resimlerde)Sistem günlüğü toplayıcı olarak Docker'da Splunk Universal Forwarder

Sistem günlüğü toplayıcı olarak Docker'da Splunk Universal Forwarder
Bu, açılabilen normal bir arşivdir. İçinde SplunkCloud'umuza bağlanmak için sertifikalar ve bir şifre vardır ve çıktılar.conf giriş örneklerimizin bir listesiyle. Bu dosya, Splunk kurulumunuzu yeniden yükleyene veya kurulum şirket içindeyse bir giriş düğümü ekleyene kadar geçerli olacaktır. Bu nedenle kabın içine eklenmesinde bir sakınca yoktur.

Ve son şey yeniden başlatmaktır. Evet, değişiklikleri uygulamak için yeniden başlatmanız gerekir.

bizim girdiler.conf Splunk'a göndermek istediğimiz logları ekliyoruz. Örneğin yapılandırmaları kukla yoluyla dağıtıyorsanız bu dosyayı görüntüye eklemeniz gerekmez. Tek şey, Forwarder'ın arka plan programı başladığında yapılandırmaları görmesidir, aksi takdirde ./splunk yeniden başlatma.

Ne tür liman işçisi istatistik komut dosyaları bunlar? Github'da eski bir çözüm var soğukkanlı, betikler oradan alındı ​​ve Docker (ce-17.*) ve Splunk'un (7.*) güncel sürümleriyle çalışacak şekilde değiştirildi.

Elde edilen verilerle aşağıdakileri oluşturabilirsiniz

kontrol panelleri: (birkaç resim)Sistem günlüğü toplayıcı olarak Docker'da Splunk Universal Forwarder

Sistem günlüğü toplayıcı olarak Docker'da Splunk Universal Forwarder
Çizgilerin kaynak kodu makalenin sonunda verilen bağlantıdadır. Lütfen 2 seçim alanının bulunduğunu unutmayın: 1 - dizin seçimi (maskeye göre aranır), ana makine/kapsayıcı seçimi. Kullandığınız adlara bağlı olarak büyük olasılıkla dizin maskesini güncellemeniz gerekecektir.

Sonuç olarak dikkatinizi fonksiyona çekmek istiyorum. Başlat() в

giriş noktası.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
}

Benim durumumda, ister konteynerdeki bir uygulama ister ana makinedeki bir uygulama olsun, her ortam ve her bir varlık için ayrı bir dizin kullanırız. Bu şekilde, önemli miktarda veri birikimi olduğunda arama hızı olumsuz etkilenmez. Dizinleri adlandırmak için basit bir kural kullanılır: _. Bu nedenle, kabın evrensel olması için arka plan programının kendisini başlatmadan önce değiştiriyoruz susuzluk-th ortamın adına joker karakter. Ortam adı değişkeni, ortam değişkenleri aracılığıyla iletilir. Kulağa komik geliyor.

Ayrıca Splunk'un bazı nedenlerden dolayı docker parametresinin varlığından etkilenmediğini de belirtmekte fayda var. hostname. Hala inatla Host alanına konteynerinin kimliğini içeren günlükler gönderecek. Çözüm olarak şunları monte edebilirsiniz: / Etc / ana bilgisayar ana makineden ve başlangıçta dizin adlarına benzer değişiklikler yapın.

Örnek 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

sonuç

Evet, belki de çözüm ideal değildir ve kesinlikle herkes için evrensel değildir, çünkü çok sayıda çözüm vardır. "sabit kod". Ancak buna dayanarak, Docker'da Splunk Forwarder'a ihtiyacınız varsa, herkes kendi imajını oluşturabilir ve bunu kendi özel yapıtına koyabilir.

Bağlantılar:

Makaleden çözüm
Outcoldman'dan bazı işlevleri yeniden kullanma konusunda bize ilham veren bir çözüm
İle ilgili. Evrensel İletici kurulumuna ilişkin belgeler

Kaynak: habr.com

Yorum ekle