1PMDAPROMETHEUS(1)           General Commands Manual          PMDAPROMETHEUS(1)
2
3
4

NAME

6       pmdaprometheus - Prometheus PMDA
7

SYNOPSIS

9       $PCP_PMDAS_DIR/prometheus/pmdaprometheus  [-D]  [-n]  [-c  config]  [-d
10       domain] [-l logfile] [-t timeout] [-u user]
11

DESCRIPTION

13       pmdaprometheus is a Performance Metrics Domain Agent (PMDA) which  cre‐
14       ates  PCP  metrics  from Prometheus endpoints, which provide HTTP based
15       access  to  application  metrics.   The  default  config  directory  is
16       $PCP_PMDAS_DIR/prometheus/config.d/,   see   ``CONFIGURATION  SOURCES''
17       below.  The default URL fetch timeout is 2 seconds.  The default  user,
18       if  not  specified  with the -u option, is the current user.  If the -n
19       option is given, the list of configuration files  will  not  be  sorted
20       prior  to  processing.   This list is sorted by default but that can be
21       expensive if there are a large  number  of  configuration  files  (URLs
22       and/or scripts).
23
24       If the -D option is given, additional diagnostic messages will be writ‐
25       ten to the PMDA log file, which is $PCP_LOG_DIR/pmcd/prometheus.log  by
26       default  (see  also  -lbelow).  In addition, the metric prometheus.con‐
27       trol.debug controls the same debug flag and can be set with the follow‐
28       ing command:
29            pmstore prometheus.control.debug value
30       where  value is either 1 (to enable verbose log messages) or 0 (to dis‐
31       able verbose log messages).  This is particularly useful for  examining
32       the  http  headers  passed  to  each fetch request, filter settings and
33       other processing details that are logged when  the  debugging  flag  is
34       enabled.
35
36       The  -d  option may be used to override the default performance metrics
37       domain number, which defaults to 144.  It is strongly  recommended  not
38       to  change  this.  The domain number should be different for every PMDA
39       on the one host,  and  the  same  domain  number  should  be  used  for
40       pmdaprometheus PMDA on all hosts.
41
42       The  -l  option  may  be used to specify logfile as the destination for
43       PMDA messages instead of the default, $PCP_LOG_DIR/pmcd/prometheus.log.
44       As  a  special  case, logfile may be "-" to send messages to the stderr
45       stream instead, e.g.  -l-.  This would normally be  the  stderr  stream
46       for  the  parent  process,  pmcd(1),  which  may itself have redirected
47       stderr.  This redirection is normally most useful  in  a  containerized
48       environment, or when using dbpmda(1).
49

CONFIGURATION SOURCES

51       As   it   runs,   pmdaprometheus  periodically  recursively  scans  the
52       $PCP_PMDAS_DIR/prometheus/config.d directory (or the  directory  speci‐
53       fied with the -c option), looking for source URL files (*.url) and exe‐
54       cutable scripts or binaries.  Any files that do not have the .url  suf‐
55       fix  or  are  not  executable,  are ignored - this allows documentation
56       files such as "README" and non-executable "common" script function def‐
57       initions to be present without being considered as config files.
58
59       A  remote server does not have to be up or stay running - the PMDA tol‐
60       erates remote URLs that may come and go over time.  The PMDA will relay
61       data  and  metadata  when/if they are available, and will return errors
62       when/if they are down.  PCP metric IDs, internal and external  instance
63       domain  identifiers  are persisted and will be restored when individual
64       metric sources become available and/or when the PMDA is restarted.   In
65       addition,  the PMDA checks directory modification times and will rescan
66       for new or changed configuration files dynamically.  It is  not  neces‐
67       sary  to  restart the PMDA when adding, removing or changing configura‐
68       tion files.
69

URL SOURCES

