pmproxy
proxy for performance metrics collector and querying
- Provided by: pcp (Version: 7.2.1-2)
- Report a bug
proxy for performance metrics collector and querying
pmproxy [-AdfFt?] [-c conffile] [-D debug] [-h host[,host ...] [-i ipaddress] [-l logfile] [-L bytes] [-p port[,port ...] [-r port[,port ...] [-s sockname] [-U username] [-x outfile]
pmproxy acts as a protocol proxy, allowing Performance Co-Pilot (PCP) monitoring clients to connect to one or more pmcd(1) and/or key-value servers (such as https://valkey.io/) indirectly.
In its default mode of operation pmproxy provides the REST API for PCP services (see PMWEBAPI(3) for details). This includes provision of an Open Metrics - https://openmetrics.io - text interface for PCP metrics at /metrics, real-time access to PCP metrics through the /pmapi interfaces, and access to the fast, scalable PCP time series query capabilities offered in conjunction with a key-value server (see pmseries(1) for details) via the /query REST interfaces.
pmproxy can be deployed in a firewall domain, or on a cluster ``head'' node where the IP (Internet Protocol) address of the hosts where pmcd and/or a key-value server (such as https://valkey.io/) are running may be unknown to the PCP monitoring clients, but where the IP address of the host running pmproxy is known to these clients. Similarly, the clients may have network connectivity only to the host where pmproxy is running, while there is network connectivity from that host to the hosts of interest where pmcd and/or a key-value server are running.
The behaviour of the PCP monitoring clients is controlled by either the PMPROXY_HOST environment variable or through the extended hostname specification (see PCPIntro(1) for details). If neither of these mechanisms is used, clients will make their PMAPI(3) connections directly to pmcd. If the proxy hostname syntax is used or PMPROXY_HOST is set, then this should be the hostname or IP address of the system where pmproxy is running, and the clients will connect to pmcd or a key-value server indirectly through the protocol proxy services of pmproxy.
The available command line options are:
At most one of -f and -F may be specified.
When running in the timeseries mode of operation, runtime configuration is relatively complex and typically handled via the $PCP_SYSCONF_DIR/pmproxy/pmproxy.conf file. This file is in the common ``ini'' format, with section headers and individual variables and values with each section. The configuration file installed as part of PCP documents every available section and option.
At a high level, the [pmproxy] section can be used to explicitly enable or disable each of the different protocols.
The [http] section provides fine-tuning over HTTP server settings used by pmproxy. chunksize sets the chunked transfer encoding buffer size, and defaults to the system pagesize. Access control HTTP protocol settings can be adjusted using the Access-Control-Allow-Headers and Access-Control-Max-Age options. Discussion of these HTTP protocol headers is beyond the scope of this document, but suitable default values are described within the pmproxy.conf configuration file.
The [keys] section allows connection information for one or more backing key-value server processes to be configured (hostnames and ports). Note to access multiple (scalable) key-value servers, the servers variable in this section can be a comma-separated list of hostname:port pairs. Alternatively, it can be a single key-value server host that will be queried using the "CLUSTER INFO" command to automatically configure multiple backing hosts.
In earlier versions of PCP (before 6) an alternative configuration setting section was used for this purpose - key-value servers were specified in the [pmseries] section and this is still accepted as a fallback for backwards compatibility.
Normally, pmproxy is started automatically at boot time and stopped when the system is being brought down. Under certain circumstances it is necessary to start or stop pmproxy manually. To do this one must become superuser and type
# $PCP_RC_DIR/pmproxy start
to start pmproxy, or
# $PCP_RC_DIR/pmproxy stop
to stop pmproxy. Starting pmproxy when it is already running is the same as stopping it and then starting it again.
Normally pmproxy listens for PCP client connections on TCP/IP port number 44322 (as well as 44323 with timeseries enabled) registered at https://www.iana.org/. Either the environment variable PMPROXY_PORT or the -p command line option may be used to specify alternative port number(s) when pmproxy is started; in each case, the specification is a comma-separated list of one or more numerical port numbers. Should both methods be used or multiple -p options appear on the command line, pmproxy will listen on the union of the set of ports specified via all -p options and the PMPROXY_PORT environment variable. If non-default ports are used with pmproxy care should be taken to ensure that PMPROXY_PORT is also set in the environment of any client application that will connect to pmproxy, or that the extended host specification syntax is used (see PCPIntro(1) for details).
If pmproxy is already running the message "Error: OpenRequestSocket bind: Address already in use" will appear. This may also appear if pmproxy was shutdown with an outstanding request from a client. In this case, a request socket has been left in the TIME_WAIT state and until the system closes it down (after some timeout period) it will not be possible to run pmproxy.
In addition to the standard PCP debugging options, see pmdbg(1), pmproxy currently supports the debugging option context for tracing client connections and disconnections.
In addition to the PCP environment variables described in the PCP ENVIRONMENT section below, there are several environment variables that influence the interactions between a PCP monitoring client, pmproxy and pmcd.
If set to the value 1, the PMPROXY_LOCAL environment variable will cause pmproxy to run in a localhost-only mode of operation, where it binds only to the loopback interface.
The PMPROXY_MAXPENDING variable can be set to indicate the maximum length to which the queue of pending client connections may grow.
Environment variables with the prefix PCP_ are used to parameterize the file and directory names used by PCP. On each installation, the file /etc/pcp.conf contains the local values for these variables. The $PCP_CONF variable may be used to specify an alternative configuration file, as described in pcp.conf(5).
For environment variables affecting PCP tools, see pmGetOptions(3).
The -D or --debug option enables the output of additional diagnostics on stderr to help triage problems, although the information is sometimes cryptic and primarily intended to provide guidance for developers rather than for end-users. debug is a comma separated list of debugging options; use pmdbg(1) with the -l option to obtain a list of the available debugging options and their meaning.
Debugging options specific to pmproxy are as follows:
| Option | Description |
| appl0 | client connections and disconnections |
| appl1 | desperate logging mode, where a period followed by the PID of pmproxy is inserted in the name of Rlogfile before the last period, so for example pmproxy.log becomes pmproxy.<pid>.log |
| appl2 | log incoming HTTP URLs (this is also enabled by the http debugging option, but the latter has broader scope because it turns on debugging in the libraries that pmproxy uses) |
PCPIntro(1), pmcd(1), pmdbg(1), pmlogger(1), pmseries(1), PMAPI(3), PMWEBAPI(3), pmGetOptions(3), pcp.conf(5) and pcp.env(5).