Tabik, penduduk Khabrovsk! Pada malam permulaan pendaftaran baru untuk kursus
Artikel ini adalah pengenalan ringkas kepada Loki. Projek Loki
Inspirasi utama untuk Loki ialah
- 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:
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.
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:
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:
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:
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:
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:
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
Sumber: www.habr.com