71       Each file with the .url suffix found in the config  directory  or  sub-
72       directory   contains   one   complete   HTTP  or  HTTPS  URL  at  which
73       pmdaprometheus can reach a Prometheus endpoint.  Local file  access  is
74       also  supported  with  a  conventional file://somepath/somefile URL, in
75       which case somepath/somefile should contain prometheus formatted metric
76       data.
77
78       The  first  line  of a .url config file should be the URL, as described
79       above.  Subsequent lines, if any, are prefixed with a keyword that  can
80       be  used  to  alter  the http GET request.  A keyword must end with ':'
81       (colon) and the text extends to the end of  the  line.   Comment  lines
82       that start with # and blank lines are ignored.  The only currently sup‐
83       ported keywords are HEADER: and FILTER:.
84
85       HEADER: headername: value ... to end of line
86       Adds headername and its value to the headers passed  in  the  http  GET
87       request  for  the  configured  URL.  An example configuration file that
88       provides 3 commonly used headers and an authentication token might be :
89
90          http://somehost/path/endpoint.html
91          # this is a comment
92          HEADER: Accept: text/html
93          HEADER: Keep-Alive: 300
94          HEADER: Connection: keep-alive
95          HEADER: Authorization: token ABCDEF1234567890
96
97       As mentioned above, header values extend to the end of the line.   They
98       may  contain  any  valid characters, including colons.  Multiple spaces
99       will be collapsed to a single space, and leading  and  trailing  spaces
100       are  trimmed.   A  common use for headers is to configure a proxy agent
101       and the assorted parameters it may require.
102
103       FILTER: INCLUDE METRIC regex
104       or
105       FILTER: EXCLUDE METRIC regex
106       Dynamically created metric  names  that  match  regex  will  be  either
107       included  or excluded in the name space, as specified.  The simple rule
108       is that the first matching filter regex for a particular metric name is
109       the  rule  that  prevails.  If no filter regex matches (or there are no
110       filters), then the metric is included by default, i.e. the default fil‐
111       ter  if  none are specified is FILTER: INCLUDE METRIC .*  This is back‐
112       ward compatible with older versions of the configuration file that  did
113       not  support  filters.   Multiple FILTER: lines would normally be used,
114       e.g. to include some  metrics  but  exclude  all  others,  use  FILTER:
115       EXCLUDE  METRIC  .*   as  the  last of several filters that include the
116       desired metrics.  Conversely, to exclude some metrics but  include  all
117       others, use FILTER: EXCLUDE METRIC regex.  In this case it's not neces‐
118       sary (though doesn't hurt) to specify the final FILTER: INCLUDE  METRIC
119       .*  because, as stated above, any metric that does not match any filter
120       regex will be included by default.
121
122       Label filtering uses similar FILTER:  syntax  and  semantics.   FILTER:
123       EXCLUDE LABEL regex will delete all labels matching regex from all met‐
124       rics defined in the configuration file.  The same rules as for  metrics
125       apply  for  labels  too  -  an  implicit rule: FILTER: INCLUDE LABEL .*
126       applies to all labels that do not match any earlier filter rule.
127
128       Caution is needed with label filtering because by default,  all  labels
129       are used to construct the PCP instance name.  By excluding some labels,
130       the instance names will change.  Excluding all labels for a  particular
131       metric  changes  that  metric  to  be  singular,  i.e. have no instance
132       domain.  In addition, by excluding some labels, different instances  of
133       the same metric may become duplicates.  When such duplicates occur, the
134       last duplicate instance returned by the end-point URL prevails over any
135       earlier  instances.   For  these  reasons, it is recommended that label
136       filtering rules be configured when  the  configuration  file  is  first
137       defined,  and  not  changed thereafter.  If a label filtering change is
138       required, the configuration file should be renamed,  which  effectively
139       defines a new metric, with the new (or changed) instance naming.
140
141       Unrecognized  keywords  in configuration files are reported in the PMDA
142       log file but otherwise ignored.
143

SCRIPTED SOURCES

145       Executable scripts present  in  the  $PCP_PMDAS_DIR/prometheus/config.d
146       directory  or  sub-directories  will  be executed and the stdout stream
147       containing prometheus formatted metric data will be parsed as though it
148       had  come  from a URL or file.  The stderr stream from a script will be
149       sent  to  the  PMDA  log  file,  which  by  default  can  be  found  in
150       $(PCP_LOG_DIR)/pmcd/prometheus.log.
151
152       Note that scripted sources do not support label or metric filtering (as
153       described above for URL sources) - they can simply do their own filter‐
154       ing  in  the  script  itself  with  sed(1), awk(1), or whatever tool is
155       desired.
156
157       A simple example of a scripted config entry follows:
158
159          #! /bin/sh
160          awk '{
161              print("# HELP loadavg local load average")
162              print("# Type loadavg gauge")
163              printf("loadavg {interval=\"1-minute\"} %.2f\n", $1)
164              printf("loadavg {interval=\"5-minute\"} %.2f\n", $2)
165              printf("loadavg {interval=\"15-minute\"} %.2f\n", $3)
166          }' /proc/loadavg
167
168       This script produces the  following  Prometheus-formatted  metric  data
169       when run:
170
171          # HELP loadavg local load average
172          # Type loadavg gauge
173          loadavg {interval="1-minute"} 0.12
174          loadavg {interval="5-minute"} 0.27
175          loadavg {interval="15-minute"} 0.54
176
177       If  the  above  script  was  saved  and made executable in a file named
178       $PCP_PMDAS_DIR/prometheus/config.d/local/system.sh  then   this   would
179       result  in a new PCP metric named prometheus.local.system.loadavg which
180       would have  three  instances  for  the  current  load  average  values:
181       1-minute, 5-minute and 15-minute.
182
183       Scripted config entries may produce more than one PCP leaf metric name.
184       For example, the above "system.sh" script could also export other  met‐
185       rics such as CPU statistics, by reading /proc/stat on the local system.
186       Such additional metrics would appear as peer metrics in  the  same  PCP
187       metric  subtree.   In the case of CPU counters, the metric type defini‐
188       tion should be counter, not gauge.  For full details of the  prometheus
189       exposition  formats, see https://prometheus.io/docs/instrumenting/expo
190       sition_formats.
191

