GNU/Linux >> Belajar Linux >  >> Linux

Tingkatkan riwayat cangkang Anda dengan Loki dan fzf

Loki adalah kerangka kerja agregasi log open source berlisensi Apache 2.0 yang dirancang oleh Grafana Labs dan dibangun dengan dukungan luar biasa dari komunitas yang berkembang. Ini juga proyek yang saya kerjakan setiap hari. Dalam artikel ini, daripada hanya berbicara tentang cara kerja Loki, saya akan memberikan pengantar langsung untuk memecahkan masalah nyata dengannya.

Masalahnya:riwayat shell terpusat yang tahan lama

Saya suka riwayat shell saya dan selalu menjadi pengguna CTRL+R yang fanatik. Sekitar setahun yang lalu, kehidupan terminal saya berubah selamanya ketika rekan saya Dieter Plaetinck memperkenalkan saya ke pencari fuzzy baris perintah fzf .

Tiba-tiba, pencarian melalui perintah berubah dari ini:

Untuk ini:

Sementara fzf secara signifikan meningkatkan kualitas hidup saya, masih ada beberapa bagian yang hilang di sekitar riwayat shell saya:

  • Kehilangan riwayat shell saat terminal tiba-tiba ditutup, komputer mogok, komputer mati, seluruh kunci enkripsi disk terlupakan
  • Memiliki akses ke riwayat shell saya dari semua komputer saya aktif semua komputer saya

Saya menganggap riwayat shell saya sebagai dokumentasi:ini adalah cerita penting yang tidak ingin saya hilangkan. Menggabungkan Loki dengan riwayat shell saya membantu memecahkan masalah ini dan banyak lagi.

Tentang Loki

Jelajahi cloud sumber terbuka

  • Memahami awan
  • Kursus online gratis:Mengembangkan aplikasi cloud-native dengan arsitektur layanan mikro
  • Apa itu cloud hybrid?
  • eBook:Membangun strategi cloud hybrid
  • Apa itu Kubernetes?
  • Memahami komputasi tepi
  • Artikel terbaru untuk arsitek TI

Loki mengambil model label intuitif yang digunakan proyek sumber terbuka Prometheus untuk metrik dan mengembangkannya ke dunia agregasi log. Hal ini memungkinkan pengembang dan operator untuk melakukan pivot dengan mulus antara metrik dan log mereka menggunakan kumpulan label yang sama. Bahkan jika Anda tidak menggunakan Prometheus, masih ada banyak alasan mengapa Loki cocok untuk kebutuhan penyimpanan log Anda:

  • Overhead rendah: Loki tidak melakukan pengindeksan log teks lengkap; itu hanya membuat indeks dari label yang Anda letakkan di log Anda. Menjaga indeks kecil secara substansial mengurangi kebutuhan operasi Loki. Saya menjalankan proyek loki-shell saya, yang menggunakan Loki untuk menyimpan riwayat shell, pada Raspberry Pi dengan menggunakan memori sedikit di atas 50MB.
  • Biaya rendah: Konten log dikompresi dan disimpan di penyimpanan objek seperti Amazon S3, Google Cloud Storage, Azure Blob, atau bahkan langsung di sistem file. Tujuannya adalah menggunakan penyimpanan yang murah dan tahan lama.
  • Fleksibilitas: Loki tersedia dalam biner tunggal yang dapat didownload dan dijalankan secara langsung atau sebagai image Docker untuk dijalankan di lingkungan container apa pun. Bagan Helm tersedia untuk memulai dengan cepat di Kubernetes. Jika Anda menuntut banyak dari alat logging Anda, lihat penyiapan produksi yang berjalan di Grafana Labs. Ini menggunakan Jsonnet dan Tanka open source untuk menerapkan gambar Loki yang sama sebagai blok penyusun terpisah untuk memungkinkan penskalaan horizontal besar-besaran, ketersediaan tinggi, replikasi, penskalaan terpisah jalur baca dan tulis, kueri yang sangat dapat diparalelkan, dan banyak lagi.

