Siapkan dan konfigurasikan koleksi metrik Prometheus di instans Amazon EC2 - Amazon CloudWatch

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

Siapkan dan konfigurasikan koleksi metrik Prometheus di instans Amazon EC2

Bagian berikut menjelaskan cara menginstal CloudWatch agen dengan pemantauan Prometheus EC2 pada instance, dan cara mengonfigurasi agen untuk mengikis target tambahan. Ini juga menyediakan tutorial untuk menyiapkan contoh beban kerja untuk menggunakan pengujian dengan pemantauan Prometheus.

Instans Linux dan Windows didukung.

Untuk informasi tentang sistem operasi yang didukung oleh CloudWatch agen, lihat Kumpulkan metrik, log, dan jejak dengan agen CloudWatch

VPCpersyaratan kelompok keamanan

Jika Anda menggunakan aVPC, persyaratan berikut berlaku.

  • 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.

Langkah 1: Instal CloudWatch agen

Langkah pertama adalah menginstal CloudWatch agen pada EC2 instance. Untuk petunjuk, silakan lihat Instal CloudWatch agen.

Langkah 2: Melakukan scraping pada sumber Prometheus dan mengimpor metrik

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

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 scraping Prometheus tambahan. Contoh file konfigurasi berisi baris konfigurasi global berikut:

PS C:\ProgramData\Amazon\AmazonCloudWatchAgent> cat prometheus.yaml global: scrape_interval: 1m scrape_timeout: 10s scrape_configs: - job_name: MY_JOB sample_limit: 10000 file_sd_configs: - files: ["C:\\ProgramData\\Amazon\\AmazonCloudWatchAgent\\prometheus_sd_1.yaml", "C:\\ProgramData\\Amazon\\AmazonCloudWatchAgent\\prometheus_sd_2.yaml"]

Bagian global menentukan parameter yang valid dalam semua konteks konfigurasi. Mereka juga berfungsi sebagai default untuk bagian konfigurasi lainnya. Ini berisi parameter berikut:

  • scrape_interval— Menentukan seberapa sering mengeruk target.

  • scrape_timeout— Mendefinisikan berapa lama untuk menunggu sebelum permintaan pengerukan habis.

Bagian scrape_configs menentukan satu set target dan parameter yang menentukan bagaimana untuk mengeruknya. Ini berisi parameter berikut:

  • job_name— Nama pekerjaan ditugaskan untuk metrik terkeruk secara bawaan.

  • sample_limit— Batas per goresan pada jumlah sampel terkeruk yang akan diterima.

  • file_sd_configs— Daftar konfigurasi penemuan layanan file. Itu membaca satu set file yang berisi daftar nol atau lebih konfigurasi statis. Bagian file_sd_configs berisi parameter files yang mendefinisikan pola untuk file dari grup target yang diekstrak.

CloudWatch Agen mendukung jenis konfigurasi penemuan layanan berikut.

static_config Memungkinkan menentukan daftar target dan label umum ditetapkan untuk mereka. Ini adalah cara kanonik untuk menentukan target statis dalam konfigurasi mengeruk.

Berikut ini adalah contoh konfigurasi statis untuk mengeruk metrik Prometheus dari host lokal. Metrik juga dapat diambil dari server lain jika port Prometheus terbuka ke server tempat agen berjalan.

PS C:\ProgramData\Amazon\AmazonCloudWatchAgent> cat prometheus_sd_1.yaml - targets: - 127.0.0.1:9404 labels: key1: value1 key2: value2

Contoh ini berisi parameter berikut:

  • targets— Target terambil oleh konfigurasi statis.

  • labels— Label ditugaskan untuk semua metrik yang terambil dari target.

ec2_sd_configMemungkinkan pengambilan target pengikisan dari instans AmazonEC2. Berikut ini adalah contoh ec2_sd_config untuk mengikis metrik Prometheus dari daftar contoh. EC2 Port Prometheus dari instance ini harus terbuka ke server tempat agen berjalan. CloudWatch IAMPeran untuk EC2 contoh di mana CloudWatch agen berjalan harus menyertakan ec2:DescribeInstance izin. Misalnya, Anda dapat melampirkan kebijakan terkelola Amazon EC2ReadOnlyAccess ke instance yang menjalankan CloudWatch agen.

