Splunk Universal Forwarder ในนักเทียบท่าในฐานะตัวรวบรวมบันทึกระบบ

Splunk Universal Forwarder ในนักเทียบท่าในฐานะตัวรวบรวมบันทึกระบบ

Splunk เป็นหนึ่งในผลิตภัณฑ์รวบรวมและวิเคราะห์บันทึกเชิงพาณิชย์ที่เป็นที่รู้จักมากที่สุด แม้ว่าจะไม่มีการขายในรัสเซียอีกต่อไป แต่ก็ไม่ใช่เหตุผลที่จะไม่เขียนคำแนะนำ/วิธีการสำหรับผลิตภัณฑ์นี้

งาน: รวบรวมบันทึกระบบจากโหนดนักเทียบท่าใน Splunk โดยไม่ต้องเปลี่ยนการกำหนดค่าเครื่องโฮสต์

ฉันอยากจะเริ่มต้นด้วยแนวทางอย่างเป็นทางการ ซึ่งจะดูแปลก ๆ เล็กน้อยเมื่อใช้ Docker
ลิงก์ไปยังฮับ Docker
เรามีอะไร:

1. ภาพพูลลิม

$ docker pull splunk/universalforwarder:latest

2. เริ่มคอนเทนเนอร์ด้วยพารามิเตอร์ที่จำเป็น

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

3. เราเข้าไปในภาชนะ

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

ต่อไปเราจะถูกขอให้ไปยังที่อยู่ที่ทราบในเอกสารประกอบ

และกำหนดค่าคอนเทนเนอร์หลังจากที่เริ่มทำงาน:


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

รอ. อะไร

แต่ความประหลาดใจไม่ได้จบเพียงแค่นั้น หากคุณเรียกใช้คอนเทนเนอร์จากอิมเมจอย่างเป็นทางการในโหมดโต้ตอบ คุณจะเห็นสิ่งต่อไปนี้:

ความผิดหวังเล็กน้อย


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

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

ยอดเยี่ยม. รูปภาพไม่มีแม้แต่สิ่งประดิษฐ์ นั่นคือทุกครั้งที่คุณเริ่มต้น การดาวน์โหลดไฟล์เก็บถาวรด้วยไบนารี แกะและกำหนดค่าจะใช้เวลาในการดาวน์โหลดไฟล์เก็บถาวร
แล้ว docker-way ล่ะ?

ไม่เป็นไรขอบคุณ. เราจะใช้เส้นทางอื่น จะเป็นอย่างไรถ้าเราดำเนินการทั้งหมดนี้ในขั้นตอนการประกอบ? ถ้าอย่างนั้นไปกันเลย!

เพื่อไม่ให้รอนานเกินไป ฉันจะแสดงภาพสุดท้ายให้คุณดูทันที:

ไฟล์นักเทียบท่า

# Тут у кого какие предпочтения
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" ]

แล้วสิ่งที่บรรจุอยู่ในนั้น.

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

ในการเริ่มต้นครั้งแรก Splunk ขอให้คุณระบุข้อมูลเข้าสู่ระบบ/รหัสผ่าน แต่จะใช้ข้อมูลนี้ เท่านั้น เพื่อดำเนินการคำสั่งการดูแลระบบสำหรับการติดตั้งนั้น ๆ ซึ่งก็คือภายในคอนเทนเนอร์ ในกรณีของเรา เราเพียงต้องการเปิดตัวคอนเทนเนอร์เพื่อให้ทุกอย่างทำงานได้และท่อนไม้จะไหลเหมือนแม่น้ำ แน่นอนว่านี่คือฮาร์ดโค้ด แต่ฉันไม่พบวิธีอื่นใด

เพิ่มเติมตามสคริปต์ที่ถูกดำเนินการ

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

splunkclouduf.spl — นี่คือไฟล์ข้อมูลรับรองสำหรับ Splunk Universal Forwarder ซึ่งสามารถดาวน์โหลดได้จากเว็บอินเตอร์เฟส

คลิกดาวน์โหลดได้ที่ไหน (ตามภาพ)Splunk Universal Forwarder ในนักเทียบท่าในฐานะตัวรวบรวมบันทึกระบบ

Splunk Universal Forwarder ในนักเทียบท่าในฐานะตัวรวบรวมบันทึกระบบ
นี่คือไฟล์เก็บถาวรปกติที่สามารถแตกไฟล์ได้ ข้างในมีใบรับรองและรหัสผ่านสำหรับการเชื่อมต่อกับ SplunkCloud ของเราและ เอาท์พุท.conf พร้อมรายการอินสแตนซ์อินพุตของเรา ไฟล์นี้จะเกี่ยวข้องจนกว่าคุณจะติดตั้งการติดตั้ง Splunk ใหม่หรือเพิ่มโหนดอินพุตหากการติดตั้งเป็นแบบภายในองค์กร ดังนั้นจึงไม่มีอะไรผิดปกติที่จะเพิ่มเข้าไปในภาชนะ