Singkatnya, pendekatan Loki adalah menyimpan indeks kecil metadata tentang log (label) Anda dan menyimpan konten log yang tidak diindeks dan dikompresi di toko objek murah untuk membuat pengoperasian lebih mudah dan lebih murah. Aplikasi ini dibangun untuk dijalankan sebagai satu proses dan dengan mudah berkembang menjadi sistem terdistribusi yang sangat tersedia. Anda dapat memperoleh kinerja kueri yang tinggi pada beban kerja logging yang lebih besar melalui paralelisasi dan pembagian kueri—sedikit seperti MapReduce untuk log Anda.

Selain itu, fungsi ini tersedia untuk digunakan siapa saja secara gratis. Seperti halnya platform observabilitas terbuka Grafana, Grafana Labs berkomitmen untuk menjadikan Loki sebagai perangkat lunak agregasi log yang sepenuhnya terbuka dan berfitur lengkap yang dapat digunakan siapa saja.

Mulai

Saya menjalankan Loki pada Raspberry Pi di jaringan rumah saya dan menyimpan riwayat shell saya di luar situs dalam ember S3.

Ketika saya menekan CTRL+R, antarmuka baris perintah LogCLI Loki membuat beberapa permintaan batch yang dialirkan ke fzf. Berikut ini contohnya—bagian atas menunjukkan log server Loki di Pi.

Siap untuk mencobanya? Panduan berikut akan membantu Anda menyiapkan dan menjalankan Loki agar terintegrasi dengan histori shell Anda. Karena tutorial ini bertujuan untuk mempermudah, penyiapan ini akan menjalankan Loki secara lokal di komputer Anda dan menyimpan semua file di sistem file.

Anda dapat menemukan semua ini, ditambah informasi tentang cara menyiapkan instalasi yang lebih rumit, di repositori GitHub loki-shell.

Perhatikan bahwa tutorial ini tidak akan mengubah perilaku apa pun yang ada di sekitar riwayat Anda, jadi perintah dan pengaturan riwayat shell yang ada tidak akan tersentuh. Sebagai gantinya, ini menduplikasi riwayat perintah ke Loki dengan $PROMPT_COMMAND di Bash dan precmd di Zsh. Di sisi CTRL+R, ini membebani fungsi yang digunakan fzf untuk mengakses perintah CTRL+R. Mencoba ini aman, dan jika Anda memutuskan tidak menyukainya, cukup ikuti langkah-langkah uninstall di repo GitHub untuk menghapus semua jejak. Riwayat cangkang Anda tidak akan tersentuh.

Langkah 1:Instal fzf

Ada beberapa cara untuk menginstal fzf, tetapi saya lebih suka metode Git:

git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install

Katakan ya untuk semua pertanyaan yang diajukan.

Jika Anda sudah menginstal fzf, pastikan Anda mengaktifkan ikatan kunci (yaitu, pastikan saat Anda mengetik CTRL+R, fzf muncul). Anda dapat menjalankan ulang penginstalan fzf untuk mengaktifkan pengikatan kunci jika perlu.

Langkah 2:Instal loki-shell

Seperti fzf, loki-shell juga memiliki repo Git dan skrip instalasi:

git clone --depth 1 https://github.com/slim-bean/loki-shell.git ~/.loki-shell
~/.loki-shell/install

Pertama, skrip membuat ~/.loki-shell direktori tempat semua file akan disimpan (termasuk data Loki). Selanjutnya, ia akan mengunduh binari untuk Promtail, LogCLI, dan Loki.

Kemudian akan bertanya:

Do you want to install Loki? ([y]/n)

Jika Anda sudah menjalankan Loki terpusat untuk loki-shell, Anda bisa menjawab n; namun, untuk tutorial ini, jawab y atau tekan Enter.

Ada dua opsi yang tersedia untuk menjalankan Loki secara lokal:sebagai image Docker atau sebagai biner tunggal (dengan dukungan untuk menambahkan layanan systemd). Saya sarankan menggunakan Docker jika tersedia, karena menurut saya ini sedikit menyederhanakan operasi, tetapi keduanya berfungsi dengan baik.

Berjalan dengan Docker