PS C:\ProgramData\Amazon\AmazonCloudWatchAgent> cat prometheus.yaml global: scrape_interval: 1m scrape_timeout: 10s scrape_configs: - job_name: MY_JOB sample_limit: 10000 ec2_sd_configs: - region: us-east-1 port: 9404 filters: - name: instance-id values: - i-98765432109876543 - i-12345678901234567

Contoh ini berisi parameter berikut:

  • region— AWS Wilayah di mana EC2 instance target berada. Jika Anda membiarkan kosong ini, Wilayah dari metadata instans digunakan.

  • port— Port untuk mengambil metrik.

  • filters— Filter opsional yang akan digunakan untuk memfilter daftar instans. Contoh ini menyaring berdasarkan EC2 contohIDs. Untuk kriteria lainnya yang dapat Anda filter, lihat DescribeInstances.

CloudWatch konfigurasi agen untuk Prometheus

File konfigurasi CloudWatch agen mencakup prometheus bagian di bawah keduanya logs danmetrics_collected. Ini termasuk parameter berikut.

  • cluster_name— menentukan nama klaster yang akan ditambahkan sebagai label pada peristiwa log. Bidang ini bersifat opsional.

  • log_group_name— menentukan nama grup log untuk metrik-metrik Prometheus yang di-scraping.

  • prometheus_config_path— menentukan jalur file konfigurasi scraping Prometheus.

  • emf_processor— menentukan konfigurasi prosesor format metrik tersemat. Untuk informasi selengkapnya tentang format metrik tersemat, silakan lihat Menyematkan metrik dalam log.

    Bagian emf_processor dapat berisi parameter berikut:

    • metric_declaration_dedup— Ini diatur ke betul, fungsi de-duplikasi untuk metrik format metrik tersemat diaktifkan.

    • metric_namespace - Menentukan namespace metrik untuk metrik yang dipancarkan. CloudWatch

    • metric_unit— Menentukan nama metrik: peta unit metrik. Untuk informasi tentang unit metrit yang didukung, lihat. MetricDatum

    • 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:

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

      • 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.

      • 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.

Berikut ini adalah contoh konfigurasi CloudWatch agen untuk Prometheus.

{ "logs":{ "metrics_collected":{ "prometheus":{ "cluster_name":"prometheus-cluster", "log_group_name":"Prometheus", "prometheus_config_path":"C:\\ProgramData\\Amazon\\AmazonCloudWatchAgent\\prometheus.yaml", "emf_processor":{ "metric_declaration_dedup":true, "metric_namespace":"CWAgent-Prometheus", "metric_unit":{ "jvm_threads_current": "Count", "jvm_gc_collection_seconds_sum": "Milliseconds" }, "metric_declaration":[ { "source_labels":[ "job", "key2" ], "label_matcher":"MY_JOB;^value2", "dimensions":[ [ "key1", "key2" ], [ "key2" ] ], "metric_selectors":[ "^jvm_threads_current$", "^jvm_gc_collection_seconds_sum$" ] } ] } } } } }

Contoh sebelumnya mengonfigurasi bagian format metrik yang tersemat untuk dikirim sebagai peristiwa log jika kondisi berikut terpenuhi:

  • Nilai label job adalah MY_JOB

  • Nilai label key2 adalah value2

  • Metrik Prometheus jvm_threads_current dan jvm_gc_collection_seconds_sum berisi label job dan key2.

Peristiwa log yang dikirim mencakup bagian yang disorot berikut ini.

