Monitor Type: prometheus-exporter
(Source)
Accepts Endpoints: Yes
Multiple Instances Allowed: Yes
This monitor reads metrics from a Prometheus exporter endpoint.
All metric types are supported. See Metric Types for a description of the Prometheus metric types. The conversion happens as follows:
- Gauges are converted directly to SignalFx gauges
- Counters are converted directly to SignalFx cumulative counters
- Untyped metrics are converted directly to SignalFx gauges
- Summary metrics are converted to three distinct metrics, where
<basename>
is the root name of the metric:- The total count gets converted to a cumulative counter called
<basename>_count
- The total sum gets converted to a cumulative counter called
<basename>
- Each quantile value is converted to a gauge called
<basename>_quantile
and will include a dimension calledquantile
that specifies the quantile.
- The total count gets converted to a cumulative counter called
- Histogram metrics are converted to three distinct metrics, where
<basename>
is the root name of the metric:- The total count gets converted to a cumulative counter called
<basename>_count
- The total sum gets converted to a cumulative counter called
<basename>
- Each histogram bucket is converted to a cumulative counter called
<basename>_bucket
and will include a dimension calledupper_bound
that specifies the maximum value in that bucket. This metric specifies the number of events with a value that is less than or equal to the upper bound.
- The total count gets converted to a cumulative counter called
All Prometheus labels will be converted directly to SignalFx dimensions.
This supports service discovery so you can set a discovery rule such as:
port >= 9100 && port <= 9500 && containerImage =~ "exporter"
assuming you are running exporters in container images that have the word
"exporter" in them and fall within the standard exporter port range. In
K8s, you could also try matching on the container port name as defined in
the pod spec, which is the name
variable in discovery rules for the
k8s-api
observer.
Filtering can be very useful here since exporters tend to be fairly verbose.
Sample YAML configuration:
monitors:
- type: prometheus-exporter
discoveryRule: port >= 9100 && port <= 9500 && container_image =~ "exporter"
extraDimensions:
metric_source: prometheus
For basic HTTP authentication use the username
and password
options.
On Kubernetes if the monitored service requires authentication use the useServiceAccount
option to use the service account of the agent when connecting. Make sure that the
SignalFx Agent service account has sufficient permissions for the monitored service.
-
Log contains the error
net/http: HTTP/1.x transport connection broken: malformed HTTP response
Solution: enable HTTPS with
useHTTPS
. -
Log contains the error
forbidden: User \"system:anonymous\" cannot get path \"/metrics\"
Solution: enable
useServiceAccount
and make sure the service account SignalFx agent is running with has the necessary permissions.
To activate this monitor in the Smart Agent, add the following to your agent config:
monitors: # All monitor config goes under this key
- type: prometheus-exporter
... # Additional config
For a list of monitor options that are common to all monitors, see Common Configuration.
Config option | Required | Type | Description |
---|---|---|---|
httpTimeout |
no | int64 |
HTTP timeout duration for both read and writes. This should be a duration string that is accepted by https://golang.org/pkg/time/#ParseDuration (default: 10s ) |
username |
no | string |
Basic Auth username to use on each request, if any. |
password |
no | string |
Basic Auth password to use on each request, if any. |
useHTTPS |
no | bool |
If true, the agent will connect to the server using HTTPS instead of plain HTTP. (default: false ) |
httpHeaders |
no | map of strings |
A map of HTTP header names to values. Comma separated multiple values for the same message-header is supported. |
skipVerify |
no | bool |
If useHTTPS is true and this option is also true, the exporter's TLS cert will not be verified. (default: false ) |
sniServerName |
no | string |
If useHTTPS is true and skipVerify is true, the sniServerName is used to verify the hostname on the returned certificates. It is also included in the client's handshake to support virtual hosting unless it is an IP address. |
caCertPath |
no | string |
Path to the CA cert that has signed the TLS cert, unnecessary if skipVerify is set to false. |
clientCertPath |
no | string |
Path to the client TLS cert to use for TLS required connections |
clientKeyPath |
no | string |
Path to the client TLS key to use for TLS required connections |
host |
yes | string |
Host of the exporter |
port |
yes | integer |
Port of the exporter |
useServiceAccount |
no | bool |
Use pod service account to authenticate. (default: false ) |
metricPath |
no | string |
Path to the metrics endpoint on the exporter server, usually /metrics (the default). (default: /metrics ) |
sendAllMetrics |
no | bool |
Send all the metrics that come out of the Prometheus exporter without any filtering. This option has no effect when using the prometheus exporter monitor directly since there is no built-in filtering, only when embedding it in other monitors. (default: false ) |
The agent does not do any built-in filtering of metrics coming out of this monitor.