Mengirim metrik Prometheus ke ruang kerja Analitik Log dengan wawasan Kontainer

Artikel ini menjelaskan cara mengirim metrik Prometheus dari kluster Kubernetes yang dipantau oleh wawasan Kontainer ke ruang kerja Analitik Log. Sebelum melakukan konfigurasi ini, Anda harus terlebih dahulu memastikan bahwa Anda mengikis metrik Prometheus dari kluster Anda menggunakan layanan terkelola Azure Monitor untuk Prometheus, yang merupakan metode yang direkomendasikan untuk memantau kluster Anda. Gunakan konfigurasi yang dijelaskan dalam artikel ini hanya jika Anda juga ingin mengirim data yang sama ini ke ruang kerja Analitik Log tempat Anda dapat menganalisisnya menggunakan kueri log dan pemberitahuan pencarian log.

Konfigurasi ini memerlukan konfigurasi addon pemantauan untuk agen Azure Monitor, yang sama dengan yang digunakan oleh wawasan Kontainer untuk mengirim data ke ruang kerja Analitik Log. Ini memerlukan pengeksposan titik akhir metrik Prometheus melalui eksportir atau pod Anda dan kemudian mengonfigurasi addon pemantauan untuk agen Azure Monitor yang digunakan oleh wawasan Kontainer seperti yang ditunjukkan diagram berikut.

Diagram of container monitoring architecture sending Prometheus metrics to Azure Monitor Logs.

Pengaturan pengikisan Prometheus (untuk metrik yang disimpan sebagai log)

Pengikisan aktif metrik dari Prometheus dilakukan dari salah satu dari dua perspektif di bawah ini dan metrik dikirim ke ruang kerja analitik log yang dikonfigurasi:

  • Seluruh kluster: Ditentukan di bagian ConfigMap [Prometheus data_collection_settings.cluster].
  • Seluruh simpul: Ditentukan di bagian ConfigMap [Prometheus_data_collection_settings.node].
Titik akhir Cakupan Contoh
Anotasi pod Seluruh kluster prometheus.io/scrape: "true"
prometheus.io/path: "/mymetrics"
prometheus.io/port: "8000"
prometheus.io/scheme: "http"
Layanan Kubernetes Seluruh kluster http://my-service-dns.my-namespace:9100/metrics
http://metrics-server.kube-system.svc.cluster.local/metrics
URL/titik akhir Persimpul dan/atau seluruh kluster http://myurl:9101/metrics

Saat URL ditentukan, Wawasan kontainer hanya mengekstraksi titik akhir. Saat layanan Kubernetes ditentukan, nama layanan diselesaikan dengan server DNS kluster untuk mendapatkan alamat IP. Kemudian layanan yang diselesaikan diekstraksi.

