One of the biggest strengths of cloudprober is that it can export data to multiple monitoring systems, even simultaneously, just based on simple configuration. Cloudprober does that using a built-in mechanism, called surfacers. Each surfacer type implements interface for a specific monitoring system, for example, cloudwatch surfacer publishes data to AWS Cloudwatch. You can configure multiple surfacers at the same time. If you don’t specify any surfacer, prometheus and file surfacers are enabled automatically.

Cloudprober currently supports following surfacer types:

Overall surfacers config.

It’s easy to add more surfacers without having to understand the internals of cloudprober. You only need to implement the Surfacer interface.


Adding surfacers to cloudprober is as easy as adding “surfacer” config stanzas to your config, like the following:

# Enable prometheus and stackdriver surfacers.

# Make probe metrics available at the URL :<cloudprober_port>/metrics, for
# scraping by prometheus.
surfacer {

  prometheus_surfacer {
    # Following option adds a prefix to exported metrics, for example,
    # "total" metric is exported as "cloudprober_total".
    metrics_prefix: "cloudprober_"

# Stackdriver (Google Cloud Monitoring) surfacer_ No other configuration
# is necessary if running on GCP.
surfacer {

Filtering Metrics

You can control which metrics are published to a surfacer using the filtering mechanisms. For example, you may want to publish only specific metrics to AWS Cloudwatch to save on the costs.

Filtering by Label

To filter metrics by labels, use one of the following keys in the surfacer configuration:

  • allow_metrics_with_label (allowMetricsWithLabel in yaml)
  • ignore_metrics_with_label (ignoreMetricsWithLabel in yaml)

Note: ignore_metrics_with_label takes precedence over allow_metrics_with_label.

For example, to ignore all sysvar metrics:

surfacer {

  ignore_metrics_with_label {
    key: "probe",
    value: "sysvars",

Or to only allow metrics from http probes:

surfacer {

  allow_metrics_with_label {
    key: "ptype",
    value: "http",

Filtering by Metric Name

For certain surfacers, cloudprober can filter metrics by name as well. Surfacers that support this functionality are:

  • Cloudwatch
  • Prometheus
  • Stackdriver

Within the surfacer configuration, use one of the following options:

  • allow_metrics_with_name (allowMetricsWithName in yaml)
  • ignore_metrics_with_name (ignoreMetricsWithName in yaml)

Note: ignore_metrics_with_name takes precedence over allow_metrics_with_name.

To filter out all validation_failure metrics by name:

surfacer {

  ignore_metrics_with_name: "validation_failure"