Melakukan scraping atas sumber Prometheus tambahan dan mengimpor metrik-metrik tersebut - Amazon CloudWatch

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Melakukan scraping atas sumber Prometheus tambahan dan mengimpor metrik-metrik tersebut

CloudWatch Agen dengan pemantauan Prometheus membutuhkan dua konfigurasi untuk mengikis metrik Prometheus. Salah satunya adalah konfigurasi standar Prometheus sebagaimana yang didokumentasikan dalam <scrape_config> dalam dokumentasi Prometheus. Yang lainnya adalah untuk konfigurasi CloudWatch agen.

Untuk klaster Amazon EKS, konfigurasi ditentukan dalam prometheus-eks.yaml (untuk tipe peluncuran EC2) atau prometheus-eks-fargate.yaml (untuk tipe peluncuran Fargate) sebagai dua peta konfigurasi:

  • Bagian name: prometheus-config berisi pengaturan untuk scraping Prometheus.

  • name: prometheus-cwagentconfigBagian ini berisi konfigurasi untuk CloudWatch agen. Anda dapat menggunakan bagian ini untuk mengonfigurasi bagaimana metrik Prometheus dikumpulkan oleh. CloudWatch Misalnya, Anda menentukan metrik mana yang akan diimpor CloudWatch, dan menentukan dimensinya.

Untuk klaster Kubernet yang berjalan di instans Amazon EC2, konfigurasinya ditentukan di file YAML prometheus-k8s.yaml sebagai dua peta konfigurasi:

  • Bagian name: prometheus-config berisi pengaturan untuk scraping Prometheus.

  • name: prometheus-cwagentconfigBagian ini berisi konfigurasi untuk CloudWatch agen.

Untuk mengikis sumber metrik Prometheus tambahan dan mengimpor metrik tersebut, Anda memodifikasi CloudWatch konfigurasi scrape Prometheus dan konfigurasi agen, lalu menerapkan kembali agen dengan konfigurasi yang diperbarui. CloudWatch

Persyaratan grup keamanan VPC

Aturan masuknya kelompok keamanan untuk beban kerja Prometheus harus membuka port CloudWatch Prometheus ke agen untuk mengikis metrik Prometheus oleh IP pribadi.

Aturan keluar dari grup keamanan untuk CloudWatch agen harus memungkinkan agen untuk terhubung ke port CloudWatch beban kerja Prometheus dengan IP pribadi.

Konfigurasi scraping Prometheus

CloudWatch <scrape_config>Agen mendukung konfigurasi scrape Prometheus standar seperti yang didokumentasikan dalam dokumentasi Prometheus.https://prometheus.io/docs/prometheus/latest/configuration/configuration/#scrape_config Anda dapat mengedit bagian ini untuk memperbarui konfigurasi yang sudah ada dalam file ini, dan menambahkan target-target scraping Prometheus tambahan. Secara bawaan, file konfigurasi sampel berisi baris-baris konfigurasi global berikut ini:

global: scrape_interval: 1m scrape_timeout: 10s
  • scrape_interval— Mendefinisikan seberapa sering scraping akan dilakukan ke target.

  • scrape_timeout— Mendefinisikan berapa lama waktu tunggu sebelum permintaan scraping habis.

Anda juga dapat menentukan nilai-nilai yang berbeda untuk pengaturan ini di level pekerjaan, untuk mengganti konfigurasi global.

Pekerjaan scraping Prometheus

File CloudWatch YAMM agen sudah memiliki beberapa pekerjaan pengikisan default yang dikonfigurasi. Sebagai contoh, di prometheus-eks.yaml, pekerjaan scraping bawaan dikonfigurasi di baris job_name pada bagian scrape_configs. Dalam file ini, bagian kubernetes-pod-jmx bawaan berikut melakukan scraping terhadap metrik-metrik pengekspor JMX.

- job_name: 'kubernetes-pod-jmx' sample_limit: 10000 metrics_path: /metrics kubernetes_sd_configs: - role: pod relabel_configs: - source_labels: [__address__] action: keep regex: '.*:9404$' - action: labelmap regex: __meta_kubernetes_pod_label_(.+) - action: replace source_labels: - __meta_kubernetes_namespace target_label: Namespace - source_labels: [__meta_kubernetes_pod_name] action: replace target_label: pod_name - action: replace source_labels: - __meta_kubernetes_pod_container_name target_label: container_name - action: replace source_labels: - __meta_kubernetes_pod_controller_name target_label: pod_controller_name - action: replace source_labels: - __meta_kubernetes_pod_controller_kind target_label: pod_controller_kind - action: replace source_labels: - __meta_kubernetes_pod_phase target_label: pod_phase

