---
title: "9. Statistics and Monitoring"
linkTitle: "9. Stats & Monitoring"
weight: 330
description: "CSV and typed stats, runtime CLI commands, master CLI, and stats files"
icon: fa-solid fa-chart-line
module: [HAPROXY]
categories: [Task]
aliases:
- /haproxy/management/statistics-and-monitoring/
- /docs/haproxy/management/statistics-and-monitoring/
- /haproxy/statistics-and-monitoring/
upstream_link: "https://docs.haproxy.org/3.4/management.html"
upstream_name: "HAProxy 3.4 Management Guide"
upstream_ref: "v3.4.4, chapter 9"
---
It is possible to query HAProxy about its status. The most commonly used mechanism is the HTTP
statistics page. This page also exposes an alternative CSV output format for monitoring tools. The
same format is provided on the Unix socket.
Statistics are regroup in categories labelled as domains, corresponding to the multiple components
of HAProxy. There are two domains available: proxy and resolvers. If not specified, the proxy domain
is selected. Note that only the proxy statistics are printed on the HTTP page.
## 9.1. CSV format {#section-9-1}
The statistics may be consulted either from the unix socket or from the HTTP page. Both means
provide a CSV format whose fields follow. The first line begins with a sharp ('#') and has one word
per comma-delimited field which represents the title of the column. All other lines starting at the
second one use a classical CSV format using a comma as the delimiter, and the double quote ('"') as
an optional text delimiter, but only if the enclosed text is ambiguous (if it contains a quote or a
comma). The double-quote character ('"') in the text is doubled ('""'), which is the format that
most tools recognize. Please do not insert any column before these ones in order not to break tools
which use hard-coded column positions.
For proxy statistics, after each field name, the types which may have a value for that field are
specified in brackets. The types are L (Listeners), F (Frontends), B (Backends), and S (Servers).
There is a fixed set of static fields that are always available in the same order. A column
containing the character '-' delimits the end of the static fields, after which presence or order of
the fields are not guaranteed.
Here is the list of static fields using the proxy statistics domain:
```text
0. pxname [LFBS]: proxy name
1. svname [LFBS]: service name (FRONTEND for frontend, BACKEND for backend,
any name for server/listener)
2. qcur [..BS]: current queued requests. For the backend this reports the
number queued without a server assigned.
3. qmax [..BS]: max value of qcur
4. scur [LFBS]: current sessions
5. smax [LFBS]: max sessions
6. slim [LFBS]: configured session limit
7. stot [LFBS]: cumulative number of sessions
8. bin [LFBS]: bytes in
9. bout [LFBS]: bytes out
10. dreq [LFB.]: requests denied because of security concerns.
- For tcp this is because of a matched tcp-request content rule.
- For http this is because of a matched http-request or tarpit rule.
11. dresp [LFBS]: responses denied because of security concerns.
- For http this is because of a matched http-request rule, or
"option checkcache".
12. ereq [LF..]: request errors. Some of the possible causes are:
- early termination from the client, before the request has been sent.
- read error from the client
- client timeout
- client closed connection
- various bad requests from the client.
- request was tarpitted.
13. econ [..BS]: number of requests that encountered an error trying to
connect to a backend server. The backend stat is the sum of the stat
for all servers of that backend, plus any connection errors not
associated with a particular server (such as the backend having no
active servers).
14. eresp [..BS]: response errors. srv_abrt will be counted here also.
Some other errors are:
- write error on the client socket (won't be counted for the server stat)
- failure applying filters to the response.
15. wretr [..BS]: number of times a connection to a server was retried.
16. wredis [..BS]: number of times a request was redispatched to another
server. The server value counts the number of times that server was
switched away from.
17. status [LFBS]: status (UP/DOWN/NOLB/MAINT/MAINT(via)/MAINT(resolution)...)
18. weight [..BS]: total effective weight (backend), effective weight (server)
19. act [..BS]: number of active servers (backend), server is active (server)
20. bck [..BS]: number of backup servers (backend), server is backup (server)
21. chkfail [...S]: number of failed checks. (Only counts checks failed when
the server is up.)
22. chkdown [..BS]: number of UP->DOWN transitions. The backend counter counts
transitions to the whole backend being down, rather than the sum of the
counters for each server.
23. lastchg [..BS]: number of seconds since the last UP<->DOWN transition
24. downtime [..BS]: total downtime (in seconds). The value for the backend
is the downtime for the whole backend, not the sum of the server downtime.
25. qlimit [...S]: configured maxqueue for the server, or nothing in the
value is 0 (default, meaning no limit)
26. pid [LFBS]: process id (0 for first instance, 1 for second, ...)
27. iid [LFBS]: unique proxy id
28. sid [L..S]: server id (unique inside a proxy)
29. throttle [...S]: current throttle percentage for the server, when
slowstart is active, or no value if not in slowstart.
30. lbtot [..BS]: total number of times a server was selected, either for new
sessions, or when re-dispatching. The server counter is the number
of times that server was selected.
31. tracked [...S]: id of proxy/server if tracking is enabled.
32. type [LFBS]: (0=frontend, 1=backend, 2=server, 3=socket/listener)
33. rate [.FBS]: number of sessions per second over last elapsed second
34. rate_lim [.F..]: configured limit on new sessions per second
35. rate_max [.FBS]: max number of new sessions per second
36. check_status [...S]: status of last health check, one of:
UNK -> unknown
INI -> initializing
SOCKERR -> socket error
L4OK -> check passed on layer 4, no upper layers testing enabled
L4TOUT -> layer 1-4 timeout
L4CON -> layer 1-4 connection problem, for example
"Connection refused" (tcp rst) or "No route to host" (icmp)
L6OK -> check passed on layer 6
L6TOUT -> layer 6 (SSL) timeout
L6RSP -> layer 6 invalid response - protocol error
L7OK -> check passed on layer 7
L7OKC -> check conditionally passed on layer 7, for example 404 with
disable-on-404
L7TOUT -> layer 7 (HTTP/SMTP) timeout
L7RSP -> layer 7 invalid response - protocol error
L7STS -> layer 7 response error, for example HTTP 5xx
Notice: If a check is currently running, the last known status will be
reported, prefixed with "* ". e. g. "* L7OK".
37. check_code [...S]: layer5-7 code, if available
38. check_duration [...S]: time in ms took to finish last health check
39. hrsp_1xx [.FBS]: http responses with 1xx code
40. hrsp_2xx [.FBS]: http responses with 2xx code
41. hrsp_3xx [.FBS]: http responses with 3xx code
42. hrsp_4xx [.FBS]: http responses with 4xx code
43. hrsp_5xx [.FBS]: http responses with 5xx code
44. hrsp_other [.FBS]: http responses with other codes (protocol error)
45. hanafail [...S]: failed health checks details
46. req_rate [.F..]: HTTP requests per second over last elapsed second
47. req_rate_max [.F..]: max number of HTTP requests per second observed
48. req_tot [.FB.]: total number of HTTP requests received
49. cli_abrt [..BS]: number of data transfers aborted by the client
50. srv_abrt [..BS]: number of data transfers aborted by the server
(inc. in eresp)
51. comp_in [.FB.]: number of HTTP response bytes fed to the compressor
52. comp_out [.FB.]: number of HTTP response bytes emitted by the compressor
53. comp_byp [.FB.]: number of bytes that bypassed the HTTP compressor
(CPU/BW limit)
54. comp_rsp [.FB.]: number of HTTP responses that were compressed
55. lastsess [..BS]: number of seconds since last session assigned to
server/backend
56. last_chk [...S]: last health check contents or textual error
57. last_agt [...S]: last agent check contents or textual error
58. qtime [..BS]: the average queue time in ms over the 1024 last requests
59. ctime [..BS]: the average connect time in ms over the 1024 last requests
60. rtime [..BS]: the average response time in ms over the 1024 last requests
(0 for TCP)
61. ttime [..BS]: the average total session time in ms over the 1024 last
requests
62. agent_status [...S]: status of last agent check, one of:
UNK -> unknown
INI -> initializing
SOCKERR -> socket error
L4OK -> check passed on layer 4, no upper layers testing enabled
L4TOUT -> layer 1-4 timeout
L4CON -> layer 1-4 connection problem, for example
"Connection refused" (tcp rst) or "No route to host" (icmp)
L7OK -> agent reported "up"
L7STS -> agent reported "fail", "stop", or "down"
63. agent_code [...S]: numeric code reported by agent if any (unused for now)
64. agent_duration [...S]: time in ms taken to finish last check
65. check_desc [...S]: short human-readable description of check_status
66. agent_desc [...S]: short human-readable description of agent_status
67. check_rise [...S]: server's "rise" parameter used by checks
68. check_fall [...S]: server's "fall" parameter used by checks
69. check_health [...S]: server's health check value between 0 and rise+fall-1
70. agent_rise [...S]: agent's "rise" parameter, normally 1
71. agent_fall [...S]: agent's "fall" parameter, normally 1
72. agent_health [...S]: agent's health parameter, between 0 and rise+fall-1
73. addr [L..S]: address:port or "unix". IPv6 has brackets around the address.
74: cookie [..BS]: server's cookie value or backend's cookie name
75: mode [LFBS]: proxy mode (tcp, http, health, unknown)
76: algo [..B.]: load balancing algorithm
77: conn_rate [.F..]: number of connections over the last elapsed second
78: conn_rate_max [.F..]: highest known conn_rate
79: conn_tot [.F..]: cumulative number of connections
80: intercepted [.FB.]: cum. number of intercepted requests (monitor, stats)
81: dcon [LF..]: requests denied by "tcp-request connection" rules
82: dses [LF..]: requests denied by "tcp-request session" rules
83: wrew [LFBS]: cumulative number of failed header rewriting warnings
84: connect [..BS]: cumulative number of connection establishment attempts
85: reuse [..BS]: cumulative number of connection reuses
86: cache_lookups [.FB.]: cumulative number of cache lookups
87: cache_hits [.FB.]: cumulative number of cache hits
88: srv_icur [...S]: current number of idle connections available for reuse
89: src_ilim [...S]: limit on the number of available idle connections
90. qtime_max [..BS]: the maximum observed queue time in ms
91. ctime_max [..BS]: the maximum observed connect time in ms
92. rtime_max [..BS]: the maximum observed response time in ms (0 for TCP)
93. ttime_max [..BS]: the maximum observed total session time in ms
94. eint [LFBS]: cumulative number of internal errors
95. idle_conn_cur [...S]: current number of unsafe idle connections
96. safe_conn_cur [...S]: current number of safe idle connections
97. used_conn_cur [...S]: current number of connections in use
98. need_conn_est [...S]: estimated needed number of connections
99. uweight [..BS]: total user weight (backend), server user weight (server)
100. agg_server_status [..B.]: backend aggregated gauge of server's status
101. agg_server_status_check [..B.]: (deprecated)
102. agg_check_status [..B.]: backend aggregated gauge of server's state check
status
103. srid [...S]: server id revision
104. sess_other [.F..]: total number of sessions other than HTTP since process
started
105. h1_sess [.F..]: total number of HTTP/1 sessions since process started
106. h2_sess [.F..]: total number of HTTP/2 sessions since process started
107. h3_sess [.F..]: total number of HTTP/3 sessions since process started
108. req_other [.F..]: total number of sessions other than HTTP processed by
this object since the worker process started
109. h1req [.F..]: total number of HTTP/1 sessions processed by this object
since the worker process started
110. h2req [.F..]: total number of hTTP/2 sessions processed by this object
since the worker process started
111. h3req [.F..]: total number of HTTP/3 sessions processed by this object
since the worker process started
112. proto [L...]: protocol
113. priv_idle_cur [...S]: current number of private idle connections
114. reqbin [LFBS]: total number of request bytes received since the worker
process started
115. reqbout [LFBS]: total number of request bytes sent since the worker
process started
116. resbin [LFBS]: total number of response bytes received since the worker
process started
117. resbout [LFBS]: total number of response bytes sent since the worker
process started
```
For all other statistics domains, the presence or the order of the fields are not guaranteed. In
this case, the header line should always be used to parse the CSV data.
## 9.2. Typed output format {#section-9-2}
Both "show info" and "show stat" support a mode where each output value comes with its type and
sufficient information to know how the value is supposed to be aggregated between processes and how
it evolves.
In all cases, the output consists in having a single value per line with all the information split
into fields delimited by colons (':').
The first column designates the object or metric being dumped. Its format is specific to the command
producing this output and will not be described in this section. Usually it will consist in a series
of identifiers and field names.
The second column contains 4 characters respectively indicating the origin, the nature, the scope
and the persistence state of the value being reported. The first character (the origin) indicates
where the value was extracted from. Possible characters are:
```text
M The value is a metric. It is valid at one instant any may change depending
on its nature .
S The value is a status. It represents a discrete value which by definition
cannot be aggregated. It may be the status of a server ("UP" or "DOWN"),
the PID of the process, etc.
K The value is a sorting key. It represents an identifier which may be used
to group some values together because it is unique among its class. All
internal identifiers are keys. Some names can be listed as keys if they
are unique (eg: a frontend name is unique). In general keys come from the
configuration, even though some of them may automatically be assigned. For
most purposes keys may be considered as equivalent to configuration.
C The value comes from the configuration. Certain configuration values make
sense on the output, for example a concurrent connection limit or a cookie
name. By definition these values are the same in all processes started
from the same configuration file.
P The value comes from the product itself. There are very few such values,
most common use is to report the product name, version and release date.
These elements are also the same between all processes.
```
The second character (the nature) indicates the nature of the information carried by the field in
order to let an aggregator decide on what operation to use to aggregate multiple values. Possible
characters are:
```text
A The value represents an age since a last event. This is a bit different
from the duration in that an age is automatically computed based on the
current date. A typical example is how long ago did the last session
happen on a server. Ages are generally aggregated by taking the minimum
value and do not need to be stored.
a The value represents an already averaged value. The average response times
and server weights are of this nature. Averages can typically be averaged
between processes.
C The value represents a cumulative counter. Such measures perpetually
increase until they wrap around. Some monitoring protocols need to tell
the difference between a counter and a gauge to report a different type.
In general counters may simply be summed since they represent events or
volumes. Examples of metrics of this nature are connection counts or byte
counts.
D The value represents a duration for a status. There are a few usages of
this, most of them include the time taken by the last health check and
the time a server has spent down. Durations are generally not summed,
most of the time the maximum will be retained to compute an SLA.
G The value represents a gauge. It's a measure at one instant. The memory
usage or the current number of active connections are of this nature.
Metrics of this type are typically summed during aggregation.
L The value represents a limit (generally a configured one). By nature,
limits are harder to aggregate since they are specific to the point where
they were retrieved. In certain situations they may be summed or be kept
separate.
M The value represents a maximum. In general it will apply to a gauge and
keep the highest known value. An example of such a metric could be the
maximum amount of concurrent connections that was encountered in the
product's life time. To correctly aggregate maxima, you are supposed to
output a range going from the maximum of all maxima and the sum of all
of them. There is indeed no way to know if they were encountered
simultaneously or not.
m The value represents a minimum. In general it will apply to a gauge and
keep the lowest known value. An example of such a metric could be the
minimum amount of free memory pools that was encountered in the product's
life time. To correctly aggregate minima, you are supposed to output a
range going from the minimum of all minima and the sum of all of them.
There is indeed no way to know if they were encountered simultaneously
or not.
N The value represents a name, so it is a string. It is used to report
proxy names, server names and cookie names. Names have configuration or
keys as their origin and are supposed to be the same among all processes.
O The value represents a free text output. Outputs from various commands,
returns from health checks, node descriptions are of such nature.
R The value represents an event rate. It's a measure at one instant. It is
quite similar to a gauge except that the recipient knows that this measure
moves slowly and may decide not to keep all values. An example of such a
metric is the measured amount of connections per second. Metrics of this
type are typically summed during aggregation.
T The value represents a date or time. A field emitting the current date
would be of this type. The method to aggregate such information is left
as an implementation choice. For now no field uses this type.
```
The third character (the scope) indicates what extent the value reflects. Some elements may be per
process while others may be per configuration or per system. The distinction is important to know
whether or not a single value should be kept during aggregation or if values have to be aggregated.
The following characters are currently supported:
```text
C The value is valid for a whole cluster of nodes, which is the set of nodes
communicating over the peers protocol. An example could be the amount of
entries present in a stick table that is replicated with other peers. At
the moment no metric use this scope.
P The value is valid only for the process reporting it. Most metrics use
this scope.
S The value is valid for the whole service, which is the set of processes
started together from the same configuration file. All metrics originating
from the configuration use this scope. Some other metrics may use it as
well for some shared resources (eg: shared SSL cache statistics).
s The value is valid for the whole system, such as the system's hostname,
current date or resource usage. At the moment this scope is not used by
any metric.
```
The fourth character (persistence state) indicates that the value (the metric) is volatile or
persistent across reloads. The following characters are expected:
```text
V The metric is volatile because it is local to the current process so
the value will be lost when reloading.
P The metric is persistent because it may be shared with other co-processes
so that the value is preserved across reloads.
```
Consumers of these information will generally have enough of these 4 characters to determine how to
accurately report aggregated information across multiple processes.
After this column, the third column indicates the type of the field, among "s32" (signed 32-bit
integer), "s64" (signed 64-bit integer), "u32" (unsigned 32-bit integer), "u64" (unsigned 64-bit
integer), "str" (string). It is important to know the type before parsing the value in order to
properly read it. For example a string containing only digits is still a string an not an integer
(eg: an error code extracted by a check).
Then the fourth column is the value itself, encoded according to its type. Strings are dumped as-is
immediately after the colon without any leading space. If a string contains a colon, it will appear
normally. This means that the output should not be exclusively split around colons or some check
outputs or server addresses might be truncated.
## 9.3. Unix Socket commands {#section-9-3}
The stats socket is not enabled by default. In order to enable it, it is necessary to add one line
in the global section of the haproxy configuration. A second line is recommended to set a larger
timeout, always appreciated when issuing commands by hand:
```text
global
stats socket /var/run/haproxy.sock mode 600 level admin
stats timeout 2m
```
It is also possible to add multiple instances of the stats socket by repeating the line, and make
them listen to a TCP port instead of a UNIX socket. This is never done by default because this is
dangerous, but can be handy in some situations:
```text
global
stats socket /var/run/haproxy.sock mode 600 level admin
stats socket ipv4@192.168.0.1:9999 level admin
stats timeout 2m
```
To access the socket, an external utility such as "socat" is required. Socat is a swiss-army knife
to connect anything to anything. We use it to connect terminals to the socket, or a couple of
stdin/stdout pipes to it for scripts. The two main syntaxes we'll use are the following:
```shell
# socat /var/run/haproxy.sock stdio
# socat /var/run/haproxy.sock readline
```
The first one is used with scripts. It is possible to send the output of a script to haproxy, and
pass haproxy's output to another script. That's useful for retrieving counters or attack traces for
example.
The second one is only useful for issuing commands by hand. It has the benefit that the terminal is
handled by the readline library which supports line editing and history, which is very convenient
when issuing repeated commands (eg: watch a counter).
The socket supports three operation modes:
- non-interactive, silent
- interactive, silent
- interactive with prompt
The non-interactive mode is the default when socat connects to the socket. In this mode, a single
line may be sent. It is processed as a whole, responses are sent back, and the connection closes
after the end of the response. This is the mode that scripts and monitoring tools use. It is
possible to send multiple commands in this mode, they need to be delimited by a semi-colon (';').
For example:
```shell
# echo "show info;show stat;show table" | socat /var/run/haproxy stdio
```
If a command needs to use a semi-colon or a backslash (eg: in a value), it must be preceded by a
backslash ('\').
The interactive mode allows new commands to be sent after the ones from the previous lines finish.
It exists in two variants, one silent, which works like the non-interactive mode except that the
socket waits for a new command instead of closing, and one where a prompt is displayed ('\>') at the
beginning of the line. The interactive mode is preferred for advanced tools while the prompt mode is
preferred for humans.
The mode can be changed using the "prompt" command. By default, it toggles the interactive+prompt
modes. Entering "prompt" in interactive mode will switch to prompt mode. The command optionally
takes a specific mode among which:
- "n": non-interactive mode (single command and quits)
- "i": interactive mode (multiple commands, no prompt)
- "p": prompt mode (multiple commands with a prompt)
Since the default mode is non-interactive, "prompt" must be used as the first command in order to
switch it, otherwise the previous command will cause the connection to be closed. Switching to
non-interactive mode will result in the connection to be closed after all the commands of the same
line complete.
For this reason, when debugging by hand, it's quite common to start with the "prompt" command:
```haproxy
# socat /var/run/haproxy readline
prompt
```
> show info ...
Interactive tools might prefer starting with "prompt i" to switch to interactive mode without the
prompt.
Optionally the process' uptime may be displayed in the prompt. In order to enable this, the "prompt
timed" command will enable the prompt and toggle the displaying of the time. The uptime is displayed
in format "d:hh:mm:ss" where "d" is the number of days, and "hh", "mm", "ss" are respectively the
number of hours, minutes and seconds on two digits each:
```haproxy
# socat /var/run/haproxy readline
prompt timed
```
[23:03:34:39]\> show version 2.8-dev9-e5e622-18
[23:03:34:41]\> quit
When the timed prompt is set on the master CLI, the prompt will display the currently selected
process' uptime, so this will work for the master, current worker or an older worker:
```shell
master> prompt timed
[0:00:00:50] master> show proc
(...)
[0:00:00:58] master> @!11955 <-- master, switch to current worker
[0:00:01:03] 11955> @!11942 <-- current worker, switch to older worker
[0:00:02:17] 11942> @ <-- older worker, switch back to master
[0:00:01:10] master>
```
Since multiple commands may be issued at once, haproxy uses the empty line as a delimiter to mark an
end of output for each command, and takes care of ensuring that no command can emit an empty line on
output. A script can thus easily parse the output even when multiple commands were pipelined on a
single line.
Some commands may take an optional payload. To add one to a command, the first line needs to end
with the "\<\<\n" pattern. The next lines will be treated as the payload
and can contain as many lines as needed. To validate a command with a payload, it needs to end with
an empty line.
The payload pattern can be customized in order to change the way the payload ends. In order to end a
payload with something else than an empty line, a customized pattern can be set between '\<\<' and
'\n'. Up to 64 characters can be used in addition to '\<\<', otherwise
this won't be considered a payload. It should be enough to use random payload patterns. For example,
to use a PEM file that contains empty lines and comments:
```haproxy
# echo -e "set ssl cert common.pem <<%EOF%\n$(cat common.pem)\n%EOF%\n" | \
socat /var/run/haproxy.stat -
```
Limitations do exist: The pattern "\<\<" must not be glued to the last word of the line. The length
of a command line must not be greater than tune.bufsize, including the pattern starting the payload,
but excluding the payload itself. The payload size is limited to 128KB by default. This can be
changed by setting "tune.cli.max-payload-size" global parameter, with some cautions. Note the
pattern marking the end of the payload is part of this limit.
When entering a payload while in interactive mode, the prompt will change from "\> " to "+ ".
It is important to understand that when multiple haproxy processes are started on the same sockets,
any process may pick up the request and will output its own stats.
The list of commands currently supported on the stats socket is provided below. If an unknown
command is sent, haproxy displays the usage message which reminds all supported commands. Some
commands support a more complex syntax, generally it will explain what part of the command is
invalid when this happens.
Some commands require a higher level of privilege to work. If you do not have enough privilege, you
will get an error "Permission denied". Please check the "level" option of the "bind" keyword lines
in the configuration manual for more information.
**`abort ssl ca-file `**
```haproxy
abort ssl ca-file
```
Abort and destroy a temporary CA file update transaction.
See also "set ssl ca-file" and "commit ssl ca-file".
**`abort ssl cert `**
```haproxy
abort ssl cert
```
Abort and destroy a temporary SSL certificate update transaction.
See also "set ssl cert" and "commit ssl cert".
**`abort ssl crl-file `**
```haproxy
abort ssl crl-file
```
Abort and destroy a temporary CRL file update transaction.
See also "set ssl crl-file" and "commit ssl crl-file".
**`acme renew `**
```haproxy
acme renew
```
Starts an ACME certificate generation task with the given certificate name. The certificate must be
linked to an acme section, see section 12.8 "ACME" of the configuration manual. See also "acme
status".
**`acme status`**
```haproxy
acme status
```
Show the status of every certificates that were configured with ACME.
This command outputs, separated by a tab:
- The name of the certificate configured in haproxy
- The acme section used in the configuration
- The state of the acme task, either "Running", "Scheduled" or "Stopped"
- The UTC expiration date of the certificate in ISO8601 format
- The relative expiration time (0d if expired)
- The UTC scheduled date of the certificate in ISO8601 format
- The relative schedule time (0d if Running)
Example:
```shell
$ echo "@1; acme status" | socat /tmp/master.sock - | column -t -s $'\t'
# certificate section state expiration date (UTC) expires in scheduled date (UTC) scheduled in
ecdsa.pem LE Running 2020-01-18T09:31:12Z 0d 0h00m00s 2020-01-15T21:31:12Z 0d 0h00m00s
foobar.pem.rsa LE Scheduled 2025-08-04T11:50:54Z 89d 23h01m13s 2025-07-27T23:50:55Z 82d 11h01m14s
```
**`add acl [@] `**
```haproxy
add acl [@]
```
Add an entry into the acl ``. `` is the \#`` or the `` returned by "show acl".
This command does not verify if the entry already exists. Entries are added to the current version
of the ACL, unless a specific version is specified with "@``". This version number must have
preliminary been allocated by "prepare acl", and it will be comprised between the versions reported
in "curr_ver" and "next_ver" on the output of "show acl". Entries added with a specific version
number will not match until a "commit acl" operation is performed on them. They may however be
consulted using the "show acl @``" command, and cleared using a "clear acl @``" command.
This command cannot be used if the reference `` is a name also used with a map. In this case,
the "add map" command must be used instead.
**`add backend from [mode ] [guid ]`**
```haproxy
add backend from [mode ] [guid ]
```
Instantiate a new backend proxy with the name ``.
Only TCP or HTTP proxies can be created. All of the settings are inherited from `` default
proxy instance. By default, it is mandatory to specify the backend mode via the argument of the same
name, unless `` already defines it explicitly. It is also possible to use an optional GUID
argument if wanted.
Servers can be added via the command "add server". The backend is initialized in the unpublished
state. Once considered ready for traffic, use "publish backend" to expose the newly created
instance.
All named default proxies can be used, given that they validate the same inheritance rules applied
during configuration parsing. There is some exceptions though, for example when the mode is neither
TCP nor HTTP.
This command is restricted and can only be issued on sockets configured for level "admin".
**`add map [@]