Bootstrap FreeKB - Prometheus - List Targets
Prometheus - List Targets

Updated:   |  Prometheus articles

Prometheus is a system used to

  • Collect metrics (e.g. memory, CPU) - This is often referred to as "scraping metrics"
  • Store the metrics, for example, in object storage, such as an Amazon Web Services S3 Bucket
  • Configure conditions that should create an alert (e.g. high CPU or high memory usage)

For example, Prometheus can be used to gather metrics from servers, virtual machines (VMs), databases, containers (e.g. Docker, OpenShift), messaging (e.g. IBM MQ, RabbitMQ), and the list goes on. Then the metrics could be stored in object storage, such as an Amazon Web Services (AWS) S3 Bucket.

Often, an Observability system such as Kibana is used to display the metrics with a UI that is used to display query the metrics, for example, to find systems with high CPU or memory usage.

Also, an alerting system such as Alert Manager is often used to create alerts when a certain condition is met, such as a system with high CPU or high memory usage. The alerting system would route alerts to certain targets, such as an SMTP email server or OpsGenie.

The kubectl get PrometheusRules (Kubernetes) or oc get PrometheusRules (OpenShift) command can be used to list the Prometheus Rules.

~]$ oc get PrometheusRules --namespace openshift-monitoring
NAME                                           AGE
alertmanager-main-rules                        692d
cluster-monitoring-operator-prometheus-rules   692d
kube-state-metrics-rules                       692d
kubernetes-monitoring-rules                    692d
node-exporter-rules                            692d
prometheus-k8s-prometheus-rules                692d
prometheus-k8s-thanos-sidecar-rules            692d
prometheus-operator-rules                      692d
telemetry                                      692d
thanos-querier                                 692d

 

The kubectl get pods (Kubernetes) or oc get pods (OpenShift) command can be used to list the Prometheus pods.

~]$ oc get pods --namespace openshift-monitoring
NAME                                                     READY   STATUS    RESTARTS        AGE
prometheus-adapter-6b98c646c7-m4g76                      1/1     Running   0               8d
prometheus-adapter-6b98c646c7-tczr2                      1/1     Running   0               8d
prometheus-k8s-0                                         6/6     Running   0               11d
prometheus-k8s-1                                         6/6     Running   0               11d
prometheus-operator-6766f68555-mkfv9                     2/2     Running   0               11d
prometheus-operator-admission-webhook-8589888cbc-mq2jx   1/1     Running   0               11d
prometheus-operator-admission-webhook-8589888cbc-t62mt   1/1     Running   0               11d

 

The kubectl exec (Kubernetes) or oc exec (OpenShift) and curl commands can be used to issue a GET request to the Prometheus /api/v1/targets endpoint inside of your Prometheus pod. This will often output a slew of data, too much to parse as stdout, so almost always the output will be redirected to a JSON file.

oc exec pod/prometheus-k8s-0 --container prometheus --namespace openshift-monitoring -- curl -s 'http://localhost:9090/api/v1/targets' | python -m json.tool > prometheus-k8s-0-targets.json

 

The output JSON should have something like this.

