This is an automated email from the ASF dual-hosted git repository.
gongchao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hertzbeat.git
The following commit(s) were added to refs/heads/master by this push:
new 4228605a3 [improve] Jexl validation rule enhancements (#3821)
4228605a3 is described below
commit 4228605a3db76692cea31212117def97b3926581
Author: Duansg <[email protected]>
AuthorDate: Sun Oct 19 23:08:19 2025 +0800
[improve] Jexl validation rule enhancements (#3821)
Co-authored-by: Tomsun28 <[email protected]>
---
.../common/constants/JexlKeywordsEnum.java | 45 +++++++++++++-----
.../JexlCheckerUtil.java} | 54 +++++++++-------------
.../manager/service/impl/AppServiceImpl.java | 50 ++++++++++++--------
.../manager/service/impl/MonitorServiceImpl.java | 12 ++++-
.../src/main/resources/define/app-kafka_client.yml | 4 +-
.../src/main/resources/define/app-pulsar.yml | 42 ++++++++---------
.../hertzbeat/manager/script/YamlCheckScript.java | 15 ++++--
home/docs/community/maturity.md | 40 ++++++++--------
home/docs/help/kafka_client.md | 4 +-
home/docs/help/pulsar.md | 4 +-
.../current/community/maturity.md | 2 +-
.../current/help/kafka_client.md | 4 +-
.../current/help/pulsar.md | 4 +-
.../version-v1.6.x/help/kafka_client.md | 4 +-
.../version-v1.6.x/help/pulsar.md | 4 +-
.../version-v1.6.x/help/kafka_client.md | 4 +-
home/versioned_docs/version-v1.6.x/help/pulsar.md | 4 +-
17 files changed, 165 insertions(+), 131 deletions(-)
diff --git
a/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/constants/JexlKeywordsEnum.java
b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/constants/JexlKeywordsEnum.java
index f54103ca0..13f4c9d82 100644
---
a/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/constants/JexlKeywordsEnum.java
+++
b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/constants/JexlKeywordsEnum.java
@@ -24,23 +24,46 @@ import java.util.Arrays;
*/
public enum JexlKeywordsEnum {
- SIZE("size"),
- EMPTY("empty"),
+ /**
+ * Official reserved keywords
+ * @reference
https://commons.apache.org/proper/commons-jexl/reference/syntax.html
+ */
+ OR("or"),
+ AND("and"),
+ EQ("eq"),
+ NE("ne"),
+ LT("lt"),
+ GT("gt"),
+ LE("le"),
+ GE("ge"),
+ DIV("div"),
+ MOD("mod"),
+ NOT("not"),
+ NULL("null"),
+ TRUE("true"),
+ FALSE("false"),
NEW("new"),
VAR("var"),
+ DO("do"),
+ WHILE("while"),
+ BREAK("break"),
+ CONTINUE("continue"),
+ FUNCTION("function"),
RETURN("return"),
+
+ /**
+ * Syntax-reserved keywords
+ */
IF("if"),
ELSE("else"),
- ELSEIF("elseif"),
- WHILE("while"),
- DO("do"),
FOR("for"),
- CONTINUE("continue"),
- BREAK("break"),
- TRUE("true"),
- FALSE("false"),
- NULL("null"),
- UNDEFINED("undefined");
+
+ /**
+ * Built-in functions reserve keywords
+ */
+ SIZE("size"),
+ EMPTY("empty");
+
private final String keyword;
diff --git
a/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/constants/JexlKeywordsEnum.java
b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/util/JexlCheckerUtil.java
similarity index 50%
copy from
hertzbeat-common/src/main/java/org/apache/hertzbeat/common/constants/JexlKeywordsEnum.java
copy to
hertzbeat-common/src/main/java/org/apache/hertzbeat/common/util/JexlCheckerUtil.java
index f54103ca0..223958cd4 100644
---
a/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/constants/JexlKeywordsEnum.java
+++
b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/util/JexlCheckerUtil.java
@@ -15,48 +15,36 @@
* limitations under the License.
*/
-package org.apache.hertzbeat.common.constants;
+package org.apache.hertzbeat.common.util;
-import java.util.Arrays;
+import org.apache.hertzbeat.common.constants.JexlKeywordsEnum;
/**
- * Jexl keywords enum
+ * Validate JEXL rules
*/
-public enum JexlKeywordsEnum {
+public class JexlCheckerUtil {
- SIZE("size"),
- EMPTY("empty"),
- NEW("new"),
- VAR("var"),
- RETURN("return"),
- IF("if"),
- ELSE("else"),
- ELSEIF("elseif"),
- WHILE("while"),
- DO("do"),
- FOR("for"),
- CONTINUE("continue"),
- BREAK("break"),
- TRUE("true"),
- FALSE("false"),
- NULL("null"),
- UNDEFINED("undefined");
+ public static final String SPACES_REGEX = "^\\S+(?:\\s+\\S+)+$";
- private final String keyword;
-
- JexlKeywordsEnum(String keyword) {
- this.keyword = keyword;
+ /**
+ * Verify Keyword Information
+ */
+ public static boolean verifyKeywords(String str) {
+ return JexlKeywordsEnum.match(str);
}
- public String getKeyword() {
- return keyword;
+ /**
+ * Verify the starting character
+ */
+ public static boolean verifyStartCharacter(String str) {
+ char c = str.charAt(0);
+ return !((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '_'
|| c == '$');
}
- public static boolean match(String word) {
- if (word == null || word.trim().isEmpty()) {
- return false;
- }
- return Arrays.stream(values()).anyMatch(t -> t.keyword.equals(word));
+ /**
+ * Verify contains spaces
+ */
+ public static boolean verifySpaces(String str) {
+ return str.trim().matches(SPACES_REGEX);
}
-
}
\ No newline at end of file
diff --git
a/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/service/impl/AppServiceImpl.java
b/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/service/impl/AppServiceImpl.java
index df539570d..007092b7f 100644
---
a/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/service/impl/AppServiceImpl.java
+++
b/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/service/impl/AppServiceImpl.java
@@ -17,31 +17,12 @@
package org.apache.hertzbeat.manager.service.impl;
-import static java.util.Objects.isNull;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.stream.Collectors;
-import javax.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.hertzbeat.collector.dispatch.DispatchConstants;
import org.apache.hertzbeat.collector.util.CollectUtil;
-import org.apache.hertzbeat.common.constants.JexlKeywordsEnum;
import org.apache.hertzbeat.common.entity.job.Configmap;
import org.apache.hertzbeat.common.entity.job.Job;
import org.apache.hertzbeat.common.entity.job.Metrics;
@@ -53,6 +34,7 @@ import org.apache.hertzbeat.common.entity.message.CollectRep;
import org.apache.hertzbeat.common.support.SpringContextHolder;
import org.apache.hertzbeat.common.support.exception.CommonException;
import org.apache.hertzbeat.common.util.CommonUtil;
+import org.apache.hertzbeat.common.util.JexlCheckerUtil;
import org.apache.hertzbeat.manager.dao.DefineDao;
import org.apache.hertzbeat.manager.dao.MonitorDao;
import org.apache.hertzbeat.manager.dao.ParamDao;
@@ -74,6 +56,26 @@ import org.springframework.util.Assert;
import org.springframework.util.StreamUtils;
import org.yaml.snakeyaml.Yaml;
+import javax.annotation.Resource;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.Collectors;
+
+import static java.util.Objects.isNull;
+
/**
* Monitoring Type Management Implementation
* Temporarily stores the monitoring configuration and parameter configuration
in memory,
@@ -459,10 +461,18 @@ public class AppServiceImpl implements AppService,
InitializingBean {
throw new IllegalArgumentException(app.getApp() + " " +
metrics.getName() + " "
+ field.getField() + " can not duplicated.");
}
- if (JexlKeywordsEnum.match(field.getField())) {
+ if (JexlCheckerUtil.verifyKeywords(field.getField())) {
throw new IllegalArgumentException(app.getApp() + " " +
metrics.getName() + " "
+ field.getField() + " prohibited keywords.");
}
+ if (JexlCheckerUtil.verifyStartCharacter(field.getField())) {
+ throw new IllegalArgumentException(app.getApp() + " " +
metrics.getName() + " "
+ + field.getField() + " illegal start character.");
+ }
+ if (JexlCheckerUtil.verifySpaces(field.getField())) {
+ throw new IllegalArgumentException(app.getApp() + " " +
metrics.getName() + " "
+ + field.getField() + " no spaces allowed.");
+ }
fieldsSet.add(field.getField());
}
}
diff --git
a/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/service/impl/MonitorServiceImpl.java
b/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/service/impl/MonitorServiceImpl.java
index b1c689277..bde0de1c5 100644
---
a/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/service/impl/MonitorServiceImpl.java
+++
b/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/service/impl/MonitorServiceImpl.java
@@ -30,7 +30,6 @@ import org.apache.hertzbeat.alert.dao.AlertDefineBindDao;
import org.apache.hertzbeat.collector.dispatch.DispatchConstants;
import org.apache.hertzbeat.common.constants.CommonConstants;
import org.apache.hertzbeat.common.constants.ExportFileConstants;
-import org.apache.hertzbeat.common.constants.JexlKeywordsEnum;
import org.apache.hertzbeat.common.constants.NetworkConstants;
import org.apache.hertzbeat.common.constants.SignConstants;
import org.apache.hertzbeat.common.entity.grafana.GrafanaDashboard;
@@ -50,6 +49,7 @@ import org.apache.hertzbeat.common.util.AesUtil;
import org.apache.hertzbeat.common.util.FileUtil;
import org.apache.hertzbeat.common.util.IntervalExpressionUtil;
import org.apache.hertzbeat.common.util.IpDomainUtil;
+import org.apache.hertzbeat.common.util.JexlCheckerUtil;
import org.apache.hertzbeat.common.util.JsonUtil;
import org.apache.hertzbeat.common.util.SnowFlakeIdGenerator;
import org.apache.hertzbeat.grafana.service.DashboardService;
@@ -464,10 +464,18 @@ public class MonitorServiceImpl implements MonitorService
{
continue;
}
for (Metrics.Field field : metrics.getFields()) {
- if (JexlKeywordsEnum.match(field.getField())) {
+ if (JexlCheckerUtil.verifyKeywords(field.getField())) {
throw new IllegalArgumentException(job.getApp() + " "
+ metrics.getName() + " "
+ field.getField() + " prohibited keywords,
please modify the template information.");
}
+ if
(JexlCheckerUtil.verifyStartCharacter(field.getField())) {
+ throw new IllegalArgumentException(job.getApp() + " "
+ metrics.getName() + " "
+ + field.getField() + " illegal start
character, please modify the template information.");
+ }
+ if (JexlCheckerUtil.verifySpaces(field.getField())) {
+ throw new IllegalArgumentException(job.getApp() + " "
+ metrics.getName() + " "
+ + field.getField() + " no spaces allowed,
please modify the template information.");
+ }
}
}
}
diff --git a/hertzbeat-manager/src/main/resources/define/app-kafka_client.yml
b/hertzbeat-manager/src/main/resources/define/app-kafka_client.yml
index 2e62e5d7b..6a472716f 100644
--- a/hertzbeat-manager/src/main/resources/define/app-kafka_client.yml
+++ b/hertzbeat-manager/src/main/resources/define/app-kafka_client.yml
@@ -188,7 +188,7 @@ metrics:
zh-CN: 消费者组ID
en-US: Consumer Group ID
ja-JP: 消費者グループID
- - field: Group Member Num
+ - field: group_member_num
type: 1
i18n:
zh-CN: 消费者实例数量
@@ -201,7 +201,7 @@ metrics:
zh-CN: 订阅主题名称
en-US: Subscribed Topic Name
ja-JP: 購読されたトピック名
- - field: Offset of Each Partition
+ - field: offset_of_each_partition
type: 1
i18n:
zh-CN: 各分区偏移量
diff --git a/hertzbeat-manager/src/main/resources/define/app-pulsar.yml
b/hertzbeat-manager/src/main/resources/define/app-pulsar.yml
index 38f76bbb5..133df9b00 100644
--- a/hertzbeat-manager/src/main/resources/define/app-pulsar.yml
+++ b/hertzbeat-manager/src/main/resources/define/app-pulsar.yml
@@ -172,7 +172,7 @@ metrics:
timeout: ^_^timeout^_^
method: GET
parseType: prometheus
- - name: jvm_memory_pool_allocated_bytes
+ - name: jvm_memory_pool_allocated_bytes_total
i18n:
zh-CN: JVM 内存池已分配字节
en-US: JVM Memory Pool Allocated Bytes
@@ -181,13 +181,6 @@ metrics:
# the protocol used for monitoring, eg: sql, ssh, http, telnet, wmi, snmp,
sdk
protocol: http
fields:
- - field: .name
- type: 1
- i18n:
- zh-CN: 名称
- en-US: Name
- ja-JP: 名前
- label: true
- field: pool
type: 1
label: true
@@ -320,13 +313,6 @@ metrics:
# the protocol used for monitoring, eg: sql, ssh, http, telnet, wmi, snmp,
sdk
protocol: http
fields:
- - field: .name
- type: 1
- i18n:
- zh-CN: 指标名称
- en-US: Metric Name
- ja-JP: メトリクス名
- label: true
- field: cluster
type: 1
i18n:
@@ -358,7 +344,7 @@ metrics:
timeout: ^_^timeout^_^
method: GET
parseType: prometheus
- - name: pulsar_metadata_store_ops_latency_ms
+ - name: pulsar_metadata_store_ops_latency_ms_bucket
i18n:
zh-CN: 元数据存储操作延迟
en-US: Metadata Store Ops Latency
@@ -367,13 +353,6 @@ metrics:
# the protocol used for monitoring, eg: sql, ssh, http, telnet, wmi, snmp,
sdk
protocol: http
fields:
- - field: .name
- type: 1
- i18n:
- zh-CN: 指标名称
- en-US: Metric Name
- ja-JP: メトリクス名
- label: true
- field: cluster
type: 1
i18n:
@@ -402,8 +381,23 @@ metrics:
en-US: Status
ja-JP: ステータス
label: true
- - field: le
+ - field: le_label
+ type: 1
+ - field: value
type: 0
+ i18n:
+ zh-CN: 值
+ en-US: value
+ ja-JP: 値
+ aliasFields:
+ - cluster
+ - name
+ - type
+ - status
+ - le
+ - value
+ calculates:
+ - le_label=le
# the config content when protocol is http
http:
# http host: ipv4 ipv6 domain
diff --git
a/hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/script/YamlCheckScript.java
b/hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/script/YamlCheckScript.java
index 54f98b3c6..67c00f012 100644
---
a/hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/script/YamlCheckScript.java
+++
b/hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/script/YamlCheckScript.java
@@ -18,9 +18,9 @@
package org.apache.hertzbeat.manager.script;
import org.apache.commons.lang3.StringUtils;
-import org.apache.hertzbeat.common.constants.JexlKeywordsEnum;
import org.apache.hertzbeat.common.entity.job.Job;
import org.apache.hertzbeat.common.entity.job.Metrics;
+import org.apache.hertzbeat.common.util.JexlCheckerUtil;
import org.junit.jupiter.api.Test;
import org.yaml.snakeyaml.Yaml;
@@ -44,6 +44,7 @@ public class YamlCheckScript {
if (!Files.exists(definePath)) {
throw new IllegalStateException("Define directory not found: " +
YML_PATH);
}
+ // check keywords/start char/space
try (Stream<Path> paths = Files.walk(definePath)) {
paths.filter(Files::isRegularFile)
.filter(path -> path.toString().endsWith(".yml"))
@@ -63,13 +64,13 @@ public class YamlCheckScript {
throw new IllegalArgumentException("Failed to load Job from file:
" + filePath.getFileName());
}
try {
- validateJexlKeywords(app.getMetrics());
+ validateJexl(app.getMetrics());
} catch (Exception e) {
System.out.printf("file: %s , msg: %s%n", filePath.getFileName(),
e.getMessage());
}
}
- private void validateJexlKeywords(List<Metrics> metrics) {
+ private void validateJexl(List<Metrics> metrics) {
if (null == metrics || metrics.isEmpty()) {
return;
}
@@ -81,9 +82,15 @@ public class YamlCheckScript {
if (null == field || StringUtils.isBlank(field.getField())) {
continue;
}
- if (JexlKeywordsEnum.match(field.getField())) {
+ if (JexlCheckerUtil.verifyKeywords(field.getField())) {
throw new IllegalArgumentException("check jexl keywords
failed. field:" + field.getField());
}
+ if (JexlCheckerUtil.verifyStartCharacter(field.getField())) {
+ throw new IllegalArgumentException("check jexl start char
failed. field:" + field.getField());
+ }
+ if (JexlCheckerUtil.verifySpaces(field.getField())) {
+ throw new IllegalArgumentException("check jexl spaces
failed. field:" + field.getField());
+ }
}
}
diff --git a/home/docs/community/maturity.md b/home/docs/community/maturity.md
index 449d3e42e..a60f7b26b 100644
--- a/home/docs/community/maturity.md
+++ b/home/docs/community/maturity.md
@@ -6,9 +6,11 @@ sidebar_position: 0
## Maturity Assessment for Apache HertzBeat™
-The goals of this maturity model are to describe how Apache projects operate
in a concise and high-level way, and to provide a basic framework that projects
may choose to use to evaluate themselves.
+The goals of this maturity model are to describe how Apache projects operate
in a concise and high-level way, and to
+provide a basic framework that projects may choose to use to evaluate
themselves.
-More details can be found
[here](https://community.apache.org/apache-way/apache-project-maturity-model.html).
+More details can be found in
+the [Apache Project Maturity
Model](https://community.apache.org/apache-way/apache-project-maturity-model.html).
## Status of this assessment
@@ -16,22 +18,24 @@ This assessment is evaluated during HertzBeat's Incubating.
## Maturity model assessment
-The following table is filled according to the [Apache Maturity
Model](https://community.apache.org/apache-way/apache-project-maturity-model.html).
Mentors and community members are welcome to comment and modify it.
+The following table is filled according to
+the [Apache Maturity
Model](https://community.apache.org/apache-way/apache-project-maturity-model.html).
Mentors and
+community members are welcome to comment and modify it.
### CODE
| **ID** | **Description**
| **Status**
|
-| -------- |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+|----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **CD10** | The project produces Open Source software for distribution to the
public, at no charge.
| **YES** The project source code is licensed
under the `Apache License 2.0`.
|
| **CD20** | Anyone can easily discover and access the project's code..
| **YES** The [official
website](https://hertzbeat.apache.org/) includes `GitHub` link which can access
the project's repository on GitHub directly.
|
-| **CD30** | Anyone using standard, widely-available tools, can build the code
in a reproducible way.
| **YES** Apache HertzBeat provide `how-to-build`
document for every component to tell user how to compile on bare metal, such as
the [core's](https://hertzbeat.apache.org/docs/community/development). |
+| **CD30** | Anyone using standard, widely-available tools, can build the code
in a reproducible way.
| **YES** Apache HertzBeat provide `how-to-build`
document for every component to tell user how to compile on bare metal, such as
the [core's](https://hertzbeat.apache.org/docs/community/development).
|
| **CD40** | The full history of the project's code is available via a source
code control system, in a way that allows anyone to recreate any released
version.
| **YES** It depends on git, and anyone can
view the full history of the project via commit logs.
|
| **CD50** | The source code control system establishes the provenance of each
line of code in a reliable way, based on strong authentication of the
committer. When third parties contribute code, commit messages provide reliable
information about the code provenance. | **YES** The project uses GitHub and
managed by Apache Infra, it ensuring provenance of each line of code to a
committer. And the third-party contributions are accepted in accordance with
the contributing guides. |
### LICENSE
| **ID** | **Description**
| **Status**
|
-| -------- |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+|----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **LC10** | The Apache License, version 2.0, covers the released code.
| **YES** The
[LICENSE](https://github.com/apache/hertzbeat/blob/master/LICENSE) is in GitHub
repository. And all source files are with APLv2 header, checked by Github
Action. |
| **LC20** | Libraries that are mandatory dependencies of the project's code
do not create more restrictions than the Apache License does.
| **YES** All dependencies are listed.
|
| **LC30** | The libraries mentioned in LC20 are available as Open Source
software.
| **YES** All dependencies are listed are
available as Open Source software
|
@@ -41,17 +45,17 @@ The following table is filled according to the [Apache
Maturity Model](https://c
### Releases
| **ID** | **Description**
| **Status**
|
-| -------- |
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **RE10** | Releases consist of source code, distributed using standard and
open archive formats that are expected to stay readable in the long term.
| **YES** Source release is distributed via
[dist.apache.org](https://dist.apache.org/repos/dist/release/incubator/hertzbeat/)
and linked from [download page](https://hertzbeat.apache.org/docs/download). |
-| **RE20** | The project's PPMC (Project Management Committee, see CS10)
approves each software release in order to make the release an act of the
Foundation. | **YES** All releases have been voted at
<[email protected]> and <[email protected]>, and have at
least 3 PPMC member's votes.
|
+| **RE20** | The project's PPMC (Project Management Committee, see CS10)
approves each software release in order to make the release an act of the
Foundation. | **YES** All releases have been voted at
<[email protected]> and <[email protected]>, and have at
least 3 PPMC member's votes.
|
| **RE30** | Releases are signed and/or distributed along with digests that
anyone can reliably use to validate the downloaded archives.
| **YES** All releases are signed, and the
[KEYS](https://dist.apache.org/repos/dist/release/incubator/hertzbeat/KEYS) are
available.
|
| **RE40** | The project can distribute convenience binaries alongside source
code, but they are not Apache Releases, they are provided with no guarantee.
| **YES** User can easily build binaries from source
code, and we do not provide binaries as Apache Releases.
|
-| **RE50** | The project documents a repeatable release process so that
someone new to the project can independently generate the complete set of
artifacts required for a release. | **YES** We can follow the [Release
guide](https://hertzbeat.apache.org/docs/community/how_to_release) to make a
new Apache HertzBeat release, and so far we had 4 different release managers.
|
+| **RE50** | The project documents a repeatable release process so that
someone new to the project can independently generate the complete set of
artifacts required for a release. | **YES** We can follow the [Release
guide](https://hertzbeat.apache.org/docs/community/how_to_release) to make a
new Apache HertzBeat release, and so far we had 4 different release managers.
|
### Quality
| **ID** | **Description**
| **Status**
|
-| -------- |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+|----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **QU10** | The project is open and honest about the quality of its code.
Various levels of quality and maturity for various modules are natural and
acceptable as long as they are clearly communicated. | **YES** We encourage
user to [report issues](https://github.com/apache/hertzbeat/issues).
|
| **QU20** | The project puts a very high priority on producing secure
software.
| **YES** All security
reports are actively handled.
|
| **QU30** | The project provides a well-documented, secure and private
channel to report security issues, along with a documented way of responding to
them. | **Yes** The official
Github Repo provides a [security
doc](https://github.com/apache/hertzbeat/blob/master/SECURITY.md)
|
@@ -61,7 +65,7 @@ The following table is filled according to the [Apache
Maturity Model](https://c
### Community
| **ID** | **Description**
| **Status**
|
-| -------- |
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **CO10** | The project has a well-known homepage that points to all the
information required to operate according to this maturity model.
| **YES** The [official
website](https://hertzbeat.apache.org/) includes all information user need to
run Apache HertzBeat.
|
| **CO20** | The community welcomes contributions from anyone who acts in good
faith and in a respectful manner, and who adds value to the project.
| **Yes** We provide contributing guides for every
component. And we also have a [general contributing
guide](https://hertzbeat.apache.org/docs/community/contribution)
|
| **CO30** | Contributions include source code, documentation, constructive
bug reports, constructive discussions, marketing and generally anything that
adds value to the project. | **YES** All good contributions including code and
non-code are welcomed.
|
@@ -72,17 +76,17 @@ The following table is filled according to the [Apache
Maturity Model](https://c
### Consensus
-| **ID** | **Description**
|
**Status**
|
-| -------- |
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|--------------------------------------------------------------------------------------------------------------|
-| **CS10** | The project maintains a public list of its contributors who have
decision power. The project's PPMC (Project Management Committee) consists of
those contributors. |
**Yes** See [members](https://hertzbeat.apache.org/team/) with all PPMC members
and committers. |
+| **ID** | **Description**
|
**Status**
|
+|----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|
+| **CS10** | The project maintains a public list of its contributors who have
decision power. The project's PPMC (Project Management Committee) consists of
those contributors. |
**Yes** See [members](https://hertzbeat.apache.org/team/) with all PPMC members
and committers. |
| **CS20** | Decisions require a consensus among PPMC members and are
documented on the project's main communications channel. The PPMC takes
community opinions into account, but the PPMC has the final word.
| **YES** All decisions are made by votes on
<[email protected]>, and with at least 3 +1 votes from PPMC. |
-| **CS30** | The project uses documented voting rules to build consensus when
discussion is not sufficient.
|
**YES** The project uses the standard ASF voting rules.
|
-| **CS40** | In Apache projects, vetoes are only valid for code commits. The
person exercising the veto must justify it with a technical explanation, as per
the Apache voting rules defined in CS30. |
**YES** Apache HertzBeat community has not used the veto power yet except for
code commits. |
-| **CS50** | All "important" discussions happen asynchronously in written form
on the project's main communications channel. Offline, face-to-face or private
discussions that affect the project are also documented on that channel. |
**YES** All important discussions and conclusions are recorded in written form.
|
+| **CS30** | The project uses documented voting rules to build consensus when
discussion is not sufficient.
|
**YES** The project uses the standard ASF voting rules.
|
+| **CS40** | In Apache projects, vetoes are only valid for code commits. The
person exercising the veto must justify it with a technical explanation, as per
the Apache voting rules defined in CS30. |
**YES** Apache HertzBeat community has not used the veto power yet except for
code commits. |
+| **CS50** | All "important" discussions happen asynchronously in written form
on the project's main communications channel. Offline, face-to-face or private
discussions that affect the project are also documented on that channel. |
**YES** All important discussions and conclusions are recorded in written form.
|
### Independence
| **ID** | **Description**
| **Status**
|
-| -------- |
----------------------------------------------------------------------------------------
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+|----------|------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **IN10** | The project is independent from any corporate or organizational
influence. | **YES** The PPMC members and committer of Apache
HertzBeat are from several different companies, and majority of them are NOT
From the company that donated this project. |
| **IN20** | Contributors act as themselves, not as representatives of a
corporation or organization. | **YES** The contributors act on their own
initiative without representing a corporation or organization.
|
diff --git a/home/docs/help/kafka_client.md b/home/docs/help/kafka_client.md
index f35c4fe7d..ccff28798 100644
--- a/home/docs/help/kafka_client.md
+++ b/home/docs/help/kafka_client.md
@@ -51,7 +51,7 @@ keywords: [open-source monitoring system, open-source message
middleware monitor
| Metric Name | Unit | Help Description |
|-----------|--|------------------------------------|
| GroupId | None | Consumer Group Id |
-| Group Member Num | None | Number of Consumer Instances |
+| group_member_num | None | Number of Consumer Instances |
| Subscribed Topic Name | None | Topic Name Subscribed by the Group |
-| Offsets of Each Partition | None | Offsets for Each Partition |
+| offset_of_each_partition | None | Offsets for Each Partition |
| Lag | None | Lag of Consumer |
diff --git a/home/docs/help/pulsar.md b/home/docs/help/pulsar.md
index 1424bd3f5..a938c6f02 100644
--- a/home/docs/help/pulsar.md
+++ b/home/docs/help/pulsar.md
@@ -47,7 +47,7 @@ keywords: [open-source monitoring system, open-source
database monitoring, Hbase
|----------------------|------|------------------------------------|
| Max File Descriptors | NONE | Maximum Number of File Descriptors |
-#### Metric Set: jvm_memory_pool_allocated_bytes
+#### Metric Set: jvm_memory_pool_allocated_bytes_total
Number of bytes of memory allocated in a specific memory pool in the Java
Virtual Machine (JVM). In Pulsar, this typically refers to the amount of memory
allocated for various purposes in the JVM (such as heap memory, non-heap
memory, etc.).
@@ -67,6 +67,6 @@ Maximum number of bytes of memory that can be allocated in a
specific memory poo
Message publishing latency on the broker side.
-#### Metric Set: pulsar_metadata_store_ops_latency_ms
+#### Metric Set: pulsar_metadata_store_ops_latency_ms_bucket
Latency of metadata store operations on the broker side.
diff --git
a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/maturity.md
b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/maturity.md
index 449d3e42e..d5f2c74e6 100644
---
a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/maturity.md
+++
b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/community/maturity.md
@@ -8,7 +8,7 @@ sidebar_position: 0
The goals of this maturity model are to describe how Apache projects operate
in a concise and high-level way, and to provide a basic framework that projects
may choose to use to evaluate themselves.
-More details can be found
[here](https://community.apache.org/apache-way/apache-project-maturity-model.html).
+More details can be found in the [Apache Project Maturity
Model](https://community.apache.org/apache-way/apache-project-maturity-model.html).
## Status of this assessment
diff --git
a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/kafka_client.md
b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/kafka_client.md
index f88304473..ee72dd0e1 100644
---
a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/kafka_client.md
+++
b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/kafka_client.md
@@ -51,7 +51,7 @@ keywords: [开源监控系统, 开源消息中间件监控, Kafka监控]
| 指标名称 | 指标单位 | 指标帮助描述 |
|-----------|------|-------|
| GroupId | 无 | 消费者组ID |
-| Group Member Num | 无 | 消费者实例数量|
+| group_member_num | 无 | 消费者实例数量|
| Subscribed Topic Name | 无 | 订阅主题名称 |
-| Offsets of Each Partition | 无 | 各分区偏移量 |
+| offset_of_each_partition | 无 | 各分区偏移量 |
| Lag | 无 | 落后偏移量 |
diff --git
a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/pulsar.md
b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/pulsar.md
index f37070d86..1db66c891 100644
--- a/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/pulsar.md
+++ b/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/help/pulsar.md
@@ -47,7 +47,7 @@ keywords: [开源监控系统, 开源数据库监控, HbaseMaster监控]
|----------------------|------|---------|
| Max File Descriptors | 无 | 最大文件描述符 |
-#### 指标集合: jvm_memory_pool_allocated_bytes
+#### 指标集合: jvm_memory_pool_allocated_bytes_total
Java虚拟机(JVM)中特定内存池已分配的内存字节数。在Pulsar中,这通常指的是用于各种目的的JVM内存(如堆内存、非堆内存等)中已经分配出去的内存量。
@@ -67,6 +67,6 @@ JVM中特定内存池可分配的最大内存字节数。这是该内存池允
Broker端消息发布延迟
-#### 指标集合:pulsar_metadata_store_ops_latency_ms
+#### 指标集合:pulsar_metadata_store_ops_latency_ms_bucket
Broker端元数据存储操作延迟
diff --git
a/home/i18n/zh-cn/docusaurus-plugin-content-docs/version-v1.6.x/help/kafka_client.md
b/home/i18n/zh-cn/docusaurus-plugin-content-docs/version-v1.6.x/help/kafka_client.md
index f88304473..ee72dd0e1 100644
---
a/home/i18n/zh-cn/docusaurus-plugin-content-docs/version-v1.6.x/help/kafka_client.md
+++
b/home/i18n/zh-cn/docusaurus-plugin-content-docs/version-v1.6.x/help/kafka_client.md
@@ -51,7 +51,7 @@ keywords: [开源监控系统, 开源消息中间件监控, Kafka监控]
| 指标名称 | 指标单位 | 指标帮助描述 |
|-----------|------|-------|
| GroupId | 无 | 消费者组ID |
-| Group Member Num | 无 | 消费者实例数量|
+| group_member_num | 无 | 消费者实例数量|
| Subscribed Topic Name | 无 | 订阅主题名称 |
-| Offsets of Each Partition | 无 | 各分区偏移量 |
+| offset_of_each_partition | 无 | 各分区偏移量 |
| Lag | 无 | 落后偏移量 |
diff --git
a/home/i18n/zh-cn/docusaurus-plugin-content-docs/version-v1.6.x/help/pulsar.md
b/home/i18n/zh-cn/docusaurus-plugin-content-docs/version-v1.6.x/help/pulsar.md
index f37070d86..1db66c891 100644
---
a/home/i18n/zh-cn/docusaurus-plugin-content-docs/version-v1.6.x/help/pulsar.md
+++
b/home/i18n/zh-cn/docusaurus-plugin-content-docs/version-v1.6.x/help/pulsar.md
@@ -47,7 +47,7 @@ keywords: [开源监控系统, 开源数据库监控, HbaseMaster监控]
|----------------------|------|---------|
| Max File Descriptors | 无 | 最大文件描述符 |
-#### 指标集合: jvm_memory_pool_allocated_bytes
+#### 指标集合: jvm_memory_pool_allocated_bytes_total
Java虚拟机(JVM)中特定内存池已分配的内存字节数。在Pulsar中,这通常指的是用于各种目的的JVM内存(如堆内存、非堆内存等)中已经分配出去的内存量。
@@ -67,6 +67,6 @@ JVM中特定内存池可分配的最大内存字节数。这是该内存池允
Broker端消息发布延迟
-#### 指标集合:pulsar_metadata_store_ops_latency_ms
+#### 指标集合:pulsar_metadata_store_ops_latency_ms_bucket
Broker端元数据存储操作延迟
diff --git a/home/versioned_docs/version-v1.6.x/help/kafka_client.md
b/home/versioned_docs/version-v1.6.x/help/kafka_client.md
index f35c4fe7d..ccff28798 100644
--- a/home/versioned_docs/version-v1.6.x/help/kafka_client.md
+++ b/home/versioned_docs/version-v1.6.x/help/kafka_client.md
@@ -51,7 +51,7 @@ keywords: [open-source monitoring system, open-source message
middleware monitor
| Metric Name | Unit | Help Description |
|-----------|--|------------------------------------|
| GroupId | None | Consumer Group Id |
-| Group Member Num | None | Number of Consumer Instances |
+| group_member_num | None | Number of Consumer Instances |
| Subscribed Topic Name | None | Topic Name Subscribed by the Group |
-| Offsets of Each Partition | None | Offsets for Each Partition |
+| offset_of_each_partition | None | Offsets for Each Partition |
| Lag | None | Lag of Consumer |
diff --git a/home/versioned_docs/version-v1.6.x/help/pulsar.md
b/home/versioned_docs/version-v1.6.x/help/pulsar.md
index 1424bd3f5..a938c6f02 100644
--- a/home/versioned_docs/version-v1.6.x/help/pulsar.md
+++ b/home/versioned_docs/version-v1.6.x/help/pulsar.md
@@ -47,7 +47,7 @@ keywords: [open-source monitoring system, open-source
database monitoring, Hbase
|----------------------|------|------------------------------------|
| Max File Descriptors | NONE | Maximum Number of File Descriptors |
-#### Metric Set: jvm_memory_pool_allocated_bytes
+#### Metric Set: jvm_memory_pool_allocated_bytes_total
Number of bytes of memory allocated in a specific memory pool in the Java
Virtual Machine (JVM). In Pulsar, this typically refers to the amount of memory
allocated for various purposes in the JVM (such as heap memory, non-heap
memory, etc.).
@@ -67,6 +67,6 @@ Maximum number of bytes of memory that can be allocated in a
specific memory poo
Message publishing latency on the broker side.
-#### Metric Set: pulsar_metadata_store_ops_latency_ms
+#### Metric Set: pulsar_metadata_store_ops_latency_ms_bucket
Latency of metadata store operations on the broker side.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]