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.
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)
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
Elde edilen verilerle aşağıdakileri oluşturabilirsiniz
kontrol panelleri: (birkaç resim)
Ç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:
Kaynak: habr.com