Loghouse 0.3 - pembaruan yang lama ditunggu-tunggu dari sistem logging kami di Kubernetes

Flant memiliki sejumlah pengembangan Open Source, terutama untuk Kubernetes, dan loghouse adalah salah satu yang paling populer. Ini adalah alat logging pusat kami di K8, yang diperkenalkan lebih dari 2 tahun yang lalu.



Seperti yang kami sebutkan di artikel baru-baru ini tentang log , itu membutuhkan perbaikan, dan relevansinya hanya tumbuh seiring waktu. Hari ini kami senang memperkenalkan versi baru loghouse - v0.3.0 . Rincian tentang dia - di bawah luka.

kerugian


Kami telah menggunakan loghouse di banyak kluster Kubernet selama ini, dan secara umum, solusi ini cocok untuk kami sendiri dan berbagai klien yang juga kami berikan aksesnya. Keuntungan

utamanya adalah antarmuka yang sederhana dan intuitif, kemampuan untuk mengeksekusi query SQL, kompresi yang baik, dan konsumsi sumber daya yang rendah saat memasukkan data ke dalam basis data, serta biaya overhead yang rendah selama penyimpanan. Yang paling menyakitkan masalah di loghouse selama operasi:



  • penggunaan tabel partisi yang bergabung dengan tabel gabungan;
  • kurangnya buffer yang akan memuluskan semburan log;
  • Permata panel web yang usang dan berpotensi rentan
  • fluentd usang ( loghouse-fluentd: terbaru tidak dimulai karena gemset yang bermasalah).

Selain itu, sejumlah besar masalah telah terakumulasi di GitHub , yang juga ingin saya selesaikan.

Perubahan besar dalam loghouse 0.3.0


Faktanya, kami telah mengumpulkan cukup banyak perubahan, tetapi kami akan menyoroti yang paling penting. Mereka dapat dibagi menjadi 3 kelompok utama:

  • meningkatkan penyimpanan log dan skema basis data;
  • peningkatan pengumpulan log;
  • penampilan pemantauan.

1. Perbaikan dalam penyimpanan log dan desain basis data


Inovasi kunci:

  • Skema penyimpanan log telah berubah, transisi untuk bekerja dengan satu tabel dan penolakan tabel partisi telah selesai .
  • Mekanisme pembersihan dasar yang dibangun di ClickHouse dari versi terbaru telah mulai diterapkan .
  • Sekarang Anda dapat menggunakan instalasi ClickHouse eksternal , bahkan dalam mode cluster.

Bandingkan kinerja sirkuit lama dan baru dalam proyek nyata. Berikut adalah contoh mencari URL unik di log aplikasi sumber dtf.ru online populer :

SELECT 
    string_fields.values[indexOf(string_fields.names, 'path')] AS path, 
    count(*) AS count
FROM logs
WHERE (namespace = 'kube-nginx-ingress') AND ((string_fields.values[indexOf(string_fields.names, 'vhost')]) LIKE '%foobar.baz%') AND (date = '2020-02-29')
GROUP BY string_fields.values[indexOf(string_fields.names, 'path')]
ORDER BY count DESC
LIMIT 20

Seleksi berlangsung selama puluhan juta rekaman. Skema lama berjalan dalam 20 detik:



Baru - dalam 14:



Jika Anda menggunakan Helm-chart kami , maka ketika memperbarui loghouse, basis data akan secara otomatis dimigrasikan ke format baru. Jika tidak, Anda harus melakukan migrasi secara manual. Prosesnya dijelaskan dalam dokumentasi . Singkatnya, jalankan saja:

DO_DB_DEPLOY=true rake create_logs_tables

Selain itu, kami mulai menggunakan TTL untuk tabel ClickHouse . Ini memungkinkan Anda untuk secara otomatis menghapus data dari database yang lebih lama dari interval waktu yang ditentukan:

CREATE TABLE logs
(
....
)
  ENGINE = MergeTree()
  PARTITION BY (date)
  ORDER BY (timestamp, nsec, namespace, container_name)
  TTL date + toIntervalDay(14)
  SETTINGS index_granularity = 32768;

Contoh skema database dan konfigurasi untuk ClickHouse, termasuk contoh bekerja dengan cluster CH, dapat ditemukan dalam dokumentasi .