METRIC NAMING

193       All metrics from a file named JOB.*  will be exported  as  PCP  metrics
194       with  the  prometheus.JOB  metric name prefix.  Therefore, the JOB name
195       must be a valid non-leaf name for PCP PMNS metric names.   If  the  JOB
196       name  has  multiple  dot-separated components, the resulting PMNS names
197       will include those components and care is needed to ensure there are no
198       overlapping  definitions,  e.g.  metrics  returned  by JOB.response may
199       overlap or conflict with metrics returned by JOB.response.time.
200
201       Config file entries (URLs or scripts) found in  subdirectories  of  the
202       config  directory  will  also result in hierarchical metric names.  For
203       example,   a   config   file    named    $PCP_PMDAS_DIR/prometheus/con‐
204       fig.d/mysource/latency/get.url will result in metrics being created (by
205       fetching that source URL) below prometheus.mysource.latency.get in  the
206       PCP namespace.  Scripts found in subdirectories of the config directory
207       similarly result in hierarchical PCP metric names.
208

DYNAMIC METRIC NAMES

210       As described above, changes and new additions can be made to  files  in
211       the  configuration directory without having to restart the PMDA.  These
212       changes are detected automatically  and  the  PCP  metric  names  below
213       prometheus  in  the  PMNS will be updated accordingly, i.e. new metrics
214       will be dynamically added and/or existing metrics  removed.   In  addi‐
215       tion,  pmdaprometheus  honors the PMCD_NAMES_CHANGE pmFetch(3) protocol
216       that was introduced in PCP version 4.0.  In particular,  if  prometheus
217       metrics are being logged by a PCP version 4.0 or later pmlogger(1), new
218       metrics that appear as a result of changes in  the  PMDA  configuration
219       directory  will  automatically start to be logged, provided the root of
220       the prometheus PMDA namespace is configured for logging in the pmlogger
221       configuration file.  See pmlogger(1) for details.  An example of such a
222       pmlogger configuration file is :
223
224          log mandatory on 2 second {
225               # log all metrics below the root of the prometheus namespace
226               prometheus
227          }
228

