การเข้าสู่ระบบ Kubernetes: EFK กับ PLG

การเข้าสู่ระบบ Kubernetes: EFK กับ PLG

การตรวจสอบกลายเป็นองค์ประกอบที่สำคัญมากในการเติบโตของโซลูชันคลาวด์ เนื่องจากความซับซ้อนของระบบแบบกระจายเพิ่มขึ้น จำเป็นต้องเข้าใจพฤติกรรมของพวกเขา เราต้องการเครื่องมือที่สามารถปรับขนาดได้ซึ่งสามารถรวบรวมข้อมูลจากบริการทั้งหมด และมอบอินเทอร์เฟซเดียวให้กับผู้เชี่ยวชาญด้วยการวิเคราะห์ประสิทธิภาพ การสาธิตข้อผิดพลาด ความพร้อมใช้งาน และบันทึก

เครื่องมือเดียวกันนี้จะต้องมีประสิทธิภาพและประสิทธิผล ในบทความนี้ เราจะดูกลุ่มเทคโนโลยียอดนิยมสองกลุ่ม: EFK (Elasticsearch) และ PLG (Loki) และตรวจสอบสถาปัตยกรรมและความแตกต่าง

กอง EFK

คุณอาจเคยได้ยินเกี่ยวกับ ELK หรือ EFK ยอดนิยมมาแล้ว สแต็กประกอบด้วยส่วนที่แตกต่างกันหลายส่วน: Elasticsearch (พื้นที่จัดเก็บอ็อบเจ็กต์), Logstash หรือ FluentD (การรวบรวมและการรวมบันทึก) และ Kibana สำหรับการแสดงภาพ

ขั้นตอนการทำงานทั่วไปมีลักษณะดังนี้:

การเข้าสู่ระบบ Kubernetes: EFK กับ PLG

ElasticSearch — พื้นที่จัดเก็บอ็อบเจ็กต์แบบกระจายพร้อมการค้นหาและการวิเคราะห์แบบเรียลไทม์ โซลูชันที่ยอดเยี่ยมสำหรับข้อมูลกึ่งโครงสร้าง เช่น บันทึก ข้อมูลจะถูกบันทึกเป็นเอกสาร JSON ซึ่งจัดทำดัชนีแบบเรียลไทม์และกระจายไปยังโหนดคลัสเตอร์ มีการใช้ดัชนีแบบกลับด้านซึ่งประกอบด้วยคำที่ไม่ซ้ำกันทั้งหมดและเอกสารที่เกี่ยวข้องสำหรับการค้นหาข้อความแบบเต็ม ซึ่งจะขึ้นอยู่กับเครื่องมือค้นหา Apache Lucene

คล่องD เป็นตัวรวบรวมข้อมูลที่รวมข้อมูลเมื่อรวบรวมและใช้งาน พยายามจัดระเบียบข้อมูลใน JSON ให้มากที่สุด สถาปัตยกรรมของมันสามารถขยายได้มีมากกว่านั้น ส่วนขยายที่แตกต่างกันหลายร้อยรายการการสนับสนุนจากชุมชนในทุกโอกาส

Kibana - เครื่องมือแสดงภาพข้อมูลสำหรับ Elasticsearch ที่มีความสามารถเพิ่มเติมมากมาย เช่น การวิเคราะห์อนุกรมเวลา การวิเคราะห์กราฟ การเรียนรู้ของเครื่อง และอื่นๆ

สถาปัตยกรรมการค้นหาแบบยืดหยุ่น

ข้อมูลคลัสเตอร์ Elasticsearch จะถูกจัดเก็บกระจายไปทั่วโหนดทั้งหมด คลัสเตอร์ประกอบด้วยหลายโหนดเพื่อปรับปรุงความพร้อมใช้งานและความยืดหยุ่น โหนดใดๆ ก็สามารถทำหน้าที่ทั้งหมดของคลัสเตอร์ได้ แต่ในการปรับใช้แบบขยายขนาดใหญ่ โดยทั่วไปโหนดจะได้รับมอบหมายงานเป็นรายบุคคล

ประเภทโหนดคลัสเตอร์:

  • โหนดหลัก - จัดการคลัสเตอร์ จำเป็นต้องมีอย่างน้อยสามรายการ หนึ่งรายการใช้งานอยู่เสมอ
  • โหนดข้อมูล - เก็บข้อมูลที่จัดทำดัชนีและดำเนินงานต่าง ๆ ด้วย
  • โหนดนำเข้า - จัดระเบียบไปป์ไลน์สำหรับการแปลงข้อมูลก่อนการจัดทำดัชนี
  • การประสานงานโหนด - การร้องขอการกำหนดเส้นทางการลดขั้นตอนการประมวลผลการค้นหาการประสานงานการจัดทำดัชนีมวล
  • โหนดแจ้งเตือน — เปิดตัวงานการแจ้งเตือน
  • โหนดการเรียนรู้ของเครื่อง - ประมวลผลงานการเรียนรู้ของเครื่อง