Masing-masing target default ini dikikis, dan metrik dikirim ke CloudWatch peristiwa log menggunakan format metrik yang disematkan. Untuk informasi selengkapnya, lihat Menyematkan metrik dalam log.

Peristiwa log dari kluster Amazon EKS dan Kubernetes disimpan di grup log /aws/containerinsights/ cluster_name /prometheus di Logs. CloudWatch Peristiwa log dari klaster Amazon ECS disimpan di grup log /aws/ecs/containerinsights/cluster_name/prometheus.

Setiap pekerjaan scraping dimuat dalam log stream yang berbeda di grup log ini. Sebagai contoh, pekerjaan scraping Prometheus kubernetes-pod-appmesh-envoy ditetapkan untuk App Mesh. Semua metrik App Mesh Prometheus dari kluster Amazon EKS dan Kubernetes dikirim ke aliran log bernama /aws/containerinsights/ cluster_name >prometheus//. kubernetes-pod-appmesh-envoy

Untuk menambahkan sebuah target scraping baru, Anda harus menambahkan sebuah bagian job_name baru pada bagian scrape_configs file YAML, dan kemudian mulai ulang agen tersebut. Untuk contoh proses ini, silakan lihat Tutorial untuk menambahkan sebuah target scraping Prometheus baru: metrik Server API Prometheus.

CloudWatch konfigurasi agen untuk Prometheus

