ข้ามไปที่เนื้อหา

วิธีการใช้ Fluentd Docker

การส่งบันทึกด้วย fluentd โดยใช้ docker

คุณสามารถส่งบันทึกไปยังเซิร์ฟเวอร์วิเคราะห์โดยใช้ Docker โดยไม่ต้องติดตั้ง Fluentd เมื่อคุณรัน hive_fluentd.sh มันจะสร้างและเรียกใช้ภาพ Docker โดยอัตโนมัติ


ก่อนที่คุณจะเริ่ม

เตรียมสภาพแวดล้อมที่คุณสามารถใช้ Docker และดาวน์โหลดสคริปต์อัตโนมัติ

การตั้งค่า Docker Environment

ในการใช้ Docker คุณต้องติดตั้ง docker engine และ docker-compose สำหรับรายละเอียดเพิ่มเติมดูที่ ที่นี่.

ดาวน์โหลดสคริปต์อัตโนมัติ

ดาวน์โหลดและแตกไฟล์ file

wget https://developers.withhive.com/wp-content/uploads/2024/08/hive_fluentd_docker.tar  # Download the file
tar -xvf hive_fluentd_docker.tar # Extract the file


หลังจากที่คุณได้ทำการแตกไฟล์ที่บีบอัดแล้ว คุณจะพบไฟล์การตั้งค่า hive.conf และไฟล์สคริปต์ hive_fluentd.sh ในโฟลเดอร์ hive_fluentd_docker

การตั้งค่า hive.conf

มีการกำหนดค่าสำหรับ การใช้ไลบรารีเฉพาะภาษา (Java, Python, ฯลฯ) และ การส่งไฟล์บันทึกเฉพาะ

การตั้งค่าสำหรับการใช้ไลบรารีเฉพาะภาษา

เพียงแค่กำหนดค่าบริการสร้าง (sandbox หรือ live) ดูตัวอย่างด้านล่าง

### Hive.conf ###
# Only use either sandbox or live for the build environment. logs are sent to the Hive server corresponding to each environment.
# Do not modify any other text
build:sandbox

### Don't delete this line ####


เมื่อส่งบันทึกผ่านไลบรารี Docker จะส่งบันทึกไปยังเซิร์ฟเวอร์บันทึกผ่านพอร์ต 24224

การตั้งค่าสำหรับการส่งไฟล์บันทึกเฉพาะ

กรุณาใส่เส้นทางไฟล์ (เส้นทางสัมบูรณ์) และ tag หากมีโฟลเดอร์บันทึกหลายโฟลเดอร์ คุณต้องเพิ่มทั้ง path และ tag.

ต่อไปนี้คือตัวอย่างเมื่อมีโฟลเดอร์ล็อกหนึ่งโฟลเดอร์

### hive.conf ###

build:sandbox # Only use either sandbox or live for the build environment. logs are sent to the Hive server corresponding to each environment.

# Path: folder path where the file to be sent is located (absolute path).
# Text lines added to all files in that path after fluentd is run are sent.
path:/home/user1/docker/shell_test/game

# Tag: tag name to be applied to the file, ha2union.game.log category name
tag:ha2union.game.log.test

### Don't delete this line ####


ต่อไปนี้คือตัวอย่างเมื่อมีโฟลเดอร์บันทึกหลายโฟลเดอร์

### hive.conf ###

build:sandbox # Only use either sandbox or live for the build environment. logs are sent to the Hive server corresponding to each environment.

# Path: folder path where the file to be sent is located (absolute path).
# Text lines added to all files in that path after fluentd is run are sent.
path:/home/user1/docker/shell_test/game

# Tag: tag name to be applied to the file, ha2union.game.log category name
tag:ha2union.game.log.test

# To add multiple file paths, follow the method below.
# Path and tag must be added together; otherwise, an error will occur if either is empty.
path:/home/user1/docker/shell_test/game2
tag:ha2union.game.log.test2

path:/home/user1/docker/shell_test/game3
tag:ha2union.game.log.test3

### Don't delete this line ####

อย่าแก้ไขข้อความที่ด้านบนและด้านล่างของไฟล์ config.

สร้าง

นี่หมายถึงประเภทของเซิร์ฟเวอร์การวิเคราะห์ที่บันทึกจะถูกส่งไป อาจเป็น sandbox หรือ live ซึ่งบ่งชี้ว่าเป็นเซิร์ฟเวอร์การวิเคราะห์แบบ sandbox หรือเซิร์ฟเวอร์การวิเคราะห์แบบ live

path

