เมื่อโครงสร้างพื้นฐาน IT ของคุณเติบโตในขนาดและซับซ้อนขึ้น คุณอาจถูกบังคับให้ใส่ใจมากขึ้นเพื่อให้ทุกอย่างถูกจัดการอย่างถูกต้อง
ตั้งแต่การขึ้นของคลาวด นี่กลายเป็นเรื่องเกี่ยวข้องมากขึ้น เพราะตอนนี้เรามีข้อมูลทางเทคนิคอุดมสมบูรณ์กระจายอยู่หลายสถานที่
แต่การทำ log analysis แบบครอบคลุมอาจน่าเบื่อ รอเวลานาน และ น่ารำคาญอย่างเจ็บปวด
วิธีง่ายๆ ที่มีประสิทธิภาพในการปลดปล่อยตัวเองจากภาระนี้คือใช้ซอฟต์แวร์หรือแอปพลิเคชันที่ออกแบบมาเพื่อทำให้การ monitor logs ง่าย… และนั่นคือสิ่งที่ Alexis Gardin ทำในแอปพลิเคชันของเขา Logub
ไม่เหมือนหลาย SaaS solutions Logub สามารถดำเนินการเหล่านี้ on-premises และ open source ได้ ด้วยการทำตามขั้นตอนด้านล่าง คุณจะสร้างแอปพลิเคชันที่จะ collect, explore, และ analyze application logs ให้คุณ
ที่หัวใจของแอปพลิเคชันนี้คือการพึ่งพาความสามารถของ RediSearch ในการ explore และ analyze logs ข้ามสถานที่ต่างๆ ด้วยประสิทธิภาพที่ไม่มีใครเทียบ มาดูว่า Alexis นำแอปพลิเคชันนี้มารวมกันอย่างไร
แต่ก่อนจะลงลึก เราควรบอกว่ามีแอปพลิเคชันน่าตื่นเต้นหลายอย่างให้คุณดูบน Redis Launchpad
- คุณจะสร้างอะไร?
- คุณจะต้องการอะไร?
- สถาปัตยกรรม
- เริ่มต้น
- ข้อมูลจัดเก็บอย่างไร
- ข้อมูลถูก query อย่างไร
- Search bar ทำงานอย่างไร?
- วิธี integrate Logub เข้าโปรเจกต์ของคุณ?
- สรุป
1. คุณจะสร้างอะไร?
คุณจะสร้างแอปพิเศษที่ขับเคลื่อนโดย Redis เพื่อ collect, analyse และ explore log applications ในขั้นตอนด้านล่าง เราจะผ่าน A-Z ของสิ่งที่จำเป็นสร้างแอปพลิเคชันนี้ พร้อม components ที่ต้องการ
แม้คุณจะใหม่กับ Redis เราจะแสดงให้เห็นอย่างชัดเจนว่าจะจับ Redis ฐานข้อมูลทรงพลังนี้ได้อย่างไร พร้อมเริ่มต้นไหม?
โอเค มาเจาะลึกเลย
2. คุณจะต้องการอะไร?
- Fluentd: ใช้เป็น cross-platform open-source data collection software สำหรับประมวลผล logs
- Redis output plugin for Fluent: fluent-plugin-redis คือ fluent plugin สำหรับ output ไป redis.RediSearch:
- Docker: ใช้เป็น platform สำหรับนักพัฒนา package applications เข้า containers
- Docker Compose: ใช้สำหรับ define และ run multi-container Docker applications
3. สถาปัตยกรรม
- Fluentd รวบรวม logs ทั้งหมดจากแต่ละแอปพลิเคชันข้ามปลายทางต่างๆ
- Fluentd จัดรูปแบบแต่ละ log และส่งไป Redis เพื่อจัดเก็บ
- ข้อมูลจัดเก็บด้วย Fluentd Redis plugin – fluent plugin สำหรับ output ไป redis
- Logub backend ให้ RediSearch ดำเนินการ full-text search และจัดดัชนี fields ที่ผู้ใช้กำหนด
4. เริ่มต้นใช้งาน
ใน demo DEMO app จะเผยแพร่ logs ใน Logub คุณจะ interact กับ DEMO app นี้เพื่อสร้าง logs ของคุณ คุณจะสามารถ request พวกมันใน Logub
Prerequisites
- Docker
- Docker Compose
ก่อนอื่น ตรวจสอบว่า ports ที่กำหนดเปิดอยู่บนระบบของคุณ: 8080, 8081, 3000 & 6379
ขั้นตอนที่ 1: Clone repository
git clone https://github.com/redis-developer/logub
ขั้นตอนที่ 2. เปิด DEMO app
- ไปที่ /demo folder (cd ./demo)
- Launch docker-compose ด้วยคำสั่งที่ให้มา:
Launch Logub demo
ไปที่ localhost:3000 เพื่อ explore logs
อาจใช้เวลาประมาณ 1 นาทีก่อนคุณจะเห็น logs มา คุณสามารถดู logs บนหน้าโดยกรองด้วย sidebar ด้านขวา หรือค้นหาด้วย filter หรือ full-text query ผ่าน search bar ด้านบน
เมื่อคุณคลิกที่ log รายละเอียดจะแสดงและคุณจะมีตัวเลือก index business properties Business properties เหล่านี้สามารถใช้เป็น filters หลังจากนั้น
ต่อไป ไปที่ localhost:3000/demo เพื่อเข้าถึง playground และเพิ่ม custom logs ของคุณ หน้า demo นี้จะให้คุณ:
- สร้าง fake users ใน demo fake app และเห็นพวกเขาใน logs
- publish logs ของคุณในระบบ
ถ้าคุณกลับไปหน้าหลัก คุณสามารถลองค้นหา logs ที่คุณเพิ่งสร้าง
หมายเหตุ: มี latency ประมาณ 1 นาที ระหว่างการผลิต log ใน container และการแสดงใน Logub Latency นี้เกิดจากกระบวนการ collect, format, และ ingest logs เข้า database
5. มันทำงานอย่างไร?
ข้อมูลจัดเก็บอย่างไร
ข้อมูลจัดเก็บด้วย Fluentd Redis Plugin มันจัดเก็บแต่ละ log ด้วย HSET ตัวอย่าง: HSET level DEBUG message “Hello World” thread main
ข้อมูลถูก query อย่างไร
นี่คือ object ที่คุณจะใช้ manipulate logs และดึงพวกเขาจาก Redis การกระทำนี้จะให้ Logub UI แสดง logs เพื่อทำ complex queries ใน logs ของคุณ คุณสามารถใช้ RediSearch
เนื่องจากคุณสามารถเปลี่ยน RediSearch schema แบบ dynamic คุณสามารถใช้ ‘List’ data structure เก็บ track ของ schema ไหนที่ถูก index
คำสั่งด้านบนจะให้คุณสร้าง plain text RediSearch query จาก user input มี bunch ของ QueryBuilders เล็กๆ สร้างบน RediSearch library นี่คือคำสั่งเดียวกันที่ Logub UI ส่งเพื่อทำ comprehensive และ efficient search ใน logs ของคุณ
ขั้นตอนที่ 2: วิธีใช้ search bar
คุณสามารถค้นหาด้วย tag หรือ full-text search ด้านล่างคือตัวอย่างบางส่วนที่คุณสามารถใช้เป็นแบบถ้าคุณติด
- env:dev Ut ea vero voluptate* จะค้นหา logs ทั้งหมดใน dev environment ที่มี message เริ่มต้นด้วย Ut ea vero voluptate
- -env:prod Ut ea vero voluptate* จะค้นหา logs ทั้งหมดในทุก environment ยกเว้น prod ที่มี message เริ่มต้นด้วย Ut ea vero voluptate
- originRequest:France originRequest:USA จะค้นหา logs ทั้งหมดที่มี field originRequest มีค่า France หรือ USA
- “dog” “cat” จะค้นหา logs ทั้งหมดที่มีคำว่า “dog” และ “cat”
- -“dog” “cat” จะค้นหา logs ทั้งหมดที่ไม่มี “dog” แต่มี “cat”
เพื่อประสบการณ์ทดสอบที่ดีกับแอป เราแนะนำอย่างยิ่งให้คุณสร้าง log ของคุณเองด้วย playground เพิ่ม business properties และลองทดลองเล่น เพื่อได้ feel สำหรับมัน
ขั้นตอนที่ 3: วิธี integrate Logub เข้าโปรเจกต์ของคุณ
คุณจะต้องการ Docker images ด้านล่างเพื่อ operate Logub:
- Logub Fluentd image เพื่อ collect และส่ง logs ไป Redis – Logub Fluentd Image
- Redis image พร้อม RediSearch module Redis Mod Image
- Logub controller image เพื่อ serve log exploring functionalities – Logub Controller Image
- Logub UI เพื่อ explore และ query logs – Logub UI Image
Logub log format
ตอนนี้ Logub จัดการได้แค่ log format เฉพาะ ในอนาคต format นี้จะขยายและปรับแต่งได้มากขึ้น
นี่คือ Logub format
โปรดทราบ fields เหล่านี้ไม่ได้เป็น mandatory
ถ้าคุณอยากเพิ่ม business properties คุณต้องเพิ่ม nested JSON object ที่มี “mdc” เป็น key ตัวอย่าง:
Publishing logs ใน Logub
เพื่อ explore logs ใน Loghub containers ของคุณต้องใช้ Docker Fluentd logging driver นี่คือตัวอย่าง configuration สำหรับ customer integration
ขั้นตอนที่ 4: ตั้งค่า Redis ใน Logub
RediSearch
Logub ใช้ฟังก์ชันของ RediSearch ประมวลผล application logs เมื่อ logs ถูก persist ในฐานข้อมูล Redis พวกมันมาพร้อม 3 ประเภทของ fields:
- System properties: เป็นข้อมูลที่ Docker และ Fluentd ให้เราเมื่อส่ง logs (เช่น environment, container name ฯลฯ)
- Basic properties: เป็นข้อมูลพื้นฐานที่ log มี (เช่น timestamp, service ฯลฯ) Properties เหล่านี้ถูก index ใน RediSearch อัตโนมัติ
- Business properties: ถูกให้โดย logub user ใน field เฉพาะ User ที่นี่ต้องปฏิบัติตาม Key-Value (Map) format ขอบคุณความสามารถขั้นสูงของ RediSearch คุณจะสามารถ index ‘business properties’ นี้ได้ถ้าอยาก research บนพวกมัน
นี่คือตัวอย่าง log ที่อธิบายว่า tool ของเราทำงานอย่างไรเมื่อ Fluentd flatten และ persist ในฐานข้อมูล Redis Logub API จะให้ user หรือ company index หนึ่งหรือทุก fields ของ mdc object
ในโปรเจกต์นี้ Tag Datatype ใช้กว้างขวาง Logs บ่อยครั้งค้นหาตาม business properties เมื่อค้นหาใน logs (เช่น customer id) นอกจากนี้ เรายังใช้ TextField Datatype สำหรับ log messages นี้อนุญาตให้ user ทำ full-text search ใน field นี้
นี่คือ simplified schema ของ search process:
Redis
Redis ใช้จัดเก็บ logs โดย Fluentd อย่างนี้ใน HashSet type ของ Redis
เพื่อ track indexed field โดย user คุณสามารถเพิ่ม ‘schema’ object ที่ใช้ List type ของ Redis
สรุป: ตัดผ่านความวุ่นวายด้วย RediSearch
ข้อเสียของการระเบิดนวัตกรรมดิจิทัลอย่างคลาวด คือการ monitor IT infrastructure อาจซับซ้อน แอปพลิเคชันน่าจะกระจายอยู่สถานที่ต่างๆ ทำให้ท้าทายที่จะดึงทุก log เข้ามาสถานที่เดียว
อย่างไรก็ตาม ด้วยการใช้ Redis ความน่าเบื่อของกระบวนการนี้ถูกลบออก ทำให้คุณ search, gather และจัดเก็บ logs ได้อย่างง่ายดาย ถ้าอยากเรียนรู้เพิ่มเติมเรื่อง ins and outs ของการสร้างแอปพลิเคชันนี้ คุณสามารถดู YouTube video ของ Alexis ได้ที่นี่
เรายังมีแอปพลิเคชันนวัตกรรมหลายอย่างที่พัฒนาโดยโปรแกรมเมอร์มีทักษะอย่าง Alex บน Launchpad ของเรา ดูเลย รับแรงบันดาลใจ และดูว่าคุณสามารถนวัตกรรมอะไรได้ด้วย Redis
ใครสร้างแอปพลิเคชันนี้?
Alexis Gardin
Alexis เป็น software engineer นวัตกรรมที่ทำงานให้ Zendoc ปัจจุบัน เยี่ยมหน้า GitHub ของเขาเพื่อดูโปรเจกต์อื่นๆ ที่เขามีส่วนร่วม