Koleksi log yang ditingkatkan


Inovasi kunci:

  • Buffer telah ditambahkan yang dirancang untuk memuluskan semburan ketika sejumlah besar log muncul.
  • Menerapkan kemampuan untuk mengirim log ke loghouse langsung dari aplikasi: melalui TCP dan UDP, dalam format JSON.

Baterai loghouse di loghouse adalah tabel baru yang logs_bufferditambahkan ke skema database. Tabel ini berada dalam memori, mis. disimpan dalam RAM (memiliki tipe Buffer khusus ); dialah yang harus meratakan beban di pangkalan. Terima kasih atas tipnya menambahkannya.Sovigod!

Log pengiriman yang diimplementasikan langsung ke loghouse dari aplikasi memungkinkan Anda melakukan ini bahkan melalui netcat:

echo '{"log": {"level": "info", "msg": "hello world"}}' | nc fluentd.loghouse 5170

Log ini dapat dilihat di namespace tempat loghouse diinstal dalam aliran net:



Persyaratan untuk data yang dikirim minimal: pesan harus JSON yang valid dengan bidang log. Kolom log, pada gilirannya, bisa berupa string atau JSON bersarang.

Subsistem Pemantauan Logging


Perbaikan penting adalah pemantauan fluentd melalui Prometheus. Sekarang loghouse dilengkapi dengan panel untuk Grafana, yang menampilkan semua metrik dasar, seperti:

  • jumlah pekerja yang fasih;
  • jumlah acara yang dikirim ke ClickHouse;
  • ukuran buffer gratis dalam persen.

Kode panel untuk Grafana dapat dilihat di dokumentasi .

Panel untuk ClickHouse dibuat berdasarkan produk yang sudah jadi - dari f1yegor , yang banyak terima kasih kepada penulis.

Seperti yang Anda lihat, panel menampilkan jumlah koneksi ke ClickHouse, penggunaan buffer, aktivitas tugas latar belakang dan jumlah penggabungan. Ini cukup untuk memahami keadaan sistem:



Panel untuk fluentd menunjukkan instance aktif dari fluentd. Ini sangat penting bagi mereka yang tidak ingin / tidak dapat kehilangan log sama sekali:



Selain status pod, panel menunjukkan beban pada antrian untuk mengirim log ke ClickHouse. Pada gilirannya, Anda dapat memahami apakah ClickHouse menangani muatan atau tidak. Dalam kasus di mana log tidak dapat hilang, parameter ini juga menjadi kritis.

Contoh panel dipertajam untuk pasokan Operator Prometheus kami, namun, panel tersebut mudah dimodifikasi melalui variabel dalam pengaturan.

Akhirnya, sebagai bagian dari pekerjaan pemantauan loghouse, kami mengumpulkan gambar Docker saat ini dengan clickhouse_exporter 0.1.0 yang dirilis oleh Percona Labs, ketika penulis clickhouse_exporter asli meninggalkan repositori-nya.

Rencana masa depan


  • Buatlah mungkin untuk menggunakan kluster ClickHouse di Kubernetes.
  • Buat kerja dengan pemilihan log asinkron dan hapus dari bagian Ruby backend.
  • Ruby- , .
  • , Go.
  • .


Sangat menyenangkan melihat bahwa proyek loghouse telah menemukan pemirsanya, tidak hanya telah memenangkan bintang di GitHub (600+), tetapi juga mendorong pengguna nyata untuk berbicara tentang keberhasilan dan masalah mereka.

Setelah membuat loghouse lebih dari 2 tahun yang lalu, kami tidak yakin dengan prospeknya, berharap bahwa pasar dan / atau komunitas Open Source akan menawarkan solusi terbaik. Namun, hari ini kita melihat bahwa ini adalah jalan yang layak, yang kita sendiri masih pilih dan gunakan pada banyak kelompok Kubernet yang dilayani.

Kami menantikan bantuan apa pun dalam meningkatkan dan mengembangkan loghouse. Jika Anda kehilangan sesuatu di loghouse - tulis di komentar. Selain itu, tentu saja, kami akan senang bisa aktif di GitHub .

PS


Baca juga di blog kami:


All Articles