Log masuk Kubernetes: EFK lwn PLG

Log masuk Kubernetes: EFK lwn PLG

Pemantauan telah menjadi komponen yang sangat penting dalam penyelesaian awan yang semakin berkembang apabila kerumitan sistem teragih meningkat. Ia adalah perlu untuk memahami tingkah laku mereka. Kami memerlukan alat berskala yang boleh mengumpul data daripada semua perkhidmatan - dan menyediakan pakar dengan antara muka tunggal dengan analisis prestasi, demonstrasi ralat, ketersediaan dan log.

Alat yang sama ini mestilah cekap dan produktif. Dalam artikel ini, kita akan melihat dua tindanan teknologi popular: EFK (Elasticsearch) dan PLG (Loki) dan mengkaji seni bina dan perbezaannya.

Timbunan EFK

Anda mungkin pernah mendengar tentang ELK atau EFK yang sangat popular. Tindanan terdiri daripada beberapa bahagian yang berbeza: Elasticsearch (penyimpanan objek), Logstash atau FluentD (pengumpulan log dan pengagregatan), dan Kibana untuk visualisasi.

Aliran kerja biasa kelihatan seperti ini:

Log masuk Kubernetes: EFK lwn PLG

Elasticsearch β€” storan objek teragih dengan carian dan analitik masa nyata. Penyelesaian yang sangat baik untuk data separa berstruktur seperti log. Maklumat disimpan sebagai dokumen JSON, diindeks dalam masa nyata dan diedarkan merentasi nod kluster. Indeks terbalik digunakan, mengandungi semua perkataan unik dan dokumen berkaitan untuk carian teks penuh, yang seterusnya adalah berdasarkan enjin carian Apache Lucene.

FasihD ialah pengumpul data yang menyatukan data semasa mengumpul dan memakannya. Ia cuba menyusun data dalam JSON sebanyak mungkin. Seni binanya boleh diperluas, ada lagi beratus-ratus sambungan yang berbeza, disokong komuniti, untuk semua majlis.

Kibana - alat visualisasi data untuk Elasticsearch dengan pelbagai keupayaan tambahan, contohnya, analisis siri masa, analisis graf, pembelajaran mesin dan banyak lagi.

Seni bina elastiksearch

Data kelompok Elasticsearch disimpan merentas semua nodnya. Kluster terdiri daripada berbilang nod untuk meningkatkan ketersediaan dan daya tahan. Mana-mana nod boleh melaksanakan semua peranan kluster, tetapi dalam penggunaan skala besar, nod biasanya diberikan tugas individu.

Jenis nod kluster:

  • nod induk - menguruskan kluster, sekurang-kurangnya tiga diperlukan, satu sentiasa aktif;
  • nod data - menyimpan data yang diindeks dan melakukan pelbagai tugas dengannya;
  • nod ingest - mengatur saluran paip untuk mengubah data sebelum pengindeksan;
  • nod penyelarasan - permintaan penghalaan, mengurangkan fasa pemprosesan carian, menyelaraskan pengindeksan massa;
  • nod amaran β€” melancarkan tugas amaran;
  • nod pembelajaran mesin - memproses tugas pembelajaran mesin.

Rajah di bawah menunjukkan cara data disimpan dan direplikasi merentas nod untuk mencapai ketersediaan data yang lebih tinggi.

Log masuk Kubernetes: EFK lwn PLG

Setiap data replika disimpan dalam indeks terbalik, rajah di bawah menunjukkan bagaimana ini berlaku:

Log masuk Kubernetes: EFK lwn PLG

Pemasangan

Butiran boleh dilihat di sini, saya akan menggunakan carta helm:

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

timbunan PLG