File konfigurasi CloudWatch agen memiliki prometheus bagian di bawah metrics_collected untuk konfigurasi pengikisan Prometheus. File konfigurasi tersebut mencakup opsi-opsi konfigurasi berikut:

  • cluster_name— menentukan nama klaster yang akan ditambahkan sebagai label pada peristiwa log. Bidang ini bersifat opsional. Jika Anda menghilangkannya, maka agen tersebut akan dapat mendeteksi nama klaster Amazon EKS dan Kubernetes.

  • log_group_name— menentukan nama grup log untuk metrik-metrik Prometheus yang di-scraping. Bidang ini bersifat opsional. Jika Anda menghilangkannya, CloudWatch gunakan /aws/containerinsights/ cluster_name /prometheus untuk log dari Amazon EKS dan Kubernetes cluster.

  • prometheus_config_path— menentukan jalur file konfigurasi scraping Prometheus. Jika nilai bidang ini dimulai dengan env:, maka konten file konfigurasi Prometheus scraping akan diambil dari variabel lingkungan kontainer. Jangan ubah bidang ini.

  • ecs_service_discovery— adalah bagian untuk menentukan konfigurasi untuk penemuan layanan Amazon ECS Prometheus. Untuk informasi selengkapnya, lihat Panduan mendetail untuk penemuan otomatis di klaster-klaster Amazon ECS.

    Bagian ecs_service_discovery dapat berisi bidang-bidang berikut:

    • sd_frequency adalah frekuensi untuk menemukan pengekspor Prometheus. Tentukan sebuah angka dan sebuah akhiran unit. Sebagai contoh, 1m satu kali per menit atau 30s satu kali per 30 detik. Akhiran unit yang valid adalah ns, us, ms, s, m, dan h.

      Bidang ini bersifat opsional. Bawaannya adalah 60 detik (1 menit).

    • sd_target_cluster adalah nama klaster Amazon ECS target untuk penemuan otomatis. Bidang ini bersifat opsional. Defaultnya adalah nama cluster Amazon ECS tempat CloudWatch agen diinstal.

    • sd_cluster_region adalah Wilayah klaster Amazon ECS target. Bidang ini bersifat opsional. Defaultnya adalah Wilayah cluster Amazon ECS tempat CloudWatch agen diinstal.

    • sd_result_file adalah jalur file YAML untuk hasil-hasil target Prometheus. Konfigurasi scraping Prometheus akan merujuk pada file ini.

    • docker_label adalah sebuah bagian opsional yang dapat Anda gunakan untuk menentukan konfigurasi untuk penemuan layanan berbasis label docker. Jika Anda menghilangkan bagian ini, maka penemuan berbasis label docker tidak akan digunakan. Bagian ini dapat berisi bidang-bidang berikut:

      • sd_port_label adalah nama label docker dari kontainer yang menentukan port kontainer untuk metrik-metrik Prometheus. Nilai bawaannya adalah ECS_PROMETHEUS_EXPORTER_PORT. Jika wadah tidak memiliki label docker ini, CloudWatch agen akan melewatkannya.

      • sd_metrics_path_label adalah nama label docker dari kontainer yang menentukan jalur metrik-metrik Prometheus. Nilai bawaannya adalah ECS_PROMETHEUS_METRICS_PATH. Jika kontainer tidak memiliki label docker ini, maka agen akan mengasumsikan jalur default /metrics.

      • sd_job_name_label adalah nama label docker dari kontainer yang menentukan nama pekerjaan scraping Prometheus. Nilai bawaannya adalah job. Jika wadah tidak memiliki label docker ini, CloudWatch agen menggunakan nama pekerjaan dalam konfigurasi scrape Prometheus.

    • task_definition_list adalah sebuah bagian opsional yang dapat Anda gunakan untuk menentukan konfigurasi penemuan layanan berbasis penetapan tugas. Jika Anda menghilangkan bagian ini, maka penemuan berbasis penetapan tugas tidak akan digunakan. Bagian ini dapat berisi bidang-bidang berikut:

      • sd_task_definition_arn_pattern adalah pola yang akan digunakan untuk menentukan penetapan tugas Amazon ECS yang harus ditemukan. Ini adalah ekspresi biasa.

      • sd_metrics_ports mencantumkan containerPort untuk metrik-metrik Prometheus. Pisahkan containerPorts dengan titik koma.

      • sd_container_name_pattern menentukan nama-nama kontainer tugas Amazon ECS. Ini adalah ekspresi biasa.

      • sd_metrics_path menentukan jalur metrik Prometheus. Jika Anda menghilangkannya, maka agen tersebut akan mengasumsikan jalur bawaan /metrics

      • sd_job_name menyebutkan nama pekerjaan scraping Prometheus. Jika Anda menghilangkan bidang ini, CloudWatch agen menggunakan nama pekerjaan dalam konfigurasi scrape Prometheus.

  • metric_declaration— adalah bagian-bagian yang menentukan larik log dengan format metrik tersemat yang akan dihasilkan. Ada metric_declaration bagian untuk setiap sumber Prometheus yang diimpor agen secara default CloudWatch . Masing-masing bagian ini mencakup bidang-bidang berikut:

    • label_matcher adalah ekspresi reguler yang memeriksa nilai dari label-label yang tercantum dalam source_labels. Metrik yang cocok diaktifkan untuk dimasukkan dalam format metrik tertanam yang dikirim ke CloudWatch.

      Jika Anda memiliki beberapa label yang ditentukan dalam source_labels, maka kami menyarankan Anda untuk tidak menggunakan karakter ^ atau $ dalam ekspresi reguler untuk label_matcher.

    • source_labels menentukan nilai dari label-label yang diperiksa oleh baris label_matcher.

    • label_separator menentukan pemisah yang akan digunakan dalam baris label_matcher jika ada beberapa source_labels yang ditetapkan. Bawaannya adalah ;. Anda dapat melihat nilai-nilai bawaan ini digunakan di label_matcher dalam contoh berikut.

    • metric_selectorsadalah ekspresi reguler yang menentukan metrik yang akan dikumpulkan dan dikirim ke. CloudWatch

    • dimensionsadalah daftar label yang akan digunakan sebagai CloudWatch dimensi untuk setiap metrik yang dipilih.

Lihat contoh metric_declaration berikut ini.

"metric_declaration": [ { "source_labels":[ "Service", "Namespace"], "label_matcher":"(.*node-exporter.*|.*kube-dns.*);kube-system", "dimensions":[ ["Service", "Namespace"] ], "metric_selectors":[ "^coredns_dns_request_type_count_total$" ] } ]

Contoh ini mengonfigurasikan sebuah bagian format metrik tersemat yang akan dikirim sebagai sebuah peristiwa log jika kondisi-kondisi berikut dipenuhi:

  • Nilai dari Service berisi node-exporter atau kube-dns.

  • Nilai dari Namespace adalah kube-system.

  • Metrik Prometheus coredns_dns_request_type_count_total memuat label Service dan Namespace.

Peristiwa log yang dikirim mencakup bagian yang disorot berikut ini:

{ "CloudWatchMetrics":[ { "Metrics":[ { "Name":"coredns_dns_request_type_count_total" } ], "Dimensions":[ [ "Namespace", "Service" ] ], "Namespace":"ContainerInsights/Prometheus" } ], "Namespace":"kube-system", "Service":"kube-dns", "coredns_dns_request_type_count_total":2562, "eks_amazonaws_com_component":"kube-dns", "instance":"192.168.61.254:9153", "job":"kubernetes-service-endpoints", ... }

Tutorial untuk menambahkan sebuah target scraping Prometheus baru: metrik Server API Prometheus

Server API Kubernetes membuka metrik-metrik Prometheus pada titik akhir secara bawaan. Contoh resmi untuk konfigurasi scraping Server API Kubernetes tersedia di Github.

Tutorial berikut menunjukkan cara melakukan langkah-langkah berikut untuk mulai mengimpor metrik Kubernetes API Server ke: CloudWatch

  • Menambahkan konfigurasi scraping Prometheus untuk Kubernetes API Server ke file YAMM agen. CloudWatch

  • Mengonfigurasi definisi metrik format metrik yang disematkan dalam file CloudWatch YAMAL agen.

  • (Opsional) Membuat CloudWatch dasbor untuk metrik Kubernetes API Server.

catatan

Server API Kubernetes membuka metrik-metrik pengukuran, penghitung, histogram, dan ringkasan. Dalam rilis dukungan metrik Prometheus ini, hanya mengimpor metrik dengan jenis CloudWatch pengukur, penghitung, dan ringkasan.

Untuk mulai mengumpulkan metrik Prometheus Server API Kubernetes di CloudWatch
  1. Unduh versi terbaru dari file prometheus-eks.yaml, prometheus-eks-fargate.yaml, atau prometheus-k8s.yaml dengan memasukkan salah satu dari perintah-perintah berikut.

    Untuk sebuah klaster Amazon EKS dengan tipe peluncuran EC2, masukkan perintah berikut:

    curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-eks.yaml

    Untuk sebuah klaster Amazon EKS dengan tipe peluncuran Fargate, masukkan perintah berikut:

    curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-eks-fargate.yaml

    Untuk sebuah klaster Kubernetes yang berjalan di sebuah instans Amazon EC2, masukkan perintah berikut:

    curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-k8s.yaml
  2. Buka file dengan editor teks, temukan bagian prometheus-config dan tambahkan bagian berikut di dalam bagian tersebut. Kemudian simpan perubahannya:

    # Scrape config for API servers - job_name: 'kubernetes-apiservers' kubernetes_sd_configs: - role: endpoints namespaces: names: - default scheme: https tls_config: ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt insecure_skip_verify: true bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token relabel_configs: - source_labels: [__meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name] action: keep regex: kubernetes;https - action: replace source_labels: - __meta_kubernetes_namespace target_label: Namespace - action: replace source_labels: - __meta_kubernetes_service_name target_label: Service
  3. Meskipun file YAML masih terbuka di editor teks, temukan bagian cwagentconfig.json. Tambahkan subbagian berikut dan simpan perubahannya. Bagian ini menempatkan metrik server API ke daftar CloudWatch izin agen. Tiga jenis metrik Server API ditambahkan ke daftar yang diizinkan:

    • penghitungan objek etcd

    • Metrik pengendali registrasi Server API

    • Metrik permintaan Server API

    {"source_labels": ["job", "resource"], "label_matcher": "^kubernetes-apiservers;(services|daemonsets.apps|deployments.apps|configmaps|endpoints|secrets|serviceaccounts|replicasets.apps)", "dimensions": [["ClusterName","Service","resource"]], "metric_selectors": [ "^etcd_object_counts$" ] }, {"source_labels": ["job", "name"], "label_matcher": "^kubernetes-apiservers;APIServiceRegistrationController$", "dimensions": [["ClusterName","Service","name"]], "metric_selectors": [ "^workqueue_depth$", "^workqueue_adds_total$", "^workqueue_retries_total$" ] }, {"source_labels": ["job","code"], "label_matcher": "^kubernetes-apiservers;2[0-9]{2}$", "dimensions": [["ClusterName","Service","code"]], "metric_selectors": [ "^apiserver_request_total$" ] }, {"source_labels": ["job"], "label_matcher": "^kubernetes-apiservers", "dimensions": [["ClusterName","Service"]], "metric_selectors": [ "^apiserver_request_total$" ] },
  4. Jika Anda sudah memiliki CloudWatch agen dengan dukungan Prometheus yang diterapkan di cluster, Anda harus menghapusnya dengan memasukkan perintah berikut:

    kubectl delete deployment cwagent-prometheus -n amazon-cloudwatch
  5. Terapkan CloudWatch agen dengan konfigurasi Anda yang diperbarui dengan memasukkan salah satu perintah berikut. Untuk sebuah klaster Amazon EKS dengan tipe peluncuran EC2, masukkan:

    kubectl apply -f prometheus-eks.yaml

    Untuk sebuah klaster Amazon EKS dengan tipe peluncuran Fargate, Anda perlu memasukkan perintah berikut. Ganti MyClusterdan wilayah dengan nilai agar sesuai dengan penerapan Anda.

    cat prometheus-eks-fargate.yaml \ | sed "s/{{cluster_name}}/MyCluster/;s/{{region_name}}/region/" \ | kubectl apply -f -

    Untuk sebuah klaster Kubernetes, masukkan perintah berikut. Ganti MyClusterdan wilayah dengan nilai agar sesuai dengan penerapan Anda.

    cat prometheus-k8s.yaml \ | sed "s/{{cluster_name}}/MyCluster/;s/{{region_name}}/region/" \ | kubectl apply -f -

