Prometheus Metrics
Prometheus Metrics
This feature is in preview. Preview features are unsupported and may face breaking changes in a future release. Any issues found in the feature will be addressed during the regular release schedule; they will not result in immediate patches or hotfixes.
We encourage customers to try these features and we welcome any feedback via Posit Support, but we recommend that the feature not be used in production until it is in general availability (i.e., officially released as a full feature). To provide feedback, please email your Posit Customer Success representative or sales@posit.co and specify that you are trialing this feature.
Posit Workbench can be configured to emit Prometheus metrics to a metric-specific endpoint. When enabled, the Prometheus metrics is served from a different port than the rest of Workbench to enable an administrator to configure different access control to the Prometheus metrics at the network level.
Configuration
To enable Prometheus metrics, set metrics-enabled=1
in rserver.conf
and then restart Workbench with rstudio-server restart
. By default, the /metrics
endpoint is available at the configured www-address
and port 8989
. For example, with the configuration below, metrics could be retrieved from https://my.example.workbench.org:8989/metrics
:
# /etc/rstudio/rserver.conf
www-address=my.example.workbench.org
ssl-enabled=1
#...
metrics-enabled=1
Below is the full set of configuration options:
Config Option | Description | Possible Values | Default Value |
---|---|---|---|
metrics-enabled | Whether or not to enable Prometheus metrics endpoint. | 0 or 1 | 0 |
metrics-port | The port to use for the Prometheus metrics endpoint. | Any valid Posix port that is not already in use, usually from 1024 - 65535 | 8989 |
metrics-address | The address to use for the prometheus metrics endpoint. When not present, the value of www-address is used, and TLS will be determined using ssl-enabled. When present, TLS will be inferred from the HTTP(S) scheme provided. If no HTTP(S) scheme is provided, HTTP will be used. | A valid network address. | The value of www-address |
It is strongly recommended to use the above settings to control how Prometheus metrics are exposed by Workbench. However, if more advanced control is needed, a custom NGNIX directive block can be provided by editing the /etc/rstudio/nginx.metrics-directives.conf
file. The location of this file can by modified with XDG_CONFIG_DIRS
or RSTUDIO_CONFIG_DIR
, as with other configuration files, or it can be set explicitly by adding server-nginx-metrics-directives-path=/path/to/desired/file.conf
to rserver.conf
. When this file is used, metrics-port
and metrics-address
will be ignored. Additionally, TLS must be explicitly included in the server directive block. When this file is used, it is not possible to configure Workbench to supply metrics directly from <www-address>/metrics
.
To use this file, a server
directive containing the location at which the metrics
information should be served. Below is an example where the directive has been modified so that the Prometheus metrics can be accessed directly from http://127.0.0.1
:
# /etc/rstudio/nginx.metrics-directives.conf
server {
listen 127.0.0.1:80;
location = / {
proxy_pass http://unix:/var/run/rstudio-server/rstudio-rserver/rserver.socket:/metrics/;
proxy_set_header Host $http_host;
add_header Strict-Transport-Security "max-age=86400";
proxy_redirect http://unix:/var/run/rstudio-server/rstudio-rserver/rserver.socket:/metrics/ $scheme://$host:80/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_read_timeout 20d;
}
}
Metric Data
Workbench emits a variety of metrics to help understand the state of the system. For each metric, there is a # HELP
comment and a # TYPE
comment in the metrics output. Below is an example of what some metrics may look like:
# HELP pwb_http_requests_total Total HTTP requests served.
# TYPE pwb_http_requests_total counter
pwb_http_requests_total{code="200",method="GET",uri="/metrics"} 4
pwb_http_requests_total{code="200",method="POST",uri="/log"} 2
pwb_http_requests_total{code="200",method="POST",uri="/events"} 225
pwb_http_requests_total{code="200",method="POST",uri="/rpc"} 413
# HELP pwb_license_active_users Named users actually consuming the user seats available under this node's product license.
# TYPE pwb_license_active_users gauge
pwb_license_active_users 3