นี่คือเส้นทางโฟลเดอร์ (เส้นทางสัมบูรณ์) ที่ไฟล์บันทึกที่จะส่งตั้งอยู่ ไฟล์บันทึกต้องอยู่ในรูปแบบ JSON หลังจากที่ Docker ทำงานสำเร็จโดยการรันสคริปต์ hive_fluentd.sh</i บรรทัดที่เพิ่มเข้าไปในไฟล์ทั้งหมดในเส้นทางนี้ตั้งแต่จุดนั้นไปข้างหน้าจะถูกส่งไปยังเซิร์ฟเวอร์ นี่หมายความว่าแม้ว่าจะมีไฟล์บันทึกที่มีอยู่ในโฟลเดอร์ หลังจากที่ Docker เริ่มทำงาน มันจะอ่านและส่งบันทึกตั้งแต่บรรทัดที่เพิ่มใหม่ไปยังไฟล์ มันจะจดจำตำแหน่งที่มันอ่านบันทึก ดังนั้นแม้ว่า Docker จะเริ่มใหม่ มันจะส่งบันทึกจากบรรทัดถัดไปหลังจากการส่งที่เสร็จสมบูรณ์

tag

ป้อน tag ที่จะนำไปใช้กับบันทึกใน path tag ต้องถูก สร้าง ในรูปแบบ ha2union.game.name_to_be_created

การรันและตรวจสอบสคริปต์อัตโนมัติ

หลังจากเสร็จสิ้นการตั้งค่า Config ให้เรียกใช้ hive_fluentd.sh.

bash hive_fluentd.sh

การรันสคริปต์จะทำทุกอย่างตั้งแต่การสร้างภาพ Docker ไปจนถึงการดำเนินการ Docker และการส่งบันทึกโดยอัตโนมัติ หากเกิดข้อผิดพลาดในการดำเนินการ โปรดตรวจสอบอีกครั้งว่าได้ตั้งค่าคอนฟิกอย่างถูกต้อง หากข้อความต่อไปนี้ปรากฏขึ้น แสดงว่าประสบความสำเร็จ ให้ข้ามข้อความที่เกี่ยวข้องกับ pull access denied

[+] Running 1/1
! fluentd Warning pull access denied for com2usplatform/hive_analytics_fluentd_docker, repository does not exist or may require 'docker login': deni...                  2.8s
[+] Building 2.1s (8/8) FINISHED                                                                                                                                docker:default
=> [fluentd internal] load build definition from Dockerfile                                                                                                              0.0s
=> => transferring dockerfile: 145B                                                                                                                                      0.0s
=> [fluentd internal] load metadata for docker.io/fluent/fluentd:v1.11.4-debian-1.0                                                                                      1.9s
=> [fluentd auth] fluent/fluentd:pull token for registry-1.docker.io                                                                                                     0.0s
=> [fluentd internal] load .dockerignore                                                                                                                                 0.0s
=> => transferring context: 2B                                                                                                                                           0.0s
=> [fluentd 1/2] FROM docker.io/fluent/fluentd:v1.11.4-debian-1.0@sha256:b70acf966c6117751411bb638bdaa5365cb756ad13888cc2ccc0ba479f13aee7                                0.0s
=> CACHED [fluentd 2/2] RUN ["gem", "install", "fluent-plugin-forest"]                                                                                                   0.0s
=> [fluentd] exporting to image                                                                                                                                          0.0s
=> => exporting layers                                                                                                                                                   0.0s
=> => writing image sha256:857dc72492380aeb31bbee36b701f13ae5ae1a933b46945662657246b28964a5                                                                              0.0s
=> => naming to docker.io/com2usplatform/hive_analytics_fluentd_docker:sandbox                                                                                           0.0s
=> [fluentd] resolving provenance for metadata file                                                                                                                      0.0s
[+] Running 2/2
 Network shell_test_default                       Created                                                                                                               0.1s
 Container hive_analytics_fluentd_docker_sandbox  Started                                                                                                               0.5s


เมื่อการดำเนินการเสร็จสิ้นอย่างสำเร็จ มันจะเริ่มส่งบันทึก

หมายเหตุ

ที่นี่คุณสามารถค้นหาคำสั่ง วิธีการตรวจสอบบันทึก โครงสร้างไฟล์ และวิธีการตรวจสอบบันทึก forest

คำสั่ง

ด้านล่างนี้เป็นการรวบรวมคำสั่งต่างๆ

เริ่มต้นใหม่

ตามไฟล์ hive.conf ให้สร้างไฟล์ fluentd.conf และ docker-compose ใหม่ และรีสตาร์ทคอนเทนเนอร์ แม้ว่าคุณจะรีสตาร์ท หากโฟลเดอร์และไฟล์ pos ที่สร้างขึ้นก่อนหน้านี้ยังมีอยู่ มันจะเริ่มส่งจากส่วนหลังของบันทึกที่ถูกส่งไปก่อนหน้านี้

bash hive_fluentd.sh restart

