Loki - mengumpulkan log menggunakan pendekatan Prometheus

Salut, orang Khabrovit! Untuk mengantisipasi dimulainya set baru untuk kursus Praktek dan Alat DevOps, kami telah menyiapkan untuk Anda terjemahan materi yang menarik.





Artikel ini adalah pengantar singkat untuk Loki. Proyek Loki didukung oleh Grafana dan bertujuan untuk mengumpulkan kayu secara terpusat (dari server atau wadah).

Sumber utama inspirasi untuk Loki adalah Prometheus dengan gagasan untuk menerapkan pendekatan manajemen log:

  • penggunaan label (label) untuk penyimpanan data
  • konsumsi sumber daya yang rendah

Kami akan kembali ke prinsip-prinsip Prometheus dan memberikan beberapa contoh penggunaannya dalam konteks Kubernetes.

Beberapa kata tentang Prometheus


Untuk sepenuhnya memahami cara kerja Loki, penting untuk mundur sedikit dan mengingat Prometheus.

Salah satu fitur yang membedakan Prometheus adalah ekstraksi metrik dari titik pengumpulan (melalui eksportir) dan menyimpannya dalam TSDB (Basis Data Time Series, basis data time series) dengan penambahan metadata dalam bentuk label.

Mengapa itu perlu?


Baru-baru ini, Prometheus telah menjadi standar de facto di dunia kontainer dan Kubernetes: pemasangannya sangat sederhana, dan kluster Kubernetes awalnya memiliki titik akhir untuk Prometheus. Prometheus juga dapat mengambil metrik dari aplikasi yang digunakan dalam wadah, sambil mempertahankan tag tertentu. Karena itu, aplikasi pemantauan sangat mudah diimplementasikan.

Sayangnya, masih belum ada solusi turnkey untuk mengelola log, dan Anda harus menemukan solusi sendiri:

  • layanan cloud yang dikelola untuk memusatkan log (AWS, Azure atau Google)
  • pemantauan sebagai layanan pemantauan layanan (misalnya, Datadog)
  • membuat layanan pengumpulan log Anda sendiri.

Untuk opsi ketiga, saya secara tradisional menggunakan Elasticsearch, meskipun pada kenyataannya saya tidak selalu senang dengan itu (terutama tingkat keparahan dan kompleksitas pengaturan).

Loki dirancang untuk menyederhanakan implementasi sesuai dengan prinsip-prinsip berikut:

  • mudah untuk memulai
  • mengkonsumsi sedikit sumber daya
  • bekerja secara mandiri tanpa perawatan khusus
  • melengkapi Prometheus untuk membantu menyelidiki bug

Namun, kesederhanaan ini dicapai melalui beberapa kompromi. Salah satunya adalah tidak mengindeks konten. Oleh karena itu, pencarian teks tidak terlalu efektif atau kaya dan tidak memungkinkan statistik pada konten teks. Tetapi karena Loki ingin menjadi setara dengan grep dan melengkapi Prometheus, ini bukan cacat.

Investigasi insiden


Untuk lebih memahami mengapa Loki tidak perlu pengindeksan, mari kembali ke metode investigasi insiden yang digunakan oleh pengembang Loki:


1 Peringatan → 2 Dashboard → 3 Adhoc Query → 4 Log Agregasi → 5 Tracing Terdistribusi → 6 Fix!
(1 Peringatan → 2 Dasbor → 3 Permintaan Adhoc → 4 Agregasi Log → 5 Pelacakan Terdistribusi → 6 Mengoreksi!)


Idenya adalah bahwa kita mendapatkan beberapa peringatan (Pemberitahuan Slack, SMS, dll.) Dan setelah itu:

  • Grafana
  • (, Prometheus)
  • (, Elasticsearch)
  • , (Jaeger, Zipkin .)
  • , , .

Di sini, dalam kasus tumpukan Grafana + Prometheus + Elasticsearch + Zipkin, Anda harus menggunakan empat alat yang berbeda. Untuk mengurangi waktu, alangkah baiknya bisa melakukan semua langkah ini dengan satu alat: Grafana. Perlu dicatat bahwa pendekatan penelitian ini telah diterapkan di Grafana sejak versi 6. Dengan demikian, menjadi mungkin untuk mengakses data Prometheus langsung dari Grafana.


Pemisahan layar Explorer antara Prometheus dan Loki

Pada layar ini, Anda dapat melihat log Loki yang terkait dengan metrik Prometheus menggunakan konsep layar terbagi. Dimulai dengan versi 6.5, Grafana memungkinkan Anda untuk memproses id jejak dalam entri log Loki untuk mengikuti tautan ke alat pelacak terdistribusi favorit Anda (Jaeger).

Tes Lokal Loki