Jangan terkejut jika anda tidak menemui akronim ini, kerana ia lebih dikenali sebagai Grafana Loki. Walau apa pun, timbunan ini semakin popular kerana ia menggunakan penyelesaian teknikal yang terbukti. Anda mungkin pernah mendengar tentang Grafana, alat visualisasi yang popular. Penciptanya, diilhamkan oleh Prometheus, membangunkan Loki, sistem pengagregatan log berprestasi tinggi yang boleh skala mendatar. Loki hanya mengindeks metadata, bukan jurnal itu sendiri, penyelesaian teknikal yang membolehkannya mudah digunakan dan menjimatkan kos.

Promtail - ejen untuk menghantar log dari sistem pengendalian ke gugusan Loki. grafana ialah alat visualisasi berdasarkan data daripada Loki.

Log masuk Kubernetes: EFK lwn PLG

Loki dibina berdasarkan prinsip yang sama seperti Prometheus, menjadikannya sangat sesuai untuk menyimpan dan menganalisis log Kubernetes.

Seni bina Loki

Loki boleh dijalankan sama ada sebagai satu proses atau berbilang proses, membolehkan penskalaan mendatar.

Log masuk Kubernetes: EFK lwn PLG

Ia juga boleh berfungsi sama ada sebagai aplikasi monolitik atau sebagai perkhidmatan mikro. Berjalan sebagai satu proses boleh berguna untuk pembangunan tempatan atau untuk pemantauan kecil. Untuk pelaksanaan perindustrian dan beban kerja boleh skala, adalah disyorkan untuk menggunakan pilihan perkhidmatan mikro. Laluan untuk menulis dan membaca data diasingkan, jadi ia boleh ditala dan diskalakan mengikut keperluan.

Mari kita lihat seni bina sistem pengumpulan log tanpa terperinci:

Log masuk Kubernetes: EFK lwn PLG

Dan inilah huraian (seni bina perkhidmatan mikro):

Log masuk Kubernetes: EFK lwn PLG

Komponen:

Promtail β€” ejen yang dipasang pada nod (sebagai set perkhidmatan), ia mengalih keluar log daripada tugas dan mengakses API Kubernetes untuk mendapatkan metadata yang akan menandakan log. Ia kemudian menghantar log ke perkhidmatan Loki utama. Pemetaan metadata menyokong peraturan penandaan yang sama seperti Prometheus.

Pengedar β€” pengedar perkhidmatan yang berfungsi sebagai penimbal. Untuk memproses berjuta-juta rekod, ia membungkus data masuk, memampatkannya dalam blok apabila ia tiba. Beberapa sinki data berjalan serentak, tetapi log kepunyaan satu aliran data masuk seharusnya hanya muncul dalam salah satu daripadanya untuk semua bloknya. Ini disusun menjadi gelang sinki dan pencincangan berjujukan. Untuk toleransi kesalahan dan redundansi, ini dilakukan n kali (3 jika tidak dikonfigurasikan).

Ingester β€” penerima perkhidmatan. Blok data tiba dimampatkan dengan log ditambah. Apabila blok mempunyai saiz yang mencukupi, blok itu dibuang ke pangkalan data. Metadata pergi ke indeks, dan data dari blok log pergi ke Chunks (biasanya storan objek). Selepas penetapan semula, penerima mencipta blok baharu di mana entri baharu akan ditambah.

Log masuk Kubernetes: EFK lwn PLG

indeks - pangkalan data, DynamoDB, Cassandra, Google BigTable, dsb.

Ketulan β€” blok log dalam bentuk termampat, biasanya disimpan dalam storan objek, contohnya, S3.

Penanya - jalan membaca yang melakukan semua kerja kotor. Ia melihat julat masa dan cap masa, dan kemudian melihat indeks untuk mencari padanan. Seterusnya, ia membaca blok data dan menapisnya untuk mendapatkan hasilnya.

Sekarang mari kita lihat segala-galanya dalam tindakan.

Pemasangan

Cara termudah untuk memasang dalam Kubernetes ialah menggunakan helm. Kami menganggap bahawa anda telah memasang dan mengkonfigurasinya (dan versi ketiga! lebih kurang penterjemah)