Untuk menjalankan Loki sebagai gambar Docker:

[y] to run Loki in Docker, [n] to run Loki as a binary ([y]/n) y
Error: No such object: loki-shell
Error response from daemon: No such container: loki-shell
Error: No such container: loki-shell
54843ff3392f198f5cac51a6a5071036f67842bbc23452de8c3efa392c0c2e1e

Jika ini adalah pertama kalinya Anda menjalankan instalasi, Anda dapat mengabaikan pesan kesalahan. Skrip ini akan berhenti dan menggantikan wadah Loki yang sedang berjalan jika versinya tidak cocok, yang memungkinkan Anda menjalankan ulang skrip ini untuk meningkatkan versi Loki.

Itu dia! Loki sekarang berjalan sebagai wadah Docker.

Data dari Loki akan disimpan di ~/.loki-shell/data .

Gambar berjalan dengan --restart=unless-stopped , sehingga akan restart saat reboot tetapi akan tetap berhenti jika Anda menjalankan docker stop loki-shell .

(Jika Anda menggunakan Docker, Anda dapat melompat ke bawah ke integrasi Shell.)

Berjalan sebagai biner

Ada banyak cara untuk menjalankan biner pada sistem Linux. Script ini dapat menginstal layanan systemd. Jika Anda tidak memiliki systemd, Anda masih dapat menggunakan instalasi biner:

[y] to run Loki in Docker, [n] to run Loki as a binary ([y]/n) n

Run Loki with systemd? ([y]/n) n

This is as far as this script can take you
You will need to setup an auto-start for Loki
It can be run with this command: /home/username/.loki-shell/bin/loki -config.file=/home/username/.loki-shell/config/loki-binary-config.yaml

Skrip akan mengeluarkan perintah yang perlu Anda gunakan untuk menjalankan Loki, dan Anda akan mengatur sendiri skrip init atau metode lain untuk memulainya secara otomatis.

Anda dapat menjalankan perintah secara langsung, jika Anda mau, dan menjalankan Loki dari shell Anda saat ini.

Jika Anda melakukannya memiliki systemd, Anda memiliki opsi untuk membiarkan skrip menginstal layanan systemd atau menunjukkan kepada Anda perintah untuk menjalankannya sendiri:

Run Loki with systemd? ([y]/n) y

Installing the systemd service requires root permissions.
[y] to run these commands with sudo [n] to print out the commands and you can run them yourself. ([y]/n) n
sudo cp /home/ed/.loki-shell/config/loki-shell.service /etc/systemd/system/loki-shell.service
sudo systemctl daemon-reload
sudo systemctl enable loki-shell
sudo systemctl start loki-shell
Copy these commands and run them when the script finishes. (press enter to continue)

Integrasi Shell

Terlepas dari bagaimana Anda menginstal Loki, Anda sekarang akan melihat prompt:

Enter the URL for your Loki server or press enter for default (http://localhost:4100)

Jika Anda telah menyiapkan Loki terpusat, Anda akan memasukkan URL itu di sini. Namun demo ini hanya menggunakan default, jadi Anda bisa menekan Enter.

Banyak teks akan menjelaskan semua entri yang ditambahkan ke ~.bashrc . Anda atau ~.zshrc (atau keduanya).

Itu dia!

Finished. Restart your shell or reload config file.
   source ~/.bashrc  # bash
   source ~/.zshrc   # zsh

Langkah 3:Cobalah!

Mulai gunakan shell Anda, dan gunakan CTRL+R untuk melihat perintah Anda.

Buka beberapa jendela terminal, ketik perintah di satu jendela dan CTRL+R di jendela lain, dan Anda akan segera melihat perintah Anda tersedia.

Juga, perhatikan bahwa ketika Anda beralih di antara terminal dan memasukkan perintah, mereka segera tersedia dengan CTRL+R, tetapi operasi panah Atas tidak terpengaruh di antara terminal. (Ini mungkin tidak benar jika Anda telah menginstal Oh My Zsh, karena secara otomatis menambahkan semua perintah ke riwayat.)

Gunakan CTRL+R beberapa kali untuk beralih antara pengurutan menurut waktu dan relevansi.

Perhatikan bahwa konfigurasi ini hanya akan menampilkan histori kueri host saat ini, meskipun Anda mengirim data shell dari beberapa host ke Loki. Saya pikir secara default ini yang paling masuk akal. Ada banyak hal yang dapat Anda ubah jika Anda ingin perilaku ini berubah; lihat repo loki-shell untuk mempelajari lebih lanjut.

Itu juga menginstal alias yang disebut hist :

alias hist="$HOME/.loki-shell/bin/logcli --addr=$LOKI_URL"

LogCLI dapat digunakan untuk menanyakan dan mencari riwayat Anda secara langsung di Loki, termasuk memungkinkan Anda untuk mencari host lain. Lihat panduan memulai untuk LogCLI untuk mempelajari lebih lanjut tentang kueri.

Bahasa kueri log Loki (LogQL) menyediakan kueri metrik yang memungkinkan Anda melakukan beberapa hal menarik; misalnya, saya dapat melihat berapa kali saya mengeluarkan kc perintah (alias saya untuk kubectl) dalam 30 hari terakhir:

Kredit tambahan

Instal Grafana dan mainkan dengan riwayat shell Anda:

docker run -d -p 3000:3000 --name=grafana grafana/grafana

Buka browser web di http://localhost:3000 dan masuk menggunakan admin/admin default default nama pengguna dan kata sandi.

Di sebelah kiri, navigasikan ke Konfigurasi -> Sumber Data , klik Tambahkan Sumber Data tombol, dan pilih Loki .

Untuk URL, Anda harus dapat menggunakan http://localhost:4100 (namun, pada mesin WSL2 saya, saya harus menggunakan alamat IP komputer yang sebenarnya).

Klik Simpan dan Uji . Anda akan melihat Sumber data terhubung dan label ditemukan .

Klik Jelajahi ikon di sebelah kiri, pastikan Loki sumber data dipilih, dan coba kueri:

{job="shell"}

Jika Anda memiliki lebih banyak host yang mengirimkan perintah shell, Anda dapat membatasi hasilnya ke host tertentu menggunakan hostname label:

{job="shell", hostname="myhost"}.

Anda juga dapat mencari perintah khusus dengan ekspresi filter:

{job="shell"} |= "docker"

Atau Anda dapat mulai menjelajahi dunia metrik dari log untuk melihat seberapa sering Anda menggunakan shell:

rate({job="shell"}[1m])

Ingin merekonstruksi garis waktu dari sebuah insiden? Anda dapat memfilter menurut perintah tertentu dan melihat kapan perintah itu dijalankan.

Untuk melihat apa lagi yang dapat Anda lakukan dan mempelajari lebih lanjut tentang bahasa kueri Loki, lihat panduan LogQL.

Pemikiran terakhir

Untuk lebih banyak ide, pemecahan masalah, dan pembaruan, ikuti repo GitHub. Ini masih dalam proses, jadi laporkan masalah apa pun di sana.

Untuk mempelajari lebih lanjut tentang Loki, lihat dokumentasi, entri blog, dan repo GitHub, atau coba di Grafana Cloud.

Terima kasih khusus kepada rekan saya Jack Baldry karena telah menanam benih untuk ide ini. Saya memiliki pengetahuan Loki untuk membuat ini terjadi, tetapi jika bukan karena sarannya, saya tidak berpikir saya akan berhasil di sini.


Linux
  1. Kontrol waktu dan tanggal komputer Anda dengan systemd

  2. Cara memprogram dengan Bash:Sintaks dan alat

  3. Sejarah Perintah Linux dengan tanggal dan waktu

  1. Menavigasi shell Bash dengan pushd dan popd

  2. Cara Mempercantik Terminal dan Shell Linux Anda

  3. Kecepatan terminal:Bergerak cepat di cangkang Anda

  1. Rekam terminal Anda dengan skrip dan pemutaran ulang skrip

  2. Mewarnai Lingkungan Terminal dan Shell Anda?

  3. Script Shell Dengan Fungsi Dan Parameter Sebagai Variabel?