หยุด

หยุดภาพ Docker

bash hive_fluentd.sh stop

Resume the paused image

Resume การทำงานของ Docker image ที่หยุดชั่วคราว.

bash hive_fluentd.sh start

ลบคอนเทนเนอร์ docker

ลบคอนเทนเนอร์.

bash hive_fluentd.sh down

วิธีตรวจสอบบันทึก

ตรวจสอบบันทึกโดยใช้คำสั่งด้านล่างนี้

bash hive_fluentd.sh logs


ตัวอย่างของบันทึกเมื่อคำสั่งถูกดำเนินการตามปกติคือดังต่อไปนี้:

hive_analytics_fluentd_docker_sandbox  | 2024-08-19 07:19:31 +0000 [info]: parsing config file is succeeded path="/fluentd/etc/fluent.conf"
hive_analytics_fluentd_docker_sandbox  | 2024-08-19 07:19:31 +0000 [info]: gem 'fluent-plugin-forest' version '0.3.3'
hive_analytics_fluentd_docker_sandbox  | 2024-08-19 07:19:31 +0000 [info]: gem 'fluentd' version '1.11.4'
hive_analytics_fluentd_docker_sandbox  | 2024-08-19 07:19:31 +0000 [info]: adding forwarding server 'sandbox-analytics-hivelog' host="sandbox-analytics-hivelog.withhive.com" port=24224 weight=60 plugin_id="object:3fcfa2188060"
hive_analytics_fluentd_docker_sandbox  | 2024-08-19 07:19:31 +0000 [info]: using configuration file: 
hive\_analytics\_fluentd\_docker\_sandbox | 
hive\_analytics\_fluentd\_docker\_sandbox | log\_level info
hive\_analytics\_fluentd\_docker\_sandbox | 
hive\_analytics\_fluentd\_docker\_sandbox | 
hive\_analytics\_fluentd\_docker\_sandbox | @type forward
hive\_analytics\_fluentd\_docker\_sandbox | skip\_invalid\_event true
hive\_analytics\_fluentd\_docker\_sandbox | chunk\_size\_limit 10m
hive\_analytics\_fluentd\_docker\_sandbox | chunk\_size\_warn\_limit 9m
hive\_analytics\_fluentd\_docker\_sandbox | port 24224
hive\_analytics\_fluentd\_docker\_sandbox | bind "0.0.0.0"
hive\_analytics\_fluentd\_docker\_sandbox | source\_address\_key "fluentd\_sender\_ip"
hive\_analytics\_fluentd\_docker\_sandbox | 
hive\_analytics\_fluentd\_docker\_sandbox | 
hive\_analytics\_fluentd\_docker\_sandbox | @type copy
hive\_analytics\_fluentd\_docker\_sandbox | 
hive\_analytics\_fluentd\_docker\_sandbox | @type "forest"
hive\_analytics\_fluentd\_docker\_sandbox | subtype "file"
hive\_analytics\_fluentd\_docker\_sandbox | 
hive\_analytics\_fluentd\_docker\_sandbox | time\_slice\_format %Y%m%d%H
hive\_analytics\_fluentd\_docker\_sandbox | time\_slice\_wait 10s
hive\_analytics\_fluentd\_docker\_sandbox | path /fluentd/forest/${tag}/${tag}
hive\_analytics\_fluentd\_docker\_sandbox | compress gz
hive\_analytics\_fluentd\_docker\_sandbox | format json
hive\_analytics\_fluentd\_docker\_sandbox | 
hive\_analytics\_fluentd\_docker\_sandbox | 
hive\_analytics\_fluentd\_docker\_sandbox | 
hive\_analytics\_fluentd\_docker\_sandbox | @type "forward"
hive\_analytics\_fluentd\_docker\_sandbox | 
hive\_analytics\_fluentd\_docker\_sandbox | @type "file"
hive\_analytics\_fluentd\_docker\_sandbox | path "/fluentd/buffer/foward\_buffer/"
hive\_analytics\_fluentd\_docker\_sandbox | chunk\_limit\_size 10m
hive\_analytics\_fluentd\_docker\_sandbox | flush\_interval 3s
hive\_analytics\_fluentd\_docker\_sandbox | total\_limit\_size 16m
hive\_analytics\_fluentd\_docker\_sandbox | flush\_thread\_count 16
hive\_analytics\_fluentd\_docker\_sandbox | queued\_chunks\_limit\_size 16
hive\_analytics\_fluentd\_docker\_sandbox | 
hive\_analytics\_fluentd\_docker\_sandbox | 
hive\_analytics\_fluentd\_docker\_sandbox | name "sandbox-analytics-hivelog"
hive\_analytics\_fluentd\_docker\_sandbox | host "sandbox-analytics-hivelog.withhive.com"
hive\_analytics\_fluentd\_docker\_sandbox | port 24224
hive\_analytics\_fluentd\_docker\_sandbox | 
hive\_analytics\_fluentd\_docker\_sandbox | 
hive\_analytics\_fluentd\_docker\_sandbox | @type "secondary\_file"
hive\_analytics\_fluentd\_docker\_sandbox | directory "/fluentd/failed/log/forward-failed/send-failed-file"
hive\_analytics\_fluentd\_docker\_sandbox | basename "dump.${tag}.${chunk\_id}"
hive\_analytics\_fluentd\_docker\_sandbox | 
hive\_analytics\_fluentd\_docker\_sandbox | 
hive\_analytics\_fluentd\_docker\_sandbox | 
hive\_analytics\_fluentd\_docker\_sandbox | 
hive_analytics_fluentd_docker_sandbox  | 2024-08-19 07:19:31 +0000 [info]: starting fluentd-1.11.4 pid=7 ruby="2.6.6"
hive_analytics_fluentd_docker_sandbox  | 2024-08-19 07:19:31 +0000 [info]: spawn command to main:  cmdline=["/usr/local/bin/ruby", "-Eascii-8bit:ascii-8bit", "/usr/local/bundle/bin/fluentd", "-c", "/fluentd/etc/fluent.conf", "-p", "/fluentd/plugins", "--under-supervisor"]
hive_analytics_fluentd_docker_sandbox  | 2024-08-19 07:19:31 +0000 [info]: adding match pattern="ha2union.**" type="copy"
hive_analytics_fluentd_docker_sandbox  | 2024-08-19 07:19:31 +0000 [info]: #0 adding forwarding server 'sandbox-analytics-hivelog' host="sandbox-analytics-hivelog.withhive.com" port=24224 weight=60 plugin_id="object:3f8185f73f64"
hive_analytics_fluentd_docker_sandbox  | 2024-08-19 07:19:31 +0000 [info]: adding source type="forward"
hive_analytics_fluentd_docker_sandbox  | 2024-08-19 07:19:31 +0000 [info]: #0 starting fluentd worker pid=17 ppid=7 worker=0
hive_analytics_fluentd_docker_sandbox  | 2024-08-19 07:19:31 +0000 [info]: #0 listening port port=24224 bind="0.0.0.0"
hive_analytics_fluentd_docker_sandbox  | 2024-08-19 07:19:31 +0000 [info]: #0 fluentd worker is now running worker=0

