You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@hertzbeat.apache.org by "orangeCatDeveloper (via GitHub)" <gi...@apache.org> on 2026/08/10 02:41:26 UTC
[PR] fix(collector): keep partial telnet metrics, surface raw reply [hertzbeat]
orangeCatDeveloper opened a new pull request, #4311:
URL: https://github.com/apache/hertzbeat/pull/4311
## What's changed?
Fixes #1693: zookeeper monitors fail with "The cmd execution results do not match the expected number of metrics", with no way to tell why. The issue contains two distinct situations behind the same message: a 4lw whitelist that blocks `conf` (reporter leim, bitnami defaults), and a healthy standalone zookeeper 3.4.14 whose `conf` simply returns fewer keys than the template defines (reporter ZachariahHu).
Root cause: `TelnetCollectImpl` fails the whole metrics group whenever parsed entries < expected fields, and drops the raw telnet reply during parsing — so valid partial data is discarded, and zookeeper's own refusal text never reaches the user:
```java
if (resultMap.size() < aliasFields.size()) {
builder.setMsg("The cmd execution results do not match the expected number of metrics.");
return;
}
```
The fix moves the failure criterion from "how many entries came back" to "did any expected field come back". Parsing now returns the raw reply alongside the parsed map (`CmdResult` record). If the reply contains at least one expected field, the row is built as usual and missing fields fall through to the existing null-padding path. Only when none of the expected fields are present does the group fail — and the message now carries the sanitized raw reply, so a whitelist refusal is shown verbatim. Matching by expected fields (rather than "map is non-empty") keeps refusal text that happens to parse as key/value, e.g. `error=conf disabled`, on the failure path.
Parsing is also hardened where the relaxed check would otherwise hide data: values are split at the first separator only (`split(sep, 2)`), so `dataDir=/data/zk=a` no longer loses the row; duplicate keys keep the first value instead of throwing; header-only or newline-only replies no longer hit `lines[0]` on an empty array.
### Whitelist refusal (reporter leim's case)
zookeeper with `4lw.commands.whitelist=srvr`, before:
```
ERROR TelnetCollectImpl - telnet response data not enough: {responseTime=18}
```
after — the reason is finally visible, in logs and in the UI popup:
```
WARN TelnetCollectImpl - telnet cmd [conf] returned no expected metrics: conf is not executed because it is not in the whitelist.
```
### Partial reply (reporter ZachariahHu's case)
zookeeper 3.4.14 standalone — its `conf` returns 8 keys while the template defines 10 (`dataDirSize`/`dataLogSize` only exist in newer versions). Before, the whole group is discarded every cycle:
```
ERROR TelnetCollectImpl - telnet response data not enough: {maxSessionTimeout=40000, dataDir=/data/version-2, responseTime=7, clientPort=2181, tickTime=2000, minSessionTimeout=4000, dataLogDir=/datalog/version-2, serverId=0, maxClientCnxns=60}
```
after, same server, collected without errors:
```json
{"clientPort": "2181", "dataDir": "/data/version-2", "dataDirSize": null,
"dataLogDir": "/datalog/version-2", "dataLogSize": null, "tickTime": "2000",
"maxClientCnxns": "60", "minSessionTimeout": "4000",
"maxSessionTimeout": "40000", "serverId": "0"}
```
A truncated reply that still contains some expected fields is now indistinguishable from version variance and yields null cells instead of a hard failure — the visible gaps (and thresholds on them) are the signal in that case. zookeeper 3.9 with an open whitelist collects all 10 columns unchanged.
## Checklist
- [x] I have read the [Contributing Guide](https://hertzbeat.apache.org/docs/community/code_style_and_quality_guide)
- [x] I have written the necessary doc or comment.
- [x] I have added the necessary unit tests and all cases have passed.
## Add or update API
- [ ] I have added the necessary [e2e tests](https://github.com/apache/hertzbeat/tree/master/e2e) and all cases have passed.
--
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: notifications-unsubscribe@hertzbeat.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@hertzbeat.apache.org
For additional commands, e-mail: notifications-help@hertzbeat.apache.org
Re: [PR] fix(collector): keep partial telnet metrics, surface raw reply [hertzbeat]
Posted by "Aias00 (via GitHub)" <gi...@apache.org>.
Aias00 merged PR #4311:
URL: https://github.com/apache/hertzbeat/pull/4311
--
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: notifications-unsubscribe@hertzbeat.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@hertzbeat.apache.org
For additional commands, e-mail: notifications-help@hertzbeat.apache.org