Prometheus adalah alat pemantauan open-source untuk aplikasi cloud-native. Topik ini menjelaskan cara menerapkan Prometheus pada kluster ACK.
Latar Belakang
Topik ini membahas cara memantau komponen sistem dan entitas sumber daya dalam kluster Kubernetes. Target pemantauan terbagi menjadi dua kategori:
-
Pemantauan sumber daya: Melacak penggunaan sumber daya node, kluster, dan Pod.
-
Pemantauan aplikasi: Melacak metrik internal aplikasi seperti jumlah pengguna real-time. Ekspos port untuk mengaktifkan pemantauan dan peringatan tingkat aplikasi.
Target pemantauan meliputi:
-
Komponen sistem: Komponen bawaan Kubernetes seperti API Server, cloud-controller-manager, dan etcd. Konfigurasikan pemantauan di file konfigurasi masing-masing.
-
Entitas sumber daya statis: Sumber daya seperti status node dan event kernel. Tentukan di file konfigurasi untuk mengaktifkan pemantauan.
-
Entitas sumber daya dinamis: Objek workload Kubernetes seperti Deployment, DaemonSet, dan Pod. Terapkan Prometheus untuk memantaunya.
-
Aplikasi kustom: Ekspos port dan gunakan Prometheus untuk mengumpulkan metrik kustom dari aplikasi Anda.
Langkah 1: Terapkan Prometheus open source
-
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
-
Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik .
-
Pada halaman Helm, klik Deploy. Di bagian Chart, cari dan pilih ack-prometheus-operator, pertahankan pengaturan default, lalu klik Next.
-
Komponen diinstal di namespace monitoring secara default, sesuai nama komponen.
-
Sesuaikan nama aplikasi dan namespace sesuai kebutuhan.
-
-
Pada halaman Parameters, pilih versi Chart 12.0.0, atur parameter yang diperlukan, lalu klik OK.
Versi 12.0.0 mendukung konfigurasi peringatan dengan fitur bawaan.
Parameter opsional:
-
Konfigurasi peringatan: Mendukung peringatan DingTalk dan email.
-
Mount ConfigMap kustom ke Prometheus: Mengaktifkan konfigurasi kustom.
-
Memasang file dasbor ke Grafana: Menambahkan dasbor kustom.
Setelah instalasi, periksa status komponen di daftar chart Helm pada halaman Helm.
-
Langkah 2: Lihat tugas koleksi Prometheus
-
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
-
Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik .
-
Pada halaman Services, pilih namespace monitoring tempat ack-prometheus-operator diterapkan. Di kolom Actions untuk ack-prometheus-operator-prometheus, klik Update.
-
Pada kotak dialog, atur Type ke LoadBalancer. Pilih Create Resource, atur Access Method ke Public Access, dan atur Billing Method ke Pay-as-you-go (Pay-by-CU). Klik OK.
Lihat Ikhtisar Penagihan CLB.
-
Setelah pembaruan, salin alamat IP eksternal. Buka UI Prometheus di
<external_IP_address>:9090, misalnya,47.XX.XX.12:9090. -
Pada UI Prometheus, navigasikan ke untuk melihat semua tugas pengumpulan data.
Jika semua tugas menampilkan UP, pengumpulan data berjalan dengan benar.
-
Di bilah menu, klik Alerts untuk melihat aturan peringatan saat ini.
Pada halaman Alerts, Anda dapat melihat statistik status peringatan: Inactive (89), Pending (3), dan Firing (4). Peringatan yang sedang dipicu saat ini mencakup TargetDown (2 aktif) dan Watchdog (1 aktif).
Langkah 3: Lihat data agregat di Grafana
-
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
-
Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik .
-
Pada halaman Services, pilih namespace tempat ack-prometheus-operator diterapkan (default: monitoring). Klik Update di kolom Actions untuk Service bernama ack-prometheus-operator-grafana.
-
Pada kotak dialog, atur Type ke LoadBalancer. Pilih Create Resource, atur Access Method ke Public Access, dan atur Billing Method ke Pay-as-you-go (Pay-by-CU). Klik OK.
Lihat Ikhtisar Penagihan CLB.
-
Setelah pembaruan, salin alamat IP eksternal. Buka dasbor Grafana di
<external_IP_address>(port default: 80), misalnya,47.XX.XX.12.
Konfigurasi peringatan
Komponen ack-prometheus-operator mendukung peringatan DingTalk dan email.
-
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
-
Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik .
-
Klik Create, temukan ack-prometheus-operator, lalu lanjutkan ke langkah Next. Pada halaman Parameters, pilih versi Chart dan konfigurasikan parameter seperti dijelaskan di bawah.
Jika ack-prometheus-operator sudah terinstal, klik namanya di daftar chart Helm, lalu klik Parameters untuk memperbarui konfigurasi.
Konfigurasi peringatan DingTalk
-
Dalam file konfigurasi, temukan field
dingtalkdan aturenabledketrue. -
Pada field
token, masukkan URL webhook DingTalk.Lihat Gunakan Chatbot DingTalk untuk Pemantauan dan Peringatan Kubernetes untuk URL webhook.
-
Dalam field konfigurasi
alertmanagerconfig, temukan konfigurasireceiverdan masukkan nama peringatan DingTalk yang ditentukan direceivers. Nama default adalahwebhook.
Konfigurasi peringatan email
-
Masukkan detail email di bagian yang disorot.
-
Dalam field
alertmanagerconfig, temukanreceiverdan masukkan nama peringatan email yang ditentukan direceivers. Nama default adalahmail.
config:
global:
resolve_timeout: 5m
route:
group_by: ['job']
group_wait: 1m
group_interval: 1m
repeat_interval: 2m
receiver: "null"
routes:
- match:
alertname: Watchdog
receiver: "null"
receivers:
- name: "null"
#- name: webhook
# webhook_configs:
# - url: http://ack-prometheus-operator-alertmanager.monitoring:8060/dingtalk/ops_dingding/send
# send_resolved: true
#- name: 'mail'
# email_configs:
# - to: 'xxxxxxx@qq.com' #receive address
# smarthost: 'smtp.163.com:465' #stmp server address
# from: 'xxxxx@163.com' #sender address
# auth_username: 'xxxxx@163.com' #email-username
# auth_password: 'xxxxxxxxx' #email-password(Authorization code)
# require_tls: false #tls switch
# send_resolved: true
Templat penerima peringatan
Sesuaikan templat peringatan di bagian templateFiles pada konfigurasi alertmanager.
##
templateFiles: {}
#
# An example template:
# template_1.tmpl: |-
# {{ define "cluster" }}{{ .ExternalURL | reReplaceAll ".*alertmanager\.(.*)" "$1" }}{{ end }}
#
# {{ define "slack.myorg.text" }}
# {{- $root := . -}}
# {{ range .Alerts }}
# *Alert:* {{ .Annotations.summary }} - `{{ .Labels.severity }}`
# *Cluster:* {{ template "cluster" $root }}
# *Description:* {{ .Annotations.description }}
# *Graph:* <{{ .GeneratorURL }}|:chart_with_upwards_trend:>
# *Runbook:* <{{ .Annotations.runbook }}|:spiral_note_pad:>
# *Details:*
# {{ range .Labels.SortedPairs }} • *{{ .Name }}:* `{{ .Value }}`
# {{ end }}
Mount ConfigMap kustom ke Prometheus
Gunakan ConfigMap bernama special-config untuk mount file konfigurasi dan tentukan sebagai parameter --config.file saat startup Pod.
-
Buat ConfigMap.
-
Mount ConfigMap.
Pada halaman Parameters, tambahkan berikut ke field
configmapsuntuk mount ConfigMap ke/etc/prometheus/configmaps/di Pod Prometheus.## ConfigMaps is a list of ConfigMaps in the same namespace as the Alertmanager object, which shall be mounted ## into the Alertmanager Pods. ## The ConfigMaps are mounted into /etc/alertmanager/configmaps/. ## configMaps: [special-config]Contoh konfigurasi
prometheusconfigmaps:## ConfigMaps is a list of ConfigMaps in the same namespace as the Prometheus ## The ConfigMaps are mounted into /etc/prometheus/configmaps/. ## configMaps: - "special-config" - "detail-config"
Konfigurasi Grafana
Mount file dashboard ke Grafana
Untuk mount ConfigMap dashboard ke Pod Grafana, gunakan field extraConfigmapMounts di wizard Parameters.
extraConfigmapMounts: []
# - name: certs-configmap
# mountPath: /etc/grafana/ssl/
# configMap: certs-configmap
# readOnly: true
Pastikan bahwa:
-
Dashboard ada sebagai ConfigMap di kluster, dan label-nya sesuai format ConfigMap lainnya.
-
Field
extraConfigmapMountsdalam konfigurasi Grafana mencakup ConfigMap dashboard dan informasi mount-nya.-
mountPath: Atur ke/tmp/dashboards/. -
ConfigMap: Nama ConfigMap kustom Anda. -
name: Nama file JSON dashboard.
-
Aktifkan persistensi dashboard
Ekspor dashboard sebagai file JSON untuk backup. Lihat Ekspor Grafana.
-
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
-
Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik .
-
Temukan ack-prometheus-operator dan klik Update. Di field
grafana, konfigurasikan opsipersistenceseperti di bawah.## persistence: #Persistent switch enabled: false #storageClass Name,there are four types of storageclasses: alicloud-disk-available,alicloud-disk-efficiency,alicloud-disk-essd,alicloud-disk-ssd storageClassName: alicloud-disk-efficiency accessModes: - ReadWriteOnce size: 30Gi # annotations: {} # subPath: "" #existingClaim:
Operasi terkait
Hapus instalan Prometheus sumber terbuka
Untuk mencegah sisa sumber daya, ikuti prosedur sesuai versi chart Helm Anda. Bersihkan secara manual rilis Helm, namespace, CRD, dan Service kubelet.
Service kubelet tidak dihapus otomatis saat uninstal — masalah umum di komunitas (#1523). Hapus secara manual seperti dijelaskan di bawah.
Chart v12.0.0
Konsol
-
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
-
Pada halaman Clusters, klik nama kluster Anda dan lakukan operasi berikut dari panel navigasi kiri.
-
Uninstal rilis Helm: Pilih . Di daftar rilis Helm, temukan entri ack-prometheus-operator, klik Delete di kolom Actions, lalu selesaikan penghapusan. Bersihkan catatan rilis.
-
Hapus namespace: Klik Namespaces and Quotas. Di daftar namespace, temukan dan pilih monitoring, lalu hapus.
-
Hapus CustomResourceDefinitions (CRDs): Navigasi ke dan klik tab CRDs. Hapus semua resource CRD di grup API
monitoring.coreos.com:-
AlertmanagerConfig
-
Alertmanager
-
PodMonitor
-
Probe
-
Prometheus
-
PrometheusRule
-
ServiceMonitor
-
ThanosRuler
-
-
Hapus Service kubelet: Pilih Network > Services. Temukan dan hapus ack-prometheus-operator-kubelet di namespace kube-system.
-
Kubectl
-
Uninstal rilis Helm
helm uninstall ack-prometheus-operator -n monitoring -
Hapus namespace
kubectl delete namespace monitoring -
Hapus CRDs
kubectl delete crd alertmanagerconfigs.monitoring.coreos.com kubectl delete crd alertmanagers.monitoring.coreos.com kubectl delete crd podmonitors.monitoring.coreos.com kubectl delete crd probes.monitoring.coreos.com kubectl delete crd prometheuses.monitoring.coreos.com kubectl delete crd prometheusrules.monitoring.coreos.com kubectl delete crd servicemonitors.monitoring.coreos.com kubectl delete crd thanosrulers.monitoring.coreos.com -
Hapus Service kubelet
kubectl delete service ack-prometheus-operator-kubelet -n kube-system
Chart v65.1.1
Konsol
-
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
-
Pada halaman Clusters, klik nama kluster Anda dan lakukan operasi berikut dari panel navigasi kiri.
-
Uninstal rilis Helm: Pilih . Di daftar rilis Helm, temukan entri ack-prometheus-operator, klik Delete di kolom Actions, lalu selesaikan penghapusan. Bersihkan catatan rilis.
-
Hapus namespace: Klik Namespaces and Quotas. Di daftar namespace, temukan dan pilih monitoring, lalu hapus.
-
Hapus CustomResourceDefinitions (CRDs): Navigasi ke dan klik tab CRDs. Hapus semua resource CRD di grup API
monitoring.coreos.com:-
AlertmanagerConfig
-
Alertmanager
-
PodMonitor
-
Probe
-
PrometheusAgent
-
Prometheus
-
PrometheusRule
-
ScrapeConfig
-
ServiceMonitor
-
ThanosRuler
-
-
Hapus Service kubelet: Pilih Network > Services. Temukan dan hapus ack-prometheus-operator-kubelet di namespace kube-system.
-
Kubectl
-
Uninstal rilis Helm
helm uninstall ack-prometheus-operator -n monitoring -
Hapus namespace
kubectl delete namespace monitoring -
Hapus CRDs
kubectl delete crd alertmanagerconfigs.monitoring.coreos.com kubectl delete crd alertmanagers.monitoring.coreos.com kubectl delete crd podmonitors.monitoring.coreos.com kubectl delete crd probes.monitoring.coreos.com kubectl delete crd prometheusagents.monitoring.coreos.com kubectl delete crd prometheuses.monitoring.coreos.com kubectl delete crd prometheusrules.monitoring.coreos.com kubectl delete crd scrapeconfigs.monitoring.coreos.com kubectl delete crd servicemonitors.monitoring.coreos.com kubectl delete crd thanosrulers.monitoring.coreos.com -
Hapus Service kubelet
kubectl delete service ack-prometheus-operator-kubelet -n kube-system
Konfigurasi penonaktifan peringatan
Aturan penonaktifan menekan notifikasi peringatan yang sesuai hingga periode penonaktifan berakhir atau aturan tersebut dihapus.
-
Ekspos Alertmanager di port lokal 9093:
kubectl --address 0.0.0.0 port-forward svc/alertmanager-operated 9093 -n monitoring -
Asosiasikan alamat IP elastis (EIP) dengan instans ECS Anda, lalu akses Alertmanager di
<EIP>:9093.Pastikan security group mengizinkan lalu lintas dari IP lokal Anda pada port 9093. Lihat Tambahkan Aturan Security Group.
-
Klik Silence untuk mengonfigurasi penonaktifan peringatan.
FAQ
Tidak menerima peringatan setelah konfigurasi DingTalk
-
Dapatkan URL webhook untuk chatbot DingTalk Anda. Lihat Pemantauan Event.
-
Temukan field dingtalk, atur enabled ke true, lalu masukkan URL webhook DingTalk di field Token. Lihat Konfigurasi peringatan DingTalk di Konfigurasi peringatan.
Error saat menerapkan prometheus-operator
Pesan error berikut dilaporkan:
Can't install release with errors: rpc error: code = Unknown desc = object is being deleted: customresourcedefinitions.apiextensions.k8s.io "xxxxxxxx.monitoring.coreos.com" already exists
Error ini terjadi karena CRD dari penerapan sebelumnya tidak dibersihkan. Hapus CRD tersebut, lalu terapkan ulang komponen:
kubectl delete crd prometheuses.monitoring.coreos.com
kubectl delete crd prometheusrules.monitoring.coreos.com
kubectl delete crd servicemonitors.monitoring.coreos.com
kubectl delete crd alertmanagers.monitoring.coreos.com
Peringatan email tidak berfungsi
Peringatan email dapat gagal jika Anda memasukkan kata sandi login untuk smtp_auth_password alih-alih kode otorisasi. Pastikan alamat server SMTP mencakup nomor port.
Terjadi error saat Anda mengklik YAML Update: Kluster saat ini sementara tidak tersedia. Silakan coba lagi nanti.
Hal ini terjadi ketika file konfigurasi Tiller terlalu besar sehingga membuat kluster tidak dapat diakses. Kurangi ukuran file dengan menghapus komentar dan mount sebagai ConfigMap. Prometheus-operator hanya mendukung mounting ConfigMap untuk Pod Prometheus dan Alertmanager. Lihat Mount ConfigMap kustom ke Prometheus.
Aktifkan fitur setelah penerapan
Untuk mengaktifkan fitur setelah menerapkan prometheus-operator, buka halaman detail kluster, lalu pilih . Temukan ack-prometheus-operator, lalu klik Update di kolom Actions. Pilih fitur yang akan diaktifkan, konfigurasikan, lalu klik OK.
Pilih antara TSDB dan disk Alibaba Cloud
TSDB tersedia di wilayah yang lebih sedikit dibandingkan disk Alibaba Cloud. Kebijakan retensi data:
## How long to retain metrics
##
retention: 10d
Masalah tampilan dasbor Grafana
Di halaman detail kluster, pilih . Temukan ack-prometheus-operator, lalu klik Update di kolom Actions. Verifikasi bahwa clusterVersion sesuai dengan versi kluster Anda. Untuk kluster sebelum v1.16, masukkan 1.14.8-aliyun.1. Untuk v1.16 atau lebih baru, masukkan 1.16.6-aliyun.1.
Instalasi ulang gagal setelah menghapus namespace
Menghapus hanya namespace dapat meninggalkan konfigurasi sisa. Bersihkan resource berikut:
-
Hapus izin RBAC.
-
Hapus ClusterRoles.
kubectl delete ClusterRole ack-prometheus-operator-grafana-clusterrole kubectl delete ClusterRole ack-prometheus-operator-kube-state-metrics kubectl delete ClusterRole psp-ack-prometheus-operator-kube-state-metrics kubectl delete ClusterRole psp-ack-prometheus-operator-prometheus-node-exporter kubectl delete ClusterRole ack-prometheus-operator-operator kubectl delete ClusterRole ack-prometheus-operator-operator-psp kubectl delete ClusterRole ack-prometheus-operator-prometheus kubectl delete ClusterRole ack-prometheus-operator-prometheus-psp -
Hapus ClusterRoleBindings.
kubectl delete ClusterRoleBinding ack-prometheus-operator-grafana-clusterrolebinding kubectl delete ClusterRoleBinding ack-prometheus-operator-kube-state-metrics kubectl delete ClusterRoleBinding psp-ack-prometheus-operator-kube-state-metrics kubectl delete ClusterRoleBinding psp-ack-prometheus-operator-prometheus-node-exporter kubectl delete ClusterRoleBinding ack-prometheus-operator-operator kubectl delete ClusterRoleBinding ack-prometheus-operator-operator-psp kubectl delete ClusterRoleBinding ack-prometheus-operator-prometheus kubectl delete ClusterRoleBinding ack-prometheus-operator-prometheus-psp
-
-
Hapus CRDs.
kubectl delete crd alertmanagerconfigs.monitoring.coreos.com kubectl delete crd alertmanagers.monitoring.coreos.com kubectl delete crd podmonitors.monitoring.coreos.com kubectl delete crd probes.monitoring.coreos.com kubectl delete crd prometheuses.monitoring.coreos.com kubectl delete crd prometheusrules.monitoring.coreos.com kubectl delete crd servicemonitors.monitoring.coreos.com kubectl delete crd thanosrulers.monitoring.coreos.com