CONTROL METRICS

230       The PMDA maintains special control metrics, as described below.   Apart
231       from  prometheus.control.debug,  each of these metrics is a counter and
232       has one instance for  each  configured  metric  source.   The  instance
233       domain is adjusted dynamically as new sources are discovered.  If there
234       are no sources configured, the metric names are still defined  but  the
235       instance domain will be empty and a fetch will return no values.
236
237       prometheus.control.calls
238              total  number  of  times  each configured metric source has been
239              fetched (if it's a URL) or executed (if it's  a  script),  since
240              the PMDA started.
241
242       prometheus.control.fetch_time
243              Total  time  in  milliseconds that each configured metric source
244              has taken to return a document, excluding the time to parse  the
245              document.
246
247       prometheus.control.parse_time
248              Total  time  in  milliseconds that each configured metric source
249              has taken to parse each document, excluding the  time  to  fetch
250              the document.
251
252       When converted to a rate, the calls metric represents the average fetch
253       rate of each source over the sampling interval (time delta between sam‐
254       ples).   The  fetch_time  and  parse_time counters, when converted to a
255       rate, represent the average fetch and parsing  latency  (respectfully),
256       during the sampling interval.
257
258       The prometheus.control.debug metric has a singular value, defaulting to
259       0.  If a non-zero value is stored into this  metric  using  pmstore(1),
260       additional debug messages will be written to the PMDA log file.
261

LIMITATIONS

263       pmdaprometheus  and  libpcp internals impose some numerical constraints
264       about the number of sources (4095), metrics (1024) within each  source,
265       and instances for each metric (4194304).
266

INSTALLATION

268       Install the Prometheus PMDA by using the Install script as root:
269
270             # cd $PCP_PMDAS_DIR/prometheus
271             # ./Install
272
273       To uninstall, do the following as root:
274
275             # cd $PCP_PMDAS_DIR/prometheus
276             # ./Remove
277
278       pmdaprometheus  is  launched  by  pmcd(1)  and should never be executed
279       directly.  The Install and Remove scripts notify pmcd when the agent is
280       installed or removed.
281
282       When  scripts  and .url files are added, removed or changed in the con‐
283       figuration directory, it is usually not necessary to restart the PMDA -
284       the  changes will be detected and managed on subsequent requests to the
285       PMDA.
286

FILES

288       $PCP_PMDAS_DIR/prometheus/Install
289           installation script for the pmdaprometheus agent
290
291       $PCP_PMDAS_DIR/prometheus/Remove
292           undo installation script for the pmdaprometheus agent
293
294       $PCP_PMDAS_DIR/prometheus/config.d/
295           contains URLs and scripts  used  by  the  pmdaprometheus  agent  as
296           sources of prometheus metric data.
297
298       $PCP_LOG_DIR/pmcd/prometheus.log
299           default log file for error messages from pmdaprometheus
300
301       $PCP_VAR_DIR/config/144.*
302           files  containing internal tables for metric and instance ID number
303           persistence (domain 144).
304

PCP ENVIRONMENT

306       Environment variables with the prefix PCP_ are used to parameterize the
307       file  and  directory names used by PCP.  On each installation, the file
308       /etc/pcp.conf contains the  local  values  for  these  variables.   The
309       $PCP_CONF  variable may be used to specify an alternative configuration
310       file, as described in pcp.conf(5).
311

SEE ALSO

313       pmcd(1), pminfo(1), pmlogger(1),  pmstore(1),  PMWEBAPI(3),  pmFetch(3)
314       and https://prometheus.io/docs/instrumenting/exposition_formats.
315
316
317
318Performance Co-Pilot                  PCP                    PMDAPROMETHEUS(1)
Impressum