Cara termudah untuk menguji Loki secara lokal adalah dengan menggunakan komposisi buruh pelabuhan. File docker-compose ada di repositori Loki. Anda bisa mendapatkan repositori menggunakan perintah berikut git:

$ git clone https://github.com/grafana/loki.git


Maka Anda harus pergi ke direktori produksi:

$ cd production

Setelah itu, Anda bisa mendapatkan gambar Docker versi terbaru:

$ docker-compose pull

Akhirnya, tumpukan Loki diluncurkan dengan perintah berikut:

$ docker-compose up

Arsitektur Loki


Berikut adalah diagram kecil dengan arsitektur Loki:


Prinsip-prinsip arsitektur Loki

Klien web meluncurkan aplikasi di server, Promtail mengumpulkan log dan mengirimkannya ke Loki, klien web juga mengirim metadata ke Loki. Loki mengumpulkan semuanya dan mentransfernya ke Grafana.
Loki bangkit dan berjalan. Untuk melihat komponen yang tersedia, jalankan perintah berikut:

$ docker ps


Dalam kasus Docker yang baru diinstal, perintah harus mengembalikan hasil berikut:

IMAGE               PORTS                  NAMES
grafana/promtail:                          production_promtail_1
grafana/grafana: m  0.0.0.0:3000->3000/tcp production_grafana_1
grafana/loki: late  80/tcp,0.0.0.0:3100... production_loki_1

Kami melihat komponen-komponen berikut:

  • Promtail: agen untuk memusatkan log
  • Grafana: Alat Dashboard Terkenal
  • Loki: daemon sentralisasi data

Dalam kerangka infrastruktur klasik (misalnya, berdasarkan pada mesin virtual), agen Promtail harus digunakan pada setiap mesin. Grafana dan Loki dapat diinstal pada mesin yang sama.

Penyebaran Kubernetes


Menginstal komponen Loki di Kubernetes adalah sebagai berikut:

  • daemonSet untuk menggunakan agen Promtail di setiap mesin di server cluster
  • Penempatan Loki
  • dan terakhir, penyebaran Grafana.

Untungnya, Loki tersedia sebagai paket Helm, sehingga mudah digunakan.

Instalasi melalui Helm


Helm harus sudah dipasang. Itu dapat diunduh dari repositori GitHub proyek. Itu diinstal dengan membongkar arsip yang sesuai dengan arsitektur Anda dan menambahkan helm ke $PATH.

Catatan: Helm versi 3.0.0 baru-baru ini dirilis. Karena ada banyak perubahan di dalamnya, pembaca disarankan untuk menunggu sebentar sebelum menggunakannya terlebih dahulu .


Menambahkan sumber untuk Helm


Langkah pertama adalah menambahkan repositori “loki” dengan perintah berikut:

$ helm add loki https://grafana.imtqy.com/loki/charts

Setelah itu, Anda dapat mencari paket yang bernama "loki":

$ helm search loki

Hasil:

loki/loki       0.17.2 v0.4.0 Loki: like Prometheus, but for logs.
loki/loki-stack 0.19.1 v0.4.0 Loki: like Prometheus, but for logs.
loki/fluent-bit 0.0.2  v0.0.1 Uses fluent-bit Loki go plugin for...
loki/promtail   0.13.1 v0.4.0 Responsible for gathering logs and...

Paket-paket ini memiliki fitur-fitur berikut:

  • paket loki / loki hanya cocok dengan server Loki
  • loki / fasih-bit paket memungkinkan Anda untuk menggunakan DaemonSet menggunakan fasih-bin untuk log mengumpulkan bukannya Promtail
  • paket loki / promtail berisi file log agen pengumpulan
  • Paket loki / loki-stack memungkinkan Anda untuk segera menggunakan Loki bersama dengan Promtail.

Instalasi Loki


Untuk menggunakan Loki ke Kubernetes, jalankan perintah berikut di namespace "pemantauan":

$ helm upgrade --install loki loki/loki-stack --namespace monitoring

Untuk menyimpan ke disk, tambahkan opsi --set loki.persistence.enabled = true:

$ helm upgrade --install loki loki/loki-stack \
              --namespace monitoring \
              --set loki.persistence.enabled=true

Catatan: jika Anda ingin menggunakan Grafana secara bersamaan, tambahkan parameter--set grafana.enabled = true

Ketika Anda menjalankan perintah ini, Anda harus mendapatkan output berikut:

LAST DEPLOYED: Tue Nov 19 15:56:54 2019
NAMESPACE: monitoring
STATUS: DEPLOYED
RESOURCES:
==> v1/ClusterRole
NAME AGE
loki-promtail-clusterrole 189d
NOTES:
The Loki stack has been deployed to your cluster. Loki can now be added as a datasource in Grafana.
See <a href="http://docs.grafana.org/features/datasources/loki/">http://docs.grafana.org/features/datasources/loki/</a> for more details.

