Prometheus + nginx-exporter: collect only from <some_nginx_container_ip>:9113

9/15/2016

Disclaimer: I find out what Prometheus is about a day ago.

I'm trying to use Prometheus with nginx exporter

I copy-pasted a config example from grafana dashboard and it works flawlessly with node-exporter, but, when I'm trying to adapt it to nginx-exporter, deployed in one pod with nginx server, Prometheus outputs lots of trash in Targets (all opened ports for all available IPs).

So, I wonder, how should I adapt job to output only a needed container (with its' name in labels, etc.)

- job_name: 'kubernetes-nginx-exporter'
  tls_config:
    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
  bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  kubernetes_sd_configs:
  - api_servers:
    - 'https://kubernetes.default.svc'
    in_cluster: true
    role: container
  relabel_configs:
  - action: labelmap
    regex: __meta_kubernetes_node_label_(.+)
  - source_labels: [__meta_kubernetes_role]
    action: replace
    target_label: kubernetes_role
  - source_labels: [__address__]
    regex: '(.*):10250'
    replacement: '${1}:9113'
    target_label: __address__
-- cardinal-gray
google-kubernetes-engine
kubernetes
nginx
prometheus

1 Answer

10/3/2016

The right workaround was to add annotations to deployment in template section:

  annotations:
    prometheus.io/scrape: 'true'
    prometheus.io/port: '9113'

and set role: pod in job_name: 'kubernetes-pods' (if not set).

That's it, your endpoints would be present only with ports you provided and with all needed labels.

-- cardinal-gray
Source: StackOverflow