PMDAOPENMETRICS(1) General Commands Manual PMDAOPENMETRICS(1) (NAME) pmdaopenmetrics - OpenMetrics (SYNOPSIS) $PCP_PMDAS_DIR/openmetrics/pmdaopenmetrics [-D] [-n] [-c config] [-d domain] [-l logfile] [-R refresh_timeout] [-r root] [-t timeout] [-u user] (DESCRIPTION) pmdaopenmetrics << >> (PMDA) PCP OpenMetrics ( HTTP ) . PMDA Prometheus PCP PCP . config $PCP_PMDAS_DIR/openmetrics/config.d/ ``CONFIGURATION SOURCES'' . (timeout) URL 2 . (user) -u . -n . (URL / ) . -D PMDA $PCP_LOG_DIR/pmcd/openmetrics.log ( -l ). openmetrics.control.debug : pmstore openmetrics.control.debug value value 1 ( ) 0 ( ) . http . -d domain () 144 . . domain PMDA domain PMDA pmdaopenmetrics . -r openmetrics . -l logfile PMDA $PCP_LOG_DIR/pmcd/openmetrics.log . logfile "-" stderr -l-. stderr pmcd(1) stderr . dbpmda(1) . -r openmetrics root . pmdaopenmetrics PMDA . PMDA -d . -r . -R timeout ( ) . 10 ..SH " (CONFIGURATION SOURCES)" pmdaopenmetrics $PCP_PMDAS_DIR/openmetrics/config.d ( -c) URL (*.url) . .url - <> <> . - PMDA URL . PMDA . PCP (instance domain) / PMDA . PMDA . PMDA . URL (URL SOURCES) .url URL HTTP HTTPS pmdaopenmetrics OpenMetrics . URL file:///somepath/somefile somepath/somefile openmetrics . .url URL . http GET . ':' ( ) . # . HEADER: FILTER: . HEADER: headername: value ... to end of line headername http GET URL . : http://somehost/path/endpoint.html # this is a comment HEADER: Accept: text/html HEADER: Keep-Alive: 300 HEADER: Connection: keep-alive HEADER: Authorization: token ABCDEF1234567890 . . (trim) . proxy agent ..SH " (METRIC FILTERING)" . . : FILTER: INCLUDE METRIC regex FILTER: EXCLUDE METRIC regex regex . PMNS ( URL ) regex . regex . regex ( ) : FILTER: INCLUDE METRIC .* . FILTER: FILTER: EXCLUDE METRIC .* . FILTER: EXCLUDE METRIC regex . ( ) FILTER: INCLUDE METRIC .* regex . (LABEL FILTERING) FILTER: . FILTER: EXCLUDE LABEL regex regex . - : FILTER: INCLUDE LABEL .* . FILTER: OPTIONAL LABEL regex ( ) . ( intrinsic) . ( OPTIONAL ) PM_LABEL_OPTIONAL notes . . pmLookupLabels(3) . . PCP . ( ) . (singular) (instance domain) . URL . URL . . ( URL ) ( ) . PMDA ..SH " (SCRIPTED SOURCES)" $PCP_PMDAS_DIR/openmetrics/config.d stdout openmetrics URL . stderr PMDA $(PCP_LOG_DIR)/pmcd/openmetrics.log . ( URL ) - sed(1) awk(1) . : #! /bin/sh awk '{ print("# HELP loadavg local load average") print("# TYPE loadavg gauge") printf("loadavg {interval=\"1-minute\"} %.2f\n", $1) printf("loadavg {interval=\"5-minute\"} %.2f\n", $2) printf("loadavg {interval=\"15-minute\"} %.2f\n", $3) }' /proc/loadavg OpenMetrics : # HELP loadavg local load average # TYPE loadavg gauge loadavg {interval="1-minute"} 0.12 loadavg {interval="5-minute"} 0.27 loadavg {interval="15-minute"} 0.54 $PCP_PMDAS_DIR/openmetrics/config.d/local/system.sh PCP openmetrics.local.system.loadavg : 1-minute 5-minute 15-minute. PCP . <> /proc/stat CPU . PCP . CPU counter gauge. openmetrics : https://github.com/OpenObservability/OpenMetrics/blob/master/specification/OpenMetrics.md. SELinux (SELinux CONSIDERATIONS) PMDA pmdaopenmetrics SELinux pmcd(1) . . SELinux AVC . pmcd PMDA . SELinux . () AVC audit2allow semodule : $ sudo grep '^type=AVC.*pcp' /var/log/audit/audit.log \ | audit2allow -M mypolicy $ sudo semodule -i mypolicy.pp RC pmcd ( /etc/pcp/pmcd/rc.local) . : audit2allow(1) semodule(1)..SH (METRIC NAMING) JOB.* PCP openmetrics.JOB (export) . JOB (non-leaf) PMNS PCP . JOB PMNS JOB.response JOB.response.time . ( URL ) . $PCP_PMDAS_DIR/openmetrics/config.d/mysource/latency/get.url ( URL ) openmetrics.mysource.latency.get PCP . PCP . (DYNAMIC METRIC NAMES) PMDA . PCP openmetrics PMNS / . pmdaopenmetrics PMCD_NAMES_CHANGE pmFetch(3) 4.0 PCP . openmetrics pmlogger(1) 4.0 (log) PMDA PMDA openmetrics pmlogger . pmlogger(1) . pmlogger : log mandatory on 2 second { # log all metrics below the root of the openmetrics namespace openmetrics } (METADATA) URL PMDA openmetrics (semantics) . # PCP5 # PCP . PCP pmLookupDesc(3) pmParseUnitsStr(3) . <> (URL ) . URL / . URL . (syntax) : METADATA: regex type indom semantics units ... EOL : METADATA: regex (extended regular expression) URL type PCP (32 u32 64 u64 float double) indom (instance domain) PM_INDOM_NULL semantics counter instant discrete units none pmParseUnitsStr(3) . /metrics Grafana localhost URL grafana_api_response_status_total (type) response counter count : http://localhost:3000/metrics FILTER: INCLUDE METRIC grafana_api_response_status_total FILTER: EXCLUDE METRIC .* METADATA: grafana_api_response_status_total u32 response counter count indom PM_INDOM_NULL ( singular ) ..SH " (CONTROL METRICS)" PMDA . openmetrics.control.debug . openmetrics.control.status . openmetrics.control URL . URL . openmetrics.control . . openmetrics.control.status . http 200 success . - URL . openmetrics.control.status_code openmetrics.control.status . 200 . openmetrics.control.status . openmetrics.control.calls PMDA ( URL ) ( ). . openmetrics.control.fetch_time . PMDA . openmetrics.control.parse_time . PMDA . calls ( ) . fetch_time parse_time . openmetrics.control.debug 0 . pmstore(1) PMDA . (LIMITATIONS) pmdaopenmetrics libpcp (4095) (1024) (4194304) . (INSTALLATION) PMDA OpenMetrics Install (root) : # cd $PCP_PMDAS_DIR/openmetrics # ./Install (root) : # cd $PCP_PMDAS_DIR/openmetrics # ./Remove pmdaopenmetrics pmcd(1) . Install Remove pmcd . .url PMDA - PMDA ..SH " (FILES)" $PCP_PMDAS_DIR/openmetrics/Install pmdaopenmetrics $PCP_PMDAS_DIR/openmetrics/Remove pmdaopenmetrics $PCP_PMDAS_DIR/openmetrics/config.d/ (URL) pmdaopenmetrics openmetrics . $PCP_LOG_DIR/pmcd/openmetrics.log pmdaopenmetrics $PCP_VAR_DIR/config/144.* ( ). PCP (PCP ENVIRONMENT) PCP_ PCP . /etc/pcp.conf . $PCP_CONF pcp.conf(5) . (SEE ALSO) PCPIntro(1), audit2allow(1), pmcd(1), pminfo(1), pmlogger(1), pmstore(1), PMWEBAPI(3), pmFetch(3), pmLookupLabels(3), semodule(1) https://prometheus.io/docs/instrumenting/exposition_formats. Performance Co-Pilot PCP PMDAOPENMETRICS(1)