This page outlines the process for scraping metrics from workloads in Google Distributed Cloud (GDC) air-gapped environments to facilitate monitoring and data observability.
You can scrape and collect metrics your components produce over time. The
monitoring platform offers a custom API to scrape metrics from running workloads
within your Distributed Cloud project namespace. To scrape metrics,
you deploy a MonitoringTarget
custom resource to your project namespace in the
Management API server. Upon deployment of this resource, the monitoring platform
initiates data collection.
The MonitoringTarget
custom resource directs the monitoring pipeline to scrape
designated pods within your project. These pods must expose an HTTP endpoint
that delivers metrics in a Prometheus exposition format, such as OpenMetrics.
The scraped metrics are then displayed in your project's Grafana instance,
providing insights into your application's operational state.
To configure the MonitoringTarget
custom resource, you must specify the pods
within your project namespace for metric collection. You can customize various
settings, including the scraping frequency, the pods' metrics endpoint, labels,
and annotations.
Before you begin
To get the permissions that you need to manage MonitoringTarget
custom
resources, ask your Organization IAM Admin or Project IAM Admin to grant you one
of the associated MonitoringTarget
roles.
Depending on the level of access and permissions you need, you might obtain creator, editor, or viewer roles for this resource in an organization or a project. For more information, see Prepare IAM permissions.
Configure the MonitoringTarget
custom resource
The MonitoringTarget
custom resource tells the monitoring platform where to
collect metrics from. You can specify the pods for which you are collecting
metrics, the metrics endpoint of those pods, the scrapping frequency, and any
additional settings.
This resource defines the following configurations:
- Targets: The pods and their endpoints within your project that expose metrics.
- Scrape interval: How frequently you want to pull metrics from the selected endpoints.
- Label customizations: Optional rules with any label modifications for metrics.
Choose one of the following methods for specifying metrics endpoints in the
MonitoringTarget
custom resource:
- Static endpoints: You explicitly declare the endpoint (port,
path, scheme) in the
MonitoringTarget
configuration. Annotations: The pod metric endpoint information is retrieved from annotations within the container's
Deployment
file. This method offers more flexibility if each pod has different endpoints.
Static endpoints
Follow these steps to expose metrics from your selected pods on a statically defined endpoint:
Determine the Distributed Cloud project from which you want to gather metrics for monitoring.
In your pod's specification, declare the port that serves metrics in the
containerPort
field. The following example shows how to declare port2112
in the pod's specification:# ... spec: template: spec: containers: - name: your-container-name ports: - containerPort: 2112 # ...
In your
MonitoringTarget
configuration, specify the endpoint details (port, path, scheme) in thepodMetricsEndpoints
section to match the port you exposed in the pod's specification.The following YAML file shows an example of a
MonitoringTarget
configuration where every selected pod has to expose metrics on the same endpoint,http://your-container-name:2112/metrics
:apiVersion: monitoring.gdc.goog/v1 kind: MonitoringTarget metadata: # Choose the same namespace as the workload pods. namespace: your-project-namespace name: your-container-name spec: selector: # Choose pod labels to consider for this job. # Optional: Map of key-value pairs. # Default: No filtering by label. # To consider every pod in the project namespace, remove selector fields. matchLabels: app: your-app-label podMetricsEndpoints: port: value: 2112 path: # Choose any value for your endpoint. # The /metrics value is an example. value: /metrics scheme: value: http
Apply the
MonitoringTarget
configuration to the Management API server within the same namespace as your target pods:kubectl --kubeconfig KUBECONFIG_PATH apply -f MONITORING_TARGET_NAME.yaml
Replace the following:
KUBECONFIG_PATH
: the path to the kubeconfig file for the Management API server.MONITORING_TARGET_NAME
: the name of theMonitoringTarget
definition file.
The monitoring platform begins collecting metrics.
Annotations
Follow these steps to expose metrics using annotations if each pod has different endpoints:
Determine the Distributed Cloud project from which you want to gather metrics for monitoring.
Add the following annotations to the
annotations
section of your container'sDeployment
file:prometheus.io/path
prometheus.io/port
prometheus.io/scheme
The following example shows annotations for metrics on port
2112
:apiVersion: apps/v1 kind: Deployment metadata: name: your-container-name namespace: your-project-namespace labels: app: your-app-label annotations: # These annotations are not required. They demonstrate selecting # pod metric endpoints through annotations. prometheus.io/path: /metrics prometheus.io/port: \"2112\" prometheus.io/scheme: http
In your
MonitoringTarget
configuration, specify the annotations you added to the container'sDeployment
file in thepodMetricsEndpoints
section. This specification tells the custom resource to gather the metrics endpoint information from annotations on the selected pods.The following YAML file shows an example of a
MonitoringTarget
configuration using annotations:apiVersion: monitoring.gdc.goog/v1 kind: MonitoringTarget metadata: metadata: # Choose the same namespace as the workload pods. namespace: your-project-namespace name: your-container-name spec: selector: matchLabels: app: your-app-label podMetricsEndpoints: port: annotation: prometheus.io/port path: annotation: prometheus.io/path scheme: annotation: prometheus.io/scheme
Apply the
MonitoringTarget
configuration to the Management API server within the same namespace as your target pods:kubectl --kubeconfig KUBECONFIG_PATH apply -f MONITORING_TARGET_NAME.yaml
Replace the following:
KUBECONFIG_PATH
: the path to the kubeconfig file for the Management API server.MONITORING_TARGET_NAME
: the name of theMonitoringTarget
definition file.
The monitoring platform begins collecting metrics.
Refer to the complete MonitoringTarget
specification
and the API reference documentation
for additional fields and options.
Complete MonitoringTarget
specification
The following YAML file shows an example for the complete specification of the
MonitoringTarget
custom resource. For more information and a complete
description of fields, see the
API reference documentation.
apiVersion: monitoring.gdc.goog/v1
kind: MonitoringTarget
metadata:
# Choose the same namespace as the workload pods.
namespace: PROJECT_NAMESPACE
name: MONITORING_TARGET_NAME
spec:
# Choose matching pattern that identifies pods for this job.
# Optional
# Relationship between different selectors: AND
selector:
# Choose clusters to consider for this job.
# Optional: List
# Default: All clusters applicable to this project.
# Relationship between different list elements: OR
matchClusters:
- string
# Choose pod labels to consider for this job.
# Optional: Map of key-value pairs.
# Default: No filtering by label.
# Relationship between different pairs: AND
matchLabels:
key1: value1
# Choose annotations to consider for this job.
# Optional: Map of key-value pairs
# Default: No filtering by annotation
# Relationship between different pairs: AND
matchAnnotations:
key1: value1
# Configure the endpoint exposed for this job.
podMetricsEndpoints:
# Choose a port either through static value or annotation.
# Optional
# Annotation takes priority.
# Default: static port 80
port:
value: integer
annotation: string
# Choose a path either through static value or annotation.
# Optional
# Annotation takes priority
# Default: static path /metrics
path:
value: string
annotation: string
# Choose a scheme either through a static value (http or https) or annotation.
# Optional
# Annotation takes priority
# Default: static scheme http
scheme:
value: string
annotation: string
# Choose the frequency to scrape the metrics endpoint defined in podMetricsEndpoints
# Optional
# Default: 60s
scrapeInterval: string
# Dynamically rewrite the label set of a target before it gets scraped.
# https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config
# Optional
# Default: No filtering by label
metricsRelabelings:
- sourceLabels:
- string
separator: string
regex: string
action: string
targetLabel: string
replacement: string
Replace the following:
PROJECT_NAMESPACE
: your project namespace.MONITORING_TARGET_NAME
: the name of theMonitoringTarget
definition file.