{ "CloudWatchMetrics": [ { "Metrics": [ { "Unit": "Count", "Name": "jvm_threads_current" }, { "Unit": "Milliseconds", "Name": "jvm_gc_collection_seconds_sum" } ], "Dimensions": [ [ "key1", "key2" ], [ "key2" ] ], "Namespace": "CWAgent-Prometheus" } ], "ClusterName": "prometheus-cluster", "InstanceId": "i-0e45bd06f196096c8", "Timestamp": "1607966368109", "Version": "0", "host": "EC2AMAZ-PDDOIUM", "instance": "127.0.0.1:9404", "jvm_threads_current": 2, "jvm_gc_collection_seconds_sum": 0.006000000000000002, "prom_metric_type": "gauge", ... }

Contoh: Siapkan JMX Java/sampel beban kerja untuk pengujian metrik Prometheus

JMXEksportir adalah eksportir resmi Prometheus yang dapat mengikis dan mengekspos sebagai metrik Prometheus. JMX mBeans Untuk informasi selengkapnya, silakan lihat prometheus/jmx_exporter.

CloudWatch Agen dapat mengumpulkan metrik Prometheus yang telah ditentukan sebelumnya dari Java Virtual Machine JVM (), Hjava, dan Tomcat (Catalina), dari eksportir pada instance. JMX EC2

Langkah 1: Instal CloudWatch agen

Langkah pertama adalah menginstal CloudWatch agen pada EC2 instance. Untuk petunjuk, silakan lihat Instal CloudWatch agen.

Langkah 2: Mulai Java/beban kerja JMX

Langkah selanjutnya adalah memulai Java/beban kerjaJMX.

Pertama, unduh file jar JMX eksportir terbaru dari lokasi berikut: prometheus/jmx_exporter.

Gunakan jar untuk aplikasi sampel Anda

Contoh perintah di bagian berikut menggunakan SampleJavaApplication-1.0-SNAPSHOT.jar sebagai file jar. Ganti bagian perintah ini dengan jar untuk aplikasi Anda.

Siapkan konfigurasi JMX eksportir

config.yamlFile tersebut adalah file konfigurasi JMX eksportir. Untuk informasi selengkapnya, lihat Konfigurasi dalam dokumentasi JMX eksportir.

Berikut adalah contoh konfigurasi untuk Java dan Tomcat.

--- lowercaseOutputName: true lowercaseOutputLabelNames: true rules: - pattern: 'java.lang<type=OperatingSystem><>(FreePhysicalMemorySize|TotalPhysicalMemorySize|FreeSwapSpaceSize|TotalSwapSpaceSize|SystemCpuLoad|ProcessCpuLoad|OpenFileDescriptorCount|AvailableProcessors)' name: java_lang_OperatingSystem_$1 type: GAUGE - pattern: 'java.lang<type=Threading><>(TotalStartedThreadCount|ThreadCount)' name: java_lang_threading_$1 type: GAUGE - pattern: 'Catalina<type=GlobalRequestProcessor, name=\"(\w+-\w+)-(\d+)\"><>(\w+)' name: catalina_globalrequestprocessor_$3_total labels: port: "$2" protocol: "$1" help: Catalina global $3 type: COUNTER - pattern: 'Catalina<j2eeType=Servlet, WebModule=//([-a-zA-Z0-9+&@#/%?=~_|!:.,;]*[-a-zA-Z0-9+&@#/%=~_|]), name=([-a-zA-Z0-9+/$%~_-|!.]*), J2EEApplication=none, J2EEServer=none><>(requestCount|maxTime|processingTime|errorCount)' name: catalina_servlet_$3_total labels: module: "$1" servlet: "$2" help: Catalina servlet $3 total type: COUNTER - pattern: 'Catalina<type=ThreadPool, name="(\w+-\w+)-(\d+)"><>(currentThreadCount|currentThreadsBusy|keepAliveCount|pollerThreadCount|connectionCount)' name: catalina_threadpool_$3 labels: port: "$2" protocol: "$1" help: Catalina threadpool $3 type: GAUGE - pattern: 'Catalina<type=Manager, host=([-a-zA-Z0-9+&@#/%?=~_|!:.,;]*[-a-zA-Z0-9+&@#/%=~_|]), context=([-a-zA-Z0-9+/$%~_-|!.]*)><>(processingTime|sessionCounter|rejectedSessions|expiredSessions)' name: catalina_session_$3_total labels: context: "$2" host: "$1" help: Catalina session $3 total type: COUNTER - pattern: ".*"

