Panduan Lengkap untuk Prometheus pada tahun 2019


Insinyur DevOps dan SRE mungkin pernah mendengar tentang Prometheus lebih dari sekali.


Prometheus dibuat di SoundCloud pada tahun 2012 dan sejak itu menjadi standar untuk sistem pemantauan . Ini benar-benar kode sumber terbuka, menyediakan puluhan eksportir yang berbeda yang dapat Anda gunakan untuk mengatur pemantauan seluruh infrastruktur dalam hitungan menit .


Prometheus memiliki nilai yang jelas dan sudah digunakan oleh inovator industri seperti DigitalOcean atau Docker sebagai bagian dari sistem pemantauan lengkap.


Apa itu Prometheus?
Mengapa itu dibutuhkan?
Apa bedanya dengan sistem lain?


Jika Anda sama sekali tidak tahu tentang Prometheus atau ingin lebih memahaminya, ekosistemnya dan semua interaksinya, artikel ini hanya untuk Anda .


Kami membagi panduan ini menjadi 3 bagian, seperti yang kami lakukan dengan InfluxDB .


  • Pertama datang gambaran lengkap tentang Prometheus , ekosistemnya, dan aspek-aspek kunci dari teknologi yang bergerak cepat.
  • Kemudian, penjelasan istilah teknis Prometheus disediakan. Jika Anda tidak tahu apa itu metrik, label, contoh atau eksportir, di sinilah Anda.
  • Akhirnya, kami menggambarkan berbagai skenario dunia nyata untuk menggunakan Prometheus . Di sini Anda akan terinspirasi oleh contoh-contoh perusahaan yang sukses.

Bagian I. Apa itu Prometheus?


Prometheus adalah basis data deret waktu. Jika Anda tidak mengetahui apa itu database deret waktu, bacalah bagian pertama manual InfluxDB .


Tetapi Prometheus bukan hanya basis data deret waktu.


Anda dapat melampirkan seluruh ekosistem alat untuk memperluas fungsionalitas.


Prometheus memonitor berbagai sistem : server, database, mesin virtual individu, dan hampir semua hal.


Untuk melakukan ini, Prometheus secara berkala mengikis targetnya .


Apa itu memo?


Prometheus mengambil metrik melalui panggilan HTTP ke titik akhir tertentu yang ditentukan dalam konfigurasi Prometheus.



Ambil, misalnya, aplikasi web yang terletak di http: // localhost: 3000 . Aplikasi mengirimkan metrik dalam format teks ke beberapa URL. Katakanlah http: // localhost: 3000 / metrik .


Di alamat ini, Prometheus mengambil data dari target pada interval tertentu.


1. Bagaimana cara kerja Prometheus?


Seperti yang kami katakan, Prometheus terdiri dari berbagai komponen.


Pertama, Anda perlu mengekstrak metrik dari sistem Anda. Ada berbagai cara:


  • Instrumentasi aplikasi, yaitu, aplikasi Anda akan memberikan metrik yang kompatibel dengan Prometheus di URL yang ditentukan. Prometheus akan mengidentifikasi itu sebagai target dan akan membuangnya pada interval yang ditentukan.
  • Gunakan eksportir siap pakai . Prometheus memiliki koleksi eksportir untuk teknologi yang ada. Misalnya, eksportir siap pakai untuk memantau mesin-mesin Linux ( Eksportir Node ), untuk basis data umum ( Eksportir SQL atau Eksportir MongoDB ), dan bahkan untuk penyeimbang beban HTTP (misalnya, Eksportir HAProxy ).
  • Menggunakan Pushgateway . Terkadang aplikasi atau tugas tidak memberikan metrik secara langsung. Mereka mungkin tidak dirancang untuk ini (misalnya, pekerjaan batch) atau Anda sendiri memutuskan untuk tidak memberikan metrik langsung melalui aplikasi.

Seperti yang sudah Anda pahami, Prometheus mengumpulkan data itu sendiri (kecuali untuk kasus yang jarang terjadi ketika kami menggunakan Pushgateway).



Apa artinya ini?
Mengapa ini dibutuhkan?


2. Koleksi vs. mengirim


Prometheus memiliki perbedaan penting dari database deret waktu lainnya: Prometheus secara aktif memindai target untuk mendapatkan metrik dari mereka .


InfluxDB, misalnya, bekerja secara berbeda: Anda langsung mengirim data sendiri.