{
    "data": {
        "activeTargets": [
            {
                "discoveredLabels": {
                    "__address__": "10.130.0.127:8443",
                    "__meta_kubernetes_endpoint_address_target_kind": "Pod",
                    "__meta_kubernetes_endpoint_address_target_name": "openshift-apiserver-operator-69bf9465f4-p6cm8",
                    "__meta_kubernetes_endpoint_node_name": "stg001-master-0",
                    "__meta_kubernetes_endpoint_port_name": "https",
                    "__meta_kubernetes_endpoint_port_protocol": "TCP",
                    "__meta_kubernetes_endpoint_ready": "true",
                    "__meta_kubernetes_endpoints_label_app": "openshift-apiserver-operator",
                    "__meta_kubernetes_endpoints_labelpresent_app": "true",
                    "__meta_kubernetes_endpoints_name": "metrics",
                    "__meta_kubernetes_namespace": "openshift-apiserver-operator",
                    "__meta_kubernetes_pod_annotation_k8s_v1_cni_cncf_io_network_status": "[{\n    \"name\": \"openshift-sdn\",\n    \"interface\": \"eth0\",\n    \"ips\": [\n        \"10.130.0.127\"\n    ],\n    \"default\": true,\n    \"dns\": {}\n}]",
                    "__meta_kubernetes_pod_annotation_k8s_v1_cni_cncf_io_networks_status": "[{\n    \"name\": \"openshift-sdn\",\n    \"interface\": \"eth0\",\n    \"ips\": [\n        \"10.130.0.127\"\n    ],\n    \"default\": true,\n    \"dns\": {}\n}]",
                    "__meta_kubernetes_pod_annotation_openshift_io_scc": "nonroot-v2",
                    "__meta_kubernetes_pod_annotation_seccomp_security_alpha_kubernetes_io_pod": "runtime/default",
                    "__meta_kubernetes_pod_annotationpresent_k8s_v1_cni_cncf_io_network_status": "true",
                    "__meta_kubernetes_pod_annotationpresent_k8s_v1_cni_cncf_io_networks_status": "true",
                    "__meta_kubernetes_pod_annotationpresent_openshift_io_scc": "true",
                    "__meta_kubernetes_pod_annotationpresent_seccomp_security_alpha_kubernetes_io_pod": "true",
                    "__meta_kubernetes_pod_container_image": "quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:c0a6add7c15fdad18bcf3c6151f8364108028385c145cfe78cf8dac88610bf9a",
                    "__meta_kubernetes_pod_container_name": "openshift-apiserver-operator",
                    "__meta_kubernetes_pod_container_port_name": "metrics",
                    "__meta_kubernetes_pod_container_port_number": "8443",
                    "__meta_kubernetes_pod_container_port_protocol": "TCP",
                    "__meta_kubernetes_pod_controller_kind": "ReplicaSet",
                    "__meta_kubernetes_pod_controller_name": "openshift-apiserver-operator-69bf9465f4",
                    "__meta_kubernetes_pod_host_ip": "10.85.188.119",
                    "__meta_kubernetes_pod_ip": "10.130.0.127",
                    "__meta_kubernetes_pod_label_app": "openshift-apiserver-operator",
                    "__meta_kubernetes_pod_label_pod_template_hash": "69bf9465f4",
                    "__meta_kubernetes_pod_labelpresent_app": "true",
                    "__meta_kubernetes_pod_labelpresent_pod_template_hash": "true",
                    "__meta_kubernetes_pod_name": "openshift-apiserver-operator-69bf9465f4-p6cm8",
                    "__meta_kubernetes_pod_node_name": "stg001-master-0",
                    "__meta_kubernetes_pod_phase": "Running",
                    "__meta_kubernetes_pod_ready": "true",
                    "__meta_kubernetes_pod_uid": "8bc06d66-fff6-4682-a94b-25274ad4615f",
                    "__meta_kubernetes_service_annotation_include_release_openshift_io_ibm_cloud_managed": "true",
                    "__meta_kubernetes_service_annotation_include_release_openshift_io_self_managed_high_availability": "true",
                    "__meta_kubernetes_service_annotation_include_release_openshift_io_single_node_developer": "true",
                    "__meta_kubernetes_service_annotation_service_alpha_openshift_io_serving_cert_secret_name": "openshift-apiserver-operator-serving-cert",
                    "__meta_kubernetes_service_annotation_service_alpha_openshift_io_serving_cert_signed_by": "openshift-service-serving-signer@1602707828",
                    "__meta_kubernetes_service_annotation_service_beta_openshift_io_serving_cert_signed_by": "openshift-service-serving-signer@1602707828",
                    "__meta_kubernetes_service_annotationpresent_include_release_openshift_io_ibm_cloud_managed": "true",
                    "__meta_kubernetes_service_annotationpresent_include_release_openshift_io_self_managed_high_availability": "true",
                    "__meta_kubernetes_service_annotationpresent_include_release_openshift_io_single_node_developer": "true",
                    "__meta_kubernetes_service_annotationpresent_service_alpha_openshift_io_serving_cert_secret_name": "true",
                    "__meta_kubernetes_service_annotationpresent_service_alpha_openshift_io_serving_cert_signed_by": "true",
                    "__meta_kubernetes_service_annotationpresent_service_beta_openshift_io_serving_cert_signed_by": "true",
                    "__meta_kubernetes_service_label_app": "openshift-apiserver-operator",
                    "__meta_kubernetes_service_labelpresent_app": "true",
                    "__meta_kubernetes_service_name": "metrics",
                    "__metrics_path__": "/metrics",
                    "__scheme__": "https",
                    "__scrape_interval__": "30s",
                    "__scrape_timeout__": "10s",
                    "__tmp_hash": "0"
                },
                "globalUrl": "https://10.130.0.127:8443/metrics",
                "health": "up",
                "labels": {
                    "container": "openshift-apiserver-operator",
                    "endpoint": "https",
                    "instance": "10.130.0.127:8443",
                    "job": "metrics",
                    "namespace": "openshift-apiserver-operator",
                    "pod": "openshift-apiserver-operator-69bf9465f4-p6cm8",
                    "service": "metrics"
                },
                "lastError": "",
                "lastScrape": "2024-01-25T03:36:16.660767501Z",
                "lastScrapeDuration": 0.006008754,
                "scrapeInterval": "30s",
                "scrapePool": "serviceMonitor/openshift-apiserver-operator/openshift-apiserver-operator/0",
                "scrapeTimeout": "10s",
                "scrapeUrl": "https://10.130.0.127:8443/metrics"
            }
        ]
    }
}

 

To only list active targets.

oc exec pod/prometheus-k8s-0 --container prometheus --namespace openshift-monitoring -- curl -s 'http://localhost:9090/api/v1/targets?state=active' | python -m json.tool > prometheus-active-targets.json

 




Did you find this article helpful?

If so, consider buying me a coffee over at Buy Me A Coffee



Comments


Add a Comment


Please enter 9be9d8 in the box below so that we can be sure you are a human.