Tambah repositori dan pasang tindanan.

$ 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

Di bawah ialah contoh papan pemuka yang menunjukkan data daripada metrik Prometheus untuk Etcd dan log pod Loki untuk Etcd.

Log masuk Kubernetes: EFK lwn PLG

Sekarang mari kita bincangkan seni bina kedua-dua sistem, dan juga membandingkan keupayaan mereka antara satu sama lain.

Perbandingan

Bahasa pertanyaan

Elasticsearch menggunakan bahasa pertanyaan DSL Query dan Lucene untuk menyediakan keupayaan carian teks penuh. Ia adalah enjin carian yang mantap dan berkuasa dengan sokongan pengendali yang luas. Dengan itu, anda boleh mencari mengikut konteks dan mengisih mengikut kaitan.

Di sisi lain cincin ialah LogQL, digunakan dalam Loki, pengganti PromQL (bahasa pertanyaan Prometheus). Ia menggunakan tag log untuk menapis dan memilih data log. Anda boleh menggunakan beberapa operator dan aritmetik seperti yang diterangkan di sini, tetapi dari segi keupayaan ia ketinggalan berbanding bahasa Elastik.

Memandangkan pertanyaan dalam Loki dikaitkan dengan teg, ia mudah untuk dikaitkan dengan metrik dan akibatnya, pertanyaan itu lebih mudah untuk mengatur pemantauan operasi.

Kebolehskalaan

Kedua-dua tindanan boleh berskala secara mendatar, tetapi Loki menjadikannya lebih mudah kerana ia mempunyai laluan baca dan tulis yang berasingan serta seni bina perkhidmatan mikro. Loki boleh disesuaikan untuk memenuhi keperluan anda dan boleh digunakan untuk volum data log yang sangat besar.

Multitenancy

Berbilang penyewaan kluster ialah tema biasa dalam akronim OPEX, kedua-dua tindanan menyediakan berbilang penyewaan. Terdapat beberapa untuk Elasticsearch cara-cara pemisahan pelanggan: indeks berasingan untuk setiap pelanggan, penghalaan berasaskan pelanggan, medan pelanggan unik, penapis carian. Loki ada menyokong dalam bentuk pengepala HTTP X-Scope-OrgID.

Kos

Loki agak kos efektif kerana fakta bahawa ia tidak mengindeks data, hanya metadata. Ini mencapai penjimatan simpanan dan memori (cache), kerana storan objek lebih murah daripada storan blok, yang digunakan dalam kelompok Elasticsearch.

Kesimpulan

Tindanan EFK boleh digunakan untuk pelbagai tujuan, memberikan fleksibiliti maksimum dan antara muka Kibana yang kaya dengan ciri untuk analitik, visualisasi dan pertanyaan. Ia boleh dipertingkatkan lagi dengan keupayaan pembelajaran mesin.

Tindanan Loki berguna dalam ekosistem Kubernetes kerana mekanisme penemuan metadatanya. Anda boleh dengan mudah mengaitkan data untuk pemantauan berdasarkan siri masa dalam Grafana dan log.

Apabila ia berkaitan dengan kos dan penyimpanan log jangka panjang, Loki ialah titik masuk yang sangat baik ke dalam penyelesaian awan.

Terdapat lebih banyak alternatif di pasaran - beberapa mungkin lebih baik untuk anda. Sebagai contoh, GKE mempunyai integrasi Stackdriver yang menyediakan penyelesaian pemantauan yang sangat baik. Kami tidak memasukkannya dalam analisis kami dalam artikel ini.

Rujukan:

Artikel itu telah diterjemahkan dan disediakan untuk Habr oleh pekerja Pusat latihan Slurm β€” kursus intensif, kursus video dan latihan korporat daripada pakar amalan (Kubernetes, DevOps, Docker, Ansible, Ceph, SRE, Agile)

Sumber: www.habr.com

Tambah komen