Kedua pendekatan memiliki pro dan kontra mereka. Berdasarkan dokumentasi yang tersedia, kami telah menyusun daftar alasan mengapa pencipta Prometheus memilih arsitektur ini:


  • Kontrol terpusat . Jika Prometheus mengirimkan permintaan ke target, kami melakukan semua konfigurasi di sisi Prometheus, bukan sistem individual.

Prometheus memutuskan di mana dan seberapa sering untuk mengikis.


Jika objek itu sendiri mengirim data, ada risiko akan ada terlalu banyak data dan server akan macet. Ketika sistem mengumpulkan data, Anda dapat mengontrol frekuensi pengumpulan dan membuat beberapa konfigurasi goresan untuk memilih frekuensi yang berbeda untuk objek yang berbeda .


  • Prometheus menyimpan metrik gabungan .

Ini merupakan tambahan pada bagian pertama di mana kami membahas peran Prometheus.


Prometheus tidak berdasarkan pada peristiwa dan sangat berbeda dari database deret waktu lainnya. Itu tidak mencegat acara individu dengan referensi ke waktu (misalnya, pemadaman layanan), tetapi mengumpulkan metrik yang telah dikumpulkan sebelumnya tentang layanan Anda .


Secara khusus, layanan web tidak mengirim pesan kesalahan 404 dan pesan dengan penyebab kesalahan. Pesan dikirim bahwa layanan menerima pesan kesalahan 404 dalam lima menit terakhir.


Ini adalah perbedaan utama antara basis data deret waktu yang mengumpulkan metrik teragregasi dan yang mengumpulkan metrik mentah.


3. Ekosistem Prometheus yang dikembangkan


Pada dasarnya, Prometheus adalah database deret waktu.


Tetapi ketika bekerja dengan database seperti itu, Anda sering perlu memvisualisasikan data, menganalisisnya , dan mengkonfigurasi lansiran untuk mereka.


Prometheus mendukung alat-alat berikut yang memperluas fungsinya:


  • Alertmanager . Prometheus mengirimkan peringatan ke Alertmanager berdasarkan aturan khusus yang ditentukan dalam file konfigurasi. Dari sana, mereka dapat diekspor ke titik akhir yang berbeda (misalnya, Pagerduty atau Slack).
  • Visualisasi data . Seperti Grafana, Anda dapat memvisualisasikan deret waktu secara langsung di antarmuka pengguna web Prometheus. Anda dapat memfilter data dan membuat ulasan spesifik tentang apa yang terjadi di target yang berbeda.
  • Penemuan layanan . Prometheus secara dinamis mendeteksi target dan secara otomatis menghapus target baru berdasarkan permintaan. Ini sangat nyaman jika Anda bekerja dengan kontainer yang secara dinamis mengubah alamat berdasarkan permintaan.



Bagian II Konsep Prometheus


Seperti dalam manual InfluxDB, kami akan menjelaskan secara rinci istilah teknis terkait dengan Prometheus.


1. Model data nilai-kunci


Sebelum beralih ke alat Prometheus, penting untuk sepenuhnya memahami model data ini.


Prometheus bekerja dengan pasangan kunci-nilai . Kunci menjelaskan apa yang kita ukur, dan nilai menyimpan nilai aktual sebagai angka.


Ingat: Prometheus tidak dirancang untuk menyimpan informasi mentah, seperti teks biasa. Ini menyimpan metrik yang dikumpulkan selama periode waktu.

Kunci dalam hal ini disebut metrik . Ini, misalnya, kecepatan prosesor atau penggunaan memori.


Tetapi bagaimana jika Anda membutuhkan detail lebih lanjut tentang metrik?
Misalnya, prosesor memiliki 4 core, dan kami membutuhkan 4 metrik terpisah?


Dan di sini jalan pintas datang untuk menyelamatkan. Pintasan menyediakan lebih banyak informasi tentang metrik dengan menambahkan bidang tambahan. Misalnya, Anda menjelaskan bukan hanya kecepatan prosesor, tetapi kecepatan satu inti di atas IP tertentu.



Kemudian Anda dapat memfilter metrik dengan label dan hanya melihat informasi yang Anda butuhkan.


2. Jenis metrik


Saat memantau dengan Prometheus, metrik dapat dijelaskan dalam empat cara. Lebih baik membacanya sampai akhir, karena ada jebakan di sini.


Penghitung


Ini mungkin jenis metrik paling sederhana. Penghitung, sesuai namanya, menghitung elemen untuk periode waktu tertentu .


