Copilot commented on code in PR #13886: URL: https://github.com/apache/skywalking/pull/13886#discussion_r3321927898
########## docs/en/setup/backend/admin-api/status.md: ########## @@ -36,36 +36,395 @@ to redact configuration values whose key contains any listed substring. ## Endpoints -### `/status/cluster/nodes` +### /status/cluster/nodes Returns the OAP cluster peer list as the cluster module sees it. Useful for confirming that every node has joined and is reporting back. +The OAP cluster is a set of OAP servers that work together to provide a scalable and reliable service. The OAP cluster supports [various cluster coordinator](../backend-cluster.md) to manage the cluster membership and the communication. This API provides capability to query the node list in the cluster from every OAP node perspective. If the cluster coordinator doesn't work properly, the node list may be incomplete or incorrect. So, we recommend you to check the node list when set up a cluster. + +- HTTP GET method. + ```bash curl http://oap:17128/status/cluster/nodes ``` -### `/status/alarm/rules` +```json +{ + "nodes": [ + { + "host": "10.0.12.23", + "port": 11800, + "self": true + }, + { + "host": "10.0.12.25", + "port": 11800, + "self": false + }, + { + "host": "10.0.12.37", + "port": 11800, + "self": false + } + ] +} +``` + +The `nodes` list all the nodes in the cluster. The size of the list should be exactly same as your cluster setup. The `host` and `port` are the address of the OAP node, which are used for OAP nodes communicating with each other. The `self` is a flag to indicate whether the node is the current node, others are remote nodes. + +### Alarm Runtime Status + +OAP calculates the alarm conditions in the memory based on the alarm rules and the metrics data. If the OAP cluster has multiple instances, each instance will calculate the alarm conditions independently. You can query from any OAP instance to get the all instances' alarm running status. + +The following APIs are exposed to make the alerting running kernel visible. + +#### /status/alarm/rules + +Return the list of alarm running rules. + +- HTTP GET method. + +```json +{ + "oapInstances": [ + { + "address": "127.0.0.1_11800", + "status": { + "ruleList": [ + { + "id": "service_percentile_rule" + }, + { + "id": "service_resp_time_rule" + } + ] + } + }, + { + "address": "127.0.0.1_11801", + "status": { + "ruleList": [ + { + "id": "service_percentile_rule" + }, + { + "id": "service_resp_time_rule" + } + ] + } + } + ] +} +``` + +#### /status/alarm/rules/{ruleId} + +Return the detailed information of the alarm running rule. + +- HTTP GET method. + +```json +{ + "oapInstances": [ + { + "address": "127.0.0.1_11800", + "status": { + "ruleId": "service_resp_time_rule", + "expression": "sum(service_resp_time > 1000) >= 1", + "period": 10, + "silencePeriod": 10, + "recoveryObservationPeriod": 2, + "additionalPeriod": 0, + "includeEntityNames": [], + "excludeEntityNames": [], + "includeEntityNamesRegex": "", + "excludeEntityNamesRegex": "", + "runningEntities": [ + { + "scope": "SERVICE", + "name": "mock_b_service", + "formattedMessage": "Service mock_b_service response time is more than 1000ms of last 10 minutes" + } + ], + "tags": [ + { + "key": "level", + "value": "WARNING" + } + ], + "hooks": [ + "webhook.default", + "wechat.default" + ], + "includeMetrics": [ + "service_resp_time" + ] + } + }, + { + "address": "127.0.0.1_11801", + "status": { + "ruleId": "service_resp_time_rule", + "expression": "sum(service_resp_time > 1000) >= 1", + "period": 10, + "silencePeriod": 10, + "recoveryObservationPeriod": 2, + "additionalPeriod": 0, + "includeEntityNames": [], + "excludeEntityNames": [], + "includeEntityNamesRegex": "", + "excludeEntityNamesRegex": "", + "runningEntities": [ + { + "scope": "SERVICE", + "name": "mock_a_service", + "formattedMessage": "Service mock_a_service response time is more than 1000ms of last 10 minutes." + }, + { + "scope": "SERVICE", + "name": "mock_c_service", + "formattedMessage": "Service mock_c_service response time is more than 1000ms of last 10 minutes." + } + ], + "tags": [ + { + "key": "level", + "value": "WARNING" + } + ], + "hooks": [ + "webhook.default", + "wechat.default" + ], + "includeMetrics": [ + "service_resp_time" + ] + } + } + ] +} +``` + +- `additonalPeriod` is the additional period if the expression includes the [increase/rate function](../../../api/metrics-query-expression.md#trend-operation). This additional period is used to enlarge window size for calculating the trend value. +- `runningEntities` is the entities that have metrics data and being calculated by the alarm rule. +- `formattedMessages` is the result message according to the message template and the affected running entities. Review Comment: The field names in this explanation don’t match the JSON examples: `additionalPeriod` is misspelled as `additonalPeriod`, and the JSON uses `formattedMessage` (singular) rather than `formattedMessages`. This can confuse users who copy/paste field names. ########## docs/en/setup/backend/admin-api/status.md: ########## @@ -36,36 +36,395 @@ to redact configuration values whose key contains any listed substring. ## Endpoints -### `/status/cluster/nodes` +### /status/cluster/nodes Returns the OAP cluster peer list as the cluster module sees it. Useful for confirming that every node has joined and is reporting back. +The OAP cluster is a set of OAP servers that work together to provide a scalable and reliable service. The OAP cluster supports [various cluster coordinator](../backend-cluster.md) to manage the cluster membership and the communication. This API provides capability to query the node list in the cluster from every OAP node perspective. If the cluster coordinator doesn't work properly, the node list may be incomplete or incorrect. So, we recommend you to check the node list when set up a cluster. + +- HTTP GET method. + ```bash curl http://oap:17128/status/cluster/nodes ``` -### `/status/alarm/rules` +```json +{ + "nodes": [ + { + "host": "10.0.12.23", + "port": 11800, + "self": true + }, + { + "host": "10.0.12.25", + "port": 11800, + "self": false + }, + { + "host": "10.0.12.37", + "port": 11800, + "self": false + } + ] +} +``` + +The `nodes` list all the nodes in the cluster. The size of the list should be exactly same as your cluster setup. The `host` and `port` are the address of the OAP node, which are used for OAP nodes communicating with each other. The `self` is a flag to indicate whether the node is the current node, others are remote nodes. + +### Alarm Runtime Status + +OAP calculates the alarm conditions in the memory based on the alarm rules and the metrics data. If the OAP cluster has multiple instances, each instance will calculate the alarm conditions independently. You can query from any OAP instance to get the all instances' alarm running status. + +The following APIs are exposed to make the alerting running kernel visible. + +#### /status/alarm/rules + +Return the list of alarm running rules. + +- HTTP GET method. + +```json +{ + "oapInstances": [ + { + "address": "127.0.0.1_11800", + "status": { + "ruleList": [ + { + "id": "service_percentile_rule" + }, + { + "id": "service_resp_time_rule" + } + ] + } + }, + { + "address": "127.0.0.1_11801", + "status": { + "ruleList": [ + { + "id": "service_percentile_rule" + }, + { + "id": "service_resp_time_rule" + } + ] + } + } + ] +} +``` + +#### /status/alarm/rules/{ruleId} + +Return the detailed information of the alarm running rule. + +- HTTP GET method. + +```json +{ + "oapInstances": [ + { + "address": "127.0.0.1_11800", + "status": { + "ruleId": "service_resp_time_rule", + "expression": "sum(service_resp_time > 1000) >= 1", + "period": 10, + "silencePeriod": 10, + "recoveryObservationPeriod": 2, + "additionalPeriod": 0, + "includeEntityNames": [], + "excludeEntityNames": [], + "includeEntityNamesRegex": "", + "excludeEntityNamesRegex": "", + "runningEntities": [ + { + "scope": "SERVICE", + "name": "mock_b_service", + "formattedMessage": "Service mock_b_service response time is more than 1000ms of last 10 minutes" + } + ], + "tags": [ + { + "key": "level", + "value": "WARNING" + } + ], + "hooks": [ + "webhook.default", + "wechat.default" + ], + "includeMetrics": [ + "service_resp_time" + ] + } + }, + { + "address": "127.0.0.1_11801", + "status": { + "ruleId": "service_resp_time_rule", + "expression": "sum(service_resp_time > 1000) >= 1", + "period": 10, + "silencePeriod": 10, + "recoveryObservationPeriod": 2, + "additionalPeriod": 0, + "includeEntityNames": [], + "excludeEntityNames": [], + "includeEntityNamesRegex": "", + "excludeEntityNamesRegex": "", + "runningEntities": [ + { + "scope": "SERVICE", + "name": "mock_a_service", + "formattedMessage": "Service mock_a_service response time is more than 1000ms of last 10 minutes." + }, + { + "scope": "SERVICE", + "name": "mock_c_service", + "formattedMessage": "Service mock_c_service response time is more than 1000ms of last 10 minutes." + } + ], + "tags": [ + { + "key": "level", + "value": "WARNING" + } + ], + "hooks": [ + "webhook.default", + "wechat.default" + ], + "includeMetrics": [ + "service_resp_time" + ] + } + } + ] +} +``` + +- `additonalPeriod` is the additional period if the expression includes the [increase/rate function](../../../api/metrics-query-expression.md#trend-operation). This additional period is used to enlarge window size for calculating the trend value. +- `runningEntities` is the entities that have metrics data and being calculated by the alarm rule. +- `formattedMessages` is the result message according to the message template and the affected running entities. -Lists registered alarm rules. +#### `/status/alarm/{ruleId}/{entityName}` -### `/status/alarm/{ruleId}` +Return the running context of the alarm rule. -Per-rule runtime status — current window state, last evaluation, the -entities the rule has triggered against. +- HTTP GET method. + +```json +{ + "oapInstances": [ + { + "address": "127.0.0.1_11800", + "status": { + "ruleId": "service_resp_time_rule", + "expression": "sum(service_resp_time > 1000) >= 1", + "endTime": "2025-11-19T15:20:00.000", + "additionalPeriod": 0, + "size": 10, + "silencePeriod": 10, + "recoveryObservationPeriod": 0, + "silenceCountdown": 10, + "recoveryObservationCountdown": 0, + "currentState": "FIRING", + "entityName": "mock_b_service", + "windowValues": [ + { + "index": 0, + "metrics": [] + }, + { + "index": 1, + "metrics": [] + }, + { + "index": 2, + "metrics": [] + }, + { + "index": 3, + "metrics": [] + }, + { + "index": 4, + "metrics": [] + }, + { + "index": 5, + "metrics": [] + }, + { + "index": 6, + "metrics": [] + }, + { + "index": 7, + "metrics": [] + }, + { + "index": 8, + "metrics": [ + { + "name": "service_resp_time", + "timeBucket": 202511191519, + "value": "6000" + } + ] + }, + { + "index": 9, + "metrics": [] + } + ], + "mqeMetricsSnapshot": { + "service_resp_time": "[{\"metric\":{\"labels\":[]},\"values\":[{\"id\":\"202511191511\",\"doubleValue\":0.0,\"isEmptyValue\":true},{\"id\":\"202511191512\",\"doubleValue\":0.0,\"isEmptyValue\":true},{\"id\":\"202511191513\",\"doubleValue\":0.0,\"isEmptyValue\":true},{\"id\":\"202511191514\",\"doubleValue\":0.0,\"isEmptyValue\":true},{\"id\":\"202511191515\",\"doubleValue\":0.0,\"isEmptyValue\":true},{\"id\":\"202511191516\",\"doubleValue\":0.0,\"isEmptyValue\":true},{\"id\":\"202511191517\",\"doubleValue\":0.0,\"isEmptyValue\":true},{\"id\":\"202511191518\",\"doubleValue\":0.0,\"isEmptyValue\":true},{\"id\":\"202511191519\",\"doubleValue\":6000.0,\"isEmptyValue\":false},{\"id\":\"202511191520\",\"doubleValue\":0.0,\"isEmptyValue\":true}]}]" + }, + "lastAlarmTime": "1763536823628", Review Comment: `lastAlarmTime` is a `long` in the status payload, but this example shows it as a JSON string. The second instance in the same example uses a numeric value (`0`), so this is inconsistent and may mislead clients about the field type. ########## docs/en/setup/backend/admin-api/status.md: ########## @@ -36,36 +36,395 @@ to redact configuration values whose key contains any listed substring. ## Endpoints -### `/status/cluster/nodes` +### /status/cluster/nodes Review Comment: Endpoint headings are formatted inconsistently: some are wrapped in backticks (code style) while others are plain text. Consistent formatting makes the endpoint list easier to scan and avoids accidental Markdown rendering issues. ########## docs/en/setup/backend/admin-api/status.md: ########## @@ -36,36 +36,395 @@ to redact configuration values whose key contains any listed substring. ## Endpoints -### `/status/cluster/nodes` +### /status/cluster/nodes Returns the OAP cluster peer list as the cluster module sees it. Useful for confirming that every node has joined and is reporting back. +The OAP cluster is a set of OAP servers that work together to provide a scalable and reliable service. The OAP cluster supports [various cluster coordinator](../backend-cluster.md) to manage the cluster membership and the communication. This API provides capability to query the node list in the cluster from every OAP node perspective. If the cluster coordinator doesn't work properly, the node list may be incomplete or incorrect. So, we recommend you to check the node list when set up a cluster. + +- HTTP GET method. + ```bash curl http://oap:17128/status/cluster/nodes ``` -### `/status/alarm/rules` +```json +{ + "nodes": [ + { + "host": "10.0.12.23", + "port": 11800, + "self": true + }, + { + "host": "10.0.12.25", + "port": 11800, + "self": false + }, + { + "host": "10.0.12.37", + "port": 11800, + "self": false + } + ] +} +``` + +The `nodes` list all the nodes in the cluster. The size of the list should be exactly same as your cluster setup. The `host` and `port` are the address of the OAP node, which are used for OAP nodes communicating with each other. The `self` is a flag to indicate whether the node is the current node, others are remote nodes. + +### Alarm Runtime Status + +OAP calculates the alarm conditions in the memory based on the alarm rules and the metrics data. If the OAP cluster has multiple instances, each instance will calculate the alarm conditions independently. You can query from any OAP instance to get the all instances' alarm running status. + +The following APIs are exposed to make the alerting running kernel visible. + +#### /status/alarm/rules + +Return the list of alarm running rules. + +- HTTP GET method. + +```json +{ + "oapInstances": [ + { + "address": "127.0.0.1_11800", + "status": { + "ruleList": [ + { + "id": "service_percentile_rule" + }, + { + "id": "service_resp_time_rule" + } + ] + } + }, + { + "address": "127.0.0.1_11801", + "status": { + "ruleList": [ + { + "id": "service_percentile_rule" + }, + { + "id": "service_resp_time_rule" + } + ] + } + } + ] +} +``` + +#### /status/alarm/rules/{ruleId} + +Return the detailed information of the alarm running rule. + +- HTTP GET method. + +```json +{ + "oapInstances": [ + { + "address": "127.0.0.1_11800", + "status": { + "ruleId": "service_resp_time_rule", + "expression": "sum(service_resp_time > 1000) >= 1", + "period": 10, + "silencePeriod": 10, + "recoveryObservationPeriod": 2, + "additionalPeriod": 0, + "includeEntityNames": [], + "excludeEntityNames": [], + "includeEntityNamesRegex": "", + "excludeEntityNamesRegex": "", + "runningEntities": [ + { + "scope": "SERVICE", + "name": "mock_b_service", + "formattedMessage": "Service mock_b_service response time is more than 1000ms of last 10 minutes" + } + ], + "tags": [ + { + "key": "level", + "value": "WARNING" + } + ], + "hooks": [ + "webhook.default", + "wechat.default" + ], + "includeMetrics": [ + "service_resp_time" + ] + } + }, + { + "address": "127.0.0.1_11801", + "status": { + "ruleId": "service_resp_time_rule", + "expression": "sum(service_resp_time > 1000) >= 1", + "period": 10, + "silencePeriod": 10, + "recoveryObservationPeriod": 2, + "additionalPeriod": 0, + "includeEntityNames": [], + "excludeEntityNames": [], + "includeEntityNamesRegex": "", + "excludeEntityNamesRegex": "", + "runningEntities": [ + { + "scope": "SERVICE", + "name": "mock_a_service", + "formattedMessage": "Service mock_a_service response time is more than 1000ms of last 10 minutes." + }, + { + "scope": "SERVICE", + "name": "mock_c_service", + "formattedMessage": "Service mock_c_service response time is more than 1000ms of last 10 minutes." + } + ], + "tags": [ + { + "key": "level", + "value": "WARNING" + } + ], + "hooks": [ + "webhook.default", + "wechat.default" + ], + "includeMetrics": [ + "service_resp_time" + ] + } + } + ] +} +``` + +- `additonalPeriod` is the additional period if the expression includes the [increase/rate function](../../../api/metrics-query-expression.md#trend-operation). This additional period is used to enlarge window size for calculating the trend value. +- `runningEntities` is the entities that have metrics data and being calculated by the alarm rule. +- `formattedMessages` is the result message according to the message template and the affected running entities. -Lists registered alarm rules. +#### `/status/alarm/{ruleId}/{entityName}` -### `/status/alarm/{ruleId}` +Return the running context of the alarm rule. -Per-rule runtime status — current window state, last evaluation, the -entities the rule has triggered against. +- HTTP GET method. + +```json +{ + "oapInstances": [ + { + "address": "127.0.0.1_11800", + "status": { + "ruleId": "service_resp_time_rule", + "expression": "sum(service_resp_time > 1000) >= 1", + "endTime": "2025-11-19T15:20:00.000", + "additionalPeriod": 0, + "size": 10, + "silencePeriod": 10, + "recoveryObservationPeriod": 0, + "silenceCountdown": 10, + "recoveryObservationCountdown": 0, + "currentState": "FIRING", + "entityName": "mock_b_service", + "windowValues": [ + { + "index": 0, + "metrics": [] + }, + { + "index": 1, + "metrics": [] + }, + { + "index": 2, + "metrics": [] + }, + { + "index": 3, + "metrics": [] + }, + { + "index": 4, + "metrics": [] + }, + { + "index": 5, + "metrics": [] + }, + { + "index": 6, + "metrics": [] + }, + { + "index": 7, + "metrics": [] + }, + { + "index": 8, + "metrics": [ + { + "name": "service_resp_time", + "timeBucket": 202511191519, + "value": "6000" + } + ] + }, + { + "index": 9, + "metrics": [] + } + ], + "mqeMetricsSnapshot": { + "service_resp_time": "[{\"metric\":{\"labels\":[]},\"values\":[{\"id\":\"202511191511\",\"doubleValue\":0.0,\"isEmptyValue\":true},{\"id\":\"202511191512\",\"doubleValue\":0.0,\"isEmptyValue\":true},{\"id\":\"202511191513\",\"doubleValue\":0.0,\"isEmptyValue\":true},{\"id\":\"202511191514\",\"doubleValue\":0.0,\"isEmptyValue\":true},{\"id\":\"202511191515\",\"doubleValue\":0.0,\"isEmptyValue\":true},{\"id\":\"202511191516\",\"doubleValue\":0.0,\"isEmptyValue\":true},{\"id\":\"202511191517\",\"doubleValue\":0.0,\"isEmptyValue\":true},{\"id\":\"202511191518\",\"doubleValue\":0.0,\"isEmptyValue\":true},{\"id\":\"202511191519\",\"doubleValue\":6000.0,\"isEmptyValue\":false},{\"id\":\"202511191520\",\"doubleValue\":0.0,\"isEmptyValue\":true}]}]" + }, + "lastAlarmTime": "1763536823628", Review Comment: `lastAlarmTime` is a `long` in the status payload, but this example shows it as a JSON string. The second instance in the same example uses a numeric value (`0`), so this is inconsistent and may mislead clients about the field type. ########## docs/en/setup/backend/admin-api/status.md: ########## @@ -36,36 +36,395 @@ to redact configuration values whose key contains any listed substring. ## Endpoints -### `/status/cluster/nodes` +### /status/cluster/nodes Review Comment: Endpoint headings are formatted inconsistently: some are wrapped in backticks (code style) while others are plain text. Consistent formatting makes the endpoint list easier to scan and avoids accidental Markdown rendering issues. ########## docs/en/setup/backend/admin-api/status.md: ########## @@ -36,36 +36,395 @@ to redact configuration values whose key contains any listed substring. ## Endpoints -### `/status/cluster/nodes` +### /status/cluster/nodes Returns the OAP cluster peer list as the cluster module sees it. Useful for confirming that every node has joined and is reporting back. +The OAP cluster is a set of OAP servers that work together to provide a scalable and reliable service. The OAP cluster supports [various cluster coordinator](../backend-cluster.md) to manage the cluster membership and the communication. This API provides capability to query the node list in the cluster from every OAP node perspective. If the cluster coordinator doesn't work properly, the node list may be incomplete or incorrect. So, we recommend you to check the node list when set up a cluster. Review Comment: The cluster node list description has several grammatical issues (e.g., singular/plural mismatch, awkward phrasing) that make the documentation harder to understand. ########## docs/en/setup/backend/admin-api/status.md: ########## @@ -36,36 +36,395 @@ to redact configuration values whose key contains any listed substring. ## Endpoints -### `/status/cluster/nodes` +### /status/cluster/nodes Returns the OAP cluster peer list as the cluster module sees it. Useful for confirming that every node has joined and is reporting back. +The OAP cluster is a set of OAP servers that work together to provide a scalable and reliable service. The OAP cluster supports [various cluster coordinator](../backend-cluster.md) to manage the cluster membership and the communication. This API provides capability to query the node list in the cluster from every OAP node perspective. If the cluster coordinator doesn't work properly, the node list may be incomplete or incorrect. So, we recommend you to check the node list when set up a cluster. Review Comment: The cluster node list description has several grammatical issues (e.g., singular/plural mismatch, awkward phrasing) that make the documentation harder to understand. ########## docs/en/setup/backend/admin-api/status.md: ########## @@ -36,36 +36,395 @@ to redact configuration values whose key contains any listed substring. ## Endpoints -### `/status/cluster/nodes` +### /status/cluster/nodes Review Comment: Endpoint headings are formatted inconsistently: some are wrapped in backticks (code style) while others are plain text. Consistent formatting makes the endpoint list easier to scan and avoids accidental Markdown rendering issues. ########## docs/en/setup/backend/admin-api/status.md: ########## @@ -36,36 +36,395 @@ to redact configuration values whose key contains any listed substring. ## Endpoints -### `/status/cluster/nodes` +### /status/cluster/nodes Returns the OAP cluster peer list as the cluster module sees it. Useful for confirming that every node has joined and is reporting back. +The OAP cluster is a set of OAP servers that work together to provide a scalable and reliable service. The OAP cluster supports [various cluster coordinator](../backend-cluster.md) to manage the cluster membership and the communication. This API provides capability to query the node list in the cluster from every OAP node perspective. If the cluster coordinator doesn't work properly, the node list may be incomplete or incorrect. So, we recommend you to check the node list when set up a cluster. Review Comment: The cluster node list description has several grammatical issues (e.g., singular/plural mismatch, awkward phrasing) that make the documentation harder to understand. ########## docs/en/setup/backend/admin-api/status.md: ########## @@ -36,36 +36,395 @@ to redact configuration values whose key contains any listed substring. ## Endpoints -### `/status/cluster/nodes` +### /status/cluster/nodes Returns the OAP cluster peer list as the cluster module sees it. Useful for confirming that every node has joined and is reporting back. +The OAP cluster is a set of OAP servers that work together to provide a scalable and reliable service. The OAP cluster supports [various cluster coordinator](../backend-cluster.md) to manage the cluster membership and the communication. This API provides capability to query the node list in the cluster from every OAP node perspective. If the cluster coordinator doesn't work properly, the node list may be incomplete or incorrect. So, we recommend you to check the node list when set up a cluster. + +- HTTP GET method. + ```bash curl http://oap:17128/status/cluster/nodes ``` -### `/status/alarm/rules` +```json +{ + "nodes": [ + { + "host": "10.0.12.23", + "port": 11800, + "self": true + }, + { + "host": "10.0.12.25", + "port": 11800, + "self": false + }, + { + "host": "10.0.12.37", + "port": 11800, + "self": false + } + ] +} +``` + +The `nodes` list all the nodes in the cluster. The size of the list should be exactly same as your cluster setup. The `host` and `port` are the address of the OAP node, which are used for OAP nodes communicating with each other. The `self` is a flag to indicate whether the node is the current node, others are remote nodes. + +### Alarm Runtime Status + +OAP calculates the alarm conditions in the memory based on the alarm rules and the metrics data. If the OAP cluster has multiple instances, each instance will calculate the alarm conditions independently. You can query from any OAP instance to get the all instances' alarm running status. + +The following APIs are exposed to make the alerting running kernel visible. + +#### /status/alarm/rules + +Return the list of alarm running rules. + +- HTTP GET method. + +```json +{ + "oapInstances": [ + { + "address": "127.0.0.1_11800", + "status": { + "ruleList": [ + { + "id": "service_percentile_rule" + }, + { + "id": "service_resp_time_rule" + } + ] + } + }, + { + "address": "127.0.0.1_11801", + "status": { + "ruleList": [ + { + "id": "service_percentile_rule" + }, + { + "id": "service_resp_time_rule" + } + ] + } + } + ] +} +``` + +#### /status/alarm/rules/{ruleId} + +Return the detailed information of the alarm running rule. + +- HTTP GET method. + +```json +{ + "oapInstances": [ + { + "address": "127.0.0.1_11800", + "status": { + "ruleId": "service_resp_time_rule", + "expression": "sum(service_resp_time > 1000) >= 1", + "period": 10, + "silencePeriod": 10, + "recoveryObservationPeriod": 2, + "additionalPeriod": 0, + "includeEntityNames": [], + "excludeEntityNames": [], + "includeEntityNamesRegex": "", + "excludeEntityNamesRegex": "", + "runningEntities": [ + { + "scope": "SERVICE", + "name": "mock_b_service", + "formattedMessage": "Service mock_b_service response time is more than 1000ms of last 10 minutes" + } + ], + "tags": [ + { + "key": "level", + "value": "WARNING" + } + ], + "hooks": [ + "webhook.default", + "wechat.default" + ], + "includeMetrics": [ + "service_resp_time" + ] + } + }, + { + "address": "127.0.0.1_11801", + "status": { + "ruleId": "service_resp_time_rule", + "expression": "sum(service_resp_time > 1000) >= 1", + "period": 10, + "silencePeriod": 10, + "recoveryObservationPeriod": 2, + "additionalPeriod": 0, + "includeEntityNames": [], + "excludeEntityNames": [], + "includeEntityNamesRegex": "", + "excludeEntityNamesRegex": "", + "runningEntities": [ + { + "scope": "SERVICE", + "name": "mock_a_service", + "formattedMessage": "Service mock_a_service response time is more than 1000ms of last 10 minutes." + }, + { + "scope": "SERVICE", + "name": "mock_c_service", + "formattedMessage": "Service mock_c_service response time is more than 1000ms of last 10 minutes." + } + ], + "tags": [ + { + "key": "level", + "value": "WARNING" + } + ], + "hooks": [ + "webhook.default", + "wechat.default" + ], + "includeMetrics": [ + "service_resp_time" + ] + } + } + ] +} +``` + +- `additonalPeriod` is the additional period if the expression includes the [increase/rate function](../../../api/metrics-query-expression.md#trend-operation). This additional period is used to enlarge window size for calculating the trend value. +- `runningEntities` is the entities that have metrics data and being calculated by the alarm rule. +- `formattedMessages` is the result message according to the message template and the affected running entities. Review Comment: The field names in this explanation don’t match the JSON examples: `additionalPeriod` is misspelled as `additonalPeriod`, and the JSON uses `formattedMessage` (singular) rather than `formattedMessages`. This can confuse users who copy/paste field names. ########## docs/en/setup/backend/admin-api/status.md: ########## @@ -36,36 +36,395 @@ to redact configuration values whose key contains any listed substring. ## Endpoints -### `/status/cluster/nodes` +### /status/cluster/nodes Returns the OAP cluster peer list as the cluster module sees it. Useful for confirming that every node has joined and is reporting back. +The OAP cluster is a set of OAP servers that work together to provide a scalable and reliable service. The OAP cluster supports [various cluster coordinator](../backend-cluster.md) to manage the cluster membership and the communication. This API provides capability to query the node list in the cluster from every OAP node perspective. If the cluster coordinator doesn't work properly, the node list may be incomplete or incorrect. So, we recommend you to check the node list when set up a cluster. + +- HTTP GET method. + ```bash curl http://oap:17128/status/cluster/nodes ``` -### `/status/alarm/rules` +```json +{ + "nodes": [ + { + "host": "10.0.12.23", + "port": 11800, + "self": true + }, + { + "host": "10.0.12.25", + "port": 11800, + "self": false + }, + { + "host": "10.0.12.37", + "port": 11800, + "self": false + } + ] +} +``` + +The `nodes` list all the nodes in the cluster. The size of the list should be exactly same as your cluster setup. The `host` and `port` are the address of the OAP node, which are used for OAP nodes communicating with each other. The `self` is a flag to indicate whether the node is the current node, others are remote nodes. + +### Alarm Runtime Status + +OAP calculates the alarm conditions in the memory based on the alarm rules and the metrics data. If the OAP cluster has multiple instances, each instance will calculate the alarm conditions independently. You can query from any OAP instance to get the all instances' alarm running status. + +The following APIs are exposed to make the alerting running kernel visible. + +#### /status/alarm/rules + +Return the list of alarm running rules. + +- HTTP GET method. + +```json +{ + "oapInstances": [ + { + "address": "127.0.0.1_11800", + "status": { + "ruleList": [ + { + "id": "service_percentile_rule" + }, + { + "id": "service_resp_time_rule" + } + ] + } + }, + { + "address": "127.0.0.1_11801", + "status": { + "ruleList": [ + { + "id": "service_percentile_rule" + }, + { + "id": "service_resp_time_rule" + } + ] + } + } + ] +} +``` + +#### /status/alarm/rules/{ruleId} + +Return the detailed information of the alarm running rule. + +- HTTP GET method. + +```json +{ + "oapInstances": [ + { + "address": "127.0.0.1_11800", + "status": { + "ruleId": "service_resp_time_rule", + "expression": "sum(service_resp_time > 1000) >= 1", + "period": 10, + "silencePeriod": 10, + "recoveryObservationPeriod": 2, + "additionalPeriod": 0, + "includeEntityNames": [], + "excludeEntityNames": [], + "includeEntityNamesRegex": "", + "excludeEntityNamesRegex": "", + "runningEntities": [ + { + "scope": "SERVICE", + "name": "mock_b_service", + "formattedMessage": "Service mock_b_service response time is more than 1000ms of last 10 minutes" + } + ], + "tags": [ + { + "key": "level", + "value": "WARNING" + } + ], + "hooks": [ + "webhook.default", + "wechat.default" + ], + "includeMetrics": [ + "service_resp_time" + ] + } + }, + { + "address": "127.0.0.1_11801", + "status": { + "ruleId": "service_resp_time_rule", + "expression": "sum(service_resp_time > 1000) >= 1", + "period": 10, + "silencePeriod": 10, + "recoveryObservationPeriod": 2, + "additionalPeriod": 0, + "includeEntityNames": [], + "excludeEntityNames": [], + "includeEntityNamesRegex": "", + "excludeEntityNamesRegex": "", + "runningEntities": [ + { + "scope": "SERVICE", + "name": "mock_a_service", + "formattedMessage": "Service mock_a_service response time is more than 1000ms of last 10 minutes." + }, + { + "scope": "SERVICE", + "name": "mock_c_service", + "formattedMessage": "Service mock_c_service response time is more than 1000ms of last 10 minutes." + } + ], + "tags": [ + { + "key": "level", + "value": "WARNING" + } + ], + "hooks": [ + "webhook.default", + "wechat.default" + ], + "includeMetrics": [ + "service_resp_time" + ] + } + } + ] +} +``` + +- `additonalPeriod` is the additional period if the expression includes the [increase/rate function](../../../api/metrics-query-expression.md#trend-operation). This additional period is used to enlarge window size for calculating the trend value. +- `runningEntities` is the entities that have metrics data and being calculated by the alarm rule. +- `formattedMessages` is the result message according to the message template and the affected running entities. -Lists registered alarm rules. +#### `/status/alarm/{ruleId}/{entityName}` -### `/status/alarm/{ruleId}` +Return the running context of the alarm rule. -Per-rule runtime status — current window state, last evaluation, the -entities the rule has triggered against. +- HTTP GET method. + +```json +{ + "oapInstances": [ + { + "address": "127.0.0.1_11800", + "status": { + "ruleId": "service_resp_time_rule", + "expression": "sum(service_resp_time > 1000) >= 1", + "endTime": "2025-11-19T15:20:00.000", + "additionalPeriod": 0, + "size": 10, + "silencePeriod": 10, + "recoveryObservationPeriod": 0, + "silenceCountdown": 10, + "recoveryObservationCountdown": 0, + "currentState": "FIRING", + "entityName": "mock_b_service", + "windowValues": [ + { + "index": 0, + "metrics": [] + }, + { + "index": 1, + "metrics": [] + }, + { + "index": 2, + "metrics": [] + }, + { + "index": 3, + "metrics": [] + }, + { + "index": 4, + "metrics": [] + }, + { + "index": 5, + "metrics": [] + }, + { + "index": 6, + "metrics": [] + }, + { + "index": 7, + "metrics": [] + }, + { + "index": 8, + "metrics": [ + { + "name": "service_resp_time", + "timeBucket": 202511191519, + "value": "6000" + } + ] + }, + { + "index": 9, + "metrics": [] + } + ], + "mqeMetricsSnapshot": { + "service_resp_time": "[{\"metric\":{\"labels\":[]},\"values\":[{\"id\":\"202511191511\",\"doubleValue\":0.0,\"isEmptyValue\":true},{\"id\":\"202511191512\",\"doubleValue\":0.0,\"isEmptyValue\":true},{\"id\":\"202511191513\",\"doubleValue\":0.0,\"isEmptyValue\":true},{\"id\":\"202511191514\",\"doubleValue\":0.0,\"isEmptyValue\":true},{\"id\":\"202511191515\",\"doubleValue\":0.0,\"isEmptyValue\":true},{\"id\":\"202511191516\",\"doubleValue\":0.0,\"isEmptyValue\":true},{\"id\":\"202511191517\",\"doubleValue\":0.0,\"isEmptyValue\":true},{\"id\":\"202511191518\",\"doubleValue\":0.0,\"isEmptyValue\":true},{\"id\":\"202511191519\",\"doubleValue\":6000.0,\"isEmptyValue\":false},{\"id\":\"202511191520\",\"doubleValue\":0.0,\"isEmptyValue\":true}]}]" + }, + "lastAlarmTime": "1763536823628", Review Comment: `lastAlarmTime` is a `long` in the status payload, but this example shows it as a JSON string. The second instance in the same example uses a numeric value (`0`), so this is inconsistent and may mislead clients about the field type. ########## docs/en/setup/backend/admin-api/status.md: ########## @@ -36,36 +36,395 @@ to redact configuration values whose key contains any listed substring. ## Endpoints -### `/status/cluster/nodes` +### /status/cluster/nodes Returns the OAP cluster peer list as the cluster module sees it. Useful for confirming that every node has joined and is reporting back. +The OAP cluster is a set of OAP servers that work together to provide a scalable and reliable service. The OAP cluster supports [various cluster coordinator](../backend-cluster.md) to manage the cluster membership and the communication. This API provides capability to query the node list in the cluster from every OAP node perspective. If the cluster coordinator doesn't work properly, the node list may be incomplete or incorrect. So, we recommend you to check the node list when set up a cluster. + +- HTTP GET method. + ```bash curl http://oap:17128/status/cluster/nodes ``` -### `/status/alarm/rules` +```json +{ + "nodes": [ + { + "host": "10.0.12.23", + "port": 11800, + "self": true + }, + { + "host": "10.0.12.25", + "port": 11800, + "self": false + }, + { + "host": "10.0.12.37", + "port": 11800, + "self": false + } + ] +} +``` + +The `nodes` list all the nodes in the cluster. The size of the list should be exactly same as your cluster setup. The `host` and `port` are the address of the OAP node, which are used for OAP nodes communicating with each other. The `self` is a flag to indicate whether the node is the current node, others are remote nodes. + +### Alarm Runtime Status + +OAP calculates the alarm conditions in the memory based on the alarm rules and the metrics data. If the OAP cluster has multiple instances, each instance will calculate the alarm conditions independently. You can query from any OAP instance to get the all instances' alarm running status. + +The following APIs are exposed to make the alerting running kernel visible. + +#### /status/alarm/rules + +Return the list of alarm running rules. + +- HTTP GET method. + +```json +{ + "oapInstances": [ + { + "address": "127.0.0.1_11800", + "status": { + "ruleList": [ + { + "id": "service_percentile_rule" + }, + { + "id": "service_resp_time_rule" + } + ] + } + }, + { + "address": "127.0.0.1_11801", + "status": { + "ruleList": [ + { + "id": "service_percentile_rule" + }, + { + "id": "service_resp_time_rule" + } + ] + } + } + ] +} +``` + +#### /status/alarm/rules/{ruleId} + +Return the detailed information of the alarm running rule. + +- HTTP GET method. + +```json +{ + "oapInstances": [ + { + "address": "127.0.0.1_11800", + "status": { + "ruleId": "service_resp_time_rule", + "expression": "sum(service_resp_time > 1000) >= 1", + "period": 10, + "silencePeriod": 10, + "recoveryObservationPeriod": 2, + "additionalPeriod": 0, + "includeEntityNames": [], + "excludeEntityNames": [], + "includeEntityNamesRegex": "", + "excludeEntityNamesRegex": "", + "runningEntities": [ + { + "scope": "SERVICE", + "name": "mock_b_service", + "formattedMessage": "Service mock_b_service response time is more than 1000ms of last 10 minutes" + } + ], + "tags": [ + { + "key": "level", + "value": "WARNING" + } + ], + "hooks": [ + "webhook.default", + "wechat.default" + ], + "includeMetrics": [ + "service_resp_time" + ] + } + }, + { + "address": "127.0.0.1_11801", + "status": { + "ruleId": "service_resp_time_rule", + "expression": "sum(service_resp_time > 1000) >= 1", + "period": 10, + "silencePeriod": 10, + "recoveryObservationPeriod": 2, + "additionalPeriod": 0, + "includeEntityNames": [], + "excludeEntityNames": [], + "includeEntityNamesRegex": "", + "excludeEntityNamesRegex": "", + "runningEntities": [ + { + "scope": "SERVICE", + "name": "mock_a_service", + "formattedMessage": "Service mock_a_service response time is more than 1000ms of last 10 minutes." + }, + { + "scope": "SERVICE", + "name": "mock_c_service", + "formattedMessage": "Service mock_c_service response time is more than 1000ms of last 10 minutes." + } + ], + "tags": [ + { + "key": "level", + "value": "WARNING" + } + ], + "hooks": [ + "webhook.default", + "wechat.default" + ], + "includeMetrics": [ + "service_resp_time" + ] + } + } + ] +} +``` + +- `additonalPeriod` is the additional period if the expression includes the [increase/rate function](../../../api/metrics-query-expression.md#trend-operation). This additional period is used to enlarge window size for calculating the trend value. +- `runningEntities` is the entities that have metrics data and being calculated by the alarm rule. +- `formattedMessages` is the result message according to the message template and the affected running entities. Review Comment: The field names in this explanation don’t match the JSON examples: `additionalPeriod` is misspelled as `additonalPeriod`, and the JSON uses `formattedMessage` (singular) rather than `formattedMessages`. This can confuse users who copy/paste field names. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