Mulai aplikasi Java dengan pengekspor Prometheus

Mulai aplikasi sampel. Ini akan memancarkan metrik Prometheus ke port 9404. Pastikan untuk mengganti entry point com.gubupt.sample.app.App dengan infromasi yang benar untuk aplikasi java sampel Anda.

Di Linux, masukkan perintah berikut.

$ nohup java -javaagent:./jmx_prometheus_javaagent-0.14.0.jar=9404:./config.yaml -cp ./SampleJavaApplication-1.0-SNAPSHOT.jar com.gubupt.sample.app.App &

Di Windows, masukkan perintah berikut.

PS C:\> java -javaagent:.\jmx_prometheus_javaagent-0.14.0.jar=9404:.\config.yaml -cp .\SampleJavaApplication-1.0-SNAPSHOT.jar com.gubupt.sample.app.App

Verifikasi emisi metrik Prometheus

Verifikasi bahwa metrik Prometheus dipancarkan.

Di Linux, masukkan perintah berikut.

$ curl localhost:9404

Di Windows, masukkan perintah berikut.

PS C:\> curl http://localhost:9404

Contoh keluaran di Linux:

StatusCode : 200 StatusDescription : OK Content : # HELP jvm_classes_loaded The number of classes that are currently loaded in the JVM # TYPE jvm_classes_loaded gauge jvm_classes_loaded 2526.0 # HELP jvm_classes_loaded_total The total number of class... RawContent : HTTP/1.1 200 OK Content-Length: 71908 Content-Type: text/plain; version=0.0.4; charset=utf-8 Date: Fri, 18 Dec 2020 16:38:10 GMT # HELP jvm_classes_loaded The number of classes that are currentl... Forms : {} Headers : {[Content-Length, 71908], [Content-Type, text/plain; version=0.0.4; charset=utf-8], [Date, Fri, 18 Dec 2020 16:38:10 GMT]} Images : {} InputFields : {} Links : {} ParsedHtml : System.__ComObject RawContentLength : 71908

Langkah 3: Konfigurasikan CloudWatch agen untuk mengikis metrik Prometheus

Selanjutnya, atur konfigurasi scrape Prometheus di file konfigurasi agen. CloudWatch

