Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
In den folgenden Abschnitten wird erklärt, wie der CloudWatch Agent mit Prometheus-Überwachung auf EC2 Instances installiert wird und wie der Agent so konfiguriert wird, dass er zusätzliche Ziele scannt. Es bietet auch Tutorials zum Einrichten von Beispiel-Workloads für die Verwendung von Tests mit Prometheus-Überwachung.
Sowohl Linux- als auch Windows-Instanzen werden unterstützt.
Informationen zu den vom CloudWatch Agenten unterstützten Betriebssystemen finden Sie unter Erfassen Sie mit dem CloudWatch Agenten Metriken, Logs und Traces
Anforderungen an VPC-Sicherheitsgruppen
Wenn Sie eine VPC verwenden, gelten folgende Anforderungen.
Die Eingangsregeln der Sicherheitsgruppen für die Prometheus-Workloads müssen die Prometheus-Ports für den CloudWatch Agenten öffnen, damit er die Prometheus-Metriken über die private IP scrapen kann.
Die Ausgangsregeln der Sicherheitsgruppe für den CloudWatch Agenten müssen es dem CloudWatch Agenten ermöglichen, über eine private IP eine Verbindung zum Port der Prometheus-Workloads herzustellen.
Themen
Schritt 1: Installieren Sie den Agenten CloudWatch
Der erste Schritt besteht darin, den CloudWatch Agenten auf der EC2 Instanz zu installieren. Detaillierte Anweisungen finden Sie unter Installieren Sie den Agenten CloudWatch .
Schritt 2: Prometheus-Quellen scrapen und Metriken importieren
Der CloudWatch Agent mit Prometheus-Überwachung benötigt zwei Konfigurationen, um die Prometheus-Metriken zu erfassen. Er folgt der standardmäßigen Prometheus-Konfiguration, wie in <scrape_config>
Prometheus-Scrape-Konfiguration
Der CloudWatch Agent unterstützt die standardmäßigen Prometheus-Scrape-Konfigurationen, wiehttps://prometheus.io/docs/prometheus/latest/configuration/configuration/#scrape_config
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"]
Der Abschnitt global
gibt Parameter an, die in allen Konfigurationskontexten gültig sind. Sie fungieren auch als Standardwerte für andere Konfigurationsabschnitte. Es enthält die folgenden Parameter:
scrape_interval
– Definiert, wie oft das Scraping von zielen durchgeführt werden soll.scrape_timeout
– Definiert, wie lange gewartet werden soll, bis für eine Scrape-Anforderung eine Zeitüberschreitung eintritt.
scrape_configs
gibt einen Satz von Zielen und Parametern an, mit denen festgelegt wird, wie sie das Scraping durchführen sollen. Es enthält die folgenden Parameter:
job_name
— Der Auftragsname, der standardmäßig gescrapten Metriken zugewiesen ist.sample_limit
– Pro-Scrape-Limit für die Anzahl der Scraping-Proben, die akzeptiert werden.file_sd_configs
– Liste der Konfigurationen für die Dateiserviceerkennung. Es liest eine Reihe von Dateien, die eine Liste von null oder mehr statischen Konfigurationen enthalten. Der Abschnittfile_sd_configs
enthält einen Parameterfiles
, der Muster für Dateien definiert, aus denen Zielgruppen extrahiert werden.
Der CloudWatch Agent unterstützt die folgenden Service Discovery-Konfigurationstypen.
static_config
Ermöglicht die Angabe einer Liste von Zielen und eines gemeinsamen Beschriftungssatzes für diese. Es ist der kanonische Weg, statische Ziele in einer Scrape-Konfiguration anzugeben.
Im Folgenden finden Sie eine statische Beispielkonfiguration, um Prometheus Metriken von einem lokalen Host zu scrapen. Metriken können auch von anderen Servern gescrapet werden, wenn der Prometheus-Port für den Server geöffnet ist, auf dem der Agent ausgeführt wird.
PS C:\ProgramData\Amazon\AmazonCloudWatchAgent> cat prometheus_sd_1.yaml
- targets:
- 127.0.0.1:9404
labels:
key1: value1
key2: value2
Dieses Beispiel enthält die folgenden Parameter:
targets
– Die Ziele, die von der statischen Konfiguration gescrapet werden.labels
– Beschriftungen, die allen Metriken zugewiesen sind, die von den Zielen gescrapet werden.
ec2_sd_config
Ermöglicht das Abrufen von Scrape-Zielen aus EC2 Amazon-Instances. Im Folgenden finden Sie ein Beispiel ec2_sd_config
zum Extrahieren von Prometheus-Metriken aus einer Liste von Instanzen. EC2 Die Prometheus-Ports dieser Instanzen müssen für den Server geöffnet werden, auf dem der CloudWatch Agent ausgeführt wird. Die IAM-Rolle für die EC2 Instanz, auf der der CloudWatch Agent ausgeführt wird, muss die entsprechende Berechtigung enthalten. ec2:DescribeInstance
Sie könnten beispielsweise die verwaltete Richtlinie Amazon an die Instance anhängen EC2ReadOnlyAccess, auf der der CloudWatch Agent ausgeführt wird.
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
Dieses Beispiel enthält die folgenden Parameter:
region
— Die AWS Region, in der sich die EC2 Ziel-Instance befindet. Wenn Sie dieses Feld leer lassen, wird die Region aus den Instance-Metadaten verwendet.port
– Der Port, von dem Metriken gescrapet werden.filters
– Optionale Filter zum Filtern der Instanceliste. In diesem Beispiel wird basierend auf der EC2 Instanz gefiltert IDs. Weitere Kriterien, nach denen Sie filtern können, finden Sie unter DescribeInstances.
CloudWatch Agentenkonfiguration für Prometheus
Die CloudWatch Agenten-Konfigurationsdatei enthält prometheus
Abschnitte sowohl unter als auchlogs
. metrics_collected
Es enthält die folgenden Parameter.
Clustername – Gibt den Clusternamen an, der als Bezeichnung im Protokollereignis hinzugefügt werden soll. Dies ist ein optionales Feld.
log_group_name – Gibt den Namen der Protokollgruppe für die Prometheus-Scrape-Metriken an.
prometheus_config_path – gibt den Pfad der Prometheus-Scrape-Konfigurationsdatei an.
emf_processor – Gibt die Prozessorkonfiguration im eingebetteten Metrikformat an. Weitere Hinweise zum eingebetteten Metrik-Format finden Sie unter Einbetten von Metriken in Protokollen.
Der Abschnitt
emf_processor
kann die folgenden Parameter enthalten:metric_declaration_dedup – Wenn es auf „true“ gesetzt ist, wird die Deduplizierungsfunktion für die eingebetteten Metrikformatmetriken aktiviert.
metric_namespace — Gibt den Metrik-Namespace für die ausgegebenen Metriken an. CloudWatch
metric_unit – Gibt die Metrikname:Metrikeinheitszuordnung an. Hinweise zu unterstützten metrischen Einheiten finden Sie unter. MetricDatum
metric_declaration – sind Abschnitte, die das Array von Protokollen mit eingebettetem Metrikformat angeben, das generiert werden soll. Es gibt
metric_declaration
-Abschnitte für jede Prometheus-Quelle, aus der der CloudWatch-Agent standardmäßig importiert. Diese Abschnitte enthalten jeweils die folgenden Felder:source_labels
gibt den Wert der Beschriftungen an, die von derlabel_matcher
-Zeile überprüft werden.label_matcher
ist ein regulärer Ausdruck, der den Wert der insource_labels
aufgelisteten Beschriftungen überprüft. Die übereinstimmenden Metriken sind für die Aufnahme in das eingebettete metrische Format aktiviert, das an gesendet wird CloudWatch.metric_selectors
ist ein regulärer Ausdruck, der die Metriken angibt, die erfasst und an CloudWatch gesendet werden sollen.dimensions
ist die Liste der Beschriftungen, die als CloudWatch -Dimensionen für jede ausgewählte Metrik verwendet werden sollen.
Im Folgenden finden Sie ein Beispiel für eine CloudWatch Agentenkonfiguration für 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$"
]
}
]
}
}
}
}
}
Im vorherigen Beispiel wird ein eingebetteter Metrikformatabschnitt konfiguriert, der als Protokollereignis gesendet wird, wenn die folgenden Bedingungen erfüllt sind:
Der Wert der Beschriftung
job
istMY_JOB
Der Wert der Beschriftung
key2
istvalue2
Die Prometheus-Metriken
jvm_threads_current
undjvm_gc_collection_seconds_sum
enthalten sowohljob
-als auchkey2
-Beschriftungen.
Das Protokollereignis, das gesendet wird, enthält den folgenden hervorgehobenen Abschnitt.
{
"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",
...
}
Beispiel: Einrichten von Java/JMX-Beispiel-Workloads für Prometheus-Metriktests
JMX Exporter ist ein offizieller Prometheus-Exporter, der JMX mBeans als Prometheus-Metriken erfassen und verfügbar machen kann. Weitere Informationen finden Sie unter prometheus/jmx_exporter
Der CloudWatch Agent kann vordefinierte Prometheus-Metriken von Java Virtual Machine (JVM), Hjava und Tomcat (Catalina) von einem JMX-Exporter auf Instanzen sammeln. EC2
CloudWatch Schritt 1: Installieren Sie den Agenten
Der erste Schritt besteht darin, den CloudWatch Agenten auf der EC2 Instanz zu installieren. Detaillierte Anweisungen finden Sie unter Installieren Sie den Agenten CloudWatch .
Schritt 2: Starten der Java/JMX-Workload
Der nächste Schritt besteht darin, die Java/JMX-Workload zu starten.
Laden Sie zunächst die neueste JMX-Exporter-JAR-Datei vom folgenden Speicherort herunter: prometheus/jmx_exporter
Verwenden des .jar für Ihre Beispielanwendung
Die Beispielbefehle in den folgenden Abschnitten verwenden SampleJavaApplication-1.0-SNAPSHOT.jar
als JAR-Datei. Ersetzen Sie diese Teile der Befehle durch die JAR-Datei für Ihre Anwendung.
Vorbereiten der JMX-Exporter-Konfiguration
Die config.yaml
-Datei ist die JMX-Exporter-Konfigurationsdatei. Weitere Informationen finden Sie unter Konfiguration
Hier ist eine Beispielkonfiguration für Java und 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: ".*"
Starten Sie die Java-Anwendung mit dem Prometheus-Exporter
Starten der Beispielanwendung Dadurch werden Prometheus-Metriken an Port 9404 ausgegeben. Achten Sie darauf, den Einstiegspunkt com.gubupt.sample.app.App
durch die richtigen Informationen für Ihre Java-Beispielanwendung zu ersetzen.
Geben Sie unter Linux den folgenden Befehl ein.
$ nohup java -javaagent:./jmx_prometheus_javaagent-0.14.0.jar=9404:./config.yaml -cp ./SampleJavaApplication-1.0-SNAPSHOT.jar com.gubupt.sample.app.App &
Geben Sie unter Windows den folgenden Befehl ein.
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
Überprüfen der Prometheus-Metriken
Stellen Sie sicher, dass Prometheus-Metriken ausgegeben werden.
Geben Sie unter Linux den folgenden Befehl ein.
$ curl localhost:9404
Geben Sie unter Windows den folgenden Befehl ein.
PS C:\> curl http://localhost:9404
Beispielausgabe unter 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
Schritt 3: Den CloudWatch Agenten so konfigurieren, dass er Prometheus-Metriken scannt
Richten Sie als Nächstes die Prometheus-Scrape-Konfiguration in der CloudWatch Agentenkonfigurationsdatei ein.
So richten Sie die Prometheus-Scrape-Konfiguration für das Java/JMX-Beispiel ein
Richten Sie die Konfiguration für
file_sd_config
undstatic_config
ein.Geben Sie unter Linux den folgenden Befehl ein.
$ 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" ]
Geben Sie unter Windows den folgenden Befehl ein.
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" ]
Richten Sie die Konfiguration der Scrape-Ziele ein.
Geben Sie unter Linux den folgenden Befehl ein.
$ cat /opt/aws/amazon-cloudwatch-agent/var/prometheus_file_sd.yaml - targets: - 127.0.0.1:9404 labels: application: sample_java_app os: linux
Geben Sie unter Windows den folgenden Befehl ein.
PS C:\ProgramData\Amazon\AmazonCloudWatchAgent> cat prometheus_file_sd.yaml - targets: - 127.0.0.1:9404 labels: application: sample_java_app os: windows
Richten Sie die Scrape-Konfiguration von Prometheus mit
ec2_sc_config
ein. Ersetzen Sieyour-ec2-instance-id
durch die richtige Instanz-ID EC2 .Geben Sie unter Linux den folgenden Befehl ein.
$ 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
Geben Sie unter Windows den folgenden Befehl ein.
PS C:\ProgramData\Amazon\AmazonCloudWatchAgent> cat prometheus_file_sd.yaml - targets: - 127.0.0.1:9404 labels: application: sample_java_app os: windows
Richten Sie die CloudWatch Agentenkonfiguration ein. Wechseln Sie zunächst in das richtige Verzeichnis. Unter Linux ist es
/opt/aws/amazon-cloudwatch-agent/var/cwagent-config.json
. Unter Windows ist esC:\ProgramData\Amazon\AmazonCloudWatchAgent\cwagent-config.json
.Im Folgenden sehen Sie eine Beispielkonfiguration mit definierten Java/JHX-Prometheus-Metriken. Achten Sie darauf, durch
path-to-Prometheus-Scrape-Configuration-file
den richtigen Pfad zu ersetzen.{ "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 } }Starten Sie den CloudWatch Agenten neu, indem Sie einen der folgenden Befehle eingeben.
Geben Sie unter Linux den folgenden Befehl ein.
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
Geben Sie unter Windows den folgenden Befehl ein.
& "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
Anzeigen der Prometheus-Metriken und Protokolle
Sie können nun die erfassten Java/JMX-Metriken anzeigen.
So zeigen Sie die Metriken für Ihren Java/JMX-Beispiel-Workload an
Öffnen Sie die CloudWatch Konsole unter https://console.aws.amazon.com/cloudwatch/
. Wählen Sie in der Region, in der Ihr Cluster ausgeführt wird, im linken Navigationsbereich Metriken aus. Suchen Sie den PrometheusTestNamespace, um die Metriken zu sehen.
Um die CloudWatch Protokollereignisse anzuzeigen, wählen Sie im Navigationsbereich Protokollgruppen aus. Die Ereignisse befinden sich in der Protokollgruppe prometheus-test.