All metrics for Docker and Kubernetes are stored in the Metric type.
Default attributes for the OpenMetrics integration
By default, the following attributes will be added to all metrics for Docker and Kubernetes integrations:
Default attributes
(all integrations)
Description
clusterName
The name of the cluster provided in the scraper configuration.
integrationName
The name of this integration (nri-prometheus).
integrationVersion
The version of the integration; for example, 0.2.0.
metricName
The name of the metric itself.
nrMetricType
The type of the New Relic Metric type; for example, Gauges.
promMetricType
The metric type of the Prometheus metric
scrapedEndpoint
The URL of the endpoint is being scraped.
Kubernetes: If the scraper is running in Kubernetes, New Relic also adds the following attributes to all the metrics:
Additional Kubernetes attributes
Description
deploymentName
Name of the deployment, if scraping a pod.
label
The Kubernetes labels of the object being scraped, prefixed by "label".
namespaceName
Name of the namespace.
nodeName
Name of the node where the pod being scraped is running, if applicable.
podName
Name of the pod being scraped, if applicable.
serviceName
Name of the service being scraped, if applicable
Default attributes for the remote write integration
By default, the following attributes will be added to Prometheus remote write metrics:
Default attributes
(all integrations)
Description
prometheus_server
A user supplied label specified as a Prometheus remote write URL parameter. The value supplied should be unique as it is intended to differentiate between source Prometheus servers at query time. Unspecified by default.
newrelic.source
The name of the New Relic ingest point (prometheusAPI).
instrumentation.provider
prometheus
instrumentation.name
remote-write
instrumentation.source
A user supplied identifier for the source of the Prometheus data that matches the value of prometheus_server.
instrumentation.version
Used to identify the version of the remote write API; for example, 0.0.1.
NRQL query examples
When you build queries, be aware that there is no linking between the metrics, entities, and attributes. Use the following NRQL queries to find out which metrics are available and which attributes are present on these metrics:
To get all metric names for OpenMetrics:
FROM Metric SELECT uniques(metricName)
To get metric names for a remote write integration:
FROM Metric SELECT uniques(metricName)WHERE instrumentation.provider='prometheus'
AND instrumentation.name='remote-write'
To get metric names for a remote write integration from a single Prometheus source:
FROM Metric SELECT uniques(metricName)WHERE instrumentation.provider='prometheus'
AND instrumentation.name='remote-write'AND instrumentation.source='<ds>'
To get metric names for a specific OpenMetrics endpoint:
FROM Metric SELECT uniques(metricName)WHERE scrapedEndpoint='<ep>'
To get metric names for a specific OpenMetrics cluster, namespace, or pod:
FROM Metric SELECT uniques(metricName)WHERE clusterName='<cn>'
FROM Metric SELECT uniques(metricName)WHERE namespaceName='<ns>'
FROM Metric SELECT uniques(metricName)WHERE podName='<pod>'
To get all attributes for the selected metric:
FROM Metric SELECT keyset()WHERE metricName='<mn>'
The autocomplete will show all values of the attribute, regardless of the pod. To determine the attribute values for a specific pod:
FROM Metric SELECT uniques(<attribute>)WHERE metricName='<mn>'AND podName='<pod>'
FROM Metric SELECT<metricName>WHERE<attribute>='<value>'
To get a chart of the metric with an aggregator of average, min, max, or sum:
FROM Metric SELECT<aggregator>(<metricname>)WHERE<attribute>='<value>' TIMESERIES
Currently the integration calculates the deltas for counter metrics. This is why queries on counter metrics will show the deltas of the counter instead of the absolute value of the counter.
Docker: This example assumes you are scraping Redis exporters. To view the number of connected Redis clients per endpoint in a cluster:
FROM Metric SELECT latest(redis_connected_clients)WHERE clusterName='my-cluster'
FACET scrapedEndpoint TIMESERIES
Kubernetes: This example assumes that you have Redis pods with the Redis exporter installed. To view the number of connected Redis clients per pod in the default namespace:
FROM Metric SELECT latest(redis_connected_clients)WHERE namespaceName='default' FACET podName TIMESERIES
This example assumes you are scraping node exporters for Docker and want to use OpenMetrics. To view average memory free for all scraped endpoints in a cluster:
FROM Metric SELECT average(node_memory_MemFree_bytes)WHERE clusterName='my-cluster'
To view average memory usage for all pods in a Kubernetes deployment using OpenMetrics:
FROM Metric SELECT average(container_memory_usage_bytes)
WHERE deploymentName='my-app-deployment'AND namespaceName='default'
View data in New Relic
When you query the data, you can view the results in the New Relic UI. You can also visualize the data as charts, histograms, etc.
Using Prometheus remote write or version 2.0.0 and higher of the Prometheus OpenMetrics Integration (POMI), you can generate histograms and calculate percentiles from your data. For Prometheus histograms, a bucket <basename>_bucket{le="42"} will be sent as the metric <basename>_bucket, and the dimension will be {histogram.bucket.le="42"}.
NRQL has two functions that work on Prometheus histograms ingested via remote write or the Prometheus OpenMetrics Integration (starting with version 2.0.0): bucketPercentile(), and histogram(). The links include query examples.