Jika Anda ingin menghitung, misalnya, kesalahan HTTP pada server atau mengunjungi situs web, gunakan penghitung .


Dan secara logis, tentu saja, penghitung hanya dapat meningkatkan atau nol angka , oleh karena itu tidak cocok untuk nilai yang dapat menurun, atau untuk nilai negatif.


Dengan bantuannya, akan lebih mudah untuk mempertimbangkan jumlah kemunculan peristiwa tertentu selama periode waktu tertentu, yaitu tingkat perubahan metrik dari waktu ke waktu.


Dan jika Anda perlu mengukur, katakanlah, memori yang digunakan untuk periode tertentu?
Nilai ini dapat menurun. Bagaimana cara menghitungnya dengan Prometheus?


Meter


Temui meter!


Meter berurusan dengan nilai-nilai yang mungkin berkurang seiring waktu . Mereka dapat dibandingkan dengan termometer - jika Anda melihat termometer, kita akan melihat suhu saat ini.


Tetapi jika meter dapat meningkat dan turun dan mengambil nilai positif dan negatif, maka ternyata mereka lebih baik daripada penghitung?
Jadi penghitung tidak berguna?


Awalnya, saya pikir begitu. Karena mereka dapat melakukan segalanya, mari kita gunakan di mana saja. Apakah ini logis?


Tapi tidak.


Meter ideal untuk mengukur nilai metrik saat ini, yang dapat menurun seiring waktu.


Di sinilah letak jebakan: meter tidak menunjukkan perkembangan metrik selama periode waktu tertentu. Dengan menggunakan meter, Anda dapat kehilangan perubahan metrik tidak teratur dari waktu ke waktu .


Mengapa Inilah yang / u / justinDavidow katakan :


β€œMeteran menunjukkan nilai rata-rata counter delta untuk sebuah unit selama periode waktu tertentu.

Penghitung memperhitungkan setiap unit yang digunakan (jika itu adalah prosesor, maka operasi, siklus atau kutu), dan kemudian Anda dapat memilih indikator mana untuk periode yang Anda butuhkan.

Jika Anda menggunakan meter, laju pengambilan sampel harus akurat. Jika frekuensi berbeda setidaknya beberapa mikrodetik, nilainya tidak dapat diandalkan. "Ini bahkan lebih terlihat di bawah beban berat, di mana waktu antara pengukuran meningkat secara eksponensial, karena perencana sistem tidak punya waktu untuk memperhatikan aplikasi pemantauan."

Jika sistem mengirim metrik setiap 5 detik dan Prometheus menghapus target setiap 15, beberapa metrik mungkin hilang dalam proses. Jika Anda melakukan perhitungan tambahan dengan metrik ini, keakuratan hasil akan lebih rendah.


Di konter, setiap nilai dijumlahkan. Ketika Prometheus mengumpulkannya, ia menyadari bahwa nilainya dikirim pada interval tertentu.


Sekarang jangan bingung.


Grafik batang


Histogram adalah jenis metrik yang lebih kompleks. Ini memberikan informasi tambahan. Misalnya jumlah penjumlahan dan jumlahnya.


Nilai dikumpulkan di area dengan batas atas kustom. Oleh karena itu, histogram dapat:


  • Hitung nilai rata-rata , yaitu jumlah nilai yang dibagi dengan jumlah nilai.
  • Hitung pengukuran relatif dari nilai , dan ini sangat nyaman jika Anda perlu mencari tahu berapa banyak nilai dalam area tertentu yang sesuai dengan kriteria yang ditentukan. Ini sangat berguna jika Anda perlu melacak proporsi atau menetapkan indikator kualitas.

Di dunia nyata, saya ingin menerima peringatan jika 20% dari server saya memiliki respons lebih dari 300 ms atau respons server lebih dari 300 ms lebih dari 20% dari waktu.


Jika Anda berurusan dengan proporsi, Anda perlu histogram .


Ringkasan


Dasbor adalah histogram canggih . Mereka juga menunjukkan jumlah dan jumlah pengukuran, dan juga kuantil untuk periode bergerak .


Kuantil, jika ada, membagi kepadatan probabilitas menjadi segmen-segmen dengan probabilitas yang sama.


Jadi: diagram batang atau ringkasan?


Itu semua tergantung niat .


Histogram menggabungkan nilai selama periode waktu tertentu, memberikan jumlah dan kuantitas yang dapat digunakan untuk melacak pengembangan metrik tertentu.