แผนภาพด้านล่างแสดงวิธีการจัดเก็บและจำลองข้อมูลข้ามโหนดเพื่อให้เกิดความพร้อมใช้งานของข้อมูลที่สูงขึ้น

การเข้าสู่ระบบ Kubernetes: EFK กับ PLG

ข้อมูลของแบบจำลองแต่ละรายการจะถูกจัดเก็บไว้ในดัชนีแบบกลับด้าน แผนภาพด้านล่างแสดงให้เห็นว่าสิ่งนี้เกิดขึ้นได้อย่างไร:

การเข้าสู่ระบบ Kubernetes: EFK กับ PLG

การติดตั้ง

สามารถดูรายละเอียดได้ ที่นี่ฉันจะใช้แผนภูมิหางเสือ:

$ helm install efk-stack stable/elastic-stack --set logstash.enabled=false --set fluentd.enabled=true --set fluentd-elastics

กองซ้อน PLG

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

งานพรอมเทล - เอเจนต์สำหรับส่งบันทึกจากระบบปฏิบัติการไปยังคลัสเตอร์ Loki กราฟาน่า เป็นเครื่องมือแสดงภาพตามข้อมูลจากโลกิ

การเข้าสู่ระบบ Kubernetes: EFK กับ PLG

Loki สร้างขึ้นบนหลักการเดียวกันกับ Prometheus ทำให้เหมาะสำหรับการจัดเก็บและวิเคราะห์บันทึก Kubernetes

สถาปัตยกรรมโลกิ

โลกิสามารถทำงานได้ทั้งแบบกระบวนการเดียวหรือหลายกระบวนการ เพื่อให้สามารถปรับขนาดแนวนอนได้

การเข้าสู่ระบบ Kubernetes: EFK กับ PLG

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

มาดูสถาปัตยกรรมของระบบรวบรวมบันทึกโดยไม่ต้องลงรายละเอียด:

การเข้าสู่ระบบ Kubernetes: EFK กับ PLG

และนี่คือคำอธิบาย (สถาปัตยกรรมไมโครเซอร์วิส):

การเข้าสู่ระบบ Kubernetes: EFK กับ PLG

ส่วนประกอบ:

งานพรอมเทล — เอเจนต์ที่ติดตั้งบนโหนด (เป็นชุดบริการ) จะลบบันทึกออกจากงานและเข้าถึง Kubernetes API เพื่อรับข้อมูลเมตาที่จะแท็กบันทึก จากนั้นจะส่งบันทึกไปยังบริการหลักของ Loki การแมปข้อมูลเมตารองรับกฎการแท็กเดียวกันกับ Prometheus

ผู้จัดจำหน่าย — ผู้จัดจำหน่ายบริการที่ทำงานเป็นบัฟเฟอร์ ในการประมวลผลบันทึกนับล้านรายการ ระบบจะแพ็คข้อมูลที่เข้ามาและบีบอัดเป็นบล็อกเมื่อมาถึง ซิงก์ข้อมูลหลายแห่งทำงานพร้อมกัน แต่บันทึกที่เป็นของสตรีมข้อมูลที่เข้ามารายการเดียวควรปรากฏในหนึ่งในนั้นสำหรับบล็อกทั้งหมด สิ่งนี้ถูกจัดระเบียบเป็นวงแหวนของ sinks และการแฮชตามลำดับ สำหรับความทนทานต่อข้อผิดพลาดและความซ้ำซ้อน จะทำ n ครั้ง (3 หากไม่ได้กำหนดค่าไว้)

นำเข้า — ผู้รับบริการ บล็อกข้อมูลมาถึงการบีบอัดพร้อมกับเพิ่มบันทึก เมื่อบล็อกมีขนาดเพียงพอ บล็อกจะถูกล้างไปยังฐานข้อมูล ข้อมูลเมตาไปที่ดัชนี และข้อมูลจากบล็อกบันทึกไปที่ Chunks (โดยปกติจะเป็นพื้นที่เก็บข้อมูลอ็อบเจ็กต์) หลังจากการรีเซ็ต ผู้รับจะสร้างบล็อกใหม่ที่จะเพิ่มรายการใหม่

การเข้าสู่ระบบ Kubernetes: EFK กับ PLG

ดัชนี - ฐานข้อมูล, DynamoDB, Cassandra, Google BigTable ฯลฯ