โครงสร้างไฟล์

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

---- hive_fluentd_docker  # The folder created when the downloaded file is decompressed
├-- hive.conf  # Environment configuration file
├-- hive_fluentd.sh  # Automation script
├-- docker-compose.yaml  # Configuration file for docker image creation and volume mount
├-- buffer
│  ├-- foward_buffer  # Folder where buffer files are temporarily stored
│  │  ├-- {tag1}  # Temporarily stores files to be sent in folders created based on tag names as buffer files
│  │  ├-- {tag2}.....
│  ├-- pos   # Folder where files that remember the location of read files are stored (data loss or duplicate transmission may occur if this folder is deleted, tampered with, etc.)
│  │  ├-- {tag1}  # Stores pos files in folders created based on tag names.
│  │  ├-- {tag2}.....
├-- conf
│  └-- fluentd.conf  # Fluentd configuration file
├-- failed  # Stores logs that failed to be sent as files
└-- forest  # Stores and compresses the successfully sent files on an hourly basis.

ตรวจสอบ บันทึกป่า

โฟลเดอร์จะถูกสร้างขึ้นด้วยชื่อ tag ที่ใช้เมื่อส่งไฟล์บันทึกไปยังโฟลเดอร์ forest มันจะสะสมเป็นไฟล์ชั่วคราวในระยะเวลาหนึ่งและสุดท้ายจะถูกบันทึกเป็นไฟล์ gzip คุณสามารถบอกได้ว่ามีการส่งบันทึกอย่างถูกต้องโดยการตรวจสอบว่าไฟล์กำลังถูกสร้างในโฟลเดอร์และขนาดไฟล์กำลังเพิ่มขึ้น

drwxr-xr-x 2 root     root     4096 Aug 23 13:00 ha2union.game.sample.login/
-rw-r--r-- 1 root     root     4515 Aug 23 13:00 ha2union.game.sample.login.2024082303_0.log.gz
-rw-r--r-- 1 root     root     4515 Aug 23 12:00 ha2union.game.sample.login.2024082302_0.log.gz


ใช้คำสั่งต่อไปนี้เพื่อตรวจสอบบันทึกของไฟล์ที่บีบอัด

zgrep "text to search for" filename.gz
# Example
zgrep "category" ha2union.game.sample.login.2024080104_0.log.gz