Ringkasan, di sisi lain, menunjukkan kuantil selama periode bergerak (mis., Pengembangan berkelanjutan dari waktu ke waktu).


Ini sangat nyaman jika Anda perlu mengetahui nilai yang mewakili 95% dari nilai yang dicatat selama suatu periode.


3. Tugas dan contoh


Mengingat kemajuan terbaru dalam arsitektur terdistribusi dan popularitas solusi berbasis cloud, Anda tidak mungkin menggunakan server tunggal yang berjalan sendiri.


Server direplikasi dan didistribusikan di seluruh dunia.


Untuk mengilustrasikan ini, mari kita lihat arsitektur klasik dua server HAProxy yang mendistribusikan ulang beban di sembilan server web backend ( Tidak, tidak, tidak ada tumpukan Stackoverflow. )


Dalam contoh kehidupan nyata ini, kami akan melacak jumlah kesalahan HTTP yang dikembalikan oleh server web .


Dalam Prometheus, satu server web disebut instance . Tugasnya adalah fakta bahwa Anda mengukur jumlah kesalahan HTTP pada semua instance.



Keindahannya adalah bahwa tugas dan instance adalah bidang dalam label, dan Anda dapat memfilter hasilnya dengan contoh atau tugas tertentu.


Apakah itu nyaman?


4. PromQL


Jika Anda menggunakan basis data berdasarkan InfluxDB, Anda mungkin sudah terbiasa dengan InfluxQL . Atau gunakan SQL di TimescaleDB .


Prometheus juga memiliki bahasa sendiri untuk menanyakan dan mengambil data dari server: PromQL .


Seperti yang sudah kita ketahui, data disajikan dalam bentuk pasangan kunci-nilai. PromQL menggunakan sintaks yang sama dan mengembalikan hasil sebagai vektor.


Vektor macam apa?


Ada dua jenis vektor di Prometheus dan PromQL:


  • Vektor instan yang mewakili semua metrik dengan cap waktu terakhir.
  • Vektor dengan rentang waktu : jika Anda perlu melihat pengembangan metrik dari waktu ke waktu, Anda dapat menentukan rentang waktu dalam permintaan ke Prometheus. Sebagai hasilnya, Anda akan mendapatkan vektor yang menggabungkan semua nilai yang direkam untuk periode yang dipilih.


API PromQL menyediakan serangkaian fungsi untuk operasi dengan data dalam kueri.


Anda dapat mengurutkan nilai, menerapkan fungsi matematika pada mereka (misalnya, menghitung turunan atau eksponen), dan bahkan membuat prediksi (misalnya, menggunakan model Holt-Winters).


5. Instrumentasi


Instrumentasi adalah bagian penting lain dari Prometheus. Anda instrumen aplikasi sebelum Anda mengekstrak data dari mereka.


Dalam Prometheus, instrumentasi berarti menambahkan perpustakaan klien ke aplikasi untuk memberikan metrik Prometheus.


Instrumentasi tersedia untuk sebagian besar bahasa pemrograman umum: misalnya, Python, Java, Ruby, Go, dan bahkan Node atau C # .


Intinya, Anda membuat objek memori (misalnya, meter atau penghitung) yang secara dinamis akan menambah atau mengurangi nilai.


Lalu Anda memilih tempat untuk menyediakan metrik. Prometheus akan mengambilnya dari sana dan menyimpannya di basis data deret waktu mereka.



6. Eksportir


Dalam aplikasi yang Anda tulis, sangat mudah untuk menyesuaikan metrik yang disediakan dan mengubahnya dari waktu ke waktu menggunakan instrumentasi.


Untuk aplikasi, server, dan basis data yang terkenal, Prometheus menawarkan kepada eksportir tempat Anda dapat memantau target .


Eksportir ini biasanya direpresentasikan sebagai gambar Docker dan mudah disesuaikan. Mereka menyediakan satu set metrik yang siap pakai dan dasbor yang sering dibuat dengan yang Anda dapat mengkonfigurasi pemantauan dalam hitungan menit.


Contoh eksportir:


  • Pengekspor database: untuk database MongoDB, SQL dan server MySQL.
  • Eksportir HTTP : untuk server HAProxy, Apache, atau NGINX.
  • Eksportir Unix : kinerja sistem dapat dipantau menggunakan eksportir simpul bawaan, yang menyediakan semua metrik sistem tanpa konfigurasi tambahan.


Beberapa kata tentang kompatibilitas satu sama lain


Sebagian besar database deret waktu mendukung interoperabilitas untuk sistem mereka.