Melihat status perapian di namespace "pemantauan", kita akan melihat bahwa semuanya diperluas:

$ kubectl -n monitoring get pods -l release=loki

Hasil:

NAME                 READY  STATUS   RESTARTS  AGE
loki-0               1/1    Running  0         147m
loki-promtail-9zjvc  1/1    Running  0         3h25m
loki-promtail-f6brf  1/1    Running  0         11h
loki-promtail-hdcj7  1/1    Running  0         3h23m
loki-promtail-jbqhc  1/1    Running  0         11h
loki-promtail-mj642  1/1    Running  0         62m
loki-promtail-nm64g  1/1    Running  0         24m

Semua pod sedang berjalan. Sekarang saatnya untuk melakukan beberapa tes!

Terhubung ke Grafana


Untuk terhubung ke Grafana di bawah Kubernetes, Anda perlu membuka terowongan ke dasarnya. Berikut ini adalah perintah untuk membuka port 3000 untuk perapian Grafana:

$ kubectl -n port-forward monitoring svc/loki-grafana 3000:80

Poin penting lainnya adalah perlunya memulihkan kata sandi administrator Grafana. Kata sandi dirahasiakan loki-grafanadalam bidang .data.admin-userdalam format base64.

Untuk mengembalikannya, Anda harus menjalankan perintah berikut:

$ kubectl -n monitoring get secret loki-grafana \
 --template '{{index .data "admin-password" | base64decode}}'; echo

Gunakan kata sandi ini dengan akun administrator default (admin).

Menentukan sumber data Loki di Grafana


Pertama-tama, pastikan sumber data Loki (Konfigurasi / Sumber Data) dibuat.
Berikut ini sebuah contoh:


Contoh pengaturan sumber data untuk Loki

Dengan mengklik "Tes" Anda dapat memeriksa koneksi dengan Loki.

Membuat permintaan ke Loki


Sekarang pergi ke bagian "Jelajahi" Grafana. Saat menerima log dari kontainer, Loki menambahkan metadata dari Kubernetes. Dengan demikian, menjadi mungkin untuk melihat log dari wadah tertentu.

: Misalnya, promtail kueri berikut digunakan untuk memilih log kontainer {container_name = "promtail"}.
Juga, pastikan untuk memilih sumber data Loki Anda di sini.

Permintaan ini akan mengembalikan aktivitas kontainer sebagai berikut:


Hasil permintaan di Grafana

Menambahkan ke dasbor


Dimulai dengan Grafana 6.4, Anda dapat menaruh informasi tentang log langsung di dasbor. Setelah itu, pengguna akan dapat dengan cepat beralih di antara jumlah permintaan di situsnya ke jejak aplikasi.

Berikut ini adalah contoh dari dasbor yang mengimplementasikan interaksi ini:


Contoh dasbor dengan metrik Prometheus dan log Loki

Loki masa depan


Saya mulai menggunakan Loki kembali pada bulan Mei / Juni dengan versi 0.1. Hari ini versi 1 sudah dirilis, dan bahkan 1.1 dan 1.2.

Memang, versi 0,1 tidak cukup stabil. Tapi 0,3 sudah menunjukkan tanda-tanda nyata kedewasaan, dan versi berikutnya (0,4, kemudian 1,0) hanya memperkuat kesan ini.

Setelah 1.0.0, tidak ada yang bisa memiliki alasan untuk tidak menggunakan alat luar biasa ini.

Perbaikan lebih lanjut seharusnya tidak menjadi perhatian Loki, melainkan integrasi dengan Grafana yang sangat baik. Faktanya, Grafana 6.4 sudah memiliki integrasi yang baik dengan dashboard.

Grafana 6.5, yang dirilis baru-baru ini, semakin meningkatkan integrasi ini dengan secara otomatis mengenali isi log dalam format JSON.

Video berikut menunjukkan contoh kecil dari mekanisme ini:


Menggunakan Loki Strings Ditampilkan di Grafana

Menjadi mungkin untuk menggunakan salah satu bidang JSON, misalnya, untuk:

  • tautan alat eksternal
  • memfilter konten log

Misalnya, Anda dapat mengklik traceId untuk membuka Zipkin atau Jaeger.

Secara tradisional, kami menunggu komentar Anda dan kami mengundang Anda ke webinar terbuka , di mana kami akan berbicara tentang bagaimana industri DevOps dikembangkan selama 2019 dan membahas kemungkinan jalur pengembangan untuk tahun 2020.

Source: https://habr.com/ru/post/undefined/


All Articles