Loki - pengumpulan log menggunakan pendekatan Prometheus

Tabik, penduduk Khabrovsk! Pada malam permulaan pendaftaran baru untuk kursus "Amalan dan alatan DevOps" Kami telah menyediakan terjemahan bahan yang menarik untuk anda.

Artikel ini adalah pengenalan ringkas kepada Loki. Projek Loki disokong oleh Grafana dan bertujuan untuk pengumpulan log berpusat (dari pelayan atau bekas).

Inspirasi utama untuk Loki ialah Prometheus dengan idea untuk menggunakan pendekatannya untuk pengurusan log:

  • menggunakan label untuk menyimpan data
  • penggunaan sedikit sumber

Kami akan kembali kepada cara Prometheus berfungsi dan memberikan beberapa contoh penggunaannya dalam konteks Kubernetes.

Beberapa perkataan tentang Prometheus

Untuk memahami sepenuhnya cara Loki berfungsi, adalah penting untuk mengambil langkah ke belakang dan mengingati sedikit tentang Prometheus.

Salah satu ciri tersendiri Prometheus ialah pengekstrakan metrik daripada titik pengumpulan (melalui pengeksport) dan menyimpannya dalam TSDB (Pangkalan Data Siri Masa), dengan penambahan metadata dalam bentuk label.

Kenapa perlu

Baru-baru ini, Prometheus telah menjadi standard de facto dalam dunia kontena dan Kubernetes: pemasangannya sangat mudah, dan gugusan Kubernetes dilengkapi dengan titik akhir asli untuk Prometheus. Prometheus juga boleh mengekstrak metrik daripada aplikasi yang digunakan dalam bekas sambil menyimpan label tertentu. Oleh itu, pemantauan aplikasi adalah sangat mudah untuk dilaksanakan.

Malangnya, masih tiada penyelesaian turnkey untuk pengurusan log, dan anda mesti mencari penyelesaian untuk diri sendiri:

  • perkhidmatan awan terurus untuk memusatkan log (AWS, Azure atau Google)
  • perkhidmatan pemantauan "pemantauan sebagai perkhidmatan" (contohnya, Datadog)
  • mencipta perkhidmatan pengumpulan log anda sendiri.

Untuk pilihan ketiga, saya secara tradisinya menggunakan Elasticsearch, walaupun pada hakikatnya saya tidak selalu gembira dengannya (terutama berat dan kerumitan konfigurasinya).

Loki direka untuk memudahkan pelaksanaan mengikut prinsip berikut:

  • mudah untuk bermula
  • menggunakan sedikit sumber
  • bekerja secara bebas tanpa sebarang penyelenggaraan khas
  • berfungsi sebagai tambahan kepada Prometheus untuk membantu penyiasatan pepijat

Walau bagaimanapun, kesederhanaan ini datang dengan mengorbankan beberapa kompromi. Salah satunya adalah untuk tidak mengindeks kandungan. Oleh itu, carian teks tidak begitu cekap atau kaya dan tidak membenarkan statistik kandungan teks. Tetapi memandangkan Loki mahu menjadi setara dengan grep dan pelengkap kepada Prometheus, ini bukanlah satu kelemahan.

Siasatan Insiden

Untuk lebih memahami mengapa Loki tidak memerlukan pengindeksan, mari kita kembali kepada kaedah penyiasatan insiden yang digunakan oleh pembangun Loki:

Loki - pengumpulan log menggunakan pendekatan Prometheus
1 Makluman β†’ 2 Papan Pemuka β†’ 3 Pertanyaan Adhoc β†’ 4 Pengagregatan Log β†’ 5 Pengesanan Teragih β†’ 6 Betulkan!
(1 Amaran β†’ 2 Papan Pemuka β†’ 3 Pertanyaan Adhoc β†’ 4 Pengagregatan Log β†’ 5 Pengesanan Teragih β†’ 6 Pembetulan!)

Ideanya ialah kami menerima beberapa jenis makluman (Pemberitahuan Slack, SMS, dll.) dan selepas itu:

  • lihat papan pemuka Grafana
  • lihat metrik perkhidmatan (contohnya, dalam Prometheus)
  • lihat entri log (contohnya, dalam Elasticsearch)
  • mungkin lihat jejak yang diedarkan (Jaeger, Zipkin, dll.)
  • dan akhirnya menyelesaikan masalah asal.

