telegraf/plugins/inputs/prometheus
Christian Meilke af7710dcb8 Add support for k8s service DNS discovery to prometheus input (#3236) 2017-09-18 15:06:11 -07:00
..
README.md Add support for k8s service DNS discovery to prometheus input (#3236) 2017-09-18 15:06:11 -07:00
parser.go Implement telegraf's own full metric type 2016-12-01 18:17:02 +00:00
parser_test.go Check if tag value is empty before allocation 2017-02-16 23:07:27 +00:00
prometheus.go Add support for k8s service DNS discovery to prometheus input (#3236) 2017-09-18 15:06:11 -07:00
prometheus_test.go Add support for k8s service DNS discovery to prometheus input (#3236) 2017-09-18 15:06:11 -07:00

README.md

Prometheus Input Plugin

The prometheus input plugin gathers metrics from any webpage exposing metrics with Prometheus format

Configuration:

Example for Kubernetes API server

# Get all metrics from Kubernetes API server
[[inputs.prometheus]]
  # An array of urls to scrape metrics from.
  urls = ["http://my-kube-apiserver:8080/metrics"]

Specify a 10 second timeout for slower/over-loaded clients

# Get all metrics from Kubernetes API server
[[inputs.prometheus]]
  # An array of urls to scrape metrics from.
  urls = ["http://my-kube-apiserver:8080/metrics"]

  # Specify timeout duration for slower prometheus clients (default is 3s)
  response_timeout = "10s"

You can use more complex configuration to filter and some tags

# Get all metrics from Kubernetes API server
[[inputs.prometheus]]
  # An array of urls to scrape metrics from.
  urls = ["http://my-kube-apiserver:8080/metrics"]
  # Get only metrics with "apiserver_" string is in metric name
  namepass = ["apiserver_*"]
  # Add a metric name prefix
  name_prefix = "k8s_"
  # Add tags to be able to make beautiful dashboards
  [inputs.prometheus.tags]
    kubeservice = "kube-apiserver"
# Authorize with a bearer token skipping cert verification
[[inputs.prometheus]]
  # An array of urls to scrape metrics from.
  urls = ["http://my-kube-apiserver:8080/metrics"]
  bearer_token = '/path/to/bearer/token'
  insecure_skip_verify = true
# Authorize using x509 certs
[[inputs.prometheus]]
  # An array of urls to scrape metrics from.
  urls = ["https://my-kube-apiserver:8080/metrics"]

  ssl_ca = '/path/to/cafile'
  ssl_cert = '/path/to/certfile'
  ssl_key = '/path/to/keyfile'
# Use with [Kubernetes headless services](https://kubernetes.io/docs/concepts/services-networking/service/#headless-services)
[[inputs.prometheus]]
  # An array of urls to scrape metrics from.
  urls = ["https://my-kube-apiserver:8080/metrics"]

  # An array of Kubernetes services to scrape metrics from.
  # The IP addresses of all pods behind these services will be resolved and
  # then scraped
  kubernetes_services = ["https://my-headless-service.my-namespace:8080/metrics"]

Usage for Caddy HTTP server

If you want to monitor Caddy, you need to use Caddy with its Prometheus plugin:

  • Download Caddy+Prometheus plugin here
  • Add the prometheus directive in your CaddyFile
  • Restart Caddy
  • Configure Telegraf to fetch metrics on it:
[[inputs.prometheus]]
#   ## An array of urls to scrape metrics from.
  urls = ["http://localhost:9180/metrics"]

This is the default URL where Caddy Prometheus plugin will send data. For more details, please read the Caddy Prometheus documentation.

Measurements & Fields & Tags:

Measurements and fields could be any thing. It just depends of what you're quering.

Example:

# HELP go_gc_duration_seconds A summary of the GC invocation durations.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 0.00010425500000000001
go_gc_duration_seconds{quantile="0.25"} 0.000139108
go_gc_duration_seconds{quantile="0.5"} 0.00015749400000000002
go_gc_duration_seconds{quantile="0.75"} 0.000331463
go_gc_duration_seconds{quantile="1"} 0.000667154
go_gc_duration_seconds_sum 0.0018183950000000002
go_gc_duration_seconds_count 7
# HELP go_goroutines Number of goroutines that currently exist.
# TYPE go_goroutines gauge
go_goroutines 15
  • go_goroutines,

    • gauge (integer, unit)
  • go_gc_duration_seconds

    • field3 (integer, bytes)
  • All measurements have the following tags:

  • go_goroutines has the following tags:

    • kubeservice=kube-apiserver
  • go_gc_duration_seconds has the following tags:

    • kubeservice=kube-apiserver

Example Output:

Example of output with configuration given above:

$ ./telegraf --config telegraf.conf --test
k8s_go_goroutines,kubeservice=kube-apiserver,url=http://my-kube-apiserver:8080/metrics gauge=536 1456857329391929813
k8s_go_gc_duration_seconds,kubeservice=kube-apiserver,url=http://my-kube-apiserver:8080/metrics 0=0.038002142,0.25=0.041732467,0.5=0.04336492,0.75=0.047271799,1=0.058295811,count=0,sum=208.334617406 1456857329391929813