Untuk menghasilkan laporan yang diperlukan dengan frekuensi tertentu, cukup menulis sumber Laporan kustom yang sesuai.
Skenario penggunaan
Laporan Pengukuran Kustom diperlukan, misalnya, dalam kasus berikut:
- OpenShift, , (worker nodes) . . CPU , , -, , .
- OpenShift. Metering, , , , . , , , .
- Selain itu, dalam situasi dengan cluster bersama, departemen operasi akan berguna untuk dapat menyimpan catatan dalam konteks tim dan departemen menurut total waktu operasi pod mereka (atau dengan berapa banyak CPU atau sumber daya memori yang dihabiskan untuk itu). Dengan kata lain, kami kembali tertarik dengan informasi tentang siapa yang memiliki sub-sub ini atau itu.
Untuk mengatasi masalah ini di cluster, cukup membuat sumber daya kustom tertentu, yang akan kita lakukan selanjutnya. Menginstal operator Pengukur berada di luar cakupan artikel ini, jadi lihat dokumentasi penginstalan jika perlu . Anda dapat mempelajari lebih lanjut tentang cara menggunakan laporan Pengukuran standar di dokumentasi terkait .
Cara kerja Pengukuran
Sebelum membuat aset khusus, mari kita lihat Pengukuran sedikit. Setelah dipasang, ini menciptakan enam jenis sumber daya khusus, yang akan kami fokuskan pada hal berikut:
- ReportDataSources (RDS) - Mekanisme ini memungkinkan Anda menentukan data apa yang tersedia dan dapat digunakan di ReportQuery atau sumber daya Laporan kustom. RDS juga memungkinkan Anda mengekstrak data dari berbagai sumber. Di OpenShift, data ditarik dari Prometheus serta sumber daya ReportQuery (RQ) khusus.
- ReportQuery (rq) β SQL- , RDS. RQ- Report, RQ- , . RQ- RDS-, RQ- Metering view Presto ( Metering) .
- Report β , , ReportQuery. , , , Metering. Report .
Banyak RDS dan RQ tersedia di luar kotak. Karena kami sangat tertarik pada laporan tingkat node, mari kita lihat laporan tersebut yang akan membantu Anda menulis kueri kustom Anda. Jalankan perintah berikut saat berada dalam proyek "openshift-metering":
$ oc project openshift-metering
$ oc get reportdatasources | grep node
node-allocatable-cpu-cores
node-allocatable-memory-bytes
node-capacity-cpu-cores
node-capacity-memory-bytes
node-cpu-allocatable-raw
node-cpu-capacity-raw
node-memory-allocatable-raw
node-memory-capacity-raw
Di sini kami tertarik pada dua RDS: node-capacity-cpu-core dan node-capput-capacity - capacity-raw, karena kami ingin mendapatkan laporan tentang konsumsi CPU. Mari kita mulai dengan node-capacity-cpu-core dan jalankan perintah berikut untuk melihat bagaimana ia mengumpulkan data dari Prometheus:
$ oc get reportdatasource/node-capacity-cpu-cores -o yaml
<showing only relevant snippet below>
spec:
prometheusMetricsImporter:
query: |
kube_node_status_capacity_cpu_cores * on(node) group_left(provider_id) max(kube_node_info) by (node, provider_id)
Di sini kita melihat permintaan Prometheus yang mengambil data dari Prometheus dan menyimpannya di Presto. Mari jalankan permintaan yang sama di konsol metrik OpenShift dan lihat hasilnya. Kami memiliki cluster OpenShift dengan dua node pekerja (masing-masing dengan 16 inti) dan tiga node master (masing-masing dengan 8 inti). Kolom terakhir, Nilai, berisi jumlah inti yang ditetapkan ke node.

Jadi, data tersebut diterima dan disimpan di tabel presto. Sekarang mari kita lihat resource kustom reportquery (RQ):
$ oc project openshift-metering
$ oc get reportqueries | grep node-cpu
node-cpu-allocatable
node-cpu-allocatable-raw
node-cpu-capacity
node-cpu-capacity-raw
node-cpu-utilization
Di sini kami tertarik pada RQS berikut: node-cpu-capacity dan node-cpu-capacity-raw. Seperti namanya, metrik ini berisi data deskriptif (berapa lama node berjalan, berapa banyak prosesor yang dialokasikan, dll.) Dan data gabungan.
Dua RDS dan dua RQS yang kami minati saling berhubungan oleh rantai berikut:
node-cpu-capacity (rq) <b>uses</b> node-cpu-capacity-raw (rds) <b>uses</b> node-cpu-capacity-raw (rq) <b>uses</b> node-capacity-cpu-cores (rds)
Laporan yang Dapat Disesuaikan
Sekarang mari kita tulis versi RDS dan RQ kita sendiri. Kita perlu mengubah permintaan Prometheus sehingga itu menampilkan mode node (master / pekerja) dan label node yang sesuai, yang menunjukkan tim mana dari node ini. Modus operasi node terdapat dalam metrik kube_node_role Prometheus, lihat kolom peran:

Dan semua label yang ditetapkan ke node terdapat dalam metrik Prometheus kube_node_labels, di mana label tersebut dibentuk menggunakan label_ template. misalnya, jika sebuah node memiliki label node_lob, maka node tersebut akan muncul di metrik Prometheus sebagai label_node_lob.

Sekarang kita hanya perlu memodifikasi kueri asli menggunakan dua kueri Prometheus ini untuk mendapatkan data yang kita butuhkan, seperti ini:
((kube_node_status_capacity_cpu_cores * on(node) group_left(provider_id) max(kube_node_info) by (node, provider_id)) * on(node) group_left (role) kube_node_role{role='worker'}) * on(node) group_right(provider_id, role) kube_node_labels
Sekarang mari kita jalankan kueri ini di konsol metrik OpenShift dan pastikan bahwa kueri ini mengembalikan data menurut label (node_lob) dan menurut peran. Pada gambar di bawah, ini adalah, pertama, label_node_lob, serta perannya (ada di sana, hanya tidak muncul di tangkapan layar):

Jadi, kita perlu menulis empat sumber daya khusus (Anda dapat mengunduhnya dari daftar di bawah):
- rds-custom-node-capacity-cpu-cores.yaml - Menentukan permintaan Prometheus.
- rq-custom-node-cpu-capacity-raw.yaml - mengacu pada permintaan dari langkah 1 dan mengeluarkan data mentah.
- rds-custom-node-cpu-capacity-raw.yaml - mengacu pada RQ dari langkah 2 dan membuat objek tampilan di Presto.
- rq-custom-node-cpu-capacity-with-cpus-labels.yaml - mengacu pada RDS dari klausul 3 dan mengeluarkan data dengan mempertimbangkan tanggal mulai dan akhir laporan yang dimasukkan. Selain itu, peran dan kolom label diekstraksi ke file yang sama.
Setelah membuat empat file yaml ini, buka proyek pengukuran openshift dan jalankan perintah berikut:
$ oc project openshift-metering
$ oc create -f rds-custom-node-capacity-cpu-cores.yaml
$ oc create -f rq-custom-node-cpu-capacity-raw.yaml
$ oc create -f rds-custom-node-cpu-capacity-raw.yaml
$ oc create -f rq-custom-node-cpu-capacity-with-cpus-labels.yaml
Sekarang tinggal menulis objek Laporan kustom yang akan merujuk ke objek RQ dari langkah 4. Misalnya, Anda dapat melakukan ini seperti yang ditunjukkan di bawah ini sehingga laporan segera berjalan dan menampilkan data dari tanggal 15 hingga 30 September.
$ cat report_immediate.yaml
apiVersion: metering.openshift.io/v1
kind: Report
metadata:
name: custom-role-node-cpu-capacity-lables-immediate
namespace: openshift-metering
spec:
query: custom-role-node-cpu-capacity-labels
reportingStart: "2020-09-15T00:00:00Z"
reportingEnd: "2020-09-30T00:00:00Z"
runImmediately: true
$ oc create -f report-immediate.yaml
Setelah menjalankan laporan ini, file hasil (csv atau json) dapat diunduh dari URL berikut (cukup ganti DOMAIN_NAME dengan milik Anda sendiri):
metering-openshift-metering.DOMAIN_NAME / api / v1 / reports / get? Name = custom-role-node-cpu- capacity-hourly & namespace = openshift-metering & format = csv
Seperti yang Anda lihat di tangkapan layar file CSV, file ini berisi role dan node_lob. Untuk mendapatkan waktu aktif node dalam hitungan detik, bagi node_capacity_cpu_core_seconds dengan node_capacity_cpu_cores:

Kesimpulan
Operator Metering adalah hal yang keren untuk klaster OpenShift yang diterapkan di mana saja. Dengan menyediakan kerangka kerja yang dapat diperluas, ini memungkinkan Anda membuat sumber daya kustom untuk menghasilkan laporan yang Anda inginkan. Semua kode sumber yang digunakan dalam artikel ini dapat diunduh di sini .