Di sini, dalam kes timbunan Grafana + Prometheus + Elasticsearch + Zipkin, anda perlu menggunakan empat alat yang berbeza. Untuk mengurangkan masa, adalah baik untuk dapat melakukan semua langkah ini menggunakan satu alat: Grafana. Perlu diingat bahawa pendekatan penyelidikan ini telah dilaksanakan dalam Grafana sejak versi 6. Oleh itu, ia menjadi mungkin untuk mengakses data Prometheus secara langsung dari Grafana.

Loki - pengumpulan log menggunakan pendekatan Prometheus
Pemisahan skrin penjelajah antara Prometheus dan Loki

Daripada skrin ini anda boleh melihat log Loki yang berkaitan dengan metrik Prometheus menggunakan konsep skrin belah. Sejak versi 6.5, Grafana membenarkan anda menghuraikan id jejak dalam entri log Loki untuk mengikuti pautan ke alat pengesanan teragih kegemaran anda (Jaeger).

Ujian Loki tempatan

Cara paling mudah untuk menguji Loki secara tempatan ialah menggunakan docker-compose. Fail karang docker terletak dalam repositori Loki. Anda boleh mendapatkan repositori menggunakan arahan berikut git:

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

Kemudian anda perlu pergi ke direktori pengeluaran:

$ cd production

Selepas ini anda boleh mendapatkan versi terkini imej Docker:

$ docker-compose pull

Akhirnya, timbunan Loki dilancarkan dengan arahan berikut:

$ docker-compose up

Seni bina Loki

Berikut adalah gambar rajah kecil dengan seni bina Loki:

Loki - pengumpulan log menggunakan pendekatan Prometheus
Prinsip Seni Bina Loki

Pelanggan web menjalankan aplikasi pada pelayan, Promtail mengumpul log dan menghantarnya ke Loki, klien web juga menghantar metadata ke Loki. Loki mengagregatkan segala-galanya dan menghantarnya ke Grafana.
Loki dilancarkan. Untuk melihat komponen yang tersedia, jalankan arahan berikut:

$ docker ps

Dalam kes Docker yang baru dipasang, arahan itu 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 berikut:

  • Promtail: ejen yang bertanggungjawab untuk memusatkan log
  • Grafana: alat papan pemuka yang terkenal
  • Loki: Daemon Pemusatan Data

Sebagai sebahagian daripada infrastruktur klasik (contohnya, berdasarkan mesin maya), ejen Promtail mesti digunakan pada setiap mesin. Grafana dan Loki boleh dipasang pada mesin yang sama.

Penyerahan ke Kubernetes

Memasang komponen Loki pada Kubernetes adalah seperti berikut:

  • daemonSet untuk menggunakan ejen Promtail pada setiap mesin dalam kelompok pelayan
  • Loki Kerahan
  • dan yang terakhir ialah penempatan Grafana.

Nasib baik, Loki tersedia sebagai pakej Helm, menjadikannya mudah untuk digunakan.

Pemasangan melalui Heml

Anda sepatutnya sudah memasang Heml. Ia boleh dimuat turun dari repositori GitHub projek. Ia dipasang dengan membongkar arkib yang sepadan dengan seni bina anda dan menambah helm $PATH.

Nota: versi 3.0.0 Helm telah dikeluarkan baru-baru ini. Memandangkan terdapat banyak perubahan padanya, pembaca dinasihatkan untuk menunggu sedikit sebelum menggunakannya..

Menambah sumber untuk Helm

Langkah pertama ialah menambah repositori "loki" menggunakan arahan berikut:

$ helm add loki https://grafana.github.io/loki/charts

Selepas ini, anda boleh mencari pakej bernama "loki":

$ helm search loki

Keputusan:

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...

Pakej ini mempunyai ciri-ciri berikut:

  • pakej itu loki/loki sepadan dengan pelayan Loki sahaja
  • pakej itu loki/fasih-bit membolehkan anda menggunakan DaemonSet menggunakan fluent-bin untuk mengumpul log dan bukannya Promtail
  • pakej itu loki/promtail mengandungi ejen pengumpulan fail log
  • pakej itu loki/loki-timbunan, membolehkan anda menggunakan Loki dengan segera bersama-sama dengan Promtail.

Memasang Loki

Untuk menggunakan Loki ke Kubernetes, jalankan arahan berikut dalam ruang nama "pemantauan":

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