Untuk mengatur konfigurasi scrape Prometheus untuk contoh Java/ JMX
  1. Mengatur konfigurasi untuk file_sd_config dan static_config.

    Di Linux, masukkan perintah berikut.

    $ cat /opt/aws/amazon-cloudwatch-agent/var/prometheus.yaml global: scrape_interval: 1m scrape_timeout: 10s scrape_configs: - job_name: jmx sample_limit: 10000 file_sd_configs: - files: [ "/opt/aws/amazon-cloudwatch-agent/var/prometheus_file_sd.yaml" ]

    Di Windows, masukkan perintah berikut.

    PS C:\ProgramData\Amazon\AmazonCloudWatchAgent> cat prometheus.yaml global: scrape_interval: 1m scrape_timeout: 10s scrape_configs: - job_name: jmx sample_limit: 10000 file_sd_configs: - files: [ "C:\\ProgramData\\Amazon\\AmazonCloudWatchAgent\\prometheus_file_sd.yaml" ]
  2. Mengatur konfigurasi target ambilan.

    Di Linux, masukkan perintah berikut.

    $ cat /opt/aws/amazon-cloudwatch-agent/var/prometheus_file_sd.yaml - targets: - 127.0.0.1:9404 labels: application: sample_java_app os: linux

    Di Windows, masukkan perintah berikut.

    PS C:\ProgramData\Amazon\AmazonCloudWatchAgent> cat prometheus_file_sd.yaml - targets: - 127.0.0.1:9404 labels: application: sample_java_app os: windows
  3. Atur konfigurasi ambilan Prometheus dengan ec2_sc_config. Ganti your-ec2-instance-id dengan ID EC2 instance yang benar.

    Di Linux, masukkan perintah berikut.

    $ cat .\prometheus.yaml global: scrape_interval: 1m scrape_timeout: 10s scrape_configs: - job_name: jmx sample_limit: 10000 ec2_sd_configs: - region: us-east-1 port: 9404 filters: - name: instance-id values: - your-ec2-instance-id

    Di Windows, masukkan perintah berikut.

    PS C:\ProgramData\Amazon\AmazonCloudWatchAgent> cat prometheus_file_sd.yaml - targets: - 127.0.0.1:9404 labels: application: sample_java_app os: windows
  4. Siapkan konfigurasi CloudWatch agen. Pertama, arahkan ke direktori yang benar. Di Linux, itu adalah /opt/aws/amazon-cloudwatch-agent/var/cwagent-config.json. Pada Windows, ini adalah C:\ProgramData\Amazon\AmazonCloudWatchAgent\cwagent-config.json.

    Berikut ini adalah konfigurasi sampel dengan metrik Java/Prometheus didefinisikanJHX. Pastikan untuk mengganti path-to-Prometheus-Scrape-Configuration-file dengan jalan yang benar.

    { "agent": { "region": "us-east-1" }, "logs": { "metrics_collected": { "prometheus": { "cluster_name": "my-cluster", "log_group_name": "prometheus-test", "prometheus_config_path": "path-to-Prometheus-Scrape-Configuration-file", "emf_processor": { "metric_declaration_dedup": true, "metric_namespace": "PrometheusTest", "metric_unit":{ "jvm_threads_current": "Count", "jvm_classes_loaded": "Count", "java_lang_operatingsystem_freephysicalmemorysize": "Bytes", "catalina_manager_activesessions": "Count", "jvm_gc_collection_seconds_sum": "Seconds", "catalina_globalrequestprocessor_bytesreceived": "Bytes", "jvm_memory_bytes_used": "Bytes", "jvm_memory_pool_bytes_used": "Bytes" }, "metric_declaration": [ { "source_labels": ["job"], "label_matcher": "^jmx$", "dimensions": [["instance"]], "metric_selectors": [ "^jvm_threads_current$", "^jvm_classes_loaded$", "^java_lang_operatingsystem_freephysicalmemorysize$", "^catalina_manager_activesessions$", "^jvm_gc_collection_seconds_sum$", "^catalina_globalrequestprocessor_bytesreceived$" ] }, { "source_labels": ["job"], "label_matcher": "^jmx$", "dimensions": [["area"]], "metric_selectors": [ "^jvm_memory_bytes_used$" ] }, { "source_labels": ["job"], "label_matcher": "^jmx$", "dimensions": [["pool"]], "metric_selectors": [ "^jvm_memory_pool_bytes_used$" ] } ] } } }, "force_flush_interval": 5 } }
  5. Mulai ulang CloudWatch agen dengan memasukkan salah satu perintah berikut.

    Di Linux, masukkan perintah berikut.

    sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/opt/aws/amazon-cloudwatch-agent/var/cwagent-config.json

    Di Windows, masukkan perintah berikut.

    & "C:\Program Files\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent-ctl.ps1" -a fetch-config -m ec2 -s -c file:C:\ProgramData\Amazon\AmazonCloudWatchAgent\cwagent-config.json

Melihat metrik dan log Prometheus

Anda sekarang dapat melihat Java/ JMX metrik yang dikumpulkan.

Untuk melihat metrik untuk sampel JMX Jawa/beban kerja
  1. Buka CloudWatch konsol di https://console.aws.amazon.com/cloudwatch/.

  2. Di Wilayah tempat klaster Anda berjalan, pilih Metrik pada panel navigasi yang ada sebelah kiri. Temukan PrometheusTestnamespace untuk melihat metrik.

  3. Untuk melihat peristiwa CloudWatch Log, pilih Grup log di panel navigasi. Peristiwa-peristiwa tersebut berada di grup log prometheus-test.