Setelah Anda melakukannya, Anda akan melihat sebuah log stream baru bernama kubernetes-apiservers di grup log /aws/containerinsights/cluster_name/prometheus. Log stream ini harus mencakup peristiwa log dengan penetapan format metrik tersemat seperti berikut:

{ "CloudWatchMetrics":[ { "Metrics":[ { "Name":"apiserver_request_total" } ], "Dimensions":[ [ "ClusterName", "Service" ] ], "Namespace":"ContainerInsights/Prometheus" } ], "ClusterName":"my-cluster-name", "Namespace":"default", "Service":"kubernetes", "Timestamp":"1592267020339", "Version":"0", "apiserver_request_count":0, "apiserver_request_total":0, "code":"0", "component":"apiserver", "contentType":"application/json", "instance":"192.0.2.0:443", "job":"kubernetes-apiservers", "prom_metric_type":"counter", "resource":"pods", "scope":"namespace", "verb":"WATCH", "version":"v1" }

Anda dapat melihat metrik Anda di CloudWatch konsol di namespace ContainerInsights/Prometheus. Anda juga dapat secara opsional membuat CloudWatch dasbor untuk metrik Prometheus Kubernetes API Server Anda.

(Opsional) Membuat sebuah dasbor untuk metrik-metrik Server API Kubernetes.

Untuk melihat metrik Kubernetes API Server di dasbor Anda, Anda harus terlebih dahulu menyelesaikan langkah-langkah di bagian sebelumnya untuk mulai mengumpulkan metrik ini. CloudWatch

Cara membuat sebuah dasbor untuk metrik-metrik Server API Kubernetes
  1. Buka CloudWatch konsol di https://console.aws.amazon.com/cloudwatch/.

  2. Pastikan Anda telah memilih AWS Wilayah yang benar.

  3. Pada panel navigasi, silakan pilih Dasbor.

  4. Pilih Buat Dasbor. Masukkan nama untuk dasbor baru tersebut, dan pilih Buat dasbor.

  5. Di Tambahkan ke dasbor ini, pilih Batalkan.

  6. Pilih Tindakan, Tampilkan/sunting sumber.

  7. Unduh file JSON berikut: Sumber Dasbor API Kubernetes.

  8. Buka file JSON yang Anda unduh dengan editor teks, dan lakukan perubahan-perubahan berikut:

    • Ganti semua string {{YOUR_CLUSTER_NAME}} dengan nama persis seperti nama klaster Anda. Anda harus memastikan untuk tidak menambahkan spasi putih sebelum atau setelah teks.

    • Ganti semua string {{YOUR_AWS_REGION}} dengan nama Wilayah tempat metrik-metrik dikumpulkan. Sebagai contoh, us-west-2. Pastikan untuk tidak menambahkan spasi putih sebelum atau setelah teks.

  9. Salin seluruh gumpalan JSON dan tempel ke kotak teks di CloudWatch konsol, ganti apa yang sudah ada di dalam kotak.

  10. Pilih Perbarui, Simpan dasbor.