Untuk menyimpan ke cakera, tambah parameter --set loki.persistence.enabled = true:

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

Nota: jika anda mahu menggunakan Grafana pada masa yang sama, kemudian tambah parameter --set grafana.enabled = true

Apabila anda menjalankan arahan ini, anda harus mendapat 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 keadaan pod dalam ruang nama "pemantauan", kita dapat melihat bahawa semuanya telah digunakan:

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

Keputusan:

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. Kini tiba masanya untuk melakukan beberapa ujian!

Menyambung ke Grafana

Untuk menyambung ke Grafana di bawah Kubernetes, anda perlu membuka terowong ke podnya. Di bawah ialah arahan untuk membuka port 3000 untuk pod Grafana:

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

Satu lagi perkara penting ialah keperluan untuk memulihkan kata laluan pentadbir Grafana. Kata laluan dirahsiakan loki-grafana di ladang .data.admin-user dalam format base64.

Untuk memulihkannya, anda perlu menjalankan arahan berikut:

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

Gunakan kata laluan ini bersama-sama dengan akaun pentadbir lalai (admin).

Mentakrifkan sumber data Loki dalam Grafana

Pertama sekali, pastikan sumber data Loki telah dibuat (Konfigurasi/Sumber Data).
Inilah contohnya:

Loki - pengumpulan log menggunakan pendekatan Prometheus
Contoh menyediakan sumber data untuk Loki

Dengan mengklik pada "Ujian" anda boleh menyemak sambungan dengan Loki.

Membuat permintaan kepada Loki

Sekarang pergi ke Grafana ke bahagian "Teroka". Apabila menerima log daripada bekas, Loki menambah metadata daripada Kubernetes. Oleh itu, ia menjadi mungkin untuk melihat log bekas tertentu.

Contohnya, untuk memilih log bekas promtail, anda boleh menggunakan pertanyaan berikut: {container_name = "promtail"}.
Di sini juga ingat untuk memilih sumber data Loki.

Pertanyaan ini akan mengembalikan aktiviti kontena seperti berikut:

Loki - pengumpulan log menggunakan pendekatan Prometheus
Hasil pertanyaan dalam Grafana

Tambahkan pada papan pemuka

Bermula dengan Grafana 6.4, anda boleh meletakkan maklumat log terus pada papan pemuka. Selepas ini, pengguna akan dapat menukar dengan cepat antara bilangan permintaan di tapak dan jejak aplikasinya.

Di bawah ialah contoh papan pemuka yang melaksanakan interaksi ini:

Loki - pengumpulan log menggunakan pendekatan Prometheus
Contoh papan pemuka dengan metrik Prometheus dan log Loki

Masa Depan Loki

Saya mula menggunakan Loki pada bulan Mei/Jun dengan versi 0.1. Hari ini versi 1, malah 1.1 dan 1.2 telah pun dikeluarkan.

Perlu diakui bahawa versi 0.1 tidak cukup stabil. Tetapi 0.3 sudah menunjukkan tanda kematangan sebenar, dan versi berikutnya (0.4, kemudian 1.0) hanya menguatkan tanggapan ini.

Selepas 1.0.0, tiada siapa boleh mempunyai sebarang alasan untuk tidak menggunakan alat hebat ini.

Penambahbaikan selanjutnya tidak seharusnya mengenai Loki, sebaliknya integrasinya dengan Grafana yang sangat baik. Malah, Grafana 6.4 sudah mempunyai integrasi yang baik dengan papan pemuka.

Grafana 6.5, yang dikeluarkan baru-baru ini, menambah baik penyepaduan ini dengan mengecam kandungan log secara automatik dalam format JSON.

Video di bawah menunjukkan contoh kecil mekanisme ini:

Loki - pengumpulan log menggunakan pendekatan Prometheus
Menggunakan rentetan Loki yang didedahkan dalam Grafana

Ia menjadi mungkin untuk menggunakan salah satu medan JSON, sebagai contoh, untuk:

  • pautan ke alat luaran
  • menapis kandungan log

Sebagai contoh, anda boleh mengklik pada traceId untuk pergi ke Zipkin atau Jaeger.

Seperti biasa, kami menantikan komen anda dan menjemput anda webinar terbuka, di mana kita akan bercakap tentang cara industri DevOps berkembang sepanjang 2019 dan membincangkan kemungkinan laluan pembangunan untuk 2020.

Sumber: www.habr.com