Cakupan Kunci Jenis data Nilai Deskripsi
Seluruh kluster Tentukan salah satu dari tiga metode berikut untuk mengekstraksi titik akhir untuk metrik.
urls String Array yang dipisahkan koma Titik akhir HTTP (alamat IP atau jalur URL valid yang ditentukan). Sebagai contoh: urls=[$NODE_IP/metrics]. ($NODE_IP adalah parameter wawasan Kontainer yang spesifik dan dapat digunakan alih-alih alamat IP node. Harus huruf besar semua.)
kubernetes_services String Array yang dipisahkan koma Array layanan Kubernetes untuk mengekstraksi metrik dari kube-state-metrics. Nama domain yang sepenuhnya memenuhi syarat harus digunakan di sini. Misalnya,kubernetes_services = ["http://metrics-server.kube-system.svc.cluster.local/metrics",http://my-service-dns.my-namespace.svc.cluster.local:9100/metrics]
monitor_kubernetes_pods Boolean BENAR atau SALAH Ketika diatur ke true dalam pengaturan di seluruh kluster, agen Wawasan Kontainer mengekstrak pod Kubernetes di seluruh kluster untuk anotasi Prometheus berikut:
prometheus.io/scrape:
prometheus.io/scheme:
prometheus.io/path:
prometheus.io/port:
prometheus.io/scrape Boolean BENAR atau SALAH Memungkinkan ekstrasi pod dan monitor_kubernetes_pods harus diatur ke true.
prometheus.io/scheme String http Secara default mengekstraksi melalui HTTP.
prometheus.io/path String Array yang dipisahkan koma Jalur sumber daya HTTP tempat mengambil metrik. Jika jalur metrik bukan /metrics, tentukan dengan anotasi ini.
prometheus.io/port String 9102 Tentukan port tempat ekstraksi. Jika port tidak diatur, port defaultnya adalah 9102.
monitor_kubernetes_pods_namespaces String Array yang dipisahkan koma Daftar namespace layanan yang diizinkan untuk mengekstraksi metrik dari pod Kubernetes.
Misalnya: monitor_kubernetes_pods_namespaces = ["default1", "default2", "default3"]
Seluruh simpul urls String Array yang dipisahkan koma Titik akhir HTTP (alamat IP atau jalur URL valid yang ditentukan). Sebagai contoh: urls=[$NODE_IP/metrics]. ($NODE_IP adalah parameter wawasan Kontainer yang spesifik dan dapat digunakan alih-alih alamat IP node. Harus huruf besar semua.)
Seluruh node atau seluruh kluster interval String 60s Default interval pengumpulan adalah satu menit (60 detik). Anda dapat memodifikasi koleksi untuk [prometheus_data_collection_settings.node] dan/atau [prometheus_data_collection_settings.cluster] ke unit waktu seperti d, m, j.
Seluruh node atau seluruh kluster fieldpass
fielddrop
String Array yang dipisahkan koma Anda dapat menentukan metrik tertentu yang akan dikumpulkan atau tidak dari titik akhir dengan mengatur daftar izinkan (fieldpass) dan tidak mengizinkan (fielddrop). Anda harus mengatur daftar yang diizinkan terlebih dahulu.

Konfigurasikan Konfigurasi Peta untuk menentukan konfigurasi scrape Prometheus (untuk metrik yang disimpan sebagai log)

Lakukan langkah-langkah berikut untuk mengonfigurasi file konfigurasi ConfigMap untuk kluster Anda. ConfigMaps adalah daftar global dan hanya ada satu ConfigMap yang diterapkan ke agen. Anda tidak dapat memiliki ConfigMaps lain yang mengesampingkan koleksi.

  1. Unduh file ConfigMap YAML templat dan simpan sebagai container-azm-ms-agentconfig.yaml. Jika Anda telah menyebarkan ConfigMap ke kluster dan ingin memperbaruinya dengan konfigurasi yang lebih baru, Anda dapat mengedit file ConfigMap yang sebelumnya telah digunakan.

  2. Edit file YAML ConfigMap dengan penyesuaian Anda untuk ekstraksi metrik Prometheus.

    Untuk mengumpulkan layanan Kubernetes seluruh kluster, konfigurasikan file ConfigMap menggunakan contoh berikut:

    prometheus-data-collection-settings: |- ​
    # Custom Prometheus metrics data collection settings
    [prometheus_data_collection_settings.cluster] ​
    interval = "1m"  ## Valid time units are s, m, h.
    fieldpass = ["metric_to_pass1", "metric_to_pass12"] ## specify metrics to pass through ​
    fielddrop = ["metric_to_drop"] ## specify metrics to drop from collecting
    kubernetes_services = ["http://my-service-dns.my-namespace:9102/metrics"]
    
  3. Jalankan perintah kubectl berikut: kubectl apply -f <configmap_yaml_file.yaml>.

    Contoh: kubectl apply -f container-azm-ms-agentconfig.yaml.

Perubahan konfigurasi dapat memakan waktu beberapa menit untuk selesai sebelum diterapkan. Semua pod ama-logs dalam kluster akan dimulai ulang. Setelah mulai ulang selesai, pesan yang mirip dengan berikut ini akan ditampilkan dan menyertakan hasil configmap "container-azm-ms-agentconfig" created.

Memverifikasi konfigurasi

Untuk memverifikasi konfigurasi berhasil diterapkan ke kluster, gunakan perintah berikut untuk meninjau log dari pod agen: kubectl logs ama-logs-fdf58 -n=kube-system.

Jika ada kesalahan konfigurasi dari pod Agen Azure Monitor, output menunjukkan kesalahan yang mirip dengan contoh berikut:

***************Start Config Processing******************** 
config::unsupported/missing config schema version - 'v21' , using defaults

Kesalahan terkait penerapan perubahan konfigurasi juga tersedia untuk ditinjau. Opsi berikut tersedia untuk melakukan pemecahan masalah tambahan perubahan konfigurasi dan ekstraksi metrik Prometheus:

  • Dari log pod agen, gunakan perintah kubectl logs yang sama.

  • Dari Data Langsung. Log Data Langsung menunjukkan kesalahan yang mirip dengan contoh berikut:

    2019-07-08T18:55:00Z E! [inputs.prometheus]: Error in plugin: error making HTTP request to http://invalidurl:1010/metrics: Get http://invalidurl:1010/metrics: dial tcp: lookup invalidurl on 10.0.0.10:53: no such host
    
  • Dari tabel KubeMonAgentEvents di ruang kerja Analitik Log Anda. Data dikirim setiap jam dengan tingkat keparahan Peringatan untuk kesalahan ekstraksi dan tingkat keparahan Kesalahan untuk kesalahan konfigurasi. Jika tidak ada kesalahan, entri dalam tabel memiliki data dengan Info tingkat keparahan, yang melaporkan tidak ada kesalahan. Properti Tag berisi informasi selengkapnya tentang pod dan ID kontainer tempat kesalahan terjadi dan juga kejadian pertama, kejadian terakhir, dan jumlahnya dalam satu jam terakhir.

  • Untuk Azure Red Hat OpenShift v3.x dan v4.x, periksa log Agen Azure Monitor dengan mencari tabel ContainerLog untuk memverifikasi apakah pengumpulan log openshift-azure-logging diaktifkan.

Kesalahan mencegah Agen Azure Monitor mengurai file, menyebabkannya dimulai ulang dan menggunakan konfigurasi default. Setelah Anda memperbaiki kesalahan di ConfigMap pada kluster selain Azure Red Hat OpenShift v3.x, simpan file YAML dan terapkan ConfigMaps yang diperbarui dengan menjalankan perintah kubectl apply -f <configmap_yaml_file.yaml.

Untuk Azure Red Hat OpenShift v3.x, edit dan simpan ConfigMaps yang diperbarui dengan menjalankan perintah oc edit configmaps container-azm-ms-agentconfig -n openshift-azure-logging.

Mengkueri data metrik Prometheus

Untuk melihat metrik Prometheus yang diekstraksi oleh Azure Monitor dan kesalahan konfigurasi/scraping apa pun yang dilaporkan oleh agen, tinjau Data metrik Query Prometheus.

Menampilkan metrik Prometheus di Grafana

Wawasan kontainer mendukung tampilan metrik yang disimpan di ruang kerja Log Analytics Anda di dasbor Grafana. Kami telah menyediakan templat yang dapat Anda unduh dari repositori dasbor Grafana. Gunakan templat tersebut untuk memulai dan sebagai referensi untuk membantu Anda mempelajari cara mengkueri data lainnya dari kluster yang Anda pantau guna memvisualisasikannya di dasbor Grafana kustom.

Langkah berikutnya