และสิ่งสุดท้ายคือการรีสตาร์ท ใช่ หากต้องการใช้การเปลี่ยนแปลง คุณต้องรีสตาร์ท

ในตัวเรา input.conf เราเพิ่มบันทึกที่เราต้องการส่งไปยัง Splunk ไม่จำเป็นต้องเพิ่มไฟล์นี้ลงในรูปภาพ เช่น หากคุณแจกจ่ายการกำหนดค่าผ่านหุ่นกระบอก สิ่งเดียวคือ Forwarder เห็นการกำหนดค่าเมื่อ daemon เริ่มทำงาน ไม่เช่นนั้นจะต้องใช้ ./splunk รีสตาร์ท.

สคริปต์สถิตินักเทียบท่าคืออะไร มีวิธีแก้ไขปัญหาเก่าบน Github จาก คนนอกคอกสคริปต์ถูกนำมาจากที่นั่นและแก้ไขให้ทำงานกับ Docker เวอร์ชันปัจจุบัน (ce-17.*) และ Splunk (7.*)

ด้วยข้อมูลที่ได้รับ คุณสามารถสร้างสิ่งต่อไปนี้ได้

แดชบอร์ด: (รูปภาพสองสามรูป)Splunk Universal Forwarder ในนักเทียบท่าในฐานะตัวรวบรวมบันทึกระบบ

Splunk Universal Forwarder ในนักเทียบท่าในฐานะตัวรวบรวมบันทึกระบบ
ซอร์สโค้ดสำหรับขีดกลางอยู่ในลิงก์ที่ให้ไว้ท้ายบทความ โปรดทราบว่ามีช่องสำหรับเลือก 2 ช่อง: 1 - การเลือกดัชนี (ค้นหาด้วยมาสก์) การเลือกโฮสต์/คอนเทนเนอร์ คุณอาจต้องอัปเดตดัชนีมาสก์ ทั้งนี้ขึ้นอยู่กับชื่อที่คุณใช้

โดยสรุปฉันอยากจะดึงความสนใจของคุณไปที่ฟังก์ชั่น เริ่ม () в

จุดเข้าใช้งาน.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
}

ในกรณีของฉัน สำหรับแต่ละสภาพแวดล้อมและแต่ละเอนทิตี ไม่ว่าจะเป็นแอปพลิเคชันในคอนเทนเนอร์หรือเครื่องโฮสต์ เราใช้ดัชนีแยกต่างหาก ด้วยวิธีนี้ ความเร็วในการค้นหาจะไม่ได้รับผลกระทบเมื่อมีการสะสมข้อมูลจำนวนมาก กฎง่ายๆ ใช้ในการตั้งชื่อดัชนี: _. ดังนั้นเพื่อให้คอนเทนเนอร์เป็นแบบสากล ก่อนที่จะเปิดตัว daemon เราจึงเปลี่ยนใหม่ ความกระหายน้ำ- ไวด์การ์ดลำดับที่ XNUMX ของชื่อของสภาพแวดล้อม ตัวแปรชื่อสภาพแวดล้อมถูกส่งผ่านตัวแปรสภาพแวดล้อม ฟังดูตลกดี

นอกจากนี้ยังเป็นที่น่าสังเกตว่าด้วยเหตุผลบางประการ Splunk ไม่ได้รับผลกระทบจากการมีพารามิเตอร์นักเทียบท่า ชื่อโฮสต์. เขาจะยังคงส่งบันทึกอย่างดื้อรั้นพร้อมรหัสคอนเทนเนอร์ของเขาในช่องโฮสต์ คุณสามารถเมานต์ได้ / etc / ชื่อโฮสต์ จากเครื่องโฮสต์และเมื่อเริ่มต้นทำการแทนที่คล้ายกับชื่อดัชนี

ตัวอย่าง 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

ทั้งหมด

ใช่ บางทีวิธีแก้ปัญหาอาจไม่เหมาะและไม่เป็นสากลสำหรับทุกคนอย่างแน่นอน เนื่องจากมีหลายวิธี "ฮาร์ดโค้ด". แต่โดยพื้นฐานแล้ว ทุกคนสามารถสร้างภาพลักษณ์ของตัวเองและใส่ไว้ในโรงงานส่วนตัวของตนเองได้ หากคุณต้องการ Splunk Forwarder ใน Docker

อ้างอิง:

วิธีแก้ปัญหาจากบทความ
โซลูชันจาก outcoldman ที่เป็นแรงบันดาลใจให้เรานำฟังก์ชันบางอย่างกลับมาใช้ใหม่
ของ. เอกสารประกอบการตั้งค่า Universal Forwarder

ที่มา: will.com

เพิ่มความคิดเห็น