/metrics
Use the metrics
node to collect important data about your Webapp such as number of processes and outgoing traffic.
This document covers:
Returns the Webapp data in JSON format.
GET /metrics { Authorization: Bearer your-auth-token | Apikey your-api-key-token }
The metrics
node supports Bearer token authentication similar to other WhatsApp Business API nodes. However, if you wish to monitor the metrics
status from an orchestrator, Bearer tokens are not the best option for ongoing checks as they expire every 7 days. To mediate this, you can use an API key, which can be set using the WA_API_KEY
environment variable in the waweb environment
section in the .yml
file of your installation setup.
Note: The API key you set must have a minimum of 12 characters and a maximum of 128 characters.
services: ... waweb: ... environment: ... WA_API_KEY: your-api-key-token
The Webapp must be restarted whenever you change the API key.
As an example, the response might look like this:
{ "metrics": { "web_uptime": { "type": "gauge", "help": "Number of seconds since web server has started", "data": [ { "labels": { "node": "06475793be9d" }, "value": 348842 } ] }, "web_connections": { "type": "counter", "help": "Total number of connections accepted", "data": [ { "labels": { "node": "06475793be9d" }, "value": 23781 } ] }, "web_pending_connections": { "type": "gauge", "help": "Current number of pending connections in the queue", "data": [ { "labels": { "node": "06475793be9d" }, "value": 0 } ] }, "web_max_pending_connections": { "type": "gauge", "help": "Maximum number of pending connections in the queue", "data": [ { "labels": { "node": "06475793be9d" }, "value": 10 } ] }, "web_queue_len": { "type": "gauge", "help": "Size of queue for pending connections", "data": [ { "labels": { "node": "06475793be9d" }, "value": 128 } ] }, "web_idle_processes": { "type": "gauge", "help": "Current number of idle processes", "data": [ { "labels": { "node": "06475793be9d" }, "value": 10 } ] }, "web_total_processes": { "type": "gauge", "help": "Total process limit", "data": [ { "labels": { "node": "06475793be9d" }, "value": 12 } ] }, "web_process_limit_hit": { "type": "counter", "help": "Total number of times reached process limit", "data": [ { "labels": { "node": "06475793be9d" }, "value": 0 } ] }, "web_handled_requests": { "type": "counter", "help": "Total number of requests handled", "data": [ { "labels": { "node": "06475793be9d" }, "value": 29841 } ] }, "web_out_kbytes": { "type": "counter", "help": "Total outgoing traffic in kbytes", "data": [ { "labels": { "node": "06475793be9d" }, "value": 115529 } ] }, "web_requests": { "type": "gauge", "help": "Number of ongoing requests", "data": [ { "labels": { "node": "06475793be9d", "state": "read" }, "value": 1 }, { "labels": { "node": "06475793be9d", "state": "handle-request" }, "value": 2 }, ] }, "api_requests_duration_ms_sum": { "type": "counter", "help": "Total number of durations of API requests", "data": [ { "labels": { "node": "06475793be9d", "result": "200", "method": "GET_v1_groups" }, "value": 753 }, { "labels": { "node": "06475793be9d", "result": "200", "method": "POST_v1_settings_backup" }, "value": 1255 }, { "labels": { "node": "06475793be9d", "result": "200", "method": "PATCH_v1_settings_application" }, "value": 491 }, ... ] }, "api_requests_duration_ms_count": { "type": "counter", "help": "Total number of API requests", "data": [ { "labels": { "node": "06475793be9d", "result": "401", "method": "GET_v1_settings_application" }, "value": 30 }, { "labels": { "node": "06475793be9d", "result": "200", "method": "GET_metrics" }, "value": 5937 }, { "labels": { "node": "06475793be9d", "result": "404", "method": "POST_v1_users_login" }, "value": 1 }, ] }, "api_requests_db_duration_ms_sum": { "type": "counter", "help": "Total time spent in making DB calls", "data": [ { "labels": { "node": "06475793be9d", "query": "connect", "result": "ok", "method": "POST_v1_users_login" }, "value": 0 }, { "labels": { "node": "06475793be9d", "query": "executeQuery", "result": "ok", "method": "GET_v1_groups" }, "value": 16 }, { "labels": { "node": "06475793be9d", "query": "connect", "result": "ok", "method": "POST_v1_media" }, "value": 3 }, ... ] }, "api_requests_db_duration_ms_count": { "type": "counter", "help": "Total number of calls to the DB", "data": [ { "labels": { "node": "06475793be9d", "query": "connect", "result": "ok", "method": "GET_v1_stats_db" }, "value": 548 }, { "labels": { "node": "06475793be9d", "query": "executeUpdate", "result": "ok", "method": "POST_v1_users_login" }, "value": 51 }, { "labels": { "node": "06475793be9d", "query": "connect", "result": "ok", "method": "PATCH_v1_settings_application" }, "value": 38 }, ... ] }, "api_requests_coreapp_duration_ms_sum": { "type": "counter", "help": "Total time spent in making CoreApp calls", "data": [ { "labels": { "node": "06475793be9d", "coreapp": "wacore:6252", "result": "ok", "method": "GET_v1_stats_db" }, "value": 2934 }, { "labels": { "node": "06475793be9d", "coreapp": "wacore:6252", "result": "ok", "method": "GET_v1_health" }, "value": 2083 }, { "labels": { "node": "06475793be9d", "coreapp": "wacore:6252", "result": "ok", "method": "PATCH_v1_settings_application" }, "value": 328 }, ... ] }, "api_requests_coreapp_duration_ms_count": { "type": "counter", "help": "Total number of calls to the CoreApp", "data": [ { "labels": { "node": "06475793be9d", "coreapp": "wacore:6252", "result": "ok", "method": "GET_v1_stats_db" }, "value": 274 }, { "labels": { "node": "06475793be9d", "coreapp": "wacore:6252", "result": "ok", "method": "POST_v1_settings_backup" }, "value": 14 }, { "labels": { "node": "06475793be9d", "coreapp": "wacore:6252", "result": "ok", "method": "GET_v1_settings_application" }, "value": 4 }, ... ] } }, "meta": { "version": "v2.21.1", "api_status": "stable" } }
Name | Type | Description |
---|---|---|
| Object | Number of seconds since web server has started |
| Object | Total number of connections accepted |
| Object | Current number of pending connections in the queue |
| Object | Maximum number of pending connections in the queue |
| Object | Size of queue for pending connections |
| Object | Current number of idle processes |
| Object | Total process limit |
| Object | Total number of times reached process limit |
| Object | Total number of requests handled |
| Object | Total outgoing traffic in kbytes |
| Object | Number of ongoing requests at different state |
| Object | Total number of durations of API requests |
| Object | Total number of API requests |
| Object | Total time spent in making DB calls for each API |
| Object | Total number of calls to the DB for each API |
| Object | Total time spent in making CoreApp calls for each API |
| Object | Total number of calls to the CoreApp for each API |
Returns the Webapp data in Prometheus format.
GET /metrics?format=prometheus
As an example, the response might look like this:
# HELP web_uptime Number of seconds since web server has started # TYPE web_uptime gauge web_uptime{node="06475793be9d"} 349141 # HELP web_connections Total number of connections accepted # TYPE web_connections counter web_connections{node="06475793be9d"} 23933 # HELP web_pending_connections Current number of pending connections in the queue # TYPE web_pending_connections gauge web_pending_connections{node="06475793be9d"} 0 # HELP web_max_pending_connections Maximum number of pending connections in the queue # TYPE web_max_pending_connections gauge web_max_pending_connections{node="06475793be9d"} 10 # HELP web_queue_len Size of queue for pending connections # TYPE web_queue_len gauge web_queue_len{node="06475793be9d"} 128 # HELP web_idle_processes Current number of idle processes # TYPE web_idle_processes gauge web_idle_processes{node="06475793be9d"} 10 # HELP web_total_processes Total process limit # TYPE web_total_processes gauge web_total_processes{node="06475793be9d"} 12 # HELP web_process_limit_hit Total number of times reached process limit # TYPE web_process_limit_hit counter web_process_limit_hit{node="06475793be9d"} 0 # HELP web_handled_requests Total number of requests handled # TYPE web_handled_requests counter web_handled_requests{node="06475793be9d"} 30054 # HELP web_out_kbytes Total outgoing traffic in kbytes # TYPE web_out_kbytes counter web_out_kbytes{node="06475793be9d"} 116726 # HELP web_requests Number of ongoing requests # TYPE web_requests gauge web_requests{node="06475793be9d",state="read"} 1 web_requests{node="06475793be9d",state="handle-request"} 2 web_requests{node="06475793be9d",state="idle"} 125 # HELP api_requests_duration_ms_sum Total number of durations of API requests # TYPE api_requests_duration_ms_sum counter api_requests_duration_ms_sum{node="06475793be9d",result="200",method="GET_v1_groups"} 753 api_requests_duration_ms_sum{node="06475793be9d",result="200",method="POST_v1_settings_backup"} 1255 api_requests_duration_ms_sum{node="06475793be9d",result="200",method="GET_metrics"} 249121 ... # HELP api_requests_duration_ms_count Total number of API requests # TYPE api_requests_duration_ms_count counter api_requests_duration_ms_count{node="06475793be9d",result="401",method="GET_v1_settings_application"} 30 api_requests_duration_ms_count{node="06475793be9d",result="200",method="GET_metrics"} 5998 api_requests_duration_ms_count{node="06475793be9d",result="404",method="POST_v1_users_login"} 1 ... # HELP api_requests_db_duration_ms_sum Total time spent in making DB calls # TYPE api_requests_db_duration_ms_sum counter api_requests_db_duration_ms_sum{node="06475793be9d",query="connect",result="ok",method="POST_v1_users_login"} 0 api_requests_db_duration_ms_sum{node="06475793be9d",query="executeQuery",result="ok",method="GET_v1_groups"} 16 api_requests_db_duration_ms_sum{node="06475793be9d",query="connect",result="ok",method="POST_v1_media"} 3 ... # HELP api_requests_db_duration_ms_count Total number of calls to the DB # TYPE api_requests_db_duration_ms_count counter api_requests_db_duration_ms_count{node="06475793be9d",query="connect",result="ok",method="GET_v1_stats_db"} 548 api_requests_db_duration_ms_count{node="06475793be9d",query="executeUpdate",result="ok",method="POST_v1_users_login"} 51 api_requests_db_duration_ms_count{node="06475793be9d",query="connect",result="ok",method="PATCH_v1_settings_application"} 38 ... # HELP api_requests_coreapp_duration_ms_sum Total time spent in making CoreApp calls # TYPE api_requests_coreapp_duration_ms_sum counter api_requests_coreapp_duration_ms_sum{node="06475793be9d",coreapp="wacore:6252",result="ok",method="GET_v1_stats_db"} 2934 api_requests_coreapp_duration_ms_sum{node="06475793be9d",coreapp="wacore:6252",result="ok",method="GET_v1_health"} 2090 api_requests_coreapp_duration_ms_sum{node="06475793be9d",coreapp="wacore:6252",result="ok",method="PATCH_v1_settings_application"} 328 ... # HELP api_requests_coreapp_duration_ms_count Total number of calls to the CoreApp # TYPE api_requests_coreapp_duration_ms_count counter api_requests_coreapp_duration_ms_count{node="06475793be9d",coreapp="wacore:6252",result="ok",method="GET_v1_stats_db"} 274 api_requests_coreapp_duration_ms_count{node="06475793be9d",coreapp="wacore:6252",result="ok",method="POST_v1_settings_backup"} 14 api_requests_coreapp_duration_ms_count{node="06475793be9d",coreapp="wacore:6252",result="ok",method="GET_v1_settings_application"} 4 ...