วิธีการใช้ 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.
การรันสคริปต์จะทำทุกอย่างตั้งแต่การสร้างภาพ 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 ที่สร้างขึ้นก่อนหน้านี้ยังมีอยู่ มันจะเริ่มส่งจากส่วนหลังของบันทึกที่ถูกส่งไปก่อนหน้านี้
หยุด¶
หยุดภาพ Docker
Resume the paused image¶
Resume การทำงานของ Docker image ที่หยุดชั่วคราว.
ลบคอนเทนเนอร์ docker¶
ลบคอนเทนเนอร์.
วิธีตรวจสอบบันทึก¶
ตรวจสอบบันทึกโดยใช้คำสั่งด้านล่างนี้
ตัวอย่างของบันทึกเมื่อคำสั่งถูกดำเนินการตามปกติคือดังต่อไปนี้:
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
ใช้คำสั่งต่อไปนี้เพื่อตรวจสอบบันทึกของไฟล์ที่บีบอัด