Prometheus bukan satu-satunya sistem pemantauan dengan persyaratan metriknya. Misalnya, InfluxDB (via Telegraf), CollectD , StatsD dan Nagios juga memiliki standar sendiri.


Oleh karena itu, untuk interaksi berbagai sistem, eksportir dibuat. Bahkan jika Telegraf tidak mengirim metrik dalam format yang diterima oleh Prometheus, Telegraf dapat mengirim metrik ini ke eksportir InfluxDB, dari mana Prometheus kemudian akan mengambilnya.


7. Lansiran


Saat bekerja dengan database deret waktu, Anda memerlukan umpan balik dari data, dan manajer lansiran bertanggung jawab untuk ini.


Di Grafana, peringatan biasa terjadi, tetapi peringatan itu juga tersedia di Prometheus melalui manajer lansiran.


Alert Manager adalah alat terpisah yang bergabung dengan Prometheus dan meluncurkan sirene khusus .


Lansiran didefinisikan dalam file konfigurasi dan menetapkan seperangkat aturan untuk metrik. Jika kepatuhan terhadap aturan terjadi dalam deret waktu, peringatan dipicu dan dikirim ke penerima yang ditentukan.


Seperti di Grafana, Anda dapat menentukan alamat email, Slack webhook, PagerDuty, dan objek HTTP khusus sebagai penerima.



Bagian III. Contoh Prometheus



Dan, tentu saja, setiap pemandu harus memiliki contoh praktis . Seperti yang saya katakan, teknologi bukanlah tujuan itu sendiri dan harus memenuhi tugas tertentu.


Kami akan membicarakan ini.


1. DevOps


Dengan semua pengekspor ini untuk berbagai sistem, basis data dan server, jelas bahwa Prometheus ditujukan terutama untuk industri DevOps .


Kita tahu bahwa ada banyak pemasok yang bersaing dan solusi yang dipersonalisasi di bidang ini.


Prometheus sangat cocok untuk DevOps.


Hampir tidak ada upaya untuk mengatur dan menjalankan instance, dan Anda dapat dengan mudah mengaktifkan dan mengkonfigurasi alat bantu apa pun.


Dengan mendeteksi target - misalnya, melalui eksportir file - ini adalah solusi yang bagus untuk tumpukan di mana kontainer dan arsitektur terdistribusi banyak digunakan.


Dalam lingkungan di mana instance secara konstan dibuat dan dihapus, tidak satu pun tumpukan DevOps dapat dilakukan tanpa ditemukannya layanan .


2. Kesehatan


Saat ini, solusi pemantauan diperlukan tidak hanya di bidang TI. Mereka juga digunakan dalam industri besar yang menyediakan arsitektur perawatan kesehatan yang fleksibel dan scalable.


Permintaan meningkat, dan arsitektur TI harus mematuhinya. Jika Anda tidak memiliki alat yang dapat diandalkan untuk memantau seluruh infrastruktur, Anda berisiko terganggunya layanan . Sudah di sektor kesehatan, bahaya seperti itu pasti harus diminimalkan.


Contoh ini dibahas di opensource.com pada artikel berikut .


3. Layanan keuangan


Contoh terbaru diberikan pada konferensi InfoQ, yang membahas penggunaan Prometheus di lembaga keuangan.


Jamie Christian dan Alan Strader menunjukkan bagaimana mereka menggunakan Prometheus untuk memantau infrastruktur mereka di Northern Trust. Sangat informatif, saya menyarankan Anda untuk melihatnya.



Bagian X. Apa Selanjutnya?



Saatnya beralih dari teori ke praktik .


Hari ini Anda berkenalan dengan dasar-dasar Prometheus, mempelajari fungsi apa yang dikerjakannya, alat dan sistem apa yang bekerja dengannya dan istilah apa yang digunakannya.


Sekarang Anda memiliki semua yang Anda butuhkan untuk membuat solusi pemantauan Anda .


Untuk memulai dengan Prometheus, pelajari semua eksportir yang tersedia .


Kemudian instal alat yang diperlukan, buat dasbor pertama Anda - dan pergi!


Jika Anda membutuhkan inspirasi, baca artikel saya tentang cara memonitor mesin Linux dengan Prometheus dan Grafana . Ada instruksi untuk menyiapkan alat dan dasbor pertama.


Saya harap Anda mempelajari sesuatu yang baru.


Jika Anda memiliki topik untuk artikel saya berikutnya, bagikan.


Selamat tinggal!

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


All Articles