ชิ้น — บล็อกบันทึกในรูปแบบบีบอัด โดยปกติจะจัดเก็บไว้ในที่จัดเก็บอ็อบเจ็กต์ เช่น S3

แบบสอบถาม - เส้นทางการอ่านที่ทำงานสกปรกทั้งหมด โดยจะดูที่ช่วงเวลาและการประทับเวลา จากนั้นจึงดูที่ดัชนีเพื่อค้นหารายการที่ตรงกัน จากนั้นจะอ่านบล็อคข้อมูลและกรองเพื่อให้ได้ผลลัพธ์

ตอนนี้เรามาดูการดำเนินการทุกอย่างกัน

การติดตั้ง

วิธีที่ง่ายที่สุดในการติดตั้งใน Kubernetes คือการใช้ helm เราถือว่าคุณได้ติดตั้งและกำหนดค่าแล้ว (และเวอร์ชั่นที่สาม! ประมาณ นักแปล)

เพิ่มพื้นที่เก็บข้อมูลและติดตั้งสแต็ก

$ helm repo add loki https://grafana.github.io/loki/charts
$ helm repo update
$ helm upgrade --install loki loki/loki-stack --set grafana.enabled=true,prometheus.enabled=true,prometheus.alertmanager.persistentVolume.enabled=false,prometheus.server.persistentVolume.enabled=false

ด้านล่างนี้เป็นตัวอย่างแดชบอร์ดที่แสดงข้อมูลจากตัววัด Prometheus สำหรับ Etcd และบันทึกพ็อด Loki สำหรับ Etcd

การเข้าสู่ระบบ Kubernetes: EFK กับ PLG

ตอนนี้เรามาหารือเกี่ยวกับสถาปัตยกรรมของทั้งสองระบบและเปรียบเทียบความสามารถระหว่างกัน

การเปรียบเทียบ

ภาษาแบบสอบถาม

Elasticsearch ใช้ภาษาคิวรี Query DSL และ Lucene เพื่อมอบความสามารถในการค้นหาข้อความแบบเต็ม มันเป็นเสิร์ชเอ็นจิ้นที่ได้รับการยอมรับและทรงพลังพร้อมการรองรับผู้ให้บริการในวงกว้าง ด้วยเครื่องมือนี้ คุณสามารถค้นหาตามบริบทและจัดเรียงตามความเกี่ยวข้องได้

อีกด้านหนึ่งของวงแหวนคือ LogQL ซึ่งใช้ใน Loki ซึ่งเป็นผู้สืบทอดของ PromQL (ภาษาคิวรี Prometheus) ใช้แท็กบันทึกเพื่อกรองและเลือกข้อมูลบันทึก คุณสามารถใช้โอเปอเรเตอร์และเลขคณิตตามที่อธิบายไว้ได้ ที่นี่แต่ในแง่ของความสามารถนั้นยังตามหลังภาษา Elastic

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

ความสามารถในการปรับขนาด

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

การเช่าหลายรายการ

การเช่าหลายคลัสเตอร์เป็นธีมทั่วไปในตัวย่อ OPEX ทั้งสองสแต็กจัดเตรียมการเช่าหลายรายการ Elasticsearch มีหลายอย่าง วิธี การแยกไคลเอนต์: ดัชนีแยกสำหรับไคลเอนต์แต่ละราย, การกำหนดเส้นทางตามไคลเอนต์, ฟิลด์ไคลเอนต์ที่ไม่ซ้ำใคร, ตัวกรองการค้นหา โลกิก็มี สนับสนุน ในรูปแบบของส่วนหัว HTTP X-Scope-OrgID

ค่าใช้จ่ายของ

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

ข้อสรุป

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

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

เมื่อพูดถึงเรื่องต้นทุนและการจัดเก็บบันทึกระยะยาว Loki ถือเป็นจุดเริ่มต้นที่ดีเยี่ยมในโซลูชันระบบคลาวด์

มีทางเลือกอื่นๆ มากมายในตลาด - บางทางเลือกอาจดีกว่าสำหรับคุณ ตัวอย่างเช่น GKE มีการผสานรวม Stackdriver ซึ่งเป็นโซลูชันการตรวจสอบที่ยอดเยี่ยม เราไม่ได้รวมไว้ในการวิเคราะห์ของเราในบทความนี้

อ้างอิง:

บทความนี้ได้รับการแปลและจัดทำขึ้นสำหรับ Habr โดยพนักงาน ศูนย์ฝึกสเลอร์ม — หลักสูตรเข้มข้น หลักสูตรวิดีโอ และการฝึกอบรมระดับองค์กรจากผู้เชี่ยวชาญด้านการฝึกปฏิบัติ (Kubernetes, DevOps, Docker, Ansible, Ceph, SRE, Agile)

ที่มา: will.com

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