chore: import upstream snapshot with attribution
MCP Bash Server CI / Test MCP Bash Server (dev) (push) Has been cancelled
MCP Bash Server CI / Test MCP Bash Server (release) (push) Has been cancelled

This commit is contained in:
wehub-resource-sync
2026-07-13 13:11:39 +08:00
commit c8cebdfeee
4654 changed files with 626756 additions and 0 deletions
+1
View File
@@ -0,0 +1 @@
enable-pre-post-scripts=true
+201
View File
@@ -0,0 +1,201 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
+110
View File
@@ -0,0 +1,110 @@
# HertzBeat Website
This website is built with [Docusaurus](https://docusaurus.io/).
## Installation
```shell
pnpm install
## pnpm install --registry=https://registry.npmmirror.com
```
## I18N
```console
pnpm write-translations --locale zh-cn
pnpm write-translations --locale en
```
## Local Development
```console
pnpm start
```
This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server.
## Team Page
### Member
Update the member information in `src/pages/team/data/member.json` File.
### Contributor
Please refer to the [All Contributors](https://allcontributors.org/) to auto add contributor.
```console
pnpm all-contributors generate
```
Use generate to read the contributors list from `.all-contributorsrc` file and update the contributor tables specified by the files key.
### Avatar
```console
pnpm github-avatar
```
This command will fetch the base64 string of the GitHub avatar from file `src/pages/team/data/member.json` and `.all-contributorsrc`, and store the result in the `src/pages/team/data/` directory. The operation might take a little while.
## Build
```console
pnpm build
```
This command generates static content into the `build` directory and can be served using any static contents hosting service.
## Deployment
```console
GIT_USER=<Your GitHub username> USE_SSH=true pnpm run deploy
OR
USE_SSH=true pnpm run deploy
```
If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch.
### Deployment to Gitee
```console
GITHUB_HOST=gitee.com USE_SSH=true pnpm run deploy
```
### Archive Version
```shell
pnpm docusaurus docs:version v1.5.x
```
## Directory Structure
```html
|-- docs
|-- blog
|-- i18n
| `-- zh-CN // internationalized chinese
| |-- code.json
| |-- docusaurus-plugin-content-blog
| |-- docusaurus-plugin-content-docs
| `-- docusaurus-theme-classic
|-- resource // static resource file
|-- src
| |-- theme
| |-- css
| |-- js
| |-- pages
| | |-- components
| | |-- index.js
| |-- constants.js
|-- static // picture static resource
| |-- img //
| | |-- blog // blog picture
| | |-- docs // document picture
| | |-- home // product picture
| | |-- icons // icon
|-- docusaurus.config.js
|-- sidebars.js // document sidebar menu configuration
```
+3
View File
@@ -0,0 +1,3 @@
module.exports = {
presets: [require.resolve('@docusaurus/core/lib/babel/preset')],
}
+73
View File
@@ -0,0 +1,73 @@
---
title: Cloud Monitoring System HertzBeat v1.0 Officially Released
author: tom
author_title: tom
author_url: https://github.com/tomsun28
tags: [opensource]
---
HertzBeat, incubated by Dromara and open-sourced by TanCloud, is an open-source monitoring and alerting project that supports a variety of monitoring types including websites, APIs, PING, ports, databases, full-site, operating systems, middleware, etc.
It supports threshold alarms and notification alerts (email, webhook, DingTalk, WeCom, Feishu robots) and has an easy-to-use, friendly visual operation interface.
Official Website: hertzbeat.com | tancloud.cn
From v1.0-beta.1 to v1.0-beta.8, after multiple iterations and improvements, we are excited to announce the official release of HertzBeat v1.0.
We would like to thank the HertzBeat Contributors for their contributions since version beta.1 and the community and users for their support. This version adds support for Redis monitoring (contributed by @gcdd1993), covering a comprehensive range of performance indicators such as Redis memory and CPU, to fully monitor Redis. Multiple bugs have been fixed to further enhance stability.
<table>
<tr>
<td align="center"><a href="https://github.com/tomsun28"><img src="https://avatars.githubusercontent.com/u/24788200?v=4?s=100" width="100px;" alt="" /><br /><sub><b>tomsun28</b></sub></a><br /><a href="https://github.com/tomsun28/hertzbeat/commits?author=tomsun28" title="Code">💻</a> <a href="https://github.com/tomsun28/hertzbeat/commits?author=tomsun28" title="Documentation">📖</a> <a href="#design-tomsun28" title="Design">🎨</a></td>
<td align="center"><a href="https://github.com/wang1027-wqh"><img src="https://avatars.githubusercontent.com/u/71161318?v=4?s=100" width="100px;" alt="" /><br /><sub><b>会编程的王学长</b></sub></a><br /><a href="https://github.com/tomsun28/hertzbeat/commits?author=wang1027-wqh" title="Code">💻</a> <a href="https://github.com/tomsun28/hertzbeat/commits?author=wang1027-wqh" title="Documentation">📖</a> <a href="#design-wang1027-wqh" title="Design">🎨</a></td>
<td align="center"><a href="https://www.maxkey.top/"><img src="https://avatars.githubusercontent.com/u/1563377?v=4?s=100" width="100px;" alt="" /><br /><sub><b>MaxKey</b></sub></a><br /><a href="https://github.com/tomsun28/hertzbeat/commits?author=shimingxy" title="Code">💻</a> <a href="#design-shimingxy" title="Design">🎨</a> <a href="#ideas-shimingxy" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center"><a href="https://blog.gcdd.top/"><img src="https://avatars.githubusercontent.com/u/26523525?v=4?s=100" width="100px;" alt="" /><br /><sub><b>观沧海</b></sub></a><br /><a href="https://github.com/tomsun28/hertzbeat/commits?author=gcdd1993" title="Code">💻</a> <a href="#design-gcdd1993" title="Design">🎨</a> <a href="https://github.com/tomsun28/hertzbeat/issues?q=author%3Agcdd1993" title="Bug reports">🐛</a></td>
<td align="center"><a href="https://github.com/a25017012"><img src="https://avatars.githubusercontent.com/u/32265356?v=4?s=100" width="100px;" alt="" /><br /><sub><b>yuye</b></sub></a><br /><a href="https://github.com/tomsun28/hertzbeat/commits?author=a25017012" title="Code">💻</a> <a href="https://github.com/tomsun28/hertzbeat/commits?author=a25017012" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/jx10086"><img src="https://avatars.githubusercontent.com/u/5323228?v=4?s=100" width="100px;" alt="" /><br /><sub><b>jx10086</b></sub></a><br /><a href="https://github.com/tomsun28/hertzbeat/commits?author=jx10086" title="Code">💻</a> <a href="https://github.com/tomsun28/hertzbeat/issues?q=author%3Ajx10086" title="Bug reports">🐛</a></td>
<td align="center"><a href="https://github.com/winnerTimer"><img src="https://avatars.githubusercontent.com/u/76024658?v=4?s=100" width="100px;" alt="" /><br /><sub><b>winnerTimer</b></sub></a><br /><a href="https://github.com/tomsun28/hertzbeat/commits?author=winnerTimer" title="Code">💻</a> <a href="https://github.com/tomsun28/hertzbeat/issues?q=author%3AwinnerTimer" title="Bug reports">🐛</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/goo-kits"><img src="https://avatars.githubusercontent.com/u/13163673?v=4?s=100" width="100px;" alt="" /><br /><sub><b>goo-kits</b></sub></a><br /><a href="https://github.com/tomsun28/hertzbeat/commits?author=goo-kits" title="Code">💻</a> <a href="https://github.com/tomsun28/hertzbeat/issues?q=author%3Agoo-kits" title="Bug reports">🐛</a></td>
<td align="center"><a href="https://github.com/brave4Time"><img src="https://avatars.githubusercontent.com/u/105094014?v=4?s=100" width="100px;" alt="" /><br /><sub><b>brave4Time</b></sub></a><br /><a href="https://github.com/tomsun28/hertzbeat/commits?author=brave4Time" title="Code">💻</a> <a href="https://github.com/tomsun28/hertzbeat/issues?q=author%3Abrave4Time" title="Bug reports">🐛</a></td>
<td align="center"><a href="https://github.com/walkerlee-lab"><img src="https://avatars.githubusercontent.com/u/8426753?v=4?s=100" width="100px;" alt="" /><br /><sub><b>WalkerLee</b></sub></a><br /><a href="https://github.com/tomsun28/hertzbeat/commits?author=walkerlee-lab" title="Code">💻</a> <a href="https://github.com/tomsun28/hertzbeat/issues?q=author%3Awalkerlee-lab" title="Bug reports">🐛</a></td>
<td align="center"><a href="https://github.com/fullofjoy"><img src="https://avatars.githubusercontent.com/u/30247571?v=4?s=100" width="100px;" alt="" /><br /><sub><b>jianghang</b></sub></a><br /><a href="https://github.com/tomsun28/hertzbeat/commits?author=fullofjoy" title="Code">💻</a> <a href="https://github.com/tomsun28/hertzbeat/issues?q=author%3Afullofjoy" title="Bug reports">🐛</a></td>
<td align="center"><a href="https://github.com/ChineseTony"><img src="https://avatars.githubusercontent.com/u/24618786?v=4?s=100" width="100px;" alt="" /><br /><sub><b>ChineseTony</b></sub></a><br /><a href="https://github.com/tomsun28/hertzbeat/commits?author=ChineseTony" title="Code">💻</a></td>
</tr>
</table>
Feature
1. [[monitor] feature: support redis protocol #142](https://github.com/apache/hertzbeat/pull/142) contribute by @gcdd1993
2. Copyright & NOTICE contribute by @shimingxy
3. [[alerter]bugfix: support system alert trigger time #144](https://github.com/apache/hertzbeat/pull/144).
4. [[collector]feature: reuse redis connection cache #146](https://github.com/apache/hertzbeat/pull/146).
5. [[collector]handle sensitive info such as account and password in log #159](https://github.com/apache/hertzbeat/pull/159) idea from @goo-kits
6. [Feature add zookeeper help Doc #137](https://github.com/apache/hertzbeat/pull/137) contributr by @wang1027-wqh
Bug fix.
1. [[monitor]bugfix: fix load resource bundle error when local en.HK #131](https://github.com/apache/hertzbeat/pull/131).
2. [[web-app]bugfix:fix side menu invisible when theme is dark #132](https://github.com/apache/hertzbeat/pull/132).
3. [[monitor]bugfix: fix only one filter label can be set when notification #140](https://github.com/apache/hertzbeat/pull/140). issue by @daqianxiaoyao
4. [[td-engine store]bugfix: fix log #150](https://github.com/apache/hertzbeat/pull/150). contribute by @ChineseTony
5. [[collector]bugfix: fix warehouse data queue consume error #153](https://github.com/apache/hertzbeat/pull/153). issue by @daqianxiaoyao
6. [[web-app]bugfix:fix input blocking when input error in dark theme #157](https://github.com/apache/hertzbeat/pull/157). issue by @ConradWen
Online: [tancloud](https://console.tancloud.cn)
-----------------------
> [HertzBeat](https://github.com/apache/hertzbeat), incubated by [Dromara](https://dromara.org) and open-sourced by [TanCloud](https://tancloud.cn), is an open-source monitoring and alerting project with a user-friendly visual interface that supports monitoring types such as websites, APIs, PING, ports, databases, operating systems, and more.
> Of course, we also provide a corresponding [SaaS cloud monitoring version](https://console.tancloud.cn), so small and medium-sized teams and individuals no longer need to deploy a cumbersome monitoring system to monitor their website resources; you can [log in](https://console.tancloud.cn) to start monitoring for free.
>
> HertzBeat supports custom monitoring; by configuring the YML file, we can customize the required monitoring types and metrics to meet common personalized needs.
> HertzBeat is modular, with manager, collector, scheduler, warehouse, alerter modules decoupled, making it easy to understand and customize for development.
> HertzBeat supports more flexible alarm configurations (calculation expressions), supports alarm notifications, alarm templates, and timely delivery of notifications via email, DingTalk, WeChat, Feishu, etc.
> Feel free to log in to HertzBeat's cloud environment, [TanCloud](https://console.tancloud.cn), to try it out and discover more.
> We are rapidly iterating and welcome participation in joining and contributing to the open-source ecosystem.
>
> The multi-type support, easy expansion, and low coupling of `HertzBeat` aim to help developers and small to medium-sized teams quickly build their own monitoring systems.
**Repository url**
[Github](https://github.com/apache/hertzbeat) [https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)
[Gitee](https://gitee.com/hertzbeat/hertzbeat) [https://gitee.com/hertzbeat/hertzbeat](https://gitee.com/hertzbeat/hertzbeat)
+72
View File
@@ -0,0 +1,72 @@
---
title: Cloud Monitoring System HertzBeat v1.1.0 Released! Start Your Monitoring Journey with Just One Command!
author: tom
author_title: tom
author_url: https://github.com/tomsun28
tags: [opensource]
---
[HertzBeat](https://github.com/apache/hertzbeat), incubated by [Dromara](https://dromara.org) and open-sourced by [TanCloud](https://tancloud.cn), is an open-source monitoring and alerting project that supports various monitoring types such as websites, APIs, PING, ports, databases, entire sites, operating systems, middleware, etc. It features threshold alarms, notification alerts (email, webhook, DingTalk, WeChat Work, Lark robots), and a user-friendly visual interface.
**Official Website: [hertzbeat.com](https://hertzbeat.apache.org) | [tancloud.cn](https://tancloud.cn)**
Hello everyone, HertzBeat v1.1.0 is released! In this version, we've added support for the SNMP protocol and implemented application monitoring for Windows operating systems using SNMP.
Another significant change is our default switch to using the H2 database instead of MYSQL for storage, making it easier for users to install and deploy. Now, you can install and experience HertzBeat with just a single Docker command: `docker run -d -p 1157:1157 --name hertzbeat apache/hertzbeat`
Let's Try It!
Thanks to all HertzBeat contributors! 👍👍
Features:
1. [[monitor]feature: Support for SNMP protocol and Windows OS monitoring #192](https://github.com/apache/hertzbeat/pull/192). Contributed by @ChineseTony
2. [[monitor] Default use of H2 database instead of MYSQL #191](https://github.com/apache/hertzbeat/pull/191)
3. [[manager] Support for internationalization of monitoring parameters, making internationalization more accessible #184](https://github.com/apache/hertzbeat/pull/184).
4. [[script] Support for amd64 and arm64 versions of Docker images #189](https://github.com/apache/hertzbeat/pull/189).
5. [[monitor]feature: Support for collecting multiple tablespaces metrics from Oracle #163](https://github.com/apache/hertzbeat/pull/163) Contributed by @brave4Time
6. [[monitor] Unified prefix "hzb_" added to database tables #193](https://github.com/apache/hertzbeat/pull/193) Issue from @shimingxy
Bugfixes:
1. [[monitor] Fix for the inability to collect CPU metrics on Tencent's CentOS version #164](https://github.com/apache/hertzbeat/pull/164) Contributed by @wyt199905.
2. [[manager] Fix for Oracle monitoring percentage metric collection issue #168](https://github.com/apache/hertzbeat/pull/168)
3. [[monitor] bugfix: Fix for Elasticsearch monitoring failure under basic authentication #174](https://github.com/apache/hertzbeat/pull/174) Contributed by @weifuqing
4. [Fix for monitoring failure due to ambiguous Oracle monitoring parameter "database name" #182](https://github.com/apache/hertzbeat/pull/182) @zklmcookle
Online at [https://console.tancloud.cn](https://console.tancloud.cn).
---
⚠️ ⚠️⚠️⚠️Please note that upgrading to v1.1.0 from other versions requires running the following SQL script. Now, our table names have a unified prefix "hzb_prefix".
```properties
ALTER TABLE alert RENAME TO hzb_alert;
ALTER TABLE alert_define RENAME TO hzb_alert_define;
ALTER TABLE alert_define_monitor_bind RENAME TO hzb_alert_define_monitor_bind;
ALTER TABLE monitor RENAME TO hzb_monitor;
ALTER TABLE notice_receiver RENAME TO hzb_notice_receiver;
ALTER TABLE notice_rule RENAME TO hzb_notice_rule;
ALTER TABLE param RENAME TO hzb_param;
ALTER TABLE param_define RENAME TO hzb_param_define;
ALTER TABLE tag RENAME TO hzb_tag;
ALTER TABLE tag_monitor_bind RENAME TO hzb_tag_monitor_bind;
commit;
```
Have Fun!
---
> [HertzBeat](https://github.com/apache/hertzbeat), incubated by [Dromara](https://dromara.org) and open-sourced by [TanCloud](https://tancloud.cn), is an open-source project supporting monitoring for websites, APIs, PING, ports, databases, operating systems, and more, with a user-friendly visual interface.
> We also offer a [SAAS cloud monitoring version](https://console.tancloud.cn), allowing small and medium teams and individuals to start monitoring their web resources without deploying a complicated monitoring system, simply [log in to start](https://console.tancloud.cn) your monitoring journey for free.
> HertzBeat supports custom monitoring; you can customize the monitoring types and metrics you need through configuration of the YML file to meet common personalized needs.
> HertzBeat is modular, with `manager, collector, scheduler, warehouse, alerter` modules decoupled, facilitating understanding and custom development.
> HertzBeat supports more flexible alarm configurations (calculation expressions), notification alerts, templates, and real-time delivery via email, DingTalk, WeChat, Lark, etc.
> Welcome to try and discover more in HertzBeat's [cloud environment TanCloud](https://console.tancloud.cn).
> We are rapidly iterating and welcome participation to join in co-building the open-source ecosystem.
>
> HertzBeat's support for multiple types, easy expansion, and low coupling hopes to help developers and small and medium teams quickly build their own monitoring systems.
**Repository Addresses**
[Github](https://github.com/apache/hertzbeat) [https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)
[Gitee](https://gitee.com/hertzbeat/hertzbeat) [https://gitee.com/hertzbeat/hertzbeat](https://gitee.com/hertzbeat/hertzbeat)
+71
View File
@@ -0,0 +1,71 @@
---
title: HertzBeat Monitoring System v1.1.0 Released! Start Your Monitoring Journey with Just One Command!
author: tom
author_title: tom
author_url: https://github.com/tomsun28
tags: [opensource]
---
[HertzBeat](https://github.com/apache/hertzbeat), incubated by [Dromara](https://dromara.org) and open-sourced by [TanCloud](https://tancloud.cn), is an open-source monitoring and alerting project that supports website, API, PING, port, database, site-wide, operating system, middleware monitoring types, and more. It features threshold alarms, alarm notifications (email, webhook, DingTalk, WeChat Work, Feishu bot), and a user-friendly visual interface.
**Official Website: [hertzbeat.com](https://hertzbeat.apache.org) | [tancloud.cn](https://tancloud.cn)**
Hello everyone, HertzBeat v1.1.0 is here! In this version, we've added support for the SNMP protocol and enabled application monitoring for Windows operating systems using SNMP.
Another major change is that we've switched from using MYSQL to H2 database by default for storage, making it easier for users to install and deploy. Now, you can get started with HertzBeat using just a single docker command: `docker run -d -p 1157:1157 --name hertzbeat apache/hertzbeat`
Let's Try It!
Thanks to all contributors of HertzBeat! 👍👍
Features:
1. [[monitor]feature: Support for SNMP protocol and Windows operating system monitoring #192](https://github.com/apache/hertzbeat/pull/192). Contributed by @ChineseTony
2. [[monitor] Default switch to H2 database instead of MYSQL #191](https://github.com/apache/hertzbeat/pull/191)
3. [[manager] Support for English internationalization of monitoring parameters, making internationalization a step closer #184](https://github.com/apache/hertzbeat/pull/184).
4. [[script] Support for amd64 and arm64 versions of the docker image #189](https://github.com/apache/hertzbeat/pull/189).
5. [[monitor]feature: Support for collecting multiple tablespace metrics from Oracle #163](https://github.com/apache/hertzbeat/pull/163) Contributed by @brave4Time
6. [[monitor] Database tables now have a unified prefix hzb_ #193](https://github.com/apache/hertzbeat/pull/193) Issue raised by @shimingxy
Bugfixes:
1. [[monitor] Fixed an issue where CPU metrics could not be collected on Tencent's CentOS version #164](https://github.com/apache/hertzbeat/pull/164) Contributed by @wyt199905.
2. [[manager] Fixed an issue with percentage metric collection for Oracle monitoring #168](https://github.com/apache/hertzbeat/pull/168)
3. [[monitor] bugfix: Fixed an issue with Elasticsearch monitoring failing under basic authentication #174](https://github.com/apache/hertzbeat/pull/174) Contributed by @weifuqing
4. [Fixed an issue where Oracle monitoring failed due to ambiguous database name parameter #182](https://github.com/apache/hertzbeat/pull/182) @zklmcookle
Online at [https://console.tancloud.cn](https://console.tancloud.cn).
---
⚠️ ⚠️⚠️⚠️Please note that upgrading to v1.1.0 from other versions requires running the following SQL script. Now, our table names have a unified prefix hzb_prefix.
```properties
ALTER TABLE alert RENAME TO hzb_alert;
ALTER TABLE alert_define RENAME TO hzb_alert_define;
ALTER TABLE alert_define_monitor_bind RENAME TO hzb_alert_define_monitor_bind;
ALTER TABLE monitor RENAME TO hzb_monitor;
ALTER TABLE notice_receiver RENAME TO hzb_notice_receiver;
ALTER TABLE notice_rule RENAME TO hzb_notice_rule;
ALTER TABLE param RENAME TO hzb_param;
ALTER TABLE param_define RENAME TO hzb_param_define;
ALTER TABLE tag RENAME TO hzb_tag;
ALTER TABLE tag_monitor_bind RENAME TO hzb_tag_monitor_bind;
commit;
```
Have Fun!
---
> [HertzBeat](https://github.com/apache/hertzbeat), incubated by [Dromara](https://dromara.org) and open-sourced by [TanCloud](https://tancloud.cn), is an open-source monitoring and alerting project that supports monitoring types such as websites, APIs, PING, ports, databases, operating systems, etc., with a user-friendly and easy-to-use visual interface.
> We also offer a [SaaS cloud monitoring version](https://console.tancloud.cn) for small and medium teams and individuals, eliminating the need to deploy a complicated monitoring system to monitor their web resources. [Sign up to start](https://console.tancloud.cn) your monitoring journey for free.
> HertzBeat supports custom monitoring; by configuring the YML file, we can customize the required monitoring types and metrics to meet common personalized needs.
> HertzBeat is modular, with `manager, collector, scheduler, warehouse, alerter` modules decoupled, making it easy to understand and customize development.
> HertzBeat supports more flexible alarm configurations (calculation expressions) and alarm notifications, including alarm templates, emails, DingTalk, WeChat, Feishu, etc., for timely delivery of notifications.
> Welcome to log in to HertzBeat's [cloud environment TanCloud](https://console.tancloud.cn) to try and discover more.
> We are in rapid iteration and welcome participation in co-building the open-source ecosystem.
>
> HertzBeat's support for multiple types, easy expansion, and low coupling aims to help developers and small and medium teams quickly build their own monitoring systems.
**Repository Addresses**
[Github](https://github.com/apache/hertzbeat) [https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)
[Gitee](https://gitee.com/hertzbeat/hertzbeat) [https://gitee.com/hertzbeat/hertzbeat](https://gitee.com/hertzbeat/hertzbeat)
+61
View File
@@ -0,0 +1,61 @@
---
title: HertzBeat v1.1.1 is Publish
author: tom
author_title: tom
author_url: https://github.com/tomsun28
tags: [opensource]
---
> Friendly Cloud Monitoring Tool.
**Home: [hertzbeat.com](https://hertzbeat.apache.org)**
Hi guys! HertzBeat v1.1.1 is coming. This version brings custom monitoring enhancements, and the collected metric data can be assigned as a variable to the next collection. Fixed several bugs and improved the overall stable usability.
Only one docker command is needed to install and experience hertzbeat
`docker run -d -p 1157:1157 --name hertzbeat apache/hertzbeat`
Thanks to the contributors! 👍👍
Feature
1. [[script] feature update docker base image to openjdk:11.0.15-jre-slim… #205](https://github.com/apache/hertzbeat/pull/205)
2. [[monitor] support use pre collect metrics data to replace next metrics config params #206](https://github.com/apache/hertzbeat/pull/206).
3. [[collector] use basic auth with raw HTTP headers instead of preemptive #212](https://github.com/apache/hertzbeat/pull/212)
4. [[manager,alerter] support wework, dingDing, flyBook webhook url config #213](https://github.com/apache/hertzbeat/pull/213)
5. [[monitor] feature update numeric metrics all contain decimal points #217](https://github.com/apache/hertzbeat/pull/217)
6. [[web-app]feature:toggle [enable and cancel] button #218](https://github.com/apache/hertzbeat/pull/218)
7. [[manager] update define yml file name add prefix "app" or "param" #221](https://github.com/apache/hertzbeat/pull/221)
Bugfix.
1. [[update] docker-compose 添加jpa自动执行脚本,删除sql脚本 #198](https://github.com/apache/hertzbeat/pull/198) contribute by @DevilX5 .
2. [Doc#param names refactor #199](https://github.com/apache/hertzbeat/pull/199) contribute by @DevilX5
3. [[manager] bugfix oracle performance metrics collect error, update win name #201](https://github.com/apache/hertzbeat/pull/201).
4. [[common] bugfix alert status can not update #203](https://github.com/apache/hertzbeat/pull/203)
5. [[manager] bugfix update windows monitor type name #204](https://github.com/apache/hertzbeat/pull/204)
6. [fix time zone todo issue #210](https://github.com/apache/hertzbeat/pull/210) contribute by @djzeng
7. [[common] bugfix SnowFlakeId cannot exceed hexadecimal 0x1FFFFFFFFFFFFFF #211](https://github.com/apache/hertzbeat/pull/211)
8. [[manager] 修改监控页面取消监控功能再启动监控导致多生成jobId,原有监控项目并没有真实取消 #215](https://github.com/apache/hertzbeat/pull/215) contribute by @yangshihui
9. [[warehouse] bugfix exception when tdengine create table SQL contain special char #220](https://github.com/apache/hertzbeat/pull/220)
Online [https://console.tancloud.cn](https://console.tancloud.cn).
Have Fun!
----
> [HertzBeat](https://github.com/apache/hertzbeat) is an opensource monitoring and alarm project incubated by [Dromara](https://dromara.org) and open sourced by [TanCloud](https://tancloud.cn), which supports Website, API, PING, Port, Database, OS Monitor etc.
> We also provide **[Monitoring Cloud For Saas](https://console.tancloud.cn)**, people no longer need to deploy a cumbersome monitoring tool in order to monitor their website resources. **[Sign in to get started for free](https://console.tancloud.cn)**.
> HertzBeat supports more liberal threshold alarm configuration (calculation expression), supports alarm notification, alarm template, email, DingDing, WeChat FeiShu and WebHook.
> Most important is HertzBeat supports [Custom Monitoring](https://hertzbeat.apache.org/docs/advanced/extend-point), just by configuring the YML file, we can customize the monitoring types and metrics what we need.
> HertzBeat is modular, `manager, collector, scheduler, warehouse, alerter` modules are decoupled for easy understanding and custom development.
> Welcome to HertzBeat's [Cloud Environment TanCloud](https://console.tancloud.cn) to try and discover more.
> Welcome to join us to build hertzbeat together.
>
> `HertzBeat`'s multi-type support, easy expansion, low coupling, hope to help developers and micro teams to quickly build their own monitoring tool.
**If you like HertzBeat, star us on GitHub**
[Github](https://github.com/apache/hertzbeat) [https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)
[Gitee](https://gitee.com/hertzbeat/hertzbeat) [https://gitee.com/hertzbeat/hertzbeat](https://gitee.com/hertzbeat/hertzbeat)
+40
View File
@@ -0,0 +1,40 @@
---
title: Cloud monitoring system HertzBeat v1.1.3 released!
author: tom
author_title: tom
author_url: https://github.com/tomsun28
tags: [opensource]
---
## V1.1.3
Home: hertzbeat.com | tancloud.cn
Hi guys! HertzBeat v1.1.3 is coming. This version supports kafka monitor, ssl certificate expired monitor and more. Fixed several bugs and improved the overall stable usability.
Only one docker command is needed to install and experience hertzbeat
`docker run -d -p 1157:1157 --name hertzbeat apache/hertzbeat`
Thanks to the contributors! 👍👍
Feature
1. [[web-app]feature:update monitors layout, support host copy to clipboard #260](https://github.com/apache/hertzbeat/pull/260)
2. [[monitor] feature: support apache kafka monitor #263](https://github.com/apache/hertzbeat/pull/263) contribute by @wang1027-wqh
3. [[webapp] support history chart query 3 mouth time range #265](https://github.com/apache/hertzbeat/pull/265) issue by @ericfrol
4. [[monitor] support ssl certificate expired monitor #266](https://github.com/apache/hertzbeat/pull/266) suggest by @noear
5. [[web-app] update default interval 600s to 120s #268](https://github.com/apache/hertzbeat/pull/268)
6. [[web-app] update layout ui - help button, nav menu #272](https://github.com/apache/hertzbeat/pull/272)
7. [[alert,webapp] support delete all alerts at once. #273](https://github.com/apache/hertzbeat/pull/273) issue by @ericfrol
8. [[web-app] update home background image #276](https://github.com/apache/hertzbeat/pull/276)
Bugfix.
1. [[docs] fix extend-http-jsonpath.md parseScript error #262](https://github.com/apache/hertzbeat/pull/262) contribute by @woshiniusange .
2. [[monitor] update help docs, refactor redis metrics name #264](https://github.com/apache/hertzbeat/pull/264)
3. [[manager] bugfix alert tags is null when tags map key normal value null. #270](https://github.com/apache/hertzbeat/pull/270) issue by [https://gitee.com/hello_brother_niu](https://gitee.com/hello_brother_niu)
4. [[alert] bugfix: the alert global preset config do not take effect #275](https://github.com/apache/hertzbeat/pull/275) issue by [https://gitee.com/hello_brother_niu](https://gitee.com/hello_brother_niu)
Online [https://console.tancloud.cn](https://console.tancloud.cn).
## Have Fun
+106
View File
@@ -0,0 +1,106 @@
---
title: Best Practices for SSL Certificate Expiration Monitoring
author: tom
author_title: tom
author_url: https://github.com/tomsun28
tags: [opensource, practice]
---
First of all, I would like to wish all the students who see it a happy mid-autumn festival, good health, and try to get rich on the basis of good health.
Into the main topic, most of the sites now support HTTPS by default, we apply for the certificate is generally 3 months or 1 year, it is easy with the passage of time SSL certificate expired we did not find the first time, or in the expiration of the certificate did not update the certificate in a timely manner.
Today's article describes how to use hertzbeat monitoring system to detect the validity of our website's SSL certificate, when the certificate expires or a few days before the expiration of the certificate, send us an alert message.
## What is HertzBeat?
HertzBeat is a real-time monitoring tool with powerful customizable monitoring capabilities without the need for an agent. Website monitoring, PING connectivity, port availability, database, OS, middleware, API monitoring, threshold alerts, alert notifications (email weChat pinning flybook).
**Official website: [https://hertzbeat.apache.org](https://hertzbeat.apache.org) | [https://tancloud.cn](https://tancloud.cn)**
github: [https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)
gitee: [https://gitee.com/hertzbeat/hertzbeat](https://gitee.com/hertzbeat/hertzbeat)
### Install HertzBeat
1. If you don't want to install it, you can directly use the cloud service [TanCloud console.tancloud.cn](https://console.tancloud.cn)
2. The `docker` environment can be installed with a single command
`docker run -d -p 1157:1157 --name hertzbeat apache/hertzbeat`
3. Installation success browser visit `localhost:1157` to start, the default account password `admin/hertzbeat
#### Monitoring SSL Certificates
1. Click Add SSL Certificate Monitor
> System Page -> Monitor Menu -> SSL Certificates -> New SSL Certificate
![HertzBeat](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/bd53f343a5b54feab62e71458d076441~tplv-k3u1fbpfcp-zoom-1.image)
2. Configure monitoring website
> Here is an example to monitor Baidu website, configure the host domain name, name, collection interval, etc. > Click OK.
> Click OK. Note that ⚠️ will test the connectivity of the website before adding it by default, and it will add it only if the connection is successful, of course, you can also gray out the **Whether to test** button.
![HertzBeat](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/ad1154670648413bb82c8bdeb5b13609~tplv-k3u1fbpfcp-zoom-1.image)
3. Viewing Test Indicator Data
> You can view the task status in the monitor list, and go into the monitor details to view the metrics data graphs etc.
![HertzBeat](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/f874b45e909c4bb0acdd28b3fb034a61~tplv-k3u1fbpfcp-zoom-1.image)
![HertzBeat](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/ef5d7443f8c04818ae5aa28d421203be~tplv-k3u1fbpfcp-zoom-1.image)
4. Set the threshold (triggered when the certificate expires)
> System Page -> Alarms -> Alarm Thresholds -> Add Thresholds
![HertzBeat](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/8d6205172d43463aa34e534477f132f1~tplv-k3u1fbpfcp-zoom-1.image)
> Configure thresholds, select SSL certificate indicator object, configure alert expression - triggered when indicator `expired` is `true`, i.e. `equals(expired, "true")` , set alert level notification template message etc.
![HertzBeat](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/83d17b381d994f26a6240e01915b2001~tplv-k3u1fbpfcp-zoom-1.image)
> Associate thresholds with monitors, set which monitors this threshold should be applied to in the threshold list.
![HertzBeat](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/9b9063d7bcf9454387be0491fc382bd1~tplv-k3u1fbpfcp-zoom-1.image)
5. set the threshold (triggered one week before certificate expiration)
> Same as above, add a new configuration threshold, configure the alert expression - when the indicator validity timestamp `end_timestamp`, `now()` function for the current timestamp, if you configure to trigger the alert one week in advance i.e.: `end_timestamp <= (now() + 604800000)` , where `604800000` is the total time difference of 7 days. milliseconds.
![HertzBeat](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/0d6f837f57c247e09f668f60eff4a0ff~tplv-k3u1fbpfcp-zoom-1.image)
> Eventually you can see the triggered alarms in the alarm center.
![HertzBeat](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/5a61b23127524976b2c209ce0ca6a339~tplv-k3u1fbpfcp-zoom-1.image)
6. Alarm notification (timely notification via NailWeChatFlysheet, etc.)
> Monitoring System -> Alert Notification -> Add Recipients
![HertzBeat](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/7f36956060ef410a82bbecafcbb2957f~tplv-k3u1fbpfcp-zoom-1.image)
You can refer to the help file for the token configuration of Nail WeChat Flying Book, etc.
[https://hertzbeat.apache.org/docs/help/alert_dingtalk](https://hertzbeat.apache.org/docs/help/alert_dingtalk)
[https://tancloud.cn/docs/help/alert_dingtalk](https://tancloud.cn/docs/help/alert_dingtalk)
> Alert Notification -> Add new alert notification policy -> Enable notification for the recipients you just configured
![HertzBeat](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d976343e81f843138344a039f3aff8a3~tplv-k3u1fbpfcp-zoom-1.image)
7. OK When the threshold is triggered, we can receive the corresponding alarm message, if there is no notification, you can also view the alarm information in the alarm center.
----
#### End
The practice of monitoring SSL certificates here, of course, for hertzbeat this function is just the tip of the iceberg, if you think hertzbeat this open source project is good if you welcome to give us in the GitHub Gitee star oh, thank you very much. Thank you for your support. The author!
**github: [https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)**
**gitee: [https://gitee.com/hertzbeat/hertzbeat](https://gitee.com/hertzbeat/hertzbeat)**
+78
View File
@@ -0,0 +1,78 @@
---
title: HertzBeat v1.2.0 Released! Easy-to-use and friendly open source real-time monitoring tool
author: tom
author_title: tom
author_url: https://github.com/tomsun28
tags: [opensource]
---
## v1.2.0
Home: hertzbeat.com | tancloud.cn
Hi guys! HertzBeat v1.2.0 is coming. This version supports more powerful metrics collect jsonpath, upgrade springboot version to 2.7.4, support This version supports more powerful metrics collect jsonpath, upgrade springboot version to 2.7.4, support metrics unit convert display, and more. Fixed several bugs and improved the overall stable usability.
Only one docker command is needed to install and experience heartbeat:
`docker run -d -p 1157:1157 --name hertzbeat apache/hertzbeat`
Thanks to the contributors! 👍👍 @Ceilzcx @Privauto @VampireAchao @DreamGirl524 @CharlieXCL @emrys-he @SxLiuYu @tomsun28
We urgently need contributors to test cases, new application monitoring, documentation, etc., and very welcome you to join. Come on! HertzBeat is so easy!
Features. 1. [[home,manager]]
1. [[home,manager]add practice learn doc and hertzbeat monitor yml #284](https://github.com/apache/hertzbeat/pull/284)
2. [[webapp] auto redirect url when detect browser language #289](https://github.com/apache/hertzbeat/pull/289) contribute by @DreamGirl524
3. [[home] update logo icon cdn url with fault tolerance #293](https://github.com/apache/hertzbeat/pull/293) contributed by @VampireAchao
4. [[monitor] enable powerful jsonpath parser, add es metrics #295](https://github.com/apache/hertzbeat/pull/295) contributed by @Ceilzcx
5. [[webapp] update ui theme #296](https://github.com/apache/hertzbeat/pull/296)
6. [Feature change main pom artifactId #300](https://github.com/apache/hertzbeat/pull/300) contributed by @Privauto
7. [[home,webapp] add users logo and update hertzbeat brand #302](https://github.com/apache/hertzbeat/pull/302)
8. [[monitor] alerter notify test throw msg to front, optional spring.email config #305](https://github.com/apache/hertzbeat/pull/305) contributed by @Ceilzcx
9. [[home]doc:update docker-deploy.md and tdengine-init.md #306](https://github.com/apache/hertzbeat/pull/306) contributed by @Privauto
10. [[hertzbeat] refactor common collect metrics data and alert data queue #320](https://github.com/apache/hertzbeat/pull/320)
11. [[hertzbeat] upgrade springboot version 2.4.13 to 2.7.4 #316](https://github.com/apache/hertzbeat/pull/316) contributed by @Privauto
12. [[web-app] optimize the monitor detect feedback method #322](https://github.com/apache/hertzbeat/pull/322)
13. [[github,webapp] add webapp ci action, fix eslint warning and upgrade codeql #323](https://github.com/apache/hertzbeat/pull/323)
14. [[hertzbeat] add more unit test and test example #324](https://github.com/apache/hertzbeat/pull/324)
15. [support metrics unit extract, convert and display #326](https://github.com/apache/hertzbeat/pull/326) contributed by @Ceilzcx
16. [[common] optimize common aviator configuration #327](https://github.com/apache/hertzbeat/pull/327)
Bugfixes.
1. [[webapp,home] fix middle category icon and update home doc #283](https://github.com/apache/hertzbeat/pull/283)
2. [[web-app] fix redirect when monitors app is null #286](https://github.com/apache/hertzbeat/pull/286)
3. [[alerter] bugfix aviator expression match npe #297](https://github.com/apache/hertzbeat/pull/297)
4. [[doc] fix project name error #294](https://github.com/apache/hertzbeat/pull/294) contributed by @CharlieXCL
5. [[common]feature:use "apache.http.conn.util" replace "sun.net.util" for upgrading java version #299]([https://github.com/dromara/](https://github.com/dromara/) hertzbeat/pull/299) contributed by @Privauto
6. [Update docker-deploy.md #304](https://github.com/apache/hertzbeat/pull/304) contributed by @emrys-he
7. [fix(sec): upgrade snakeyaml to 1.31 #313](https://github.com/apache/hertzbeat/pull/313) contributed by @SxLiuYu
8. [[script] add startup log and optimize port service judgment #321](https://github.com/apache/hertzbeat/pull/321)
9. [[web-app] fix echarts y-axis value tip overflow #325](https://github.com/apache/hertzbeat/pull/325)
10. [[webapp] fix interceptor http resp common error-msg when error #329](https://github.com/apache/hertzbeat/pull/329)
Online [https://console.tancloud.cn](https://console.tancloud.cn).
Have Fun!
### Upgrade ⚠️
Need Convert `application.yml`.
```yaml
spring:
resources: static-locations.
static-locations.
- classpath:/dist/
- classpath:... /dist/
```
To
```yaml
spring:
web:
resources: static-locations.
static-locations.
- classpath:/dist/
- classpath:... /dist/
```
+55
View File
@@ -0,0 +1,55 @@
---
title: HertzBeat v1.2.2Support K8S Monitor And More.
author: tom
author_title: tom
author_url: https://github.com/tomsun28
tags: [opensource]
---
## v1.2.2
Home: hertzbeat.com | tancloud.cn
Hi guys! HertzBeat v1.2.2 is coming. This release brings significant features. This version we support monitor kubernetes, docker, springboot, nacos and database dm, opengauss and more. Also we bring an experimental feature, users can custom define metrics collect from prometheus with promql. Fixed several bugs and improved the overall stable usability. And more, linux monitor we support top10 cpu usage metrics, top10 memory usage metrics.
Let's Try It Now!
Only one docker command is needed to install and experience heartbeat
`docker run -d -p 1157:1157 --name hertzbeat apache/hertzbeat`
Thanks to the contributors! 👍👍
We urgently need contributors to test cases, new application monitoring, documentation, etc., and very welcome you to join. Come on! HertzBeat is so easy!
Feature
1. [[manager,collector] support dm database monitor #410](https://github.com/apache/hertzbeat/pull/410) @TJxiaobao
2. [[home] add DM db document supplement #411](https://github.com/apache/hertzbeat/pull/411) @TJxiaobao
3. [[home] support algolia search #416](https://github.com/apache/hertzbeat/pull/416)
4. [[collector] support trigger and grading multiple subtasks through -_- placeholder expression #418](https://github.com/apache/hertzbeat/pull/418)
5. [WIP:feature support k8s monitor, http monitor nacos, service&http_micro monitor msa #421](https://github.com/apache/hertzbeat/pull/421) @cuipiheqiuqiu
6. [[manager] support opengauss database monitor #422](https://github.com/apache/hertzbeat/pull/422)
7. [[#406]\[warehose\] Add unit test MetricsDataControllerTest.java #426](https://github.com/apache/hertzbeat/pull/426) @haibo-duan
8. [[#358]\[manager\] Add unit test manager/service/NoticeConfigServiceTest.java #427](https://github.com/apache/hertzbeat/pull/427) @haibo-duan
9. [[#356]\[manager\] unit test case of manager/service/MailServiceTest.java #432](https://github.com/apache/hertzbeat/pull/432) @csyshu
10. [[manager,collector] support docker metrics monitor #438](https://github.com/apache/hertzbeat/pull/438) @TJxiaobao
11. [[alerter] implement AlertDefineControllerTest unit case #448](https://github.com/apache/hertzbeat/pull/448) @Ceilzcx
12. [[collector] support spi load AbstractCollect Impl instance #449](https://github.com/apache/hertzbeat/pull/449)
13. [[manager] support linux process top10 cpu_usage mem_usage #451](https://github.com/apache/hertzbeat/pull/451)
14. [[hertzbeat] support springboot2.0 metrics monitor #453](https://github.com/apache/hertzbeat/pull/453)
15. [[manager-monitors](增强)应用服务检测-网站检测-分页:添加默认name升序 enhancementmanager-… #455](https://github.com/apache/hertzbeat/pull/455) @luxx-lq
16. [[hertzbeat] update use PromQL to collect metrics from prometheus server #456](https://github.com/apache/hertzbeat/pull/456)
17. [[manager] support custom monitor api response data code #460](https://github.com/apache/hertzbeat/pull/460)
Bugfix.
1. [【bugfix#408】if logs dir not exist, create logs dir #409](https://github.com/apache/hertzbeat/pull/409) @Ceilzcx
2. [[warehouse] bugfix RealTimeRedisDataStorage wrong extend from #413](https://github.com/apache/hertzbeat/pull/413)
3. [end The query closed the dataSet #414](https://github.com/apache/hertzbeat/pull/414) @Ceilzcx
4. [[alerter] bugfix monitor status not change when alert #415](https://github.com/apache/hertzbeat/pull/415)
5. [[OS Monitor]bugfix:Fix cpu cores and interrupt acquisition under Orac… #424](https://github.com/apache/hertzbeat/pull/424) @assassinfym
6. [[manager] bugfix the gmtUpdate not change when update monitor param #459](https://github.com/apache/hertzbeat/pull/459)
7. [[home] fix typo in springboot2.md #464](https://github.com/apache/hertzbeat/pull/464) @eltociear
Online [https://console.tancloud.cn](https://console.tancloud.cn).
Have Fun!
+106
View File
@@ -0,0 +1,106 @@
---
title: 恭喜 HertzBeat 迎来了两位新晋社区Committer
author: tom
author_title: tom
author_url: https://github.com/tomsun28
tags: [opensource]
---
> 非常高兴 HertzBeat 迎来了两位新晋社区Committer, 两位都是来自互联网公司的开发工程师,让我们来了解下他们的开源经历吧!
## 第一位 花城
姓名:王庆华
现从事:阿里巴巴开发工程师
HertzBeat Committer
github[wang1027-wqh](https://github.com/wang1027-wqh)
### 初识hertzbeat
说起来挺偶然的,结识hertzbeat是因为我大学的毕业设计,当时在一家互联网公司实习,那个时候第一次看到了企业是怎么监控项目的,不管是系统监控、业务监控还是物联网iot监控,那个时候见世面不广,只知道Prometheus + Grafana,但是学起来、用起来成本比较高,那个时候就觉得应该有其他类型的监控,恰好,到了大学毕业设计选题,我就开始寻找这方面的开源项目,那个时候我们小组正在使用Shen Yu网关,我就看了下社区,发现了hertzbeat,自此我便于它结缘了。
### 开始提交PR
到了2022-02-18 我开始提交了我第一个pr,当时只是为了优化一些controller入参的格式,没有什么技术含量,但是这是我接触开源的第一步,让我在从理论学习跨出了实践的一步
### 持续的开源贡献与收获
到目前为止,参与hertzbeat开源项目已有半年多时间,贡献了许多,也成长收获了许多。具体如下:
1. 见证了hertzbeat的贡献值从0到1
2. 兼容了zookeeper、JVM、Kafka等监控功能
3. 实现了hertzbeat项目的国际化
4. 参与了开源之夏并顺利结项
5. 增加了监控系统的基础告警功能: 钉钉、飞书、企业微信、邮箱等
### 感谢社区小伙伴
感谢无偿帮助过我或给过我启发的小伙伴(排名不分先后):tomsun28MaxKeyTop,阿超
### 对新人的一点建议
1. 不要觉得自己一上手就能接触到核心,心急吃不了热豆腐
2. 不要只注重看代码,要上手搭建、使用
3. 有想法就大胆尝试,不管自己的方案是否完善
4. 多多关注开源,了解社区动态,多和开源开发者交流
---
---
## 第二位 星辰
姓名:郑晨鑫
现从事:某互联网公司Java开发工程师
email[1758619238@qq.com](mailto:1758619238@qq.com)
HertzBeat Committer
github[Ceilzcx (zcx) (github.com)](https://github.com/Ceilzcx)
### 初识HertzBeat
2022年8月开始接触HertzBeat,由于公司监控elasticsearch使用的cerebro,虽然有非常强大的数据监控,但缺少告警通知的功能;就去github上浏览监控类的项目,刚好看到HertzBeat,对此非常感兴趣,在了解完整个项目结构和实现后,刚好elasticsearch的监控部分做的不够完善,我就根据cerebro完善了这部分监控数据并提交了pull request。后面在tom老哥的帮助下也开始其他部分的实现。
### 开始提交PR
从2022年9月至今提交了好几个pr,主要包括:
+ Json解析功能的增量,elasticsearch的数据监控增强
+ 实现监控数据添加单位
+ spring.mail改为非必填,优化部分告警阈值的返回处理
+ 实现IoTDB的时序数据库
+ 一些bug的修复。。。
+ promethues exporter 协议解析
### 持续的开源贡献与收获
到目前为止,参与HertzBeat社区开源已有半年多时间,贡献了许多,也成长收获了许多。
在参与开源的时候会比平常自己做项目想的更多,包括使用第三方软件各个版本如何兼容;实现某个功能也要考虑是否方便以后扩展;要有完善的test模块,减少项目的bug。
同时在社区群里,看到别人提的问题和帮助别人可以学到很多新的知识,很多问题你目前不一定会遇到,其他人遇到的时候你可以思考并收获很多知识。
### 感谢社区小伙伴
感谢无偿帮助过我或给过我启发的小伙伴:[tomsun28](https://github.com/tomsun28)
### 对新人的一点建议
+ 使用者可以先看官网,官网基本能够解决你的问题。部分简单或者常见的问题其他可以自己解决,对自己也是一种锻炼
+ 可以尝试阅读源码,大部分源码都是包含注释的,并不难;不懂的地方也可以通过运行test,debug看一下整个流程
+ 有想法或者bug,可以前往gitee或者github提交issues,也可以在群里询问,不要怕,都是从菜逼过来的
### 如何参与HertzBeat
+ 官网有非常完善的贡献者指南:[贡献者指南 | HertzBeat](https://hertzbeat.apache.org/docs/community/contribution)
+ Github issues[Issues · apache/hertzbeat (github.com)](https://github.com/apache/hertzbeat/issues)
+ 如果是大的改动,建议提交前编写issues,在提交pr,同时请注意编码的规范,尽量减少bug和警告的产生
> 以上就是我们新晋Committer们的开源经历了,可以看出参与开源并不难,更重要的是迈出第一步,无论是代码还是文档修复或者提交issue,这些都是贡献者参与开源的姿势。快来加入我们吧!
+53
View File
@@ -0,0 +1,53 @@
---
title: HertzBeat v1.2.3Support Prometheus,ShenYu and IotDb
author: tom
author_title: tom
author_url: https://github.com/tomsun28
tags: [opensource]
---
## v1.2.3
Home: hertzbeat.com | tancloud.cn
Hi guys! HertzBeat v1.2.3 is coming. This release we support prometheus exporter and more. Now we can collect prometheus exporter metrics using hertzbeat. For this, we support monitor apache shenyu and apache iotdb. Fixed several bugs and improved the overall stable usability.
Let's Try It Now!
Only one docker command is needed to install and experience heartbeat
`docker run -d -p 1157:1157 --name hertzbeat apache/hertzbeat`
Thanks to the contributors! 👍👍
We urgently need contributors to test cases, new application monitoring, documentation, etc., and very welcome you to join. Come on! HertzBeat is so easy!
Feature
1. [[doc] note: startup via source code not required mysql and tdengine env #472](https://github.com/apache/hertzbeat/pull/472) @xingshuaiLi
2. [[doc] fix up:update the environment of hertzbeat to Java version 11 #473](https://github.com/apache/hertzbeat/pull/473) @BKing2020
3. [[docs] update kubernetes.md #478](https://github.com/apache/hertzbeat/pull/478) @wangke6666
4. [[web-app] enable alert define preset true by default #485](https://github.com/apache/hertzbeat/pull/485)
5. [[web-app] support friendly tip when add notice receiver #486](https://github.com/apache/hertzbeat/pull/486)
6. [[web-app] update dashboard category card ui #487](https://github.com/apache/hertzbeat/pull/487)
7. [[collector] limit trigger sub task max num #488](https://github.com/apache/hertzbeat/pull/488)
8. [[script] support service restart shell #489](https://github.com/apache/hertzbeat/pull/489) @zanglikun
9. [[docs] use rainbond deploy hertzbeat #495](https://github.com/apache/hertzbeat/pull/495) @zzzhangqi
10. [[webapp] upgrade web base angular version to 14 #501](https://github.com/apache/hertzbeat/pull/501)
11. [[hertzbeat] support sms alert notice #503](https://github.com/apache/hertzbeat/pull/503)
12. [add Prometheus exporter metrics parser and IoTDB monitor #505](https://github.com/apache/hertzbeat/pull/505) @Ceilzcx
13. [support apache shenyu metrics monitoring #507](https://github.com/apache/hertzbeat/pull/507)
Bugfix.
1. [[manager] fix cross domain problem in SecurityCorsConfiguration #469](https://github.com/apache/hertzbeat/pull/469) @zenan08
2. [[manager] bugfix linux cpu usage collect incorrect sometime #479](https://github.com/apache/hertzbeat/pull/479) @LWBobo
3. [[collector] fix protocol ssl_cert not support #491](https://github.com/apache/hertzbeat/pull/491)
4. [Update sqlserver.md #493](https://github.com/apache/hertzbeat/pull/493) @SuitSmile
5. [fix: Remove Alert Unused Monitoring IDs #502](https://github.com/apache/hertzbeat/pull/502) @wang1027-wqh
6. [[collector] bugfix npe when ssh collect error #508](https://github.com/apache/hertzbeat/pull/508)
7. [监控k8s问题issue描述与解决方案 #511](https://github.com/apache/hertzbeat/pull/511) @MrAndyMing
8. [[manager] springboot2 monitor support base path config #515](https://github.com/apache/hertzbeat/pull/515)
Online [https://console.tancloud.cn](https://console.tancloud.cn).
Have Fun!
+133
View File
@@ -0,0 +1,133 @@
---
title: Use HertzBeat Monitoring IoTDB
author: tom
author_title: tom
author_url: https://github.com/tomsun28
tags: [opensource, practice]
---
## Use HertzBeat to monitor the Internet of Things database IoTDB, and it will be done in 5 minutes
### Introduction to IoTDB
> Apache IoTDB (Internet of Things Database) is a time-series database management system that can provide users with data collection, storage and analysis services.
> Due to its lightweight architecture, high performance and high availability, and seamless integration with Hadoop and Spark ecosystems, IoTDB meets the requirements of massive data storage, high-throughput data writing, and complex data query and analysis in the industrial IoT field. need.
### Introduction to HertzBeat
> HertzBeat is an open source, easy-to-use and friendly real-time monitoring tool that does not require Agent and has powerful custom monitoring capabilities.
> Supports monitoring of application services, databases, operating systems, middleware, cloud native, etc., threshold alarms, and alarm notifications (email WeChat Dingding Feishu).
> HertzBeat's powerful customization, multi-type support, easy expansion, and low coupling hope to help developers and small and medium teams quickly build their own monitoring tools.
### Get monitoring IoTDB in HertzBeat in 5 minutes
#### Prerequisites, you already have IoTDB environment and HertzBeat environment
- IoTDB [deployment and installation documentation](https://iotdb.apache.org/UserGuide/V0.13.x/QuickStart/QuickStart.html)
- HertzBeat [deployment installation documentation](https://hertzbeat.apache.org/docs/start/docker-deploy)
#### 1. Enable the `metrics` function on the IoTDB side, which will provide interface data in the form of prometheus metrics
1. The metric collection is disabled by default, you need to modify the parameters in `conf/iotdb-metric.yml` first, then restart the server
```yaml
# Whether to start the monitoring module, the default is false
enableMetric: true
# Data provision method, externally provide metrics data through jmx and prometheus protocol, optional parameters: [JMX, PROMETHEUS, IOTDB], IOTDB is closed by default.
metricReporterList:
- JMX
- PROMETHEUS
```
2. Restart IoTDB, open a browser or use curl to access [http://ip:9091/metrics](http://ip:9091/metrics), and you can see the metric data.
#### 2. Add IoTDB monitoring on the HertzBeat monitoring page
1. Click Add IoTDB Monitoring
Path: Menu -> Database Monitoring -> IoTDB Monitoring -> Add IoTDB Monitoring
![HertzBeat](/img/blog/monitor-iotdb-1.png)
2. Configure the parameters required for monitoring IoTDB
Fill in the IoTDB **service IP** and **monitoring port** (default 9091) on the monitoring page, and finally click OK to add.
For other parameters such as **collection interval**, **timeout period**, etc., please refer to [Help Documentation](https://hertzbeat.apache.org/docs/help/iotdb/) [https://hertzbeat.apache.org/docs/help](https://hertzbeat.apache.org/docs/help) /iotdb/
![HertzBeat](/img/blog/monitor-iotdb-2.png)
3. Complete ✅, now we have added the monitoring of IoTDB, check the monitoring list to see our added items.
![HertzBeat](/img/blog/monitor-iotdb-3.png)
4. Click **Operation**->**Monitoring Details Icon** of the monitoring list item to browse the real-time monitoring metric data of IoTDB.
![HertzBeat](/img/blog/monitor-iotdb-4.png)
5. Click **Monitoring History Details TAB** to browse IoTDB's historical monitoring metric data chart📈.
![HertzBeat](/img/blog/monitor-iotdb-5.png)
**Complete DONE! Through the above steps, it is actually two steps to sum up**
- **Enable `metrics` function on IoTDB in one step**
- **Another step is to configure the IP port on the HertzBeat monitoring page to add monitoring**
**In this way, we have completed the monitoring of IoTDB. We can view the monitoring details and metrics at any time to observe its service status, but people cannot always watch it. When there is always a time to rest, monitoring is often accompanied by alarms. When monitoring When the metrics are abnormal, the monitoring tool needs to be able to notify the person in charge in time**
**Next, we will teach you step by step to configure the threshold alarm notification in the HertzBeat system**
#### 3. Add IoTDB metric threshold alarm in HertzBeat system
1. Configure a threshold alarm for an important metric
Path: Menu -> Alarm Threshold -> Add Threshold
- Select the configured metric object. IotDB monitors many metrics, one of which is related to the status of the node `cluster_node_status` -> `status` (node status, 1=online 2=offline).
- Here we configure to send an alarm when the metric `status==2`, the alarm level is **Critical Alarm**, which is triggered once, as shown in the figure below.
![HertzBeat](/img/blog/monitor-iotdb-6.png)
2. Add message notification recipients
Path: Menu -> Alarm Notification -> Alarm Recipient -> Add New Recipient
Message notification methods support **email, DingTalk, WeChat Work, Feishu, WebHook, SMS**, etc. Here we take the commonly used DingTalk as an example.
- Refer to this [Help Documentation](https://hertzbeat.apache.org/docs/help/alert_dingtalk) [https://hertzbeat.apache.org/docs/help/alert_dingtalk](https://hertzbeat.apache.org/docs/help/alert_dingtalk) to configure the robot on DingTalk and set the security custom keyword `HertzBeat`, get the corresponding `access_token` value.
- Configure the receiver parameters in HertzBeat as follows.
【Alarm Notification】->【New Recipient】->【Select DingTalk Robot Notification Method】->【Set DingTalk Robot ACCESS_TOKEN】->【OK】
![HertzBeat](/img/blog/alert-notice-1.png)
3. Configure the associated alarm notification strategy ⚠️ [Add notification strategy] -> [Associate the recipient just set] -> [OK]
![HertzBeat](/img/blog/alert-notice-2.png)
### Finished, now wait for the warning message to come. ding ding ding ding
```text
[HertzBeat warning notification]
Alarm target object: iotdb.cluster_node_status.status
Affiliated monitoring ID: 205540620349696
Belonging monitoring name: IOTDB_localhost
Alarm level: critical alarm
Alarm trigger time: 2023-01-05 22:17:06
Content details: The status of IOTDB node 127.0.0.1 is monitored as OFFLINE, please deal with it in time.
```
## Summary
This practical article took us to experience that if HertzBeat is used to monitor the IoTDB database metric data, we can find that HertzBeat, which integrates monitoring-alarm-notification, is more convenient in operation and use, and IoTDB can be included in the monitoring with a simple click on the page, it is no longer necessary to deploy multiple components and write multiple YML configuration files with thresholds.
IoTDB Github: [https://github.com/apache/iotdb](https://github.com/apache/iotdb)
HertzBeat Github: [https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)
**Welcome to learn about using Star Support!**
Only one docker command is needed to install and experience heartbeat:
`docker run -d -p 1157:1157 --name hertzbeat apache/hertzbeat`
Note ⚠️HertzBeat v1.2.3 version supports IoTDB v0.12 v0.13. Since its v1.0 has just been released, all metrics of this version are not yet compatible.
+165
View File
@@ -0,0 +1,165 @@
---
title: HertzBeat's Monitoring Practice for API Gateway Apache ShenYu
author: tom
author_title: tom
author_url: https://github.com/tomsun28
tags: [opensource, practice]
---
## Monitoring practice for API gateway Apache ShenYu using HertzBeat, 5 minutes
### Introduction to Apache ShenYu
> Apache ShenYu is an asynchronous, high-performance, cross-language, responsive API gateway.
- Proxy: supports Apache Dubbo, Spring Cloud, gRPC, Motan, SOFA, TARS, WebSocket, MQTT.
- Security: Signature, OAuth 2.0, JSON Web Token, WAF Plugin
- API Governance: Request, Response, Parameter Mapping, Hystrix, RateLimiter Plugin
- Observability: tracing, metrics, logging plug-ins
- Dashboard: dynamic flow control, visual backend for user menu permissions
- Extension: plugin hot-plugging, dynamic loading
- Clustering: NGINX, Docker, Kubernetes
- Languages: .NET, Python, Go, Java clients available for API registration
### HertzBeat Introduction
> HertzBeat is an open source, easy to use and friendly real-time monitoring tool, no Agent, with powerful custom monitoring capabilities.
> Support for application services, database, operating system, middleware, cloud native monitoring, threshold alarms, alarm notification (email WeChat Nail Flybook).
> HertzBeat's powerful customization, multi-type support, easy to extend, low-coupling, hope to help developers and small and medium-sized teams to quickly build their own monitoring system.
### Monitor Apache ShenYu in HertzBeat in 5 minutes
#### You must have a ShenYu environment and a HertzBeat environment
- ShenYu [Deployment and Installation Documentation](https://shenyu.apache.org/zh/docs/deployment/deployment-before)
- HertzBeat [Deployment and Installation Documentation](https://hertzbeat.apache.org/docs/start/docker-deploy)
#### i. Enable the `metrics` plugin on the ShenYu side, which will provide the metrics interface data
> The plugin is the core implementer of the Apache ShenYu gateway, and metrics data collection is also integrated at `ShenYu` in the form of a plugin - `Metrics Plugin`.
> The `Metrics plugin` is used by the gateway to monitor its own operational status (`JVM` related), request responses and other related metrics.
1. Add the `metrics plugin` dependency to the `pom.xml` file of the gateway.
```xml
`<dependency>`
`<groupId>`org.apache.shenyu`</groupId>`
`<artifactId>`shenyu-spring-boot-starter-plugin-metrics`</artifactId>`
`<version>`${project.version}`</version>`
`</dependency>`
```
2. `metric` plugin Capture is turned off by default, edit the following in the gateway's configuration `yaml` file:
```yaml
shenyu:
metrics:
enabled: true #Set to true to enable
name: prometheus
host: 127.0.0.1 #exposed ip
port: 8090 #Exposed port
jmxConfig: #jmx configuration
props: #jvm_enabled: true
jvm_enabled: true #Enable monitoring metrics for jvm
```
3. Restart ShenYu Gateway, open a browser or use curl to access `http://ip:8090`, you can see the metric data.
#### ii. Adding ShenYu Monitor in HertzBeat Monitor Page
1. Click Add ShenYu Monitor
Path: Menu -> Middleware Monitor -> ShenYu Monitor -> Add ShenYu Monitor
![HertzBeat](/img/blog/monitor-shenyu-1.png)
2. Configure the parameters required for monitoring ShenYu
On the monitor page, fill in ShenYu **service IP**, **monitor port** (default 8090), and click OK to add.
For other parameters such as **collection interval**, **timeout**, etc., you can refer to the [help file](https://hertzbeat.apache.org/docs/help/shenyu/) [https://hertzbeat.apache.org/docs/help/shenyu/](https://hertzbeat.apache.org/docs/help/shenyu/)
![HertzBeat](/img/blog/monitor-shenyu-1.png)
3. Done ✅, now we have added monitoring for ShenYu, check the monitor list to see our additions.
![HertzBeat](/img/blog/monitor-shenyu-3.png)
4. Click **Options**->**Monitoring Details icon** in the monitor list to view ShenYu's real-time monitoring metrics.
![HertzBeat](/img/blog/monitor-shenyu-4.png)
5. Click the **Monitor History TAB** to view ShenYu's historical monitoring metrics graphs 📈.
![HertzBeat](/img/blog/monitor-shenyu-5.png)
![HertzBeat](/img/blog/monitor-shenyu-6.png)
**DONE! With the above steps, it's really only two steps**
- **The first step is to enable the `metrics` plugin on the ShenYu side**.
- **The second step is to configure the IP ports on the HertzBeat monitoring page to add monitoring
:::tip
By the above two steps we have finished monitoring Apache ShenYu, we can check the monitoring details and metrics information in HertzBeat anytime to observe its service status.
Of course, just looking at it is not perfect, monitoring is often accompanied by alarm thresholds, when some of ShenYu's indicators exceed our expectations or abnormalities, we can promptly notify the person in charge of our counterparts, the person in charge of the notification to deal with the problem, so that is a complete monitoring and alerting process.
:::
**Next we will demonstrate step by step how to configure the threshold alarm notification in HertzBeat system, so that when ShenYu's metrics are abnormal, we will be notified in a timely manner** **This is a complete monitoring and alerting process.
#### III. Adding ShenYu Metrics Threshold Alerts to the HertzBeat System
1. Configure an alarm threshold for an important metric.
Path: Menu -> Alert Thresholds -> Add Thresholds
- There are a lot of metrics in ShenYu monitoring, for example, we will set the threshold for the `number of open file descriptors` `process_open_fds` -> `value` metric, which will alert you when the number of open file descriptors on the server side is greater than 3,000.
- Here we configure an alert to be issued when the `value' of`process_open_fds` exceeds 3000, with an alert level of **Warning alert**, which is triggered three times, as shown in the following figure.
![HertzBeat](/img/blog/monitor-shenyu-7.png)
2. Add message notification recipients
> Configure recipients to let alert message know who to send to and in what way.
Path: Menu -> Alert Notification -> Alert Recipients -> Add New Recipient.
Message notification methods support **Email, Nail, WeChat, Flybook, WebHook, SMS**, etc. Here we take the commonly used Nail as an example.
- Refer to this [help document](https://hertzbeat.apache.org/docs/help/alert_dingtalk) [https://hertzbeat.apache.org/docs/help/alert_dingtalk](https://hertzbeat.apache.org/docs/help/alert_dingtalk) Configure the bot on the pinning side, set the security customization keyword `HertzBeat`, get the corresponding `access_token` value.
- Configure the recipient parameters in HertzBeat as follows.
[Alert Notification] -> [Add Recipient] -> [Select Nailed Bot Notification Method] -> [Set Nailed Bot ACCESS_TOKEN] -> [OK]
![HertzBeat](/img/blog/alert-notice-1.png)
3. Configure the associated alert notification policy ⚠️ [Add Notification Policy] -> [Associate the recipient you just set] -> [OK] !
> Configure the alert notification policy to bind alert messages to recipients so that you can decide which alerts go to which person.
![HertzBeat](/img/blog/alert-notice-2.png)
### Over and out, now wait for the alert message to come through. Ding, ding, ding, ding
```text
[HertzBeat Alert Notification]
Alert target object : shenyu.process_open_fds.value
Task ID : 205540620349696
Task name : SHENYU_localhost
Alarm level : Warning alarm
Alarm Trigger Time : 2023-01-08 22:17:06
Details : Please note that the number of file descriptors opened by ⚠️ ShenYu gateway is 3044 more than 3000
```
## Summary
:::tip
This hands-on article takes us through how to use HertzBeat to monitor Apache ShenYu metrics data, and we can find that HertzBeat, which combines ``Monitoring-Alert-Notification``, is much more convenient to operate and use, and you can include ShenYu in the monitoring by simply clicking on a page. There is no need to deploy multiple components and write multiple YML configuration files.
:::
Apache ShenYu Github: [https://github.com/apache/shenyu](https://github.com/apache/shenyu)
HertzBeat Github: [https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)
**Welcome to learn about using Star Support Oh!**
Experience heartbeat with a single docker command:
`docker run -d -p 1157:1157 --name hertzbeat apache/hertzbeat`
+177
View File
@@ -0,0 +1,177 @@
---
title: Monitoring Practices for DynamicTp Thread Pooling Framework with HertzBeat
author: tom
author_title: tom
author_url: https://github.com/tomsun28
tags: [opensource, practice]
---
## Monitoring practice for thread pooling framework DynamicTp using HertzBeat, 5 minutes
### Introducing DynamicTp, the thread pooling framework
> DynamicTp is a lightweight configuration-centric dynamic thread pool in Jvm with built-in monitoring and alerting capabilities, which can be customized through SPI extensions.
- Support for dynamic modification of the running thread pool parameters , real-time effective .
- Real-time monitoring of the running status of the thread pool, alarms are triggered when the alarm policy is set, and alarm information is pushed to the office platform.
- Collect thread pool metrics data regularly, and use grafana as a visual monitoring platform to monitor the overall situation.
### HertzBeat Introduction
> HertzBeat is an open source, easy-to-use and friendly real-time monitoring tool with powerful customizable monitoring capabilities.
- Support for application services , database , operating system , middleware , cloud native monitoring , threshold alarms , alarm notification (email WeChat Dingtalk SMS Slack Discord Telegram).
- Its Http, Jmx, Ssh, Snmp, Jdbc, Prometheus and other protocol specifications configurable, just configure YML can use these protocols to customize the collection of any metrics you want to collect. Would you believe that you can instantly adapt a new monitoring type such as K8s or Docker by simply configuring YML?
- HertzBeat's powerful customization, multi-type support, easy scalability, and low coupling will hopefully help developers and small to medium sized teams to quickly build their own monitoring systems.
### Monitor DynamicTp in 5 minutes at HertzBeat
#### operation, you already have a DynamicTp environment and a HertzBeat environment
- DynamicTp [Integration Access Documentation](https://dynamictp.cn/guide/use/quick-start.html)
- HertzBeat [Deployment and Installation Documentation](https://hertzbeat.apache.org/docs/start/docker-deploy)
#### i. Expose the `DynamicTp` metrics interface `/actuator/dynamic-tp` on the DynamicTp side, which will provide the metrics interface data
1. Enable the SpringBoot Actuator Endpoint to expose the `DynamicTp` metrics interface.
```yaml
management:
endpoints:
web:
exposure:
include: '*'
```
2. Reboot and test access to the metrics interface `ip:port/actuator/dynamic-tp` to see if it responds with json data as follows.
```json
[
{
"poolName": "commonExecutor",
"corePoolSize": 1,
"maximumPoolSize": 1,
"queueType": "LinkedBlockingQueue",
"queueCapacity": 2147483647,
"queueSize": 0,
"fair": false,
"queueRemainingCapacity": 2147483647,
"activeCount": 0,
"taskCount": 0,
"completedTaskCount": 0,
"largestPoolSize": 0,
"poolSize": 0,
"waitTaskCount": 0,
"rejectCount": 0,
"rejectHandlerName": null,
"dynamic": false,
"runTimeoutCount": 0,
"queueTimeoutCount": 0
},
{
"maxMemory": "4 GB",
"totalMemory": "444 MB",
"freeMemory": "250.34 MB",
"usableMemory": "3.81 GB"
}
]
```
#### ii. To add DynamicTp thread pool monitoring to the HertzBeat monitoring page
1. Click Add DynamicTp Monitor
Path: Menu -> Middleware Monitor -> DynamicTp Monitor -> Add DynamicTp Monitor
![HertzBeat](/img/blog/monitor-dynamic-tp-1.png)
2. Configure the parameters required for monitoring DynamicTp.
On the monitor page, fill in DynamicTp **service IP**, **monitoring port** (default 8080), and finally click OK to add it.
For other parameters such as **collection interval**, **timeout**, etc., you can refer to [help](https://hertzbeat.apache.org/docs/help/dynamic_tp/) [https://hertzbeat.apache.org/docs/help/dynamic_tp/](https://hertzbeat.apache.org/docs/help/dynamic_tp/)
![HertzBeat](/img/blog/monitor-dynamic-tp-2.png)
3. Done ✅, now we have added monitoring for DynamicTp, check the monitor list to see our additions.
![HertzBeat](/img/blog/monitor-dynamic-tp-1.png)
4. Click **Options**->**Monitor Details icon** in the Monitor list to view the real-time monitoring metrics of the DynamicTp thread pool.
![HertzBeat](/img/blog/monitor-dynamic-tp-3.png)
5. Click the **Monitoring History TAB** to view a graphical representation of the historical monitoring metrics for the DynamicTp thread pool 📈.
![HertzBeat](/img/blog/monitor-dynamic-tp-4.png)
![HertzBeat](/img/blog/monitor-dynamic-tp-5.png)
**DONE! With the above steps, it's really just two steps**
- **The first step is to expose the DynamicTp `metrics` endpoint `/actuator/dynamic-tp`**.
- **The second step is to configure the IP ports on the HertzBeat monitoring page to add the monitoring**
:::tip
With the above two steps we have finished monitoring DynamicTp, and we can view the monitoring details and metrics information in HertzBeat at any time to observe its service status.
Of course, just watching is not perfect, monitoring is often accompanied by alarm thresholds, when DynamicTp's thread pool metrics exceed our expectations or abnormalities, we can promptly notify the person in charge of our counterparts, the person in charge of the notification received to deal with the problem, so that is a complete monitoring and alerting process.
:::
**Next, we will demonstrate step-by-step how to configure the threshold alarm notification in HertzBeat system, so that when the DynamicTp thread pool metrics are abnormal, we will be notified in a timely manner** **This is a complete monitoring and alerting process.
#### iii. Adding Threshold Alerts for DynamicTp Thread Pool Metrics in HertzBeat System
1. Configure an alarm threshold for an important metric.
Path: Menu -> Alert Thresholds -> Add Thresholds
- DynamicTp monitors some thread pool related metrics, for example, we set the threshold for the `run_timeout_count` `thread_pool_running` -> `run_timeout_count` metric, which will raise an alarm when the thread_timeout_count is greater than one.
- Here we configure an alert to be issued when `thread_pool_running` has a `run_timeout_count>1`, with an alert level of **Serious Alert**, which is triggered three times, as shown in the following figure.
![HertzBeat](/img/blog/monitor-dynamic-tp-6.png)
2. Add message notification recipients
> Configure recipients to let alert message know who to send to and in what way.
Path: Menu -> Alert Notification -> Alert Recipient -> Add Recipient.
Message notification methods support **Email, Dingtalk, WeChat, Flybook, WebHook, SMS**, etc. We take the commonly used Dingtalk as an example.
- Refer to this [help document](https://hertzbeat.apache.org/docs/help/alert_dingtalk) [https://hertzbeat.apache.org/docs/help/alert_dingtalk](https://hertzbeat.apache.org/docs/help/alert_dingtalk) Configure the bot on Dingtalk side, set the security customization keyword `HertzBeat`, get the corresponding `access_token` value.
- Configure the recipient parameters in HertzBeat as follows.
[Alert Notification] -> [Add Recipient] -> [Choose Dingtalk bot notification method] -> [Set Dingtalk bot ACCESS_TOKEN] -> [OK]
![HertzBeat](/img/blog/alert-notice-1.png)
3. Configure the associated alert notification policy ⚠️ [Add Notification Policy] -> [Associate the recipient you just set] -> [OK] !
> Configure the alert notification policy to bind alert messages to recipients so that you can decide which alerts go to which person.
![HertzBeat](/img/blog/alert-notice-2.png)
### Over and out, now wait for the alert message to come through. Ding, ding, ding, ding
```text
[HertzBeat alert notification]
Alert target object : dynamic_tp.thread_pool_running.run_timeout_count
Task ID : 205540620349493
Task Name : dynamic_tp_localhost
Alarm Level : Critical Alarm
Alarm Trigger Time : 2023-02-02 22:17:06
Details : DynamicTp has run timeout thread, count is 2
```
## Summary
:::tip
This practical article takes us to experience how to use HertzBeat to monitor DynamicTp thread pool metrics data, and we can find that HertzBeat with ``monitoring-alerting-notification`` is much more convenient to operate and use, and you only need to point and click on a page to include DynamicTp thread pool into the monitoring and alert notification, and you don't need to deploy multiple components to write YML configuration files anymore. There is no need to deploy multiple components and write YML configuration files.
:::
DynamicTp Github: [https://github.com/dromara/dynamic-tp](https://github.com/dromara/dynamic-tp)
HertzBeat Github: [https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)
**Welcome to learn how to use Star Support!**
Experience heartbeat with a single docker command:
`docker run -d -p 1157:1157 --name hertzbeat apache/hertzbeat`
+126
View File
@@ -0,0 +1,126 @@
---
title: Welcome two new Committers from HertzBeat
author: tom
author_title: tom
author_url: https://github.com/tomsun28
tags: [opensource]
---
![HertzBeat](/img/blog/new-committer.png)
## Welcome two new Committers from HertzBeat
> I am very happy that the HertzBeat open source community has welcomed two new community Committers, one is the leader of the R&D team from the front line, and the other is an intern from a large factory. Let us learn about their open source experience!
## The first attacking Ah Chen
Name: Gao Chen
Now engaged in: Fanruan software Java research and development
HertzBeat Committer
github: gcdd1993 (A Chen who attacked)
### Getting to know HertzBeat
I started to contact HertzBeat in April 2022. At that time, the company had a downtime accident, and the website could not be accessed.
I didnt know until the user feedback. I urgently need a monitoring platform that can monitor the online rate of the website and give timely alarms.
After browsing several monitoring platforms, I finally settled on HertzBeat, because it has powerful functions, meets the needs and has some surprises.
The most important thing is the code specification, clear comments, and consistent technology stack, which is convenient for the secondary development of enterprises.
Combined with powerful custom notifications, we have monitored databases, middleware, and websites, which have played a vital role in the stable operation of the company's platform.
### Start submitting PRs
The first PR was submitted on April 17, 2022, mainly for the problem of TDEngine time zone error found during the use process. Although it was a simple configuration modification, it also let me know more about HertzBeat, and with the in-depth understanding of the source code, learned a lot.
### Continuous open source contribution and harvest
So far, I have participated in the hertzbeat open source project for more than half a year, contributed a lot, and grown and gained a lot. details as follows:
* Refactored the alarm module based on the strategy mode
* Implemented metric monitoring for `Redis` database
* Optimize `spring.factories` configuration items
* Implemented message notification channels supporting `Telegram`, `Discord`, `Slack`
* Use `Thymeleaf` to restructure the alarm text, and the alarm notification template is more standardized
### Thank you community friends
Thanks to the friends who have helped me or inspired me for free: tomsun28, for every problem encountered during the contribution process, they can patiently guide.
### Advice for newcomers
* HertzBeat's source code is very friendly to novices, with standardized code and rich comments, which is very suitable as a learning project.
* Open source contribution is not achieved overnight, every idea, every question/answer is a contribution, the first step is the most important!
## Next 🌻 Armored Little Treasure
Name: happy deposit
Currently engaged: Junior student of Henan Normal University, internship at Alibaba
Hertz Beat Committer
github: TJxiaobao
### 🌻 Meet hertzbeat for the first time
First of all, I would like to thank Brother Huacheng here, because I wanted to learn some excellent `Java` projects at that time. Then, during the meal, I asked my brother if there was any good project recommendation. At this time, my brother recommended me to Brother Tom. When I personally used `hertzbeat`, I really discovered a new continent. Compared with the simple `Java` project I was exposed to before, I was deeply impressed by the architecture design of `hertzbeat` and its practical functions. me. At this time, a seed of "wanting to contribute my own strength" has been planted in my heart.
### 🌻 Start submitting PR
On Oct 20, 2022, I submitted `PR` for the first time. Although this `PR` is a simple translation comment, it seems that the technical content is not very high.
But he can also make me familiar with the business logic and architecture design of the project faster, and can lay a solid foundation for future contributions.
And this `PR` is also my first step towards open source, and it is also the starting point for me to fall in love with open source!
### 🌻 Continuous open source contribution and harvest
From the first `PR` to the present, I have participated in the `hertzbeat` open source project for a while, and I have also contributed a small part, and I have grown and gained a lot. details as follows.
**contribute:**
1. Realize the monitoring of docker containers.
2. Complete the domestic database DM monitoring
3. Write a single test for the corresponding business.
4. English translation of some annotations.
**reward:**
1. The technical ability has been further improved.
2. Broaden your horizons.
3. Learned a lot from the bosses.
### 🌻 Thanks to the community partners
Thanks to the friends who have helped me or inspired me for free (in no particular order): tomsun28 (brother tom), Huacheng (brother)
### 🌻 A little advice for newcomers
First of all, I am also a newcomer to Novice Village, but I can share some of my experience with you, hoping to help you.
1. Don't be too impatient, and calm down to understand the general implementation logic of each module.
2. Use different functions and debug to see the underlying implementation principle of each function.
3. Slowly try to read the source code and understand it.
4. If you encounter a bug, you can directly report it to issues, or you can try to solve it yourself.
## What is Hertz Beat?
> [HertzBeat Hertz Beat](https://github.com/apache/hertzbeat) is a real-time monitoring and alarm system with powerful custom monitoring capabilities and no Agent required. Monitoring of application services, databases, operating systems, middleware, cloud native, etc., threshold alarms, and alarm notifications (email, WeChat, Dingding, Feishu, SMS, Discord, Slack, Telegram).
>
> We make protocol specifications such as `Http, Jmx, Ssh, Snmp, Jdbc, Prometheus` configurable, and you only need to configure YML to use these protocols to customize and collect any metrics you want to collect.
> Do you believe that you can immediately adapt to a new monitoring type such as K8s or Docker just by configuring YML?
>
> The powerful customization of `HertzBeat`, multi-type support, easy expansion, and low coupling, hope to help developers and small and medium-sized teams quickly build their own monitoring tools.
**Github: [https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)**
**Gitee: [https://gitee.com/hertzbeat/hertzbeat](https://gitee.com/hertzbeat/hertzbeat)**
## ⛄ Supported
* Website Monitoring, Port Availability, Http Api, Ping Connectivity, Jvm, SiteMap, Ssl Certificate, SpringBoot, FTP Server
* Mysql, PostgreSQL, MariaDB, Redis, ElasticSearch, SqlServer, Oracle, MongoDB, Dameng, OpenGauss, ClickHouse, IoTDB
* Linux, Ubuntu, CentOS, Windows
* Tomcat, Nacos, Zookeeper, RabbitMQ, Flink, Kafka, ShenYu, DynamicTp, Jetty, ActiveMQ
-Kubernetes, Docker
* and more for your custom monitoring.
* Notification support `Discord` `Slack` `Telegram` `Mail` `DingTalk` `WeChat` `Feishu` `SMS` `Webhook`.
+128
View File
@@ -0,0 +1,128 @@
---
title: Use the open source real-time monitoring tool HertzBeat to monitor and alert Mysql database
author: tom
author_title: tom
author_url: https://github.com/tomsun28
tags: [opensource, practice]
Keywords: [Open source monitoring tool, open source database monitoring, Mysql database monitoring]
---
## Use the open source real-time monitoring tool HertzBeat to monitor and alarm the Mysql database, and it will be done in 5 minutes
### Mysql database introduction
> MySQL is an open source relational database management system developed by the Swedish company MySQL AB and a product of Oracle. MySQL is one of the most popular open source relational database management systems. In terms of WEB applications, MySQL is one of the best RDBMS (Relational Database Management System, relational database management system) application software.
### Introduction to HertzBeat
> HertzBeat is an open source, easy-to-use and friendly real-time monitoring tool that does not require Agent and has powerful custom monitoring capabilities.
- Integrate **monitoring-alarm-notification**, support monitoring of application services, databases, operating systems, middleware, cloud native, etc., threshold alarms, alarm notifications (email WeChat Dingding Feishu SMS Slack Discord Telegram).
- It configurable protocol specifications such as Http, Jmx, Ssh, Snmp, Jdbc, Prometheus, etc. You only need to configure YML to use these protocols to customize and collect any metrics you want to collect. Do you believe that you can immediately adapt to a new monitoring type such as K8s or Docker just by configuring YML?
- HertzBeat's powerful customization, multi-type support, easy expansion, and low coupling, hope to help developers and small and medium teams quickly build their own monitoring tools.
### Get the Mysql database monitoring in HertzBeat in 5 minutes
#### The premise of the operation is that you already have the Mysql environment and the HertzBeat environment
- Mysql [Installation and deployment document](https://www.runoob.com/mysql/mysql-install.html)
- HertzBeat [Installation and deployment documentation](https://hertzbeat.apache.org/docs/start/docker-deploy)
#### Add monitoring of Mysql database on the open source monitoring tool HertzBeat monitoring page
1. Click Add Mysql Monitoring
Path: Menu -> Database Monitoring -> Mysql Database -> Add Mysql Database Monitoring
![HertzBeat](/img/blog/monitor-mysql-1.png)
2. Configure the parameters required for the new monitoring Mysql database
On the monitoring page, fill in Mysql **service IP**, **monitoring port** (default 3306), **account password, etc.**, and finally click OK to add.
For other parameters such as **collection interval**, **timeout period**, etc., please refer to [Help Documentation](https://hertzbeat.apache.org/docs/help/mysql/) [https://hertzbeat.apache.org/docs/help](https://hertzbeat.apache.org/docs/help) /mysql/
![HertzBeat](/img/blog/monitor-mysql-2.png)
3. Complete ✅, now we have added the monitoring of the Mysql database, check the monitoring list to see our added items.
![HertzBeat](/img/blog/monitor-mysql-1.png)
4. Click **Operation**->**Monitoring Details Icon** of the monitoring list item to browse the real-time monitoring metric data of the Mysql database.
![HertzBeat](/img/blog/monitor-mysql-3.png)
5. Click **Monitoring History Details TAB** to browse the historical monitoring metric data chart of Mysql database📈.
![HertzBeat](/img/blog/monitor-mysql-4.png)
**DONE! Done! Through the above steps, in fact, it only takes one step to sum up**
- **On the HertzBeat monitoring page, configure the IP port account password and add Mysql monitoring**
:::tip
Through the above two steps, we have completed the monitoring of the Mysql database. We can view the monitoring details and metrics in HertzBeat at any time to observe its service status.
Of course, just looking at it is definitely not perfect. Monitoring is often accompanied by alarm thresholds. When the metrics of the Mysql database exceed our expectations or are abnormal, we can promptly notify our corresponding person in charge. The person in charge receives the notification and handles the problem. It is a complete monitoring and alarm process.
:::
**Next, we will demonstrate step by step how to configure the threshold alarm notification in the HertzBeat system, so that when the metrics of the Mysql database are found to be abnormal, they will be notified to us in time**
#### 3. Add Mysql database index threshold alarm in HertzBeat system
1. Configure an alarm threshold for an important metric
Path: Menu -> Threshold Rules -> Add Threshold
- Select the configured metric object. Mysql database monitoring is mainly about database performance and other related metrics. For example, we set the threshold for the metric `query cache hit rate` `cache` -> `query_cache_hit_rate`. When the query cache hit rate of Mysql is very low An alarm is issued when it is less than 30%.
- Here we configure to send an alarm when the `query_cache_hit_rate<30` of this metric `cache`, the alarm level is **serious alarm**, and it will be triggered after three times, as shown in the figure below.
![HertzBeat](/img/blog/monitor-mysql-5.png)
![HertzBeat](/img/blog/monitor-mysql-6.png)
2. Add message notification recipients
> Configure the receiver to let the alarm message know who to send and how to send it.
Path: Menu -> Alarm Notification -> Alarm Recipient -> Add New Recipient
Message notification methods support **email, DingTalk, WeChat Work, Feishu, WebHook, SMS**, etc. Here we take the commonly used DingTalk as an example.
- Refer to this [Help Documentation](https://hertzbeat.apache.org/docs/help/alert_dingtalk) [https://hertzbeat.apache.org/docs/help/alert_dingtalk](https://hertzbeat.apache.org/docs/help/alert_dingtalk) to configure the robot on DingTalk and set the security custom keyword `HertzBeat`, get the corresponding `access_token` value.
- Configure the receiver parameters in HertzBeat as follows.
【Alarm Notification】->【New Recipient】->【Select DingTalk Robot Notification Method】->【Set DingTalk Robot ACCESS_TOKEN】->【OK】
![HertzBeat](/img/blog/alert-notice-1.png)
3. Configure the associated alarm notification strategy ⚠️ [Add notification strategy] -> [Associate the recipient just set] -> [OK]
> Configure the alarm notification policy to bind the alarm message with the receiver, so that you can decide which alarms to send to whom.
![HertzBeat](/img/blog/alert-notice-2.png)
### Finished, now wait for the warning message to come. ding ding ding ding
```text
[HertzBeat warning notification]
Alarm target object: mysql.cahce.query_cache_hit_rate
Affiliated monitoring ID: 205540620394932
Belonging monitoring name: Mysql_localhost
Alarm level: major alarm
Alarm trigger time: 2023-02-11 21:13:44
Content details: mysql db query_cache_hit_rate is too low, now is 20.
```
## Summary
:::tip
This practical article took us to experience how to use the open source real-time monitoring tool HertzBeat to monitor Mysql database metric data. We can find that HertzBeat, which integrates `monitoring-alarm-notification`, is more convenient in operation and use, just click on the page The Mysql database can be included in the monitoring and alarm notification, and the tedious operations of deploying multiple components and writing configuration files are no longer needed.
:::
Mysql Github: [https://github.com/mysql/mysql-server](https://github.com/mysql/mysql-server)
HertzBeat Github: [https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)
**Welcome to learn, use and star!**
> Only one docker command is needed to install and experience heartbeat:
`docker run -d -p 1157:1157 --name hertzbeat apache/hertzbeat`
+146
View File
@@ -0,0 +1,146 @@
---
title: Monitoring Linux Operating Systems Using Open Source Real-Time Monitoring HertzBeat
author: tom
author_title: tom
author_url: https://github.com/tomsun28
tags: [opensource, practice]
keywords: [Open source monitoring tool, operating system monitoring, Linux monitoring]
---
## Use the open source real-time monitoring tool HertzBeat to monitor and alarm the Linux operating system, and it will be done in 5 minutes
### Introduction to HertzBeat
> HertzBeat is an open source, easy-to-use and friendly real-time monitoring tool that does not require Agent and has powerful custom monitoring capabilities.
- Integrate **monitoring-alarm-notification**, support monitoring of application services, databases, operating systems, middleware, cloud native, etc., threshold alarms, alarm notifications (email WeChat Dingding Feishu SMS Slack Discord Telegram).
- It configurable protocol specifications such as Http, Jmx, Ssh, Snmp, Jdbc, Prometheus, etc. You only need to configure YML to use these protocols to customize and collect any metrics you want to collect. Do you believe that you can immediately adapt to a new monitoring type such as K8s or Docker just by configuring YML?
- HertzBeat's powerful customization, multi-type support, easy expansion, and low coupling, hope to help developers and small and medium teams quickly build their own monitoring tools.
Github: [https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)
### Get Linux Monitoring Done in HertzBeat in 5 Minutes
#### Prerequisites, you already have a Linux environment and a HertzBeat environment
- HertzBeat [Installation and deployment documentation](https://hertzbeat.apache.org/docs/start/docker-deploy)
#### Add monitoring of the Linux operating system to the monitoring page of the open source monitoring tool HertzBeat
1. Click Add Linux Monitoring
Path: Menu -> Operating System Monitoring -> Linux Operating System -> Add Linux Operating System Monitoring
![HertzBeat](/img/blog/monitor-linux-1.png)
2. Configure the parameters required for new monitoring Linux
Fill in the Linux **peer IP**, **SSH port** (default 22), **account password, etc.** on the monitoring page, and finally click OK to add.
For other parameters such as **collection interval**, **timeout period**, etc., please refer to the help document [https://hertzbeat.apache.org/docs/help/mysql/](https://hertzbeat.apache.org/docs/help/mysql/)
![HertzBeat](/img/blog/monitor-linux-2.png)
3. Complete ✅, now we have added the monitoring of Linux, check the monitoring list to see our added items.
![HertzBeat](/img/blog/monitor-linux-3.png)
4. Click **Operation**->**Monitoring Details Icon** of the monitoring list item to browse the real-time monitoring metric data of Linux.
![HertzBeat](/img/blog/monitor-linux-4.png)
![HertzBeat](/img/blog/monitor-linux-7.png)
5. Click **Monitoring History Details TAB** to browse the historical monitoring metric data chart of Linux📈.
![HertzBeat](/img/blog/monitor-linux-5.png)
![HertzBeat](/img/blog/monitor-linux-6.png)
**DONE! Done! To sum up, it only takes one step**
- **On the HertzBeat monitoring page, configure the IP port account password and add Linux monitoring**
:::tip
Through the above two steps, we have completed the monitoring of Linux. We can view the monitoring details and metrics in HertzBeat at any time to observe its service status.
Of course, just looking at it is definitely not perfect. Monitoring is often accompanied by alarm thresholds. When Linux performance metrics exceed our expectations or are abnormal, we can promptly notify our corresponding person in charge. The person in charge receives the notification and handles the problem. It is a complete monitoring and alarm process.
:::
**Next, we will demonstrate step by step how to configure threshold alarm notifications in the HertzBeat system, so that when Linux metrics are found to be abnormal, they will be notified to us in time**
#### 3. Add Linux metric threshold alarm in HertzBeat system
1. Configure an alarm threshold for an important metric
Path: Menu -> Threshold Rules -> Add Threshold
- Select the configured metric object. Linux monitors mainly related metrics such as cpu, memory, disk, network performance, etc. For example, we set the threshold for the metric `CPU utilization` `cpu` -> `usage`. When the Linux cpu utilization is greater than 90% When a warning is issued.
- Here we configure to send an alarm when the `usage>90` of this metric `cpu`, the alarm level is **Warning Alarm**, which will be triggered after three times, as shown in the figure below.
![HertzBeat](/img/blog/monitor-linux-8.png)
![HertzBeat](/img/blog/monitor-linux-9.png)
2. Add message notification recipients
> Configure the receiver to let the alarm message know who to send and how to send it.
Path: Menu -> Alarm Notification -> Alarm Recipient -> Add New Recipient
Message notification methods support **email, DingTalk, WeChat Work, Feishu, WebHook, SMS**, etc. Here we take the commonly used DingTalk as an example.
- Refer to this [Help Documentation](https://hertzbeat.apache.org/docs/help/alert_dingtalk) [https://hertzbeat.apache.org/docs/help/alert_dingtalk](https://hertzbeat.apache.org/docs/help/alert_dingtalk) to configure the robot on DingTalk and set the security custom keyword `HertzBeat`, get the corresponding `access_token` value.
- Configure the receiver parameters in HertzBeat as follows.
【Alarm Notification】->【New Recipient】->【Select DingTalk Robot Notification Method】->【Set DingTalk Robot ACCESS_TOKEN】->【OK】
![HertzBeat](/img/blog/alert-notice-1.png)
3. Configure the associated alarm notification strategy ⚠️ [Add notification strategy] -> [Associate the recipient just set] -> [OK]
> Configure the alarm notification policy to bind the alarm message with the receiver, so that you can decide which alarms to send to whom.
![HertzBeat](/img/blog/alert-notice-2.png)
### Finished, now wait for the warning message to come. ding ding ding ding
```text
[HertzBeat warning notification]
Alarm target object: linux.cpu.usage
Affiliated monitoring ID: 483783444839382
Belonging monitoring name: Linux_182.33.34.2
Alarm level: warning alarm
Alarm trigger time: 2023-02-15 21:13:44
Content details: The linux cpu usage is too high. now is 95.
```
## Summary
:::tip
This practical article took us to experience how to use the open source real-time monitoring tool HertzBeat to monitor Linux metric data. We can find that HertzBeat, which integrates `monitoring-alarm-notification`, is more convenient in operation and use. Linux can be included in the monitoring and alarm notification, and there is no need to deploy multiple components and write configuration files.
:::
> Only one docker command is needed to install and experience heartbeat:
`docker run -d -p 1157:1157 --name hertzbeat apache/hertzbeat`
## What is Hertz Beat?
> [HertzBeat Hertz Beat](https://github.com/apache/hertzbeat) is a real-time monitoring and alarm system with powerful custom monitoring capabilities and no Agent required. Monitoring of application services, databases, operating systems, middleware, cloud native, etc., threshold alarms, and alarm notifications (email, WeChat, Dingding, Feishu, SMS, Discord, Slack, Telegram).
>
> We make protocol specifications such as `Http, Jmx, Ssh, Snmp, Jdbc, Prometheus` configurable, and you only need to configure YML to use these protocols to customize and collect any metrics you want to collect.
> Do you believe that you can immediately adapt to a new monitoring type such as K8s or Docker just by configuring YML?
>
> The powerful customization of `HertzBeat`, multi-type support, easy expansion, and low coupling, hope to help developers and small and medium-sized teams quickly build their own monitoring tools.
**Github: [https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)**
**Gitee: [https://gitee.com/hertzbeat/hertzbeat](https://gitee.com/hertzbeat/hertzbeat)**
## ⛄ Supported
- Website Monitoring, Port Availability, Http Api, Ping Connectivity, Jvm, SiteMap, Ssl Certificate, SpringBoot, FTP Server
- Mysql, PostgreSQL, MariaDB, Redis, ElasticSearch, SqlServer, Oracle, MongoDB, Dameng, OpenGauss, ClickHouse, IoTDB
- Linux, Ubuntu, CentOS, Windows
- Tomcat, Nacos, Zookeeper, RabbitMQ, Flink, Kafka, ShenYu, DynamicTp, Jetty, ActiveMQ
-Kubernetes, Docker
- and more for your custom monitoring.
- Notification support `Discord` `Slack` `Telegram` `Mail` `DingTalk` `WeChat` `Feishu` `SMS` `Webhook`.
+90
View File
@@ -0,0 +1,90 @@
---
title: Open source real-time monitoring tool HertzBeat v1.3.0 released, online customization is coming
author: tom
author_title: tom
author_url: https://github.com/tomsun28
tags: [opensource, practice]
keywords: [open source monitoring system, alerting system, Linux monitoring]
---
Website: hertzbeat.com | tancloud.cn
![HertzBeat](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/a9629ef5bb6e486cacddb899f1495c6e~tplv-k3u1fbpfcp-zoom-1.image)
## What is HertzBeat?
>
> HertzBeat is an open source real-time monitoring and alerting tool with powerful custom monitoring capabilities and no Agent required.
> It supports monitoring of application services, database, operating system, middleware, cloud native, network and other metrics, and threshold alert notification in one step.
> Support more liberal threshold rules (calculation expressions), `email` `Discord` `Slack` `Telegram` `Pegging` `WeChat` `FlyBook` `SMS` `Webhook` and other ways to timely delivery.
>
> We have made the protocol specifications such as `Http, Jmx, Ssh, Snmp, Jdbc, Prometheus` configurable so that you can simply configure `YML` to use these protocols to customize the collection of any metrics you want.
>
> Do you believe that you can immediately adapt a new monitoring type such as K8s or Docker just by defining YML?
**Github: [https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)**
**Gitee: [https://gitee.com/hertzbeat/hertzbeat](https://gitee.com/hertzbeat/hertzbeat)**
### v1.3.0 release is here
After a month of iterations, HertzBeat v1.3.0 was officially released last weekend, **Recommended upgrade**!
- HertzBeat has powerful custom monitoring capabilities, all our supported monitoring types are mapped to a YML. This time we bring custom monitoring pagination, welcome to use and share your own monitoring type definition.
- **support for monitoring network switches**.
hertzbeat supported snmp protocol long time ago, windows monitoring is monitored by snmp protocol, this version we not only support more windows performance metrics, but also support snmp walk, adapt several common network switches monitoring, welcome to contribute more types and metrics to the community.
- **Support for monitoring redis clusters and more database metrics**.
Community contributors have contributed extended metrics for redis clusters and multiple databases, enriching the performance metrics data.
- **Support iotdb1.0 storage, dependency-free mode**
and more new features welcome to explore
- Fix several bugs, better documentation, refactored code.
---
Only one docker command is needed to install and experience heartbeat
`docker run -d -p 1157:1157 --name hertzbeat apache/hertzbeat`
Thanks to the hertzbeat contributors for their contributions! 👍👍👍
We are in desperate need of contributors for various aspects of test cases, new application monitoring, documentation, etc. Contributors are very welcome to join.
Upgrade note ⚠️.
For users who previously used iotdb or tdengine to store metrics data, you need to modify application.yml to disable JPA storage `warehouse.store.jpa.enabled` as follows:
Modify `application.yml` and set `warehouse.store.jpa.enabled` parameter to false
```yaml
warehouse:
store:
jpa:
enabled: false
```
Execute SQL script
```text
ALTER table hzb_monitor modify job_id bigint default null;
COMMIT;
```
---
## ⛄ Supported
- Site Monitor, Port Availability, Http Api, Ping Connectivity, Jvm, SiteMap Full Site, Ssl Certificate, SpringBoot, FTP Server
- Mysql, PostgreSQL, MariaDB, Redis, ElasticSearch, SqlServer, Oracle, MongoDB, Damon, OpenGauss, ClickHouse, IoTDB, Redis Cluster
- Linux, Ubuntu, CentOS, Windows
- Tomcat, Nacos, Zookeeper, RabbitMQ, Flink, Kafka, ShenYu, DynamicTp, Jetty, ActiveMQ
- Kubernetes, Docker
- Huawei Switch, HPE Switch, TP-LINK Switch, Cisco Switch
- and more for your custom monitoring.
- Notifications support `Discord` `Slack` `Telegram` `Mail` `Pinning` `WeChat` `FlyBook` `SMS` `Webhook`.
---
**Github: [https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)**
**Gitee: [https://gitee.com/hertzbeat/hertzbeat](https://gitee.com/hertzbeat/hertzbeat)**
+212
View File
@@ -0,0 +1,212 @@
---
title: Monitoring SpringBoot2 Metrics with HertzBeat in 5 minutes
author: tom
author_title: tom
author_url: https://github.com/tomsun28
tags: [opensource, practice]
keywords: [opensource monitoring, SpringBoot monitoring, alert]
---
## Use the open source real-time monitoring tool HertzBeat to monitor and alarm the SpringBoot2 application, and it will be done in 5 minutes
### HertzBeat Intro
> HertzBeat is an open source, real-time monitoring tool with custom-monitor and agentless. | 易用友好的开源实时监控告警工具,无需Agent,强大自定义监控能力.
>
> **Monitor+Alerter+Notify** all in one. Support monitoring web service, database, os, middleware, cloud-native, network and more.
> More flexible threshold rule(calculation expression), timely notification delivery by `Discord` `Slack` `Telegram` `Email` `DingDing` `WeChat` `FeiShu` `Webhook` `SMS`.
>
> We make protocols such as `Http, Jmx, Ssh, Snmp, Jdbc, Prometheus` configurable, and you only need to configure `YML` online to collect any metrics you want.
> Do you believe that you can immediately adapt a new monitoring type such as K8s or Docker just by configuring online?
>
> `HertzBeat`'s powerful custom-define, multi-type support, easy expansion, low coupling, hope to help developers and micro teams to quickly build their own monitoring system.
Github: [https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)
### Monitoring SpringBoot2 Metrics with HertzBeat in 5 minutes
#### Prerequisite, you already have SpringBoot2 application environment and HertzBeat environment
- HertzBeat [Installation and deployment documentation](https://hertzbeat.apache.org/docs/start/docker-deploy)
#### 1. The `actuator` metric endpoint is exposed on the SpringBoot2 application side, which will provide metrics endpoints data
1. Open SpringBoot Actuator Endpoint to expose `metrics health env` metric interface
```yaml
management:
endpoints:
web:
exposure:
include:
- 'metrics'
- 'health'
- 'env'
enabled-by-default: on
```
2. After restarting, test whether the access metric interface `ip:port/actuator` has response json data as follows:
```json
{
"_links": {
"self": {
"href": "http://localhost:1157/actuator",
"templated": false
},
"health-path": {
"href": "http://localhost:1157/actuator/health/{*path}",
"templated": true
},
"health": {
"href": "http://localhost:1157/actuator/health",
"templated": false
},
"env": {
"href": "http://localhost:1157/actuator/env",
"templated": false
},
"env-toMatch": {
"href": "http://localhost:1157/actuator/env/{toMatch}",
"templated": true
},
"metrics-requiredMetricName": {
"href": "http://localhost:1157/actuator/metrics/{requiredMetricName}",
"templated": true
},
"metrics": {
"href": "http://localhost:1157/actuator/metrics",
"templated": false
}
}
}
```
#### Add SpringBoot2 application monitoring in the HertzBeat monitoring ui
1. Click to add SpringBoot2 monitoring
Path: Menu -> Application Service Monitoring -> SpringBoot2 -> Add SpringBoot2 Monitoring
![HertzBeat](/img/blog/monitor-springboot2-1.png)
2. Configure the parameters required for new monitoring SpringBoot2
Fill in the SpringBoot2 application **peer IP**, **service port** (default 8080), **account password, etc.** on the monitoring page, and finally click OK to add.
For other parameters such as **collection interval**, **timeout period**, etc., please refer to the help document [https://hertzbeat.apache.org/docs/help/](https://hertzbeat.apache.org/docs/help/)
![HertzBeat](/img/blog/monitor-springboot2-2.png)
3. Complete ✅, now we have added the monitoring of the SpringBoot2 application, check the monitoring list to see our additions.
![HertzBeat](/img/blog/monitor-springboot2-3.png)
4. Click **Operation**->**Monitoring Details Icon** of the monitoring list item to browse the real-time monitoring metric data of the SpringBoot2 application.
![HertzBeat](/img/blog/monitor-springboot2-4.png)
5. Click **Monitoring History Details TAB** to browse the historical monitoring metric data chart of the SpringBoot2 application📈.
![HertzBeat](/img/blog/monitor-springboot2-5.png)
**DONE! Done! It doesn't require us to deploy agents or various cumbersome operations, isn't it very simple**
- **Just one step to configure the IP port on the HertzBeat monitoring page and add SpringBoot2 application monitoring**
:::tip
Through the above, we have completed the monitoring of the SpringBoot2 application. We can check the status and availability of various metrics of the SpringBoot2 application at any time in HertzBeat.
Of course, it is impossible to manually check the metrics in real time. Monitoring is often accompanied by alarm thresholds. When the performance metrics of the SpringBoot2 application exceed our threshold or the SpringBoot2 application itself is abnormal, we can promptly notify our corresponding person in charge. The person in charge receives the notification and handles it. , this is a complete monitoring and alarm process.
:::
**Next, we will demonstrate step by step how to configure the threshold alarm notification in the HertzBeat system. When the metrics of the SpringBoot2 application are abnormal, we will be notified in time**
#### 3. Add SpringBoot2 application metric threshold alarm in HertzBeat system
1. Configure an alarm threshold for an important metric
Path: Menu -> Threshold Rules -> Add Threshold
- Select the configured metric object. SpringBoot2 application monitoring mainly focuses on stack memory threads and other related metrics. For example, we set the threshold for the metric `threads` -> `threads`. When the number of threads in the `runnable` state is greater than At 300 an alert is issued.
- Here we configure to send an alarm when `size`, `state` of `equals(state, "runnable"") && size>300` of this metric, the alarm level is **warning alarm**, which will be triggered three times, specifically As shown below.
![HertzBeat](/img/blog/monitor-springboot2-6.png)
![HertzBeat](/img/blog/monitor-springboot2-7.png)
2. Add message notification recipients
> Configure the receiver to let the alarm message know who to send and how to send it.
Path: Menu -> Alarm Notification -> Alarm Recipient -> Add New Recipient
Message notification methods support **email, DingTalk, WeChat Work, Feishu, WebHook, SMS**, etc. Here we take the commonly used DingTalk as an example.
- Refer to this [Help Documentation](https://hertzbeat.apache.org/docs/help/alert_dingtalk) [https://hertzbeat.apache.org/docs/help/alert_dingtalk](https://hertzbeat.apache.org/docs/help/alert_dingtalk) to configure the robot on DingTalk and set the security custom keyword `HertzBeat`, get the corresponding `access_token` value.
- Configure the receiver parameters in HertzBeat as follows.
【Alarm Notification】->【New Recipient】->【Select DingTalk Robot Notification Method】->【Set DingTalk Robot ACCESS_TOKEN】->【OK】
![HertzBeat](/img/blog/alert-notice-1.png)
3. Configure the associated alarm notification strategy ⚠️ [Add notification strategy] -> [Associate the recipient just set] -> [OK]
> Configure the alarm notification policy to bind the alarm message with the receiver, so that you can decide which alarms to send to whom.
![HertzBeat](/img/blog/alert-notice-2.png)
### Finished, now wait for the warning message to come. ding ding ding ding
```text
[HertzBeat warning notification]
Alarm target object: springboot2.threads.size
Affiliated monitoring ID: 483783444839322
Belonging monitoring name: SPRINGBOOT2_localhost
Alarm level: warning alarm
Alarm trigger time: 2023-03-22 21:13:44
Content details: The springboot2 service's runnable state threads num is over 300, now is 444.
```
## Summary
:::tip
This practical article took us to experience how to use the open source real-time monitoring tool HertzBeat to monitor SpringBoot2 application metric data. We can find that HertzBeat, which integrates `monitoring-alarm-notification`, is more convenient in operation and use, just click a little on the page The SpringBoot2 application can be included in the monitoring and alarm notification, and the tedious operations of deploying multiple components and writing configuration files are no longer needed.
:::
> Only one docker command is needed to install and experience heartbeat:
`docker run -d -p 1157:1157 --name hertzbeat apache/hertzbeat`
## More powerful
> Through the simple steps above, we have realized the monitoring of SpringBoot2, but the built-in metrics in it do not meet the needs. Can we customize and monitor more metrics of SpringBoot2? The answer is of course yes, through **Monitoring Definition**->**SpringBoot2** on the page, you can customize and modify the performance metrics you want to monitor by editing the following YML configuration file at any time.
![HertzBeat](/img/blog/monitor-springboot2-8.png)
## What is HertzBeat?
> [HertzBeat](https://github.com/apache/hertzbeat) is an open source, real-time monitoring tool with custom-monitor and agentless.
> **Monitor+Alerter+Notify** all in one. Support monitoring web service, database, os, middleware, cloud-native, network and more.
> More flexible threshold rule(calculation expression), timely notification delivery by `Discord` `Slack` `Telegram` `Email` `DingDing` `WeChat` `FeiShu` `Webhook` `SMS`.
>
> We make protocols such as `Http, Jmx, Ssh, Snmp, Jdbc, Prometheus` configurable, and you only need to configure `YML` online to collect any metrics you want.
> Do you believe that you can immediately adapt a new monitoring type such as K8s or Docker just by configuring online?
>
> `HertzBeat`'s powerful custom-define, multi-type support, easy expansion, low coupling, hope to help developers and micro teams to quickly build their own monitoring system.
----
## ⛄ Supported
- Site Monitor, Port Availability, Http Api, Ping Connectivity, Jvm, SiteMap Full Site, Ssl Certificate, SpringBoot, FTP Server
- Mysql, PostgreSQL, MariaDB, Redis, ElasticSearch, SqlServer, Oracle, MongoDB, Damon, OpenGauss, ClickHouse, IoTDB, Redis Cluster
- Linux, Ubuntu, CentOS, Windows
- Tomcat, Nacos, Zookeeper, RabbitMQ, Flink, Kafka, ShenYu, DynamicTp, Jetty, ActiveMQ
- Kubernetes, Docker
- Huawei Switch, HPE Switch, TP-LINK Switch, Cisco Switch
- and more for your custom monitoring.
- Notifications support `Discord` `Slack` `Telegram` `Mail` `Pinning` `WeChat` `FlyBook` `SMS` `Webhook`.
----
**Github: [https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)**
**Gitee: [https://gitee.com/hertzbeat/hertzbeat](https://gitee.com/hertzbeat/hertzbeat)**
+70
View File
@@ -0,0 +1,70 @@
---
title: Open source real-time monitoring tool HertzBeat v1.3.1 released
author: tom
author_title: tom
author_url: https://github.com/tomsun28
tags: [opensource, practice]
keywords: [open source monitoring system, alerting system, Linux monitoring]
---
Website: hertzbeat.com | tancloud.cn
![HertzBeat](/img/home/0.png)
## What is HertzBeat?
>
> [HertzBeat](https://github.com/apache/hertzbeat) is an open source, real-time monitoring system with custom-monitoring and agentless.
> **Monitoring+Alarm+Notify** all in one. Support monitoring web service, database, os, middleware, cloud-native, network and more.
> Easy to use, full web-based operation, monitoring and alerting at the click of a mouse, zero learning cost.
> More flexible threshold rule, timely notification delivery by `Discord` `Slack` `Telegram` `Email` `DingDing` `WeChat` `FeiShu` `Webhook` `SMS`.
>
> We make protocols such as `Http, Jmx, Ssh, Snmp, Jdbc, Prometheus` configurable, and you only need to configure `YML` online to collect any metrics you want.
> Do you believe that you can immediately adapt a new monitoring type such as K8s or Docker just by configuring online?
>
> `HertzBeat`'s powerful custom-define, multi-type support, easy expansion, low coupling, hope to help developers and micro teams to quickly build their own monitoring system.
> We also provide **[Monitoring SaaS Cloud](https://console.tancloud.cn)**, users no longer need to deploy a cumbersome monitoring system in order to monitor resources. **[Get started for free](https://console.tancloud.cn)**.
**Github: [https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)**
**Gitee: [https://gitee.com/hertzbeat/hertzbeat](https://gitee.com/hertzbeat/hertzbeat)**
### v1.3.1 release is here
Hi guys! Major release. HertzBeat v1.3.1 is coming. **So excited that more than 30 friends have contributed this version.**.
We support **greptimeDB, tedngine3.0 and opengauss influxdb** to store to metrics data.
New feature **monitoring export and import by excel json yaml** , **alert silence**, **new monitoring template** and more.
Support monitoring EulerOS metrics and SpringBoot3 metrics. Fixed several bugs, imporved document and improved the overall stable usability.
Let's Try Now!
Only one docker command is needed to install and experience hertzbeat
`docker run -d -p 1157:1157 --name hertzbeat apache/hertzbeat`
## Upgrade Note⚠️
If use tdengine before, please upgrade tdengine to 3.0+
Please Run SQL Script When Upgrade.
```text
ALTER table hzb_alert_define modify field varchar(255) default null;
COMMIT;
```
---
## ⛄ Supported
- Site Monitor, Port Availability, Http Api, Ping Connectivity, Jvm, SiteMap Full Site, Ssl Certificate, SpringBoot, FTP Server
- Mysql, PostgreSQL, MariaDB, Redis, ElasticSearch, SqlServer, Oracle, MongoDB, Damon, OpenGauss, ClickHouse, IoTDB, Redis Cluster
- Linux, Ubuntu, CentOS, Windows
- Tomcat, Nacos, Zookeeper, RabbitMQ, Flink, Kafka, ShenYu, DynamicTp, Jetty, ActiveMQ
- Kubernetes, Docker
- Huawei Switch, HPE Switch, TP-LINK Switch, Cisco Switch
- and more for your custom monitoring.
- Notifications support `Discord` `Slack` `Telegram` `Mail` `Pinning` `WeChat` `FlyBook` `SMS` `Webhook`.
---
**Github: [https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)**
**Gitee: [https://gitee.com/hertzbeat/hertzbeat](https://gitee.com/hertzbeat/hertzbeat)**
+130
View File
@@ -0,0 +1,130 @@
---
title: GreptimeDB & HertzBeat, using the open source temporal database GreptimeDB to store metrics for the open source real-time monitoring HertzBeat
author: tom
author_title: tom
author_url: https://github.com/tomsun28
tags: [opensource, practice]
keywords: [open source monitoring system, open source temporal database, HertzBeat, GreptimeDB]
---
## Using GreptimeDB, an open source temporal database, to store metrics for open source real-time monitoring HertzBeat
### What is GreptimeDB?
> [GreptimeDB](https://github.com/GreptimeTeam/greptimedb) is an open source, distributed, cloud-native temporal database that fuses temporal data processing and analytics.
- Complete ecosystem, support a large number of open protocols, compatible with MySQL/PostreSQL/PromQL/OpenTSDB, etc., low learning cost, out-of-the-box.
- Mixed load of timing and analytics, support for highly concurrent read/write; native support for PromQL, support for SQL/Python for powerful in-library analytics.
- Efficient storage and computation, with object storage and high data compression rate to achieve ultra-low storage costs. Built-in data analytics solution to avoid replicating data to external data warehouses.
- Distributed, Highly Reliable & Highly Available, easily scale each module independently with decoupled cloud-native architecture. Ensure data reliability and availability with configurable replicas and automated failover mechanisms.
Cloud: **[GreptimePlay](https://greptime.com/product/cloud)**
### What is HertzBeat?
> [HertzBeat](https://github.com/apache/hertzbeat) is an open source real-time monitoring and alerting tool with powerful customizable monitoring capabilities and no Agent required.
- HertzBeat is an open source real-time monitoring and alerting tool with powerful customizable monitoring capabilities without the need for an agent. It integrates **Monitoring+Alerting+Notification** All in one, supports monitoring of application services, applications, databases, caching, operating systems, big data, middleware, web servers, cloud native, network, customization, etc., and notifies you of thresholds and alerts all in one step.
- More liberalized threshold rules (calculation expressions), `Email` `Discord` `Slack` `Telegram` `Pinned` `Dingtalk` `WeChat` `Flybook` `SMS` `Webhook` and other ways to deliver in time.
- Configurable `Http, Jmx, Ssh, Snmp, Jdbc, Prometheus` and other protocol specifications, just configure the `YML` monitoring template in the browser to use these protocols to customize the collection of desired metrics.
> With `HertzBeat`'s powerful customization, multi-type support, easy scalability and low coupling, we hope to help developers and small and medium-sized teams to quickly build their own monitoring system.
Cloud: **[TanCloud](https://console.tancloud.cn/)**
### GreptimeDB & HertzBeat
> In the following section, we will demonstrate step-by-step how HertzBeat can be combined with GreptimeDB as a storage to store the collected metrics data.
#### Installing and Deploying GreptimeDB
You can refer to the [official documentation](https://docs.greptime.com/getting-started/overview#docker) for more details.
1. Docker installation of GreptimeDB
```shell
$ docker run -p 4000-4004:4000-4004 \
-p 4242:4242 -v "$(pwd)/greptimedb:/tmp/greptimedb" \
--name greptime \
greptime/greptimedb:0.2.0 standalone start \
--http-addr 0.0.0.0.0:4000 \
--rpc-addr 0.0.0.0:4001
```
- `-v "$(pwd)/greptimedb:/tmp/greptimedb"` is the local persistent mount for the greptimeDB data directory, it is recommended to replace `$(pwd)/greptimedb` with the actual local directory you want to specify for storage.
2. Use ``$ docker ps | grep greptime`` to see if GreptimeDB started successfully.
#### Installing and Deploying HertzBeat
See the [official documentation](https://hertzbeat.apache.org/zh-cn/docs/start/docker-deploy) for details.
1. Docker installs HertzBeat.
```shell
$ docker run -d -p 1157:1157 \
-e LANG=zh_CN.UTF-8 \
-e TZ=Asia/Shanghai \
-v /opt/data:/opt/hertzbeat/data \
-v /opt/application.yml:/opt/hertzbeat/config/application.yml \
--restart=always \
--name hertzbeat apache/hertzbeat
```
- `-v /opt/data:/opt/hertzbeat/data` : (Optional, data persistence) Important ⚠️ Mount the H2 database files to the local host to ensure that the data will not be lost due to the creation and deletion of the container
- `-v /opt/application.yml:/opt/hertzbeat/config/application.yml` : Mount customized local configuration files to the container, i.e. use local configuration files to overwrite the container configuration files.
Note that the ⚠️ local mount configuration file `application.yml` needs to exist in advance, and the full contents of the file can be found in the project repository [/script/application.yml]([https://github.com/apache/hertzbeat/raw/master/script/](https://github.com/apache/hertzbeat/raw/master/script/) application.yml)
2. Go to [http://ip:1157/](http://ip:1157/) with the default account and password admin/hertzbeat to see if HertzBeat starts successfully.
#### Configure to use GreptimeDB to store HertzBeat monitoring metrics metrics data
1. Modify the HertzBeat configuration file.
Modify the locally mounted HertzBeat configuration file [application.yml](https://github.com/apache/hertzbeat/raw/master/script/application.yml), in package mode modify `hertzbeat/ config/application.yml
**Modify the `warehouse.store.jpa.enabled` parameter in there to `false`, configure the `warehouse.store.greptime` datasource parameter in there, the URL account password, and enable `enabled` to `true`**.
```yaml
warehouse:
store:
jpa:
enabled: false
greptime:
enabled: true
endpoint: localhost:4001
```
2. Restart HertzBeat.
```shell
docker restart hertzbeat
```
#### Observe the authentication effect
1. visit HertzBeat in your browser [http://ip:1157/](http://ip:1157/) default account password admin/hertzbeat
2. Use HertzBeat to add application monitors, such as website monitors, Linux monitors, Mysql monitors, and so on.
3. After monitoring and collecting several cycles, check whether GreptimeDB database stores the metrics data and whether HertzBeat metrics data graph data is displayed normally.
Here's the picture: !
![HertzBeat](/img/blog/greptime-1.png)
![HertzBeat](/img/blog/greptime-2.png)
![HertzBeat](/img/blog/greptime-3.png)
## Summary
This article took us to experience how to use the open source time-series database GreptimeDB to store the metrics data of the open source real-time monitoring HertzBeat, in general, the two open source products is very simple to get started, the key is that if it is too much trouble do not want to deploy both of them still have cloud services 😂 let you toss.
As one of the developers of the feature [HertzBeat supports GreptimeDB](https://github.com/apache/hertzbeat/pull/834), in the actual adaptation process, GreptimeDB's silky-smooth native SDK and relational database-like SQL, let us from other GreptimeDB native SDK and relational database-like SQL make it very easy to switch from other time-series databases like `TDengine, IotDB, InfluxDB` to GreptimeDB, and the experience is very smooth.
GreptimeDB Github: [https://github.com/GreptimeTeam/greptimedb](https://github.com/GreptimeTeam/greptimedb)
HertzBeat Github: [https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)
**Finally, you are welcome to be more understanding, more use, more comments, more ISSUE, more PR, more Star support these two did not come out for a long time hope to get care of open source cattle are not afraid of difficulties a small star oh! Do open source, we are sincere, love 💗**
Thanks to the contributors of this feature [HertzBeat support GreptimeDB](https://github.com/apache/hertzbeat/pull/834) @zqr10159, @fengjiachun, @killme2008, @tomsun28
+96
View File
@@ -0,0 +1,96 @@
---
title: Open source monitoring HertzBeat v1.3.2 released, Easier to use
author: tom
author_title: tom
author_url: https://github.com/tomsun28
tags: [opensource, practice]
keywords: [open source monitoring system, alerting system, Linux monitoring]
---
Website: hertzbeat.com | tancloud.cn
![HertzBeat](/img/home/0.png)
## What is HertzBeat?
>
> [HertzBeat](https://github.com/apache/hertzbeat) is an open source, real-time monitoring system with custom-monitoring and agentless.
> **Monitoring+Alarm+Notify** all in one. Support monitoring web service, database, os, middleware, cloud-native, network and more.
> Easy to use, full web-based operation, monitoring and alerting at the click of a mouse, zero learning cost.
> More flexible threshold rule, timely notification delivery by `Discord` `Slack` `Telegram` `Email` `DingDing` `WeChat` `FeiShu` `Webhook` `SMS`.
>
> We make protocols such as `Http, Jmx, Ssh, Snmp, Jdbc, Prometheus` configurable, and you only need to configure `YML` online to collect any metrics you want.
> Do you believe that you can immediately adapt a new monitoring type such as K8s or Docker just by configuring online?
>
> `HertzBeat`'s powerful custom-define, multi-type support, easy expansion, low coupling, hope to help developers and micro teams to quickly build their own monitoring system.
> We also provide **[Monitoring SaaS Cloud](https://console.tancloud.cn)**, users no longer need to deploy a cumbersome monitoring system in order to monitor resources. **[Get started for free](https://console.tancloud.cn)**.
**Github: [https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)**
**Gitee: [https://gitee.com/hertzbeat/hertzbeat](https://gitee.com/hertzbeat/hertzbeat)**
### v1.3.2
Hi guys! Major release. HertzBeat v1.3.2 has published.
**This delightful version came out of the hard work of 27 friends. Thank them! Love 💗**
In this version, we support new monitoring types and metrics for **freebsd, debian, opensuse, redhat, apache doris**, etc.
- Support WEB page configuration mail server, replace the previous file configuration
- Supports alarm convergence. If repeated alarms are frequently sent, it will be resolved immediately with alarm convergence
- The public message queue supports Kafka. In addition to our default built-in memory message queue, it also supports an external Kafka message queue to improve system performance.
- The new monitoring center page aggregates all monitoring types, no need to switch back and forth like before.
- Support label group display, group and mark monitors of the same business category for unified management.
- Threshold configuration not only has expressions, but also supports a more user-friendly operation UI. The previous expressions were not friendly to newcomers and were prone to errors. Now you can directly operate the UI, and it can switch between expressions.
- There are many more functions such as HTTP ipv6.
Fixed a large number of BUG, improved the document code, and improved the overall stability and usability. More new features are welcome to explore!
Let's Try Now!
Only one docker command is needed to install and experience hertzbeat
`docker run -d -p 1157:1157 --name hertzbeat apache/hertzbeat`
```or use quay.io (if dockerhub network connect timeout)```
```docker run -d -p 1157:1157 --name hertzbeat quay.io/tancloud/hertzbeat```
---
Upgrade Note⚠️.
For h2 database users, sholud exec sql below:
```sql
ALTER TABLE HZB_PARAM DROP CONSTRAINT CONSTRAINT_82;;
```
How to Enable H2 WEB Console:
Modify `application.yml` and restart, access `ip:1157/h2-console`
```yaml
spring:
h2:
console:
path: /h2-console
enabled: true
```
---
## ⛄ Supported
- Site Monitor, Port Availability, Http Api, Ping Connectivity, Jvm, SiteMap Full Site, Ssl Certificate, SpringBoot, FTP Server
- Mysql, PostgreSQL, MariaDB, Redis, ElasticSearch, SqlServer, Oracle, MongoDB, Damon, OpenGauss, ClickHouse, IoTDB, Redis Cluster
- Linux, Ubuntu, CentOS, Windows
- Tomcat, Nacos, Zookeeper, RabbitMQ, Flink, Kafka, ShenYu, DynamicTp, Jetty, ActiveMQ
- Kubernetes, Docker
- Huawei Switch, HPE Switch, TP-LINK Switch, Cisco Switch
- and more for your custom monitoring.
- Notifications support `Discord` `Slack` `Telegram` `Mail` `Pinning` `WeChat` `FlyBook` `SMS` `Webhook`.
---
**Github: [https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)**
**Gitee: [https://gitee.com/hertzbeat/hertzbeat](https://gitee.com/hertzbeat/hertzbeat)**
+167
View File
@@ -0,0 +1,167 @@
---
title: HertzBeat v1.4.0 released, cluster is coming!
author: tom
author_title: tom
author_url: https://github.com/tomsun28
tags: [opensource, practice]
keywords: [open source monitoring system, alerting system, Linux monitoring]
---
![HertzBeat](/img/home/0.png)
## What is HertzBeat?
[HertzBeat](https://github.com/apache/hertzbeat) is an open source, real-time monitoring system with custom monitoring, high performance cluster and agentless capabilities.
### Features
* Combines **monitoring, alarm, and notification** features into one platform, and supports monitoring for web service, program, database, cache, os, webserver, middleware, bigdata, cloud-native, network, custom and more.
* Easy to use and agentless, offering full web-based operations for monitoring and alerting with just a few clicks, all at zero learning cost.
* Makes protocols such as `Http, Jmx, Ssh, Snmp, Jdbc, Prometheus` configurable, allowing you to collect any metrics by simply configuring the template `YML` file online. Imagine being able to quickly adapt to a new monitoring type like K8s or Docker simply by configuring online with HertzBeat.
* High performance, supports horizontal expansion of multi-collector clusters, multi-isolated network monitoring and cloud-edge collaboration.
* Provides flexible alarm threshold rules and timely notifications delivered via `Discord` `Slack` `Telegram` `Email` `DingDing` `WeChat` `FeiShu` `Webhook` `SMS`.
> HertzBeat's powerful customization, multi-type support, high performance, easy expansion, and low coupling, aims to help developers and teams quickly build their own monitoring system.
![HertzBeat](/img/docs/hertzbeat-arch.png)
**Github: [https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)**
**Gitee: [https://gitee.com/hertzbeat/hertzbeat](https://gitee.com/hertzbeat/hertzbeat)**
### The cluster version is coming
Our previous hertzbeat has always been a stand-alone version. The component code is modular but does not support the independent deployment of the collector. The upper limit of the number of monitoring supported is naturally limited by a single node, and it cannot cope with the unified management of resources in multiple isolated networks.
After more than a month of iterations, we rewrote the collection task scheduling, deployed the collectors independently, and designed the stand-alone version and the cluster version to use the same set of codes to facilitate subsequent maintenance and upgrades. The two modes of the stand-alone cluster can be switched without perception. In the end, I am very happy that the cluster version met with you as scheduled.
The cluster version not only brings us more powerful monitoring performance, but also has functions such as cloud-side collaboration that are full of imagination.
#### High performance cluster
* Supports the deployment of collector clusters, multi-collector clusters scale horizontally, and exponentially improves the number of monitors and collection performance.
* The monitoring task is self-scheduled in the collector cluster. A single collector hangs up and migrates the collection task without perceptual failure. Newly added collector nodes are automatically scheduled to share the collection pressure.
* It is very convenient to switch between stand-alone mode and cluster mode and deploy without additional components.
![HertzBeat](/img/docs/cluster-arch.png)
#### Cloud Edge Collaboration
> Support the deployment of edge collector clusters, and cooperate with the main HertzBeat service cloud to improve collection capabilities.
In the isolated network where multiple networks are not connected, in the previous solution, we needed to deploy a monitoring system on each network, which resulted in the incompatibility of data and inconvenient management, deployment and maintenance.
HertzBeat provides cloud-edge collaboration capabilities. Edge collectors can be deployed on multiple isolated networks. When monitoring is added, collectors are specified. The collectors collect monitoring tasks within the isolated network, and report the collected data. The main HertzBeat service performs unified scheduling, management and display.
This is mostly used in unified monitoring scenarios of multiple isolated data centers or cloud resources and resources under the cloud of different vendors.
![HertzBeat](/img/docs/cluster-arch.png)
### Why open source cluster version?
Often, some strategies for making open source products that need to be commercialized will be to use the stand-alone version as a toy for the beginners of small players, and then use the cluster version as a closed-source product for paid players who need it. This model can be said to be very good and worthy of recognition, that is, to ensure that open source can also get benefits, and it is also applicable to the development strategy of many open source projects, and it may be more smooth on the business path.
Some people on the Internet will sneer at such open source projects that are divided into stand-alone and cluster versions, thinking that they are pseudo-open source, and open source is a gimmick. They think that open source should be open source and free, and the open source team should contribute everything selflessly. . . . Very speechless people like this, there is only return for investment. When you use open source software for free and get value, should you think about what you have paid for open source software instead of just asking for it.
So back to the topic, why do we want an open source cluster version? Just because you love open source? If you say that we are still teenagers, you may believe this, but do you believe this when a person who is going to be 30 and has family responsibilities says this, I dont believe it myself😂.
First of all, let's take a look at what open source can bring, or why open source should be done. The idea of full-time open source at the beginning is very simple, to make your favorite open source product (realized), the programmer's dream can be deployed on thousands of servers (see the downloads have been realized), and then make money based on this open source product ( not crying yet).
* User traffic. Open source projects are provided free of charge to users and developers, and have advantages in attracting users to use and promoting them.
* User trust. Open source products are naturally easy to gain the trust and patience of users, or lower the threshold of trust for users.
* Community collaboration. Open source products can attract top contributors to contribute together, receive user feedback issues, pr contributions, etc.
* Driven by the community, open source projects will become better and better, and more people will participate and use them after positive feedback. Community collaboration I think this is the meaning of open source, and this is not just the contribution code collaboration between programmers, users are all collaboration objects (for example, our project has a large number of operation and maintenance friends who contribute code and documents), if it is only code Open source without community collaboration, it is better to release an installation package for others to use and download for free.
* Product ecology. This is required for some ecological products, such as hertzbeat, which need to support monitoring types that connect to various types of protocols, and a large number of monitoring templates. Only a good open source project ecology can attract other contributors to contribute and share, exchange what is needed in the ecology, and ultimately everyone will benefit from the ecology. This is difficult to do in closed source programs.
The above points focus on community collaboration and product ecology. This is also the reason for the open source cluster version. Only open source products can be rolled into stronger product power. For example, the technical feature of cluster will naturally attract developers (and the cluster itself is The product of our community collaboration) will attract more users and contributors to use feedback and iterate together. The community drives and then positively promotes open source projects and satisfies user functional experience.
As for open source commercialization, the premise of open source commercialization is to have a really good, popular, and widely used open source product, and then do commercialization on this basis to make money.
### Install quickly via docker
1. Just one command to get started:
```docker run -d -p 1157:1157 -p 1158:1158 --name hertzbeat apache/hertzbeat```
```or use quay.io (if dockerhub network connect timeout)```
```docker run -d -p 1157:1157 -p 1158:1158 --name hertzbeat quay.io/tancloud/hertzbeat```
2. Access `http://localhost:1157` to start, default account: `admin/hertzbeat`
3. Deploy collector clusters
```shell
docker run -d -e IDENTITY=custom-collector-name -e MANAGER_IP=127.0.0.1 -e MANAGER_PORT=1158 --name hertzbeat-collector apache/hertzbeat-collector
```
* `-e IDENTITY=custom-collector-name` : set the collector unique identity name.
* `-e MANAGER_IP=127.0.0.1` : set the main hertzbeat server ip.
* `-e MANAGER_PORT=1158` : set the main hertzbeat server port, default 1158.
Detailed config refer to [Install HertzBeat via Docker](https://hertzbeat.apache.org/docs/start/docker-deploy)
---
### What's Changed
> Welcome to explore more new version updates, thanks to the hard work of the community partners, love 💗!
* [doc] add v1.3.2 publish doc by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1075](https://github.com/apache/hertzbeat/pull/1075)
* remove elasticsearch unused param index by @Ceilzcx in [https://github.com/apache/hertzbeat/pull/1080](https://github.com/apache/hertzbeat/pull/1080)
* feature support monitoring apache airflow by @luoxuanzao in [https://github.com/apache/hertzbeat/pull/1081](https://github.com/apache/hertzbeat/pull/1081)
* add luoxuanzao as a contributor for code by @allcontributors in [https://github.com/apache/hertzbeat/pull/1083](https://github.com/apache/hertzbeat/pull/1083)
* [collector] bugfix sshd cannot use private key to connect by @gcdd1993 in [https://github.com/apache/hertzbeat/pull/1084](https://github.com/apache/hertzbeat/pull/1084)
* bugfix update dashboard alerts cards height not consist by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1087](https://github.com/apache/hertzbeat/pull/1087)
* Feature#serverchan by @zqr10159 in [https://github.com/apache/hertzbeat/pull/1092](https://github.com/apache/hertzbeat/pull/1092)
* bugfix dm database monitoring connect error by @lisongning in [https://github.com/apache/hertzbeat/pull/1094](https://github.com/apache/hertzbeat/pull/1094)
* add lisongning as a contributor for code by @allcontributors in [https://github.com/apache/hertzbeat/pull/1096](https://github.com/apache/hertzbeat/pull/1096)
* update alert rule operator display "\<=" to "\>=" by @Ceilzcx in [https://github.com/apache/hertzbeat/pull/1097](https://github.com/apache/hertzbeat/pull/1097)
* [doc] add custom monitoring relate document by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1098](https://github.com/apache/hertzbeat/pull/1098)
* add YutingNie as a contributor for code by @allcontributors in [https://github.com/apache/hertzbeat/pull/1103](https://github.com/apache/hertzbeat/pull/1103)
* Remove unreachable status by @YutingNie in [https://github.com/apache/hertzbeat/pull/1102](https://github.com/apache/hertzbeat/pull/1102)
* 139 auto update alert status by @l646505418 in [https://github.com/apache/hertzbeat/pull/1104](https://github.com/apache/hertzbeat/pull/1104)
* feat: aviator fn for str contains, exists & matches by @mikezzb in [https://github.com/apache/hertzbeat/pull/1106](https://github.com/apache/hertzbeat/pull/1106)
* add mikezzb as a contributor for code by @allcontributors in [https://github.com/apache/hertzbeat/pull/1107](https://github.com/apache/hertzbeat/pull/1107)
* bugfix common alarm do not need monitorId tag existed by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1108](https://github.com/apache/hertzbeat/pull/1108)
* bugfix extern alert do not have labels mapping inner monitor by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1111](https://github.com/apache/hertzbeat/pull/1111)
* feature: support apache spark metrics monitoring by @a-little-fool in [https://github.com/apache/hertzbeat/pull/1114](https://github.com/apache/hertzbeat/pull/1114)
* add a-little-fool as a contributor for code by @allcontributors in [https://github.com/apache/hertzbeat/pull/1116](https://github.com/apache/hertzbeat/pull/1116)
* [Feature]Add third report of TenCloud by @zqr10159 in [https://github.com/apache/hertzbeat/pull/1113](https://github.com/apache/hertzbeat/pull/1113)
* [Feature]Add third report of TenCloud (#1113) by @zqr10159 in [https://github.com/apache/hertzbeat/pull/1119](https://github.com/apache/hertzbeat/pull/1119)
* [manager] fix: can query by tags when tagValue is null by @l646505418 in [https://github.com/apache/hertzbeat/pull/1118](https://github.com/apache/hertzbeat/pull/1118)
* bugfix the notification template environment variable display error by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1120](https://github.com/apache/hertzbeat/pull/1120)
* add littlezhongzer as a contributor for code by @allcontributors in [https://github.com/apache/hertzbeat/pull/1127](https://github.com/apache/hertzbeat/pull/1127)
* feature:monitor brearer token api, ignore letter case to comparison by @littlezhongzer in [https://github.com/apache/hertzbeat/pull/1122](https://github.com/apache/hertzbeat/pull/1122)
* docs: enhance README by @mikezzb in [https://github.com/apache/hertzbeat/pull/1128](https://github.com/apache/hertzbeat/pull/1128)
* Update app-oracle.yml by @ChenXiangxxxxx in [https://github.com/apache/hertzbeat/pull/1129](https://github.com/apache/hertzbeat/pull/1129)
* add ChenXiangxxxxx as a contributor for code by @allcontributors in [https://github.com/apache/hertzbeat/pull/1130](https://github.com/apache/hertzbeat/pull/1130)
* fix alarm silence strategy setting failed by @Ceilzcx in [https://github.com/apache/hertzbeat/pull/1131](https://github.com/apache/hertzbeat/pull/1131)
* support run sql script file in jdbc protocol config by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1117](https://github.com/apache/hertzbeat/pull/1117)
* bugfix return old cache json file when upgrade version by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1137](https://github.com/apache/hertzbeat/pull/1137)
* support ssh protocol config choose if reuse connection by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1136](https://github.com/apache/hertzbeat/pull/1136)
* feat(web): alert threshold UI support matches & contains by @mikezzb in [https://github.com/apache/hertzbeat/pull/1138](https://github.com/apache/hertzbeat/pull/1138)
* support hertzbeat metrics collector cluster by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1101](https://github.com/apache/hertzbeat/pull/1101)
* add collector card in dashboard by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1147](https://github.com/apache/hertzbeat/pull/1147)
* bugfix: linux collect warning: bad syntax, perhaps a bogus '-' by @Mr-zhou315 in [https://github.com/apache/hertzbeat/pull/1151](https://github.com/apache/hertzbeat/pull/1151)
* add Mr-zhou315 as a contributor for code by @allcontributors in [https://github.com/apache/hertzbeat/pull/1157](https://github.com/apache/hertzbeat/pull/1157)
* support config timezone locale language region on web ui by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1154](https://github.com/apache/hertzbeat/pull/1154)
* bugfix monitoring template app name already exists by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1152](https://github.com/apache/hertzbeat/pull/1152)
* bugfix can not startup when error monitoring template yml file by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1153](https://github.com/apache/hertzbeat/pull/1153)
* tags also deleted when the monitor is deleted by @Ceilzcx in [https://github.com/apache/hertzbeat/pull/1159](https://github.com/apache/hertzbeat/pull/1159)
* monitoring param host with http head will not be error reported by @littlezhongzer in [https://github.com/apache/hertzbeat/pull/1155](https://github.com/apache/hertzbeat/pull/1155)
* [script] feature update build.sh and Dockerfile: detect app version a… by @XimfengYao in [https://github.com/apache/hertzbeat/pull/1162](https://github.com/apache/hertzbeat/pull/1162)
* add XimfengYao as a contributor for code by @allcontributors in [https://github.com/apache/hertzbeat/pull/1163](https://github.com/apache/hertzbeat/pull/1163)
* [doc] add collector clusters document by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1161](https://github.com/apache/hertzbeat/pull/1161)
* [hertzbeat] release hertzbeat version v1.4.0 by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1168](https://github.com/apache/hertzbeat/pull/1168)
---
## ⛄ Supported
* Site Monitor, Port Availability, Http Api, Ping Connectivity, Jvm, SiteMap Full Site, Ssl Certificate, SpringBoot, FTP Server
* Mysql, PostgreSQL, MariaDB, Redis, ElasticSearch, SqlServer, Oracle, MongoDB, Damon, OpenGauss, ClickHouse, IoTDB, Redis Cluster
* Linux, Ubuntu, CentOS, Windows
* Tomcat, Nacos, Zookeeper, RabbitMQ, Flink, Kafka, ShenYu, DynamicTp, Jetty, ActiveMQ
* Kubernetes, Docker
* Huawei Switch, HPE Switch, TP-LINK Switch, Cisco Switch
* and more for your custom monitoring.
* Notifications support `Discord` `Slack` `Telegram` `Mail` `Pinning` `WeChat` `FlyBook` `SMS` `Webhook`.
---
**Github: [https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)**
**Gitee: [https://gitee.com/hertzbeat/hertzbeat](https://gitee.com/hertzbeat/hertzbeat)**
+89
View File
@@ -0,0 +1,89 @@
---
title: Welcome to HertzBeat Community Committer!
author: tom
author_title: tom
author_url: https://github.com/tomsun28
tags: [opensource, practice]
keywords: [open source monitoring system, alerting system]
---
! [hertzBeat](/img/blog/new-committer.png)
It's great to welcome a new community `Committer`, unlike other contributors `logicz` comes from an Ops implementation position at Cyberoam rather than a development position, but the quality of the contributions, both in terms of code and documentation etc. is very high 👍.
This is also our `HertzBeat` and other open source projects are not the same place, because the user group is more oriented to the operation and maintenance of the development, in our 139 contributors in the operation and maintenance engineers accounted for more than 30%, which breaks the open source project collaboration and contribution to the object are the inherent cognition of the development position, which shows that whether it is the operation and maintenance engineers and test engineers to contribute to the open source project participation is very enthusiastic!
This shows that both operation and maintenance engineers and test engineers are very enthusiastic about contributing to open source projects, not just as bystanders to open source collaboration.
Participation in open source projects is not exclusive to a certain group of people, but is open to all who want to participate, it may be a document, a script or a piece of code, imagine your participation in the open source project is deployed to thousands of servers to run running, to help others to be used or browse the Review discussion, git record will always be kept, this may be the significance of participation in open source projects.
> Welcome HertzBeat's newest community committer logicz, let's learn more about his open source experience!
## logicz
Nickname: logicz
NameQingraZhao
WorkiFLYTEK technical support & operation and maintenance
HertzBeat Committer
github:zqr10159
## Getting to know HertzBeat
In March 2023, I started to contact HertzBeat, due to the need for a complete monitoring->alerting platform for the project, due to the deployment of the project on the intranet, the company's internal closed-source monitoring platform can not be developed to meet the needs of cross-network segment alerts.
Later in the github looking for open source monitoring platform, found HertzBeat, easy to deploy and full-featured. The most important thing is that the author tom replies to issues and updates very quickly, very much in line with my imagination of the open source community, I'm very happy to be able to participate in open source and can see their own results for everyone to use.
## Ongoing open source contributions and gains
So far, to participate in the HertzBeat open source project has been more than five months, from the first time to submit issues to the first time to submit pr, are the process of growth and progress, full count or a lot of pr, specific as follows:
**contribution**:
* Realize real-time data deposited into Redis custom db
* New historical data deposited into GreptimeDB
* provide monitoring batch import, export to xlsx and yml file function
* Provide Web page custom mail server settings
* Provide Apache doris FE,BE monitoring template.
* Implement Server Chan (Server Chan) alarm push notification.
* Access to third-party alarms (Tencent Cloud) to realize unified push notification of third-party alarms and HertzBeat alarms.
* Fix bugs such as not including collector information when importing and exporting monitoring.
* Several document updates
* * Harvesting **:
* HertzBeat is really an excellent project, in terms of project deployment, scripts and configuration are very standardized, I write a lot of my own projects have to draw on
* The most important thing is to harvest the spirit of open source, we are in a community to communicate together, progress
## Thanks to the community partners
Thanks to the author tom's guidance, he is really very good, patient and diligent, often in the middle of the night to change the bugs, thanks to him step by step to take me to the open source road (and also sent me two open source community T-shirts ^\_^)
## A little advice for newcomers
* open source is not easy, to be able to stick with it, and share their results with everyone is a great sense of achievement
* Adopt good code habits, code can be written poorly, comments must be written clearly, so that other people can read and modify your code.
## What is HertzBeat?
HertzBeat HertzBeat is an open source real-time monitoring and alerting system with powerful customizable monitoring capabilities, high-performance clustering, and no Agent required.
### Features
* HertzBeat is an open source real-time monitoring and alerting system with powerful customizable monitoring capabilities, high performance clustering, and no agent required.
* Easy to use and friendly, no need for `Agent`, full `WEB` page operation, a little mouse click to monitor and alerts, zero hands-on learning costs.
* Configurable protocols such as `Http, Jmx, Ssh, Snmp, Jdbc`, etc. Just configure the monitoring template `YML` in your browser to customize the metrics you want to collect using these protocols. Can you believe that you can instantly adapt to a new type of monitoring such as `K8s` or `Docker` by just configuring it?
* High performance, support for horizontal scaling of multiple collector clusters, support for multi-isolated network monitoring, cloud-side collaboration.
* Free alert threshold rules, `Email` `Discord` `Slack` `Telegram` `WeChat` `Dingtalk` `Flybook` `SMS` `Webhook` `Server Chan` and other methods of timely delivery of messages.
> `HertzBeat`'s powerful customization, multi-type support, high performance, easy to extend, low-coupling, and hopefully can help developers and teams to quickly build their own monitoring system.
Github: [https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)
More users are welcome to participate in `HertzBeat` open source collaboration, no matter a typo or punctuation we are very welcome.
+155
View File
@@ -0,0 +1,155 @@
---
title: HertzBeat v1.4.1 released, better experience!
author: tom
author_title: tom
author_url: https://github.com/tomsun28
tags: [opensource, practice]
keywords: [open source monitoring system, alerting system, Linux monitoring]
---
![HertzBeat](/img/home/0.png)
## What is HertzBeat?
[HertzBeat](https://github.com/apache/hertzbeat) is an open source, real-time monitoring system with custom monitoring, high performance cluster and agentless capabilities.
### Features
* Combines **monitoring, alarm, and notification** features into one platform, and supports monitoring for web service, program, database, cache, os, webserver, middleware, bigdata, cloud-native, network, custom and more.
* Easy to use and agentless, offering full web-based operations for monitoring and alerting with just a few clicks, all at zero learning cost.
* Makes protocols such as `Http, Jmx, Ssh, Snmp, Jdbc, Prometheus` configurable, allowing you to collect any metrics by simply configuring the template `YML` file online. Imagine being able to quickly adapt to a new monitoring type like K8s or Docker simply by configuring online with HertzBeat.
* High performance, supports horizontal expansion of multi-collector clusters, multi-isolated network monitoring and cloud-edge collaboration.
* Provides flexible alarm threshold rules and timely notifications delivered via `Discord` `Slack` `Telegram` `Email` `DingDing` `WeChat` `FeiShu` `Webhook` `SMS`.
> HertzBeat's powerful customization, multi-type support, high performance, easy expansion, and low coupling, aims to help developers and teams quickly build their own monitoring system.
![HertzBeat](/img/docs/hertzbeat-arch.png)
**Github: [https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)**
**Gitee: [https://gitee.com/hertzbeat/hertzbeat](https://gitee.com/hertzbeat/hertzbeat)**
### HertzBeat's 1.4.1 version is coming
* new login page
![HertzBeat](/img/blog/blog-new-login-page.png)
![HertzBeat](/img/blog/blog-new-dashboard.png)
* collector manage
![HertzBeat](/img/blog/blog-collector-manage.png)
![HertzBeat](/img/blog/blog-collector-manage-form.png)
* new help moudle
![HertzBeat](/img/blog/blog-new-help-moudle.png)
* monitor metrics dashboard name i18n
![HertzBeat](/img/blog/blog-name-i18n.png)
* refactor collector dispatcher and more
### Install quickly via docker
1. Just one command to get started:
```docker run -d -p 1157:1157 -p 1158:1158 --name hertzbeat apache/hertzbeat```
```or use quay.io (if dockerhub network connect timeout)```
```docker run -d -p 1157:1157 -p 1158:1158 --name hertzbeat quay.io/tancloud/hertzbeat```
2. Access `http://localhost:1157` to start, default account: `admin/hertzbeat`
3. Deploy collector clusters
```shell
docker run -d -e IDENTITY=custom-collector-name -e MANAGER_HOST=127.0.0.1 -e MANAGER_PORT=1158 --name hertzbeat-collector apache/hertzbeat-collector
```
* `-e IDENTITY=custom-collector-name` : set the collector unique identity name.
* `-e MANAGER_HOST=127.0.0.1` : set the main hertzbeat server ip.
* `-e MANAGER_PORT=1158` : set the main hertzbeat server port, default 1158.
Detailed config refer to [Install HertzBeat via Docker](https://hertzbeat.apache.org/docs/start/docker-deploy)
---
### What's Changed
> Welcome to explore more new version updates, thanks to the hard work of the community partners, love 💗!
* bugfix npe when get undefined name monitor template yml by @tomsun28 in [#1173](https://github.com/apache/hertzbeat/pull/1173)
* [bug fixed]When importing and exporting monitoring, support export collectors, configure collectors when importing by @zqr10159 in [#1178](https://github.com/apache/hertzbeat/pull/1178)
* support alert threshold rule config system value row count by @tomsun28 in [#1180](https://github.com/apache/hertzbeat/pull/1180)
* Update README.md by @zqr10159 in [#1182](https://github.com/apache/hertzbeat/pull/1182)
* support config alert threshold tags bind by @tomsun28 in [#1181](https://github.com/apache/hertzbeat/pull/1181)
* the back-end of help component has been built by @YutingNie in [#1160](https://github.com/apache/hertzbeat/pull/1160)
* support enable alert threshold auto resolved notice by @tomsun28 in [#1185](https://github.com/apache/hertzbeat/pull/1185)
* Delete tag of the dashboard's homepage on the top four pages by @Ceilzcx in [#1189](https://github.com/apache/hertzbeat/pull/1189)
* replace obsolete `registry.npm.taobao.org` to`registry.npmmirror.com` by @zqr10159 in [#1192](https://github.com/apache/hertzbeat/pull/1192)
* refactor MonitorServiceImpl by @Carpe-Wang in [#1190](https://github.com/apache/hertzbeat/pull/1190)
* config default system timezone and fix monitor status auto recover by @tomsun28 in [#1187](https://github.com/apache/hertzbeat/pull/1187)
* update-doc-doris by @zqr10159 in [#1193](https://github.com/apache/hertzbeat/pull/1193)
* [manager] support tidb database monitoring by @luxx-lq in [#733](https://github.com/apache/hertzbeat/pull/733)
* refactor fix potential npe by @Carpe-Wang in [#1197](https://github.com/apache/hertzbeat/pull/1197)
* [ospp] support ui help massage component by @YutingNie in [#1199](https://github.com/apache/hertzbeat/pull/1199)
* support monitor metrics name i18n by @tomsun28 in [#1198](https://github.com/apache/hertzbeat/pull/1198)
* support google analytics by @tomsun28 in [#1202](https://github.com/apache/hertzbeat/pull/1202)
* refactor code and fix some npe by @Carpe-Wang in [#1201](https://github.com/apache/hertzbeat/pull/1201)
* bugfix fix found 2 dataQueue bean when not config common.queue param by @tomsun28 in [#1205](https://github.com/apache/hertzbeat/pull/1205)
* Help component update by @YutingNie in [#1207](https://github.com/apache/hertzbeat/pull/1207)
* bugfix enterprise wechat push display content is too cumbersome by @l646505418 in [#1149](https://github.com/apache/hertzbeat/pull/1149)
* bugfix WeChatAppAlertNotifyHandlerImpl by @LINGLUOJUN in [#1208](https://github.com/apache/hertzbeat/pull/1208)
* add LINGLUOJUN as a contributor for code by @allcontributors in [#1209](https://github.com/apache/hertzbeat/pull/1209)
* fix jmx jndi inject vulnerability by @luelueking in [#1215](https://github.com/apache/hertzbeat/pull/1215)
* add luelueking as a contributor for code by @allcontributors in [#1217](https://github.com/apache/hertzbeat/pull/1217)
* bugfix monitoring param number limit range by @qyaaaa in [#1216](https://github.com/apache/hertzbeat/pull/1216)
* add qyaaaa as a contributor for code by @allcontributors in [#1218](https://github.com/apache/hertzbeat/pull/1218)
* add app-ping i18n by @qyaaaa in [#1220](https://github.com/apache/hertzbeat/pull/1220)
* some codes opt by @LINGLUOJUN in [#1214](https://github.com/apache/hertzbeat/pull/1214)
* support deploy hertzbeat by kubernetes helm charts by @tomsun28 in [#1221](https://github.com/apache/hertzbeat/pull/1221)
* bugfix threshold setting template variables has repeated parameters by @qyaaaa in [#1223](https://github.com/apache/hertzbeat/pull/1223)
* support display metrics i18n label when threshold setting by @tomsun28 in [#1225](https://github.com/apache/hertzbeat/pull/1225)
* bugfix user role display not correctly on webui by @tomsun28 in [#1227](https://github.com/apache/hertzbeat/pull/1227)
* add hertzbeat about msg card by @tomsun28 in [#1229](https://github.com/apache/hertzbeat/pull/1229)
* add app-api i18n by @novohit in [#1236](https://github.com/apache/hertzbeat/pull/1236)
* add novohit as a contributor for code by @allcontributors in [#1238](https://github.com/apache/hertzbeat/pull/1238)
* [feature]Add `getAlertDefinesByName`. by @zqr10159 in [#1237](https://github.com/apache/hertzbeat/pull/1237)
* thread pool executor support shutdown gracefully by @LINGLUOJUN in [#1240](https://github.com/apache/hertzbeat/pull/1240)
* fix: expression injection RCE by @mikezzb in [#1241](https://github.com/apache/hertzbeat/pull/1241)
* [bugfix]Replace schema `"{key1:value1}"` to `"{\"key1\":\"value1\"}"` by @zqr10159 in [#1245](https://github.com/apache/hertzbeat/pull/1245)
* [Refactor] Use static methods instead of constructors for Message.java by @gcdd1993 in [#1247](https://github.com/apache/hertzbeat/pull/1247)
* bugfix snake yaml decode rce by @tomsun28 in [#1239](https://github.com/apache/hertzbeat/pull/1239)
* bugfix jackson deserialize localDatetime error by @tomsun28 in [#1249](https://github.com/apache/hertzbeat/pull/1249)
* netty as an independent module, add new feature about collector list by @Ceilzcx in [#1244](https://github.com/apache/hertzbeat/pull/1244)
* support show deploy collector script in web by @tomsun28 in [#1251](https://github.com/apache/hertzbeat/pull/1251)
* bugfix mongodb collect extra metrics npe by @tomsun28 in [#1257](https://github.com/apache/hertzbeat/pull/1257)
* bugfix fix collector run cyclic when connect auth failed by @tomsun28 in [#1256](https://github.com/apache/hertzbeat/pull/1256)
* update webapp login ui by @tomsun28 in [#1260](https://github.com/apache/hertzbeat/pull/1260)
* bugfix collector can not auto reconnect when channel idle by @tomsun28 in [#1259](https://github.com/apache/hertzbeat/pull/1259)
* update alarm notice wework app send content ui by @tomsun28 in [#1258](https://github.com/apache/hertzbeat/pull/1258)
* [hertzbeat] release hertzbeat version v1.4.1 by @tomsun28 in [#1261](https://github.com/apache/hertzbeat/pull/1261)
* auto split webhook token when user input hook url by @tomsun28 in [#1262](https://github.com/apache/hertzbeat/pull/1262)
---
## ⛄ Supported
* Site Monitor, Port Availability, Http Api, Ping Connectivity, Jvm, SiteMap Full Site, Ssl Certificate, SpringBoot, FTP Server
* Mysql, PostgreSQL, MariaDB, Redis, ElasticSearch, SqlServer, Oracle, MongoDB, Damon, OpenGauss, ClickHouse, IoTDB, Redis Cluster
* Linux, Ubuntu, CentOS, Windows
* Tomcat, Nacos, Zookeeper, RabbitMQ, Flink, Kafka, ShenYu, DynamicTp, Jetty, ActiveMQ
* Kubernetes, Docker
* Huawei Switch, HPE Switch, TP-LINK Switch, Cisco Switch
* and more for your custom monitoring.
* Notifications support `Discord` `Slack` `Telegram` `Mail` `Pinning` `WeChat` `FlyBook` `SMS` `Webhook` `ServerChan`.
---
**Github: [https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)**
**Gitee: [https://gitee.com/hertzbeat/hertzbeat](https://gitee.com/hertzbeat/hertzbeat)**
+134
View File
@@ -0,0 +1,134 @@
---
title: HertzBeat v1.4.2 released, custom notice template!
author: tom
author_title: tom
author_url: https://github.com/tomsun28
tags: [opensource, practice]
keywords: [open source monitoring system, alerting system, Linux monitoring]
---
## What is HertzBeat?
[HertzBeat](https://github.com/apache/hertzbeat) is an open source, real-time monitoring system with custom monitoring, high performance cluster and agentless capabilities.
### Features
* Combines **monitoring, alarm, and notification** features into one platform, and supports monitoring for web service, program, database, cache, os, webserver, middleware, bigdata, cloud-native, network, custom and more.
* Easy to use and agentless, offering full web-based operations for monitoring and alerting with just a few clicks, all at zero learning cost.
* Makes protocols such as `Http, Jmx, Ssh, Snmp, Jdbc, Prometheus` configurable, allowing you to collect any metrics by simply configuring the template `YML` file online. Imagine being able to quickly adapt to a new monitoring type like K8s or Docker simply by configuring online with HertzBeat.
* High performance, supports horizontal expansion of multi-collector clusters, multi-isolated network monitoring and cloud-edge collaboration.
* Provides flexible alarm threshold rules and timely notifications delivered via `Discord` `Slack` `Telegram` `Email` `DingDing` `WeChat` `FeiShu` `Webhook` `SMS`.
> HertzBeat's powerful customization, multi-type support, high performance, easy expansion, and low coupling, aims to help developers and teams quickly build their own monitoring system.
![HertzBeat](/img/docs/hertzbeat-arch.png)
**Github: [https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)**
**Gitee: [https://gitee.com/hertzbeat/hertzbeat](https://gitee.com/hertzbeat/hertzbeat)**
### HertzBeat's 1.4.2 version release
* support custom notice template
* support push metrics monitoring(beta)
* support using Huawei Cloud OBS to store monitoring templates yml
* support emqx monitoring and udp port monitoring
* more features , fix multiple bugs and so on
### Install quickly via docker
1. Just one command to get started:
```docker run -d -p 1157:1157 -p 1158:1158 --name hertzbeat apache/hertzbeat```
```or use quay.io (if dockerhub network connect timeout)```
```docker run -d -p 1157:1157 -p 1158:1158 --name hertzbeat quay.io/tancloud/hertzbeat```
2. Access `http://localhost:1157` to start, default account: `admin/hertzbeat`
3. Deploy collector clusters
```shell
docker run -d -e IDENTITY=custom-collector-name -e MANAGER_HOST=127.0.0.1 -e MANAGER_PORT=1158 --name hertzbeat-collector apache/hertzbeat-collector
```
* `-e IDENTITY=custom-collector-name` : set the collector unique identity name.
* `-e MANAGER_HOST=127.0.0.1` : set the main hertzbeat server ip.
* `-e MANAGER_PORT=1158` : set the main hertzbeat server port, default 1158.
Detailed config refer to [Install HertzBeat via Docker](https://hertzbeat.apache.org/docs/start/docker-deploy)
---
### What's Changed
> Welcome to explore more new version updates, thanks to the hard work of the community partners, love 💗!
* bugfix counting wrong tasks num of collector by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1265](https://github.com/apache/hertzbeat/pull/1265)
* [ospp] add push style collector by @vinci-897 in [https://github.com/apache/hertzbeat/pull/1222](https://github.com/apache/hertzbeat/pull/1222)
* add 1.4.1 version doc by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1263](https://github.com/apache/hertzbeat/pull/1263)
* support using Huawei Cloud OBS to store custom define yml file by @gcdd1993 in [https://github.com/apache/hertzbeat/pull/1266](https://github.com/apache/hertzbeat/pull/1266)
* [doc] add more contact channel by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1272](https://github.com/apache/hertzbeat/pull/1272)
* bugfix app-tomcat memory_pool unit mb by @rbsrcy in [https://github.com/apache/hertzbeat/pull/1268](https://github.com/apache/hertzbeat/pull/1268)
* add rbsrcy as a contributor for code by @allcontributors in [https://github.com/apache/hertzbeat/pull/1271](https://github.com/apache/hertzbeat/pull/1271)
* [doc] update docker.md by @ruanliang-hualun in [https://github.com/apache/hertzbeat/pull/1270](https://github.com/apache/hertzbeat/pull/1270)
* add ruanliang-hualun as a contributor for doc by @allcontributors in [https://github.com/apache/hertzbeat/pull/1274](https://github.com/apache/hertzbeat/pull/1274)
* bugfix jmx memory_pool unit and time unit error by @rbsrcy in [https://github.com/apache/hertzbeat/pull/1273](https://github.com/apache/hertzbeat/pull/1273)
* bugfix old version monitor alert has no monitor name by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1278](https://github.com/apache/hertzbeat/pull/1278)
* support edit monitor in monitor detail page by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1282](https://github.com/apache/hertzbeat/pull/1282)
* reset alert converge reduce cache when restored alert trigger by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1281](https://github.com/apache/hertzbeat/pull/1281)
* [ospp] add push style collector doc by @vinci-897 in [https://github.com/apache/hertzbeat/pull/1267](https://github.com/apache/hertzbeat/pull/1267)
* bugfix threshold availability automatically carries threshold parameters by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1285](https://github.com/apache/hertzbeat/pull/1285)
* [ospp] support custom notice template by @Eden4701 in [https://github.com/apache/hertzbeat/pull/1233](https://github.com/apache/hertzbeat/pull/1233)
* add Eden4701 as a contributor for code by @allcontributors in [https://github.com/apache/hertzbeat/pull/1287](https://github.com/apache/hertzbeat/pull/1287)
* bugfix AvailableAlertDefineInit - query did not return a unique result by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1288](https://github.com/apache/hertzbeat/pull/1288)
* upgrade to version angular 15 by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1291](https://github.com/apache/hertzbeat/pull/1291)
* support push style for multiple messages by @vinci-897 in [https://github.com/apache/hertzbeat/pull/1292](https://github.com/apache/hertzbeat/pull/1292)
* update hertzbeat upgrade help doc by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1294](https://github.com/apache/hertzbeat/pull/1294)
* feat alert converge, define, silence support search query by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1300](https://github.com/apache/hertzbeat/pull/1300)
* feature:support monitoring udp port availability by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1295](https://github.com/apache/hertzbeat/pull/1295)
* support emqx monitor by @vinci-897 in [https://github.com/apache/hertzbeat/pull/1302](https://github.com/apache/hertzbeat/pull/1302)
* add an explicit tag filter by @vinci-897 in [https://github.com/apache/hertzbeat/pull/1303](https://github.com/apache/hertzbeat/pull/1303)
* add hertzbeat icon by @zqr10159 in [https://github.com/apache/hertzbeat/pull/1305](https://github.com/apache/hertzbeat/pull/1305)
* [doc] update kafka help doc by @XiaTian688 in [https://github.com/apache/hertzbeat/pull/1308](https://github.com/apache/hertzbeat/pull/1308)
* add XiaTian688 as a contributor for doc by @allcontributors in [https://github.com/apache/hertzbeat/pull/1309](https://github.com/apache/hertzbeat/pull/1309)
* support webhook custom template by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1306](https://github.com/apache/hertzbeat/pull/1306)
* set ssh param connect reused default false by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1310](https://github.com/apache/hertzbeat/pull/1310)
* upgrade greptimedb to v0.4 by @liyin in [https://github.com/apache/hertzbeat/pull/1311](https://github.com/apache/hertzbeat/pull/1311)
* add liyin as a contributor for code by @allcontributors in [https://github.com/apache/hertzbeat/pull/1313](https://github.com/apache/hertzbeat/pull/1313)
* add some emqx monitoring metrics by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1312](https://github.com/apache/hertzbeat/pull/1312)
* feature: app-mysql.yml by @a-little-fool in [https://github.com/apache/hertzbeat/pull/1316](https://github.com/apache/hertzbeat/pull/1316)
* modify default IoTDB version config to V_1_0 by @Ceilzcx in [https://github.com/apache/hertzbeat/pull/1315](https://github.com/apache/hertzbeat/pull/1315)
* bugfix timestamp is null by @qyaaaa in [https://github.com/apache/hertzbeat/pull/1246](https://github.com/apache/hertzbeat/pull/1246)
* [hertzbeat] release hertzbeat version v1.4.2 by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1317](https://github.com/apache/hertzbeat/pull/1317)
* bugfix alarm time span match in silence and notice by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1318](https://github.com/apache/hertzbeat/pull/1318)
* update available alert threshold trigger times default 2 by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1324](https://github.com/apache/hertzbeat/pull/1324)
* bugfix rabbitmq contains duplicated metric by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1322](https://github.com/apache/hertzbeat/pull/1322)
* [alerter] optimize the encoding of how to add Extern Alarm Manage API(#1320) by @SurryChen in [https://github.com/apache/hertzbeat/pull/1325](https://github.com/apache/hertzbeat/pull/1325)
* bugfix webhook post body error and alarm recover exception by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1327](https://github.com/apache/hertzbeat/pull/1327)
* build hertzbeat package with jdk runtime by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1328](https://github.com/apache/hertzbeat/pull/1328)
## New Contributors
* @rbsrcy made their first contribution in [https://github.com/apache/hertzbeat/pull/1268](https://github.com/apache/hertzbeat/pull/1268)
* @XiaTian688 made their first contribution in [https://github.com/apache/hertzbeat/pull/1308](https://github.com/apache/hertzbeat/pull/1308)
* @liyin made their first contribution in [https://github.com/apache/hertzbeat/pull/1311](https://github.com/apache/hertzbeat/pull/1311)
---
## ⛄ Supported
* Site Monitor, Port Availability, Http Api, Ping Connectivity, Jvm, SiteMap Full Site, Ssl Certificate, SpringBoot, FTP Server
* Mysql, PostgreSQL, MariaDB, Redis, ElasticSearch, SqlServer, Oracle, MongoDB, Damon, OpenGauss, ClickHouse, IoTDB, Redis Cluster
* Linux, Ubuntu, CentOS, Windows
* Tomcat, Nacos, Zookeeper, RabbitMQ, Flink, Kafka, ShenYu, DynamicTp, Jetty, ActiveMQ
* Kubernetes, Docker
* Huawei Switch, HPE Switch, TP-LINK Switch, Cisco Switch
* and more for your custom monitoring.
* Notifications support `Discord` `Slack` `Telegram` `Mail` `Pinning` `WeChat` `FlyBook` `SMS` `Webhook` `ServerChan`.
---
**Github: [https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)**
**Gitee: [https://gitee.com/hertzbeat/hertzbeat](https://gitee.com/hertzbeat/hertzbeat)**
+148
View File
@@ -0,0 +1,148 @@
---
title: HertzBeat v1.4.3 released, prometheus-compatible!
author: tom
author_title: tom
author_url: https://github.com/tomsun28
tags: [opensource, practice]
keywords: [open source monitoring system, alerting system]
---
## What is HertzBeat?
[HertzBeat](https://github.com/apache/hertzbeat) is an open source, real-time monitoring system with custom monitoring, high performance cluster, prometheus-compatible and agentless capabilities.
### Features
* Combines **monitoring, alarm, and notification** features into one platform, and supports monitoring for web service, program, database, cache, os, webserver, middleware, bigdata, cloud-native, network, custom and more.
* Easy to use and agentless, web-based and with one-click monitoring and alerting, zero learning curve.
* Makes protocols such as `Http, Jmx, Ssh, Snmp, Jdbc, Prometheus` configurable, allowing you to collect any metrics by simply configuring the template `YML` file online. Imagine being able to quickly adapt to a new monitoring type like K8s or Docker simply by configuring online with HertzBeat.
* Compatible with the `Prometheus` ecosystem and more, can monitoring what `Prometheus` can monitoring with few clicks on webui.
* High performance, supports horizontal expansion of multi-collector clusters, multi-isolated network monitoring and cloud-edge collaboration.
* Provides flexible alarm threshold rules and timely notifications delivered via `Discord` `Slack` `Telegram` `Email` `Dingtalk` `WeChat` `FeiShu` `Webhook` `SMS` `ServerChan`.
> HertzBeat's powerful customization, multi-type support, high performance, easy expansion, and low coupling, aims to help developers and teams quickly build their own monitoring system.
![HertzBeat](/img/docs/hertzbeat-arch.png)
**Github: [https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)**
**Gitee: [https://gitee.com/hertzbeat/hertzbeat](https://gitee.com/hertzbeat/hertzbeat)**
### HertzBeat's 1.4.3 Version Release
* enhanced reporting of external general alert API
* support mysql api port website mongodb jvm redis monitoring metrics name i18n
* support auto collect metrics by prometheus task
* support victoriametrics as metrics data storage
* support monitoring spring gateway metrics
* add more windows monitoring metrics
* add e2e testing module, support by api-testing
* more feature, document and bugfix
Compatible with the Prometheus ecosystem, now we can monitor what Prometheus can monitoring with few clicks on webui.
### Install Quickly Via Docker
1. Just one command to get started:
```docker run -d -p 1157:1157 -p 1158:1158 --name hertzbeat apache/hertzbeat```
```or use quay.io (if dockerhub network connect timeout)```
```docker run -d -p 1157:1157 -p 1158:1158 --name hertzbeat quay.io/tancloud/hertzbeat```
2. Access `http://localhost:1157` to start, default account: `admin/hertzbeat`
3. Deploy collector clusters
```shell
docker run -d -e IDENTITY=custom-collector-name -e MANAGER_HOST=127.0.0.1 -e MANAGER_PORT=1158 --name hertzbeat-collector apache/hertzbeat-collector
```
* `-e IDENTITY=custom-collector-name` : set the collector unique identity name.
* `-e MANAGER_HOST=127.0.0.1` : set the main hertzbeat server ip.
* `-e MANAGER_PORT=1158` : set the main hertzbeat server port, default 1158.
Detailed config refer to [Install HertzBeat via Docker](https://hertzbeat.apache.org/docs/start/docker-deploy)
---
### What's Changed
> Welcome to explore more new version updates, thanks to the hard work of the community partners, love 💗!
* update package deploy doc by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1330](https://github.com/apache/hertzbeat/pull/1330)
* bugfix duplicate collect job when update monitor templates by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1332](https://github.com/apache/hertzbeat/pull/1332)
* bugfix number variable in freemarker template display error by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1334](https://github.com/apache/hertzbeat/pull/1334)
* [alerter] Enhanced reporting of external general alert API by @SurryChen in [https://github.com/apache/hertzbeat/pull/1326](https://github.com/apache/hertzbeat/pull/1326)
* [doc] update hertzbeat-mysql-tdengine readme by @jiashu1024 in [https://github.com/apache/hertzbeat/pull/1335](https://github.com/apache/hertzbeat/pull/1335)
* add jiashu1024 as a contributor for doc by @allcontributors in [https://github.com/apache/hertzbeat/pull/1336](https://github.com/apache/hertzbeat/pull/1336)
* app-mysql.yml: Adjust slow query translation by @1036664317 in [https://github.com/apache/hertzbeat/pull/1337](https://github.com/apache/hertzbeat/pull/1337)
* add 1036664317 as a contributor for doc by @allcontributors in [https://github.com/apache/hertzbeat/pull/1338](https://github.com/apache/hertzbeat/pull/1338)
* Bump com.google.guava:guava from 31.0.1-jre to 32.0.0-jre by @dependabot in [https://github.com/apache/hertzbeat/pull/1339](https://github.com/apache/hertzbeat/pull/1339)
* [feature] support auto collect metrics by prometheus task by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1342](https://github.com/apache/hertzbeat/pull/1342)
* [doc] add vinci as new committer by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1341](https://github.com/apache/hertzbeat/pull/1341)
* [feature] add tag word cloud in dashboard by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1345](https://github.com/apache/hertzbeat/pull/1345)
* support custom prometheus endpoint path by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1346](https://github.com/apache/hertzbeat/pull/1346)
* bugfix tdengine query interval history metrics data with instance error by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1348](https://github.com/apache/hertzbeat/pull/1348)
* unlimit Alert.java content field length by @xiaoguolong in [https://github.com/apache/hertzbeat/pull/1351](https://github.com/apache/hertzbeat/pull/1351)
* add xiaoguolong as a contributor for code by @allcontributors in [https://github.com/apache/hertzbeat/pull/1353](https://github.com/apache/hertzbeat/pull/1353)
* update monitor detail table ui layout by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1352](https://github.com/apache/hertzbeat/pull/1352)
* [doc]add star history by @zqr10159 in [https://github.com/apache/hertzbeat/pull/1356](https://github.com/apache/hertzbeat/pull/1356)
* feature: app-mongodb.yml by @a-little-fool in [https://github.com/apache/hertzbeat/pull/1359](https://github.com/apache/hertzbeat/pull/1359)
* alarm threshold support prometheus task metrics by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1354](https://github.com/apache/hertzbeat/pull/1354)
* support victoriametrics as metrics data storage by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1361](https://github.com/apache/hertzbeat/pull/1361)
* Add time type to support query_time of mysql and mariadb by @Clownsw in [https://github.com/apache/hertzbeat/pull/1364](https://github.com/apache/hertzbeat/pull/1364)
* add Clownsw as a contributor for code by @allcontributors in [https://github.com/apache/hertzbeat/pull/1365](https://github.com/apache/hertzbeat/pull/1365)
* Error occurred when I followed running steps to start Front-web by @Calvin979 in [https://github.com/apache/hertzbeat/pull/1366](https://github.com/apache/hertzbeat/pull/1366)
* add Calvin979 as a contributor for doc by @allcontributors in [https://github.com/apache/hertzbeat/pull/1367](https://github.com/apache/hertzbeat/pull/1367)
* enriches the cncf landscape by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1368](https://github.com/apache/hertzbeat/pull/1368)
* Fix flaky test in CollectUtilTest by @bbelide2 in [https://github.com/apache/hertzbeat/pull/1371](https://github.com/apache/hertzbeat/pull/1371)
* add bbelide2 as a contributor for code by @allcontributors in [https://github.com/apache/hertzbeat/pull/1372](https://github.com/apache/hertzbeat/pull/1372)
* Fix flaky test replaceSmilingPlaceholder by @bbelide2 in [https://github.com/apache/hertzbeat/pull/1373](https://github.com/apache/hertzbeat/pull/1373)
* add docker-compose script hertzbeat+mysql+victoria-metrics all in one by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1370](https://github.com/apache/hertzbeat/pull/1370)
* Feature: app-jvm.yml support for international name aliases by @Calvin979 in [https://github.com/apache/hertzbeat/pull/1376](https://github.com/apache/hertzbeat/pull/1376)
* add Calvin979 as a contributor for code by @allcontributors in [https://github.com/apache/hertzbeat/pull/1377](https://github.com/apache/hertzbeat/pull/1377)
* feature: support monitoring spring gateway metrics by @a-little-fool in [https://github.com/apache/hertzbeat/pull/1374](https://github.com/apache/hertzbeat/pull/1374)
* update code comment and doc, bugfix concurrent exception by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1378](https://github.com/apache/hertzbeat/pull/1378)
* update windows define and accept snmp leaf by @jinyaoMa in [https://github.com/apache/hertzbeat/pull/1379](https://github.com/apache/hertzbeat/pull/1379)
* add jinyaoMa as a contributor for code by @allcontributors in [https://github.com/apache/hertzbeat/pull/1380](https://github.com/apache/hertzbeat/pull/1380)
* fix exception when sending email has special chars by @Carpe-Wang in [https://github.com/apache/hertzbeat/pull/1383](https://github.com/apache/hertzbeat/pull/1383)
* test: add e2e testing for some basic APIs by @LinuxSuRen in [https://github.com/apache/hertzbeat/pull/1387](https://github.com/apache/hertzbeat/pull/1387)
* add LinuxSuRen as a contributor for code, and test by @allcontributors in [https://github.com/apache/hertzbeat/pull/1389](https://github.com/apache/hertzbeat/pull/1389)
* bugfix auto generate monitor name error when add monitor by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1384](https://github.com/apache/hertzbeat/pull/1384)
* bugfix CalculateAlarm execAlertExpression NPE by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1388](https://github.com/apache/hertzbeat/pull/1388)
* Feature: app-redis.yml support for international name aliases by @Calvin979 in [https://github.com/apache/hertzbeat/pull/1390](https://github.com/apache/hertzbeat/pull/1390)
* test: add more monitor related e2e testing case by @LinuxSuRen in [https://github.com/apache/hertzbeat/pull/1391](https://github.com/apache/hertzbeat/pull/1391)
* chore: update the pr template about the e2e testing by @LinuxSuRen in [https://github.com/apache/hertzbeat/pull/1392](https://github.com/apache/hertzbeat/pull/1392)
* add help header ui when update or add monitors by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1399](https://github.com/apache/hertzbeat/pull/1399)
* [hertzbeat] release hertzbeat version v1.4.3 by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1400](https://github.com/apache/hertzbeat/pull/1400)
## New Contributors
* @1036664317 made their first contribution in [https://github.com/apache/hertzbeat/pull/1337](https://github.com/apache/hertzbeat/pull/1337)
* @dependabot made their first contribution in [https://github.com/apache/hertzbeat/pull/1339](https://github.com/apache/hertzbeat/pull/1339)
* @xiaoguolong made their first contribution in [https://github.com/apache/hertzbeat/pull/1351](https://github.com/apache/hertzbeat/pull/1351)
* @Clownsw made their first contribution in [https://github.com/apache/hertzbeat/pull/1364](https://github.com/apache/hertzbeat/pull/1364)
* @Calvin979 made their first contribution in [https://github.com/apache/hertzbeat/pull/1366](https://github.com/apache/hertzbeat/pull/1366)
* @bbelide2 made their first contribution in [https://github.com/apache/hertzbeat/pull/1371](https://github.com/apache/hertzbeat/pull/1371)
* @jinyaoMa made their first contribution in [https://github.com/apache/hertzbeat/pull/1379](https://github.com/apache/hertzbeat/pull/1379)
* @LinuxSuRen made their first contribution in [https://github.com/apache/hertzbeat/pull/1387](https://github.com/apache/hertzbeat/pull/1387)
---
## ⛄ Supported
* Site Monitor, Port Availability, Http Api, Ping Connectivity, Jvm, SiteMap Full Site, Ssl Certificate, SpringBoot, FTP Server
* Mysql, PostgreSQL, MariaDB, Redis, ElasticSearch, SqlServer, Oracle, MongoDB, Damon, OpenGauss, ClickHouse, IoTDB, Redis Cluster
* Linux, Ubuntu, CentOS, Windows
* Tomcat, Nacos, Zookeeper, RabbitMQ, Flink, Kafka, ShenYu, DynamicTp, Jetty, ActiveMQ
* Kubernetes, Docker
* Huawei Switch, HPE Switch, TP-LINK Switch, Cisco Switch
* and more for your custom monitoring.
* Notifications support `Discord` `Slack` `Telegram` `Mail` `Pinning` `WeChat` `FlyBook` `SMS` `Webhook` `ServerChan`.
---
**Github: [https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)**
**Gitee: [https://gitee.com/hertzbeat/hertzbeat](https://gitee.com/hertzbeat/hertzbeat)**
+135
View File
@@ -0,0 +1,135 @@
---
title: Welcome to HertzBeat Community Committer!
author: tom
author_title: tom
author_url: https://github.com/tomsun28
tags: [opensource, practice]
keywords: [open source monitoring system, alerting system]
---
! [hertzBeat](/img/blog/new-committer.png)
> Welcome to HertzBeat's three new community committeers, let's learn more about their open source experience!
## New Committer - leo
**Name: Leo**
**Github ID: leo-934**
### Getting to know HertzBeat for the first time
In March 2023, I noticed HertzBeat's project, so I directly sent an email to Tom in the community to ask if I could join, and he replied very quickly. It just so happened that I was in my senior year of college when I had more time, so I decisively picked an issue to resolve and had my first pull request at HertzBeat.
### Start submitting PR
In the following period, I spent some time reading HertzBeat's code, and submitted a few PRs off and on until April, when I learned about the Summer of Open Source event, and it just so happened that HertzBeat was participating as well, so I submitted my application information and was selected. My task is mainly responsible for the implementation of a push collector, in the process of writing the code, I got a lot of community mentor Zheng Chenxin and Tom to help, and finally was able to successfully complete the code, the whole process is still relatively smooth.
### Open source contributions
- Add push module to expose interface for users to push data.
- Implement the collection of push data in the collector module.
- Implement user-defined data display in the front-end.
### Harvest
- Exposed to a great open source community and improved my skills in related areas.
Thanks to Tom and my ospp mentor, Zheng Chenxin, who gave me a lot of help and advice during my exposure to the open source community. Currently I am still in charge of some of the code development in the community, I hope HertzBeat can be better and better in the future!
---
## New Committer - SongXiao
**Name: Zhou Shusheng**
**Junior student at Henan Normal University**
### Getting to know HertzBeat for the first time
In March this year, under the influence of Xiaobao's seniors, I had some concepts about open source projects and laid the foundation for learning open source projects later, but I didn't go further because I only learned some Java basics at that time.
### Start submitting PR
In July this year, after basically completing the study of Java framework development, with the encouragement of Xiaobao, I started to try to pull issues, and submitted my first PR on July 20, during this period, I also consulted with the author of HertzBeat and Dongfeng for some related issues, thank you very much.
### Open source contributions
- Support for Spring Gateway, Apache Spark, Apache Hive and other services metrics collection
- Customize nginx and pop3 protocols to collect metrics for Nginx and POP3 mailbox servers, and add corresponding help files.
### Harvest
- Exposed to better and more complex large-scale projects, improved programming and problem-solving skills.
- Put the theoretical knowledge into practice, gained JUC, microservice related development experience, and valuable project experience.
### Thanks to our community partners
Thanks to the author of HertzBeat, HertzBeat/Sms4j Committer Tiejia Xiaobao, Sms4j Committer Dongfeng, when I encountered problems that I could not solve, I often asked the three brothers to ask for advice, and they are always tired of patiently helping me solve the problem, there are really no words.
Thanks to the other partners in the community, I've gained a lot from communicating and discussing with them, and I've also felt the active open source atmosphere in the community.
### Some advice for newcomers
- When you first get involved in an open source project, start with simple tasks. Gradually familiarize yourself with the code and process of the project, and gradually take on more complex tasks.
- If you encounter problems that you can't solve by yourself, you can ask for help from the community.
---
## New Committer - Dongfeng
**Name: Zhang Yang
**Freshman from Henan Normal University**
### Getting to know hertzbeat for the first time
In June of this year, I started to learn more about the project, I was recommended by a friend to learn about the project, I have been exploring open source projects and communities, and I like the atmosphere of sharing, discussing and improving each other. At the same time, I also tried to implement some monitoring in my previous projects, so I am more interested in this project.
### Start submitting PR
Since July this year, I found hertzbeat's issues and prs are very active, so I went through their issues and prs to find out how to implement monitoring for a certain protocol. Then I found out that there is a task about smtp protocol monitoring, so I discussed with the author on the issue, and then I finished my pr through documentation and code.
### Open source contributions
- Implementation of smtp, ntp, websocket availability monitoring.
- Implement monitoring metrics for memcached and NebulaGraph.
- Add documentation for the implemented monitoring.
### Harvest
- Gained monitoring-related development experience and added a valuable project experience.
- Gained a deeper understanding of network protocols.
- I gained a deeper understanding of network protocols. I gained a preliminary understanding of the contribution process of open source projects.
### Thank you to our community partners
Thanks to the authors of hertzbeat for the documentation and help. Thanks to my friends for providing me with the courage to try to enter the open source project to contribute. Thanks to other community members for their issues and prs, which accelerated my understanding of the project.
### A bit of advice for newcomers
- Issues and pr's are the knock on the door of the project you are getting to know, so be willing to discuss and express your opinion.
- No matter how big or small your contribution is, be willing to try and keep improving yourself.
---
### What is HertzBeat?
[HertzBeat HertzBeat](https://github.com/apache/hertzbeat) is an open source real-time monitoring and alerting system with powerful customizable monitoring capabilities, high performance clustering, Prometheus compatibility, and no Agent required.
#### Features
- Integrate **Monitoring+Alerting+Notification** into one system, support monitoring thresholds and alerting notifications for application services, applications, databases, caches, operating systems, big data, middleware, web servers, cloud-native, networks, customization, etc. in one step.
- Easy to use and friendly, no need for `Agent`, full `WEB` page operation, a little mouse click to monitor alarms, zero start-up learning costs.
- Configurable `Http, Jmx, Ssh, Snmp, Jdbc, Prometheus` protocol specification, just configure the monitoring template `YML` in your browser to customize the metrics you want to collect using these protocols. Do you believe that you can instantly adapt to a new type of monitoring such as `K8s` or `Docker` just by configuring it?
- Compatible with `Prometheus` system ecosystem and more, you can monitor what `Prometheus` can monitor with a single page action.
- High-performance, supports horizontal scaling of multiple collector clusters, multi-isolated network monitoring, and cloud-side collaboration.
- Free alarm threshold rules, `Email` `Discord` `Slack` `Telegram` `Nail` `WeChat` `Flybook` `SMS` `Webhook` `Server sauce` and other methods of timely delivery of messages.
> ``HertzBeat``s powerful customization, multi-type support, high performance, easy to extend, low coupling, hope to help developers and teams quickly build their own monitoring system.
**Github: [https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)**
**Gitee: [https://gitee.com/hertzbeat/hertzbeat](https://gitee.com/hertzbeat/hertzbeat)**
Welcome more partners to participate in HertzBeat's open source collaboration, no matter a typo or punctuation we are very welcome, we learn together to make progress, the goal is to do a world-class open source software.
+162
View File
@@ -0,0 +1,162 @@
---
title: HertzBeat v1.4.4 released now!
author: tom
author_title: tom
author_url: https://github.com/tomsun28
tags: [opensource, practice]
keywords: [open source monitoring system, alerting system]
---
## What is HertzBeat?
[HertzBeat](https://github.com/apache/hertzbeat) is an open source, real-time monitoring system with custom monitoring, high performance cluster, prometheus-compatible and agentless capabilities.
### Features
* Combines **monitoring, alarm, and notification** features into one platform, and supports monitoring for web service, program, database, cache, os, webserver, middleware, bigdata, cloud-native, network, custom and more.
* Easy to use and agentless, web-based and with one-click monitoring and alerting, zero learning curve.
* Makes protocols such as `Http, Jmx, Ssh, Snmp, Jdbc, Prometheus` configurable, allowing you to collect any metrics by simply configuring the template `YML` file online. Imagine being able to quickly adapt to a new monitoring type like K8s or Docker simply by configuring online with HertzBeat.
* Compatible with the `Prometheus` ecosystem and more, can monitoring what `Prometheus` can monitoring with few clicks on webui.
* High performance, supports horizontal expansion of multi-collector clusters, multi-isolated network monitoring and cloud-edge collaboration.
* Provides flexible alarm threshold rules and timely notifications delivered via `Discord` `Slack` `Telegram` `Email` `Dingtalk` `WeChat` `FeiShu` `Webhook` `SMS` `ServerChan`.
> HertzBeat's powerful customization, multi-type support, high performance, easy expansion, and low coupling, aims to help developers and teams quickly build their own monitoring system.
![HertzBeat](/img/docs/hertzbeat-arch.png)
**Github: [https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)**
**Gitee: [https://gitee.com/hertzbeat/hertzbeat](https://gitee.com/hertzbeat/hertzbeat)**
### HertzBeat's 1.4.4 Version Release
* support snmp v3 monitoring protocol @TJxiaobao
* support monitoring NebulaGraph metrics @ZY945
* support monitoring pop3 metrics @a-little-fool
* support monitoring memcached metrics @ZY945
* support monitoring nginx metrics @a-little-fool
* support monitoring hive metrics @a-little-fool
* feature: support for dns monitoring by @Calvin979
* monitoring the availability of websockets through handshake. by @ZY945
* add ntp protocol and support ntp monitoring by @ZY945
* add smtp protocol and support smtp monitoring by @ZY945
* more feature, document and bugfix
### Install Quickly Via Docker
1. Just one command to get started:
```docker run -d -p 1157:1157 -p 1158:1158 --name hertzbeat apache/hertzbeat```
```or use quay.io (if dockerhub network connect timeout)```
```docker run -d -p 1157:1157 -p 1158:1158 --name hertzbeat quay.io/tancloud/hertzbeat```
2. Access `http://localhost:1157` to start, default account: `admin/hertzbeat`
3. Deploy collector clusters
```shell
docker run -d -e IDENTITY=custom-collector-name -e MANAGER_HOST=127.0.0.1 -e MANAGER_PORT=1158 --name hertzbeat-collector apache/hertzbeat-collector
```
* `-e IDENTITY=custom-collector-name` : set the collector unique identity name.
* `-e MANAGER_HOST=127.0.0.1` : set the main hertzbeat server ip.
* `-e MANAGER_PORT=1158` : set the main hertzbeat server port, default 1158.
Detailed config refer to [Install HertzBeat via Docker](https://hertzbeat.apache.org/docs/start/docker-deploy)
---
### What's Changed
> Welcome to explore more new version updates, thanks to the hard work of the community partners, love 💗!
* bugfix metrics tags value store jpa data-storage error by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1403](https://github.com/apache/hertzbeat/pull/1403)
* add smtp protocol and support smtp monitoring by @ZY945 in [https://github.com/apache/hertzbeat/pull/1407](https://github.com/apache/hertzbeat/pull/1407)
* add ZY945 as a contributor for code by @allcontributors in [https://github.com/apache/hertzbeat/pull/1409](https://github.com/apache/hertzbeat/pull/1409)
* support new parse type 'log' in ssh collect protocol by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1410](https://github.com/apache/hertzbeat/pull/1410)
* add ntp protocol and support ntp monitoring by @ZY945 in [https://github.com/apache/hertzbeat/pull/1411](https://github.com/apache/hertzbeat/pull/1411)
* monitoring the availability of websockets through handshake. by @ZY945 in [https://github.com/apache/hertzbeat/pull/1413](https://github.com/apache/hertzbeat/pull/1413)
* [Task-1386] When adding tags in tag management, random colors are given by default. by @prolevel1 in [https://github.com/apache/hertzbeat/pull/1412](https://github.com/apache/hertzbeat/pull/1412)
* add prolevel1 as a contributor for code by @allcontributors in [https://github.com/apache/hertzbeat/pull/1415](https://github.com/apache/hertzbeat/pull/1415)
*
## 1397 feature: support for dns monitoring by @Calvin979 in [https://github.com/apache/hertzbeat/pull/1416](https://github.com/apache/hertzbeat/pull/1416)
* Support monitoring hive metrics by @a-little-fool in [https://github.com/apache/hertzbeat/pull/1417](https://github.com/apache/hertzbeat/pull/1417)
* support legend pageable in history data charts by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1414](https://github.com/apache/hertzbeat/pull/1414)
* update component tip and help tip doc by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1418](https://github.com/apache/hertzbeat/pull/1418)
* feature: support monitoring nginx metrics and add a help doc by @a-little-fool in [https://github.com/apache/hertzbeat/pull/1420](https://github.com/apache/hertzbeat/pull/1420)
* update parser to parse from prometheus txt metrics data by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1421](https://github.com/apache/hertzbeat/pull/1421)
* support monitoring memcached metrics and add a help doc by @ZY945 in [https://github.com/apache/hertzbeat/pull/1423](https://github.com/apache/hertzbeat/pull/1423)
* support all ssh connect key exchange by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1424](https://github.com/apache/hertzbeat/pull/1424)
* [doc] add code of conduct by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1425](https://github.com/apache/hertzbeat/pull/1425)
* update label structure store in victoria metrics, make it prometheus like by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1426](https://github.com/apache/hertzbeat/pull/1426)
* feature: support monitoring pop3 metrics and add help doc by @a-little-fool in [https://github.com/apache/hertzbeat/pull/1427](https://github.com/apache/hertzbeat/pull/1427)
* Update sidebars.json by @a-little-fool in [https://github.com/apache/hertzbeat/pull/1428](https://github.com/apache/hertzbeat/pull/1428)
* Add zh-cn help doc by @a-little-fool in [https://github.com/apache/hertzbeat/pull/1429](https://github.com/apache/hertzbeat/pull/1429)
* update monitoring state un-manage to unmonitored, update pic by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1430](https://github.com/apache/hertzbeat/pull/1430)
* Add jpa to date type storage by @Clownsw in [https://github.com/apache/hertzbeat/pull/1431](https://github.com/apache/hertzbeat/pull/1431)
* bugfix ^o^ token error, protect metrics api auth by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1434](https://github.com/apache/hertzbeat/pull/1434)
* Add relevant documents for SMTP and NTP by @ZY945 in [https://github.com/apache/hertzbeat/pull/1437](https://github.com/apache/hertzbeat/pull/1437)
* bugfix threshold init error in mysql env by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1435](https://github.com/apache/hertzbeat/pull/1435)
* app-rabbitmq.yml support for international name aliases by @ZY945 in [https://github.com/apache/hertzbeat/pull/1439](https://github.com/apache/hertzbeat/pull/1439)
* fix(*): error create lru-cache-timeout-cleaner thread by @Clownsw in [https://github.com/apache/hertzbeat/pull/1438](https://github.com/apache/hertzbeat/pull/1438)
* app-rabbitmq.yml Modifying Error Fields. by @ZY945 in [https://github.com/apache/hertzbeat/pull/1440](https://github.com/apache/hertzbeat/pull/1440)
* support monitoring NebulaGraph metrics and add help doc by @ZY945 in [https://github.com/apache/hertzbeat/pull/1441](https://github.com/apache/hertzbeat/pull/1441)
* Fix Nginx Collect validateParams function NPE by @Clownsw in [https://github.com/apache/hertzbeat/pull/1442](https://github.com/apache/hertzbeat/pull/1442)
* feature: add metrics i18n for app-springboot3.yml by @liyin in [https://github.com/apache/hertzbeat/pull/1445](https://github.com/apache/hertzbeat/pull/1445)
* feat: add metrics i18n for app-docker.yml by @liyin in [https://github.com/apache/hertzbeat/pull/1446](https://github.com/apache/hertzbeat/pull/1446)
* update docker-compose script and fix version by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1447](https://github.com/apache/hertzbeat/pull/1447)
* bugfix java.lang.IllegalArgumentException: Illegal character in query… by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1443](https://github.com/apache/hertzbeat/pull/1443)
* bugfix delete monitor error after monitor canceled by @ZhangZixuan1994 in [https://github.com/apache/hertzbeat/pull/1451](https://github.com/apache/hertzbeat/pull/1451)
* add ZhangZixuan1994 as a contributor for code by @allcontributors in [https://github.com/apache/hertzbeat/pull/1454](https://github.com/apache/hertzbeat/pull/1454)
* remove sleep, probably busy-waiting by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1456](https://github.com/apache/hertzbeat/pull/1456)
* [doc] add new committer ZY945 by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1453](https://github.com/apache/hertzbeat/pull/1453)
* Update app-zookeeper.yml by @hurenjie1 in [https://github.com/apache/hertzbeat/pull/1458](https://github.com/apache/hertzbeat/pull/1458)
* add hurenjie1 as a contributor for code by @allcontributors in [https://github.com/apache/hertzbeat/pull/1459](https://github.com/apache/hertzbeat/pull/1459)
* update dashboard ui, remove ssh custom SignatureFactories, update app name by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1460](https://github.com/apache/hertzbeat/pull/1460)
* [Task] Monitoring Template Yml Metrics I18n | 监控模板指标国际化任务认领 #1212 by @tslj1024 in [https://github.com/apache/hertzbeat/pull/1461](https://github.com/apache/hertzbeat/pull/1461)
* add tslj1024 as a contributor for code by @allcontributors in [https://github.com/apache/hertzbeat/pull/1462](https://github.com/apache/hertzbeat/pull/1462)
* Add alarm trigger time for alarm restore by @Calvin979 in [https://github.com/apache/hertzbeat/pull/1464](https://github.com/apache/hertzbeat/pull/1464)
* bugfix history range query not work when victoria-metrics store by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1463](https://github.com/apache/hertzbeat/pull/1463)
* bugfix springboot3 translation by @liyin in [https://github.com/apache/hertzbeat/pull/1467](https://github.com/apache/hertzbeat/pull/1467)
* bugfix telegram-notice can not input bot-token by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1465](https://github.com/apache/hertzbeat/pull/1465)
* feat: support hostname target by @ldysdu in [https://github.com/apache/hertzbeat/pull/1455](https://github.com/apache/hertzbeat/pull/1455)
* add ldysdu as a contributor for code by @allcontributors in [https://github.com/apache/hertzbeat/pull/1471](https://github.com/apache/hertzbeat/pull/1471)
* [feature] support snmp v3 monitoring protocol by @TJxiaobao in [https://github.com/apache/hertzbeat/pull/1469](https://github.com/apache/hertzbeat/pull/1469)
* bugfix alarm trigger-times not work when alarm and recovered trigger cyclically by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1468](https://github.com/apache/hertzbeat/pull/1468)
* update switch monitoring metrics i18n by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1472](https://github.com/apache/hertzbeat/pull/1472)
* fixed: snmpv3 contextName bug by @TJxiaobao in [https://github.com/apache/hertzbeat/pull/1473](https://github.com/apache/hertzbeat/pull/1473)
* Fix npt of webhook notify by @Calvin979 in [https://github.com/apache/hertzbeat/pull/1474](https://github.com/apache/hertzbeat/pull/1474)
* [hertzbeat] release hertzbeat version v1.4.4 by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1475](https://github.com/apache/hertzbeat/pull/1475)
* bugfix nginx collect http deadlock error by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1476](https://github.com/apache/hertzbeat/pull/1476)
* alarm calculate ignore metrics collect code - TIMEOUT by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1478](https://github.com/apache/hertzbeat/pull/1478)
## New Contributors
* @ZY945 made their first contribution in [https://github.com/apache/hertzbeat/pull/1407](https://github.com/apache/hertzbeat/pull/1407)
* @prolevel1 made their first contribution in [https://github.com/apache/hertzbeat/pull/1412](https://github.com/apache/hertzbeat/pull/1412)
* @ZhangZixuan1994 made their first contribution in [https://github.com/apache/hertzbeat/pull/1451](https://github.com/apache/hertzbeat/pull/1451)
* @hurenjie1 made their first contribution in [https://github.com/apache/hertzbeat/pull/1458](https://github.com/apache/hertzbeat/pull/1458)
* @tslj1024 made their first contribution in [https://github.com/apache/hertzbeat/pull/1461](https://github.com/apache/hertzbeat/pull/1461)
* @ldysdu made their first contribution in [https://github.com/apache/hertzbeat/pull/1455](https://github.com/apache/hertzbeat/pull/1455)
---
## ⛄ Supported
* Site Monitor, Port Availability, Http Api, Ping Connectivity, Jvm, SiteMap Full Site, Ssl Certificate, SpringBoot, FTP Server
* Mysql, PostgreSQL, MariaDB, Redis, ElasticSearch, SqlServer, Oracle, MongoDB, Damon, OpenGauss, ClickHouse, IoTDB, Redis Cluster
* Linux, Ubuntu, CentOS, Windows
* Tomcat, Nacos, Zookeeper, RabbitMQ, Flink, Kafka, ShenYu, DynamicTp, Jetty, ActiveMQ
* Kubernetes, Docker
* Huawei Switch, HPE Switch, TP-LINK Switch, Cisco Switch
* and more for your custom monitoring.
* Notifications support `Discord` `Slack` `Telegram` `Mail` `Pinning` `WeChat` `FlyBook` `SMS` `Webhook` `ServerChan`.
---
**Github: [https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)**
**Gitee: [https://gitee.com/hertzbeat/hertzbeat](https://gitee.com/hertzbeat/hertzbeat)**
+317
View File
@@ -0,0 +1,317 @@
---
title: The open-source real-time monitoring HertzBeat is donated to the Apache Incubator.
author: tom
author_title: tom
author_url: https://github.com/tomsun28
tags: [opensource, practice]
keywords: [open source monitoring system, alerting system]
---
On April 5, 2024, the open-source real-time monitoring system HertzBeat officially passed the Apache Foundation's voting resolution. According to the Apache Foundation mailing list, HertzBeat received 16 binding votes and 1 non-binding vote, with no abstentions or opposing votes, thereby accepting HertzBeat into the Apache Incubator.
HertzBeat was officially open-sourced in January 2022 in the Dromara open-source community. After more than two years of continuous project maintenance and iteration by community members, along with sustained community growth, HertzBeat now proudly announces its inclusion in the Apache Incubator!
![HertzBeat](/img/blog/apache-incubator-1.png)
![HertzBeat](/img/blog/apache-incubator-2.png)
Joining the Apache Incubator is not the end, but rather a fresh start for the project. After joining the Apache Incubator, HertzBeat will actively adhere to the "openness and collaboration" philosophy of Apache at the community level, continuously building a fair, diverse, and inclusive open-source community. At the product level, we will listen to user feedback, enhance and optimize the user experience, and create connections within the open-source ecosystem.
We warmly welcome everyone to join the HertzBeat community. The community accepts contributions in any form. Let's work together to promote the development of open source. Hopefully, one day, HertzBeat will become a world-class open-source product like Apache Kafka and Apache Tomcat, with our contributed code deployed and running across various industries and corners of the globe.
## What is HertzBeat
[Apache HertzBeat](https://github.com/apache/hertzbeat) is an easy-to-use, open source, real-time observability system with agentless, high performance cluster, prometheus-compatible, offers powerful custom monitoring and status page building capabilities.
### Features
* Combines **monitoring, alarm, and notification** features into one platform, and supports monitoring for web service, program, database, cache, os, webserver, middleware, bigdata, cloud-native, network, custom and more.
* Easy to use and agentless, web-based and with one-click monitoring and alerting, zero learning curve.
* Makes protocols such as `Http, Jmx, Ssh, Snmp, Jdbc, Prometheus` configurable, allowing you to collect any metrics by simply configuring the template `YML` file online. Imagine being able to quickly adapt to a new monitoring type like K8s or Docker simply by configuring online with HertzBeat.
* Compatible with the `Prometheus` ecosystem and more, can monitoring what `Prometheus` can monitoring with few clicks on webui.
* High performance, supports horizontal expansion of multi-collector clusters, multi-isolated network monitoring and cloud-edge collaboration.
* Provides flexible alarm threshold rules and timely notifications delivered via `Discord` `Slack` `Telegram` `Email` `Dingtalk` `WeChat` `FeiShu` `Webhook` `SMS` `ServerChan`.
* Provides powerful status page building capabilities, easily communicate the real-time status of your service to users.
> HertzBeat's powerful customization, multi-type support, high performance, easy expansion, and low coupling, aims to help users quickly build their own monitoring system.
## HertzBeat Current Status
Since its open-source release, the main repository of HertzBeat on GitHub has accumulated over 4.5K stars, while on Gitee it has gathered over 2.4K stars. HertzBeat has also released a total of 20 versions. The cumulative downloads of software installation packages from platforms like DockerHub have exceeded 100K. With contributions from 180 community members, the project and community continue to improve and progress. A heartfelt thank you to every contributor for their hard work and dedication! 💗
## Community Members
> Thank you to these lovely contributors.
<table>
<tbody>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/tomsun28"><img src="https://avatars.githubusercontent.com/u/24788200?v=4?s=100" width="100px;" alt="tomsun28"/><br /><sub><b>tomsun28</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=tomsun28" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=tomsun28" title="Documentation">📖</a> <a href="#design-tomsun28" title="Design">🎨</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/wang1027-wqh"><img src="https://avatars.githubusercontent.com/u/71161318?v=4?s=100" width="100px;" alt="会编程的王学长"/><br /><sub><b>会编程的王学长</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=wang1027-wqh" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=wang1027-wqh" title="Documentation">📖</a> <a href="#design-wang1027-wqh" title="Design">🎨</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://www.maxkey.top/"><img src="https://avatars.githubusercontent.com/u/1563377?v=4?s=100" width="100px;" alt="MaxKey"/><br /><sub><b>MaxKey</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=shimingxy" title="Code">💻</a> <a href="#design-shimingxy" title="Design">🎨</a> <a href="#ideas-shimingxy" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://blog.gcdd.top/"><img src="https://avatars.githubusercontent.com/u/26523525?v=4?s=100" width="100px;" alt="观沧海"/><br /><sub><b>观沧海</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=gcdd1993" title="Code">💻</a> <a href="#design-gcdd1993" title="Design">🎨</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Agcdd1993" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/a25017012"><img src="https://avatars.githubusercontent.com/u/32265356?v=4?s=100" width="100px;" alt="yuye"/><br /><sub><b>yuye</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=a25017012" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=a25017012" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jx10086"><img src="https://avatars.githubusercontent.com/u/5323228?v=4?s=100" width="100px;" alt="jx10086"/><br /><sub><b>jx10086</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=jx10086" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Ajx10086" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/winnerTimer"><img src="https://avatars.githubusercontent.com/u/76024658?v=4?s=100" width="100px;" alt="winnerTimer"/><br /><sub><b>winnerTimer</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=winnerTimer" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3AwinnerTimer" title="Bug reports">🐛</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/goo-kits"><img src="https://avatars.githubusercontent.com/u/13163673?v=4?s=100" width="100px;" alt="goo-kits"/><br /><sub><b>goo-kits</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=goo-kits" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Agoo-kits" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/brave4Time"><img src="https://avatars.githubusercontent.com/u/105094014?v=4?s=100" width="100px;" alt="brave4Time"/><br /><sub><b>brave4Time</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=brave4Time" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Abrave4Time" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/walkerlee-lab"><img src="https://avatars.githubusercontent.com/u/8426753?v=4?s=100" width="100px;" alt="WalkerLee"/><br /><sub><b>WalkerLee</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=walkerlee-lab" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Awalkerlee-lab" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/fullofjoy"><img src="https://avatars.githubusercontent.com/u/30247571?v=4?s=100" width="100px;" alt="jianghang"/><br /><sub><b>jianghang</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=fullofjoy" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Afullofjoy" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ChineseTony"><img src="https://avatars.githubusercontent.com/u/24618786?v=4?s=100" width="100px;" alt="ChineseTony"/><br /><sub><b>ChineseTony</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=ChineseTony" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3AChineseTony" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/wyt199905"><img src="https://avatars.githubusercontent.com/u/85098809?v=4?s=100" width="100px;" alt="wyt199905"/><br /><sub><b>wyt199905</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=wyt199905" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/weifuqing"><img src="https://avatars.githubusercontent.com/u/13931013?v=4?s=100" width="100px;" alt="卫傅庆"/><br /><sub><b>卫傅庆</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=weifuqing" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Aweifuqing" title="Bug reports">🐛</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/zklmcookle"><img src="https://avatars.githubusercontent.com/u/107192352?v=4?s=100" width="100px;" alt="zklmcookle"/><br /><sub><b>zklmcookle</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=zklmcookle" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/DevilX5"><img src="https://avatars.githubusercontent.com/u/13269921?v=4?s=100" width="100px;" alt="DevilX5"/><br /><sub><b>DevilX5</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=DevilX5" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/commits?author=DevilX5" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/djzeng"><img src="https://avatars.githubusercontent.com/u/14074864?v=4?s=100" width="100px;" alt="tea"/><br /><sub><b>tea</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=djzeng" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/yangshihui"><img src="https://avatars.githubusercontent.com/u/28550208?v=4?s=100" width="100px;" alt="yangshihui"/><br /><sub><b>yangshihui</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=yangshihui" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Ayangshihui" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/DreamGirl524"><img src="https://avatars.githubusercontent.com/u/81132838?v=4?s=100" width="100px;" alt="DreamGirl524"/><br /><sub><b>DreamGirl524</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=DreamGirl524" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=DreamGirl524" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/gzwlly"><img src="https://avatars.githubusercontent.com/u/83171907?v=4?s=100" width="100px;" alt="gzwlly"/><br /><sub><b>gzwlly</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=gzwlly" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/cuipiheqiuqiu"><img src="https://avatars.githubusercontent.com/u/76642201?v=4?s=100" width="100px;" alt="cuipiheqiuqiu"/><br /><sub><b>cuipiheqiuqiu</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=cuipiheqiuqiu" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=cuipiheqiuqiu" title="Tests">⚠️</a> <a href="#design-cuipiheqiuqiu" title="Design">🎨</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/oyiyou"><img src="https://avatars.githubusercontent.com/u/39228891?v=4?s=100" width="100px;" alt="lambert"/><br /><sub><b>lambert</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=oyiyou" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="http://mroldx.xyz/"><img src="https://avatars.githubusercontent.com/u/34847828?v=4?s=100" width="100px;" alt="mroldx"/><br /><sub><b>mroldx</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=mroldx" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/woshiniusange"><img src="https://avatars.githubusercontent.com/u/91513022?v=4?s=100" width="100px;" alt="woshiniusange"/><br /><sub><b>woshiniusange</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=woshiniusange" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://vampireachao.github.io/"><img src="https://avatars.githubusercontent.com/u/52746628?v=4?s=100" width="100px;" alt="VampireAchao"/><br /><sub><b>VampireAchao</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=VampireAchao" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Ceilzcx"><img src="https://avatars.githubusercontent.com/u/48920254?v=4?s=100" width="100px;" alt="zcx"/><br /><sub><b>zcx</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Ceilzcx" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3ACeilzcx" title="Bug reports">🐛</a> <a href="#design-Ceilzcx" title="Design">🎨</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/CharlieXCL"><img src="https://avatars.githubusercontent.com/u/91540487?v=4?s=100" width="100px;" alt="CharlieXCL"/><br /><sub><b>CharlieXCL</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=CharlieXCL" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Privauto"><img src="https://avatars.githubusercontent.com/u/36581456?v=4?s=100" width="100px;" alt="Privauto"/><br /><sub><b>Privauto</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Privauto" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=Privauto" title="Documentation">📖</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/emrys-he"><img src="https://avatars.githubusercontent.com/u/5848915?v=4?s=100" width="100px;" alt="emrys"/><br /><sub><b>emrys</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=emrys-he" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SxLiuYu"><img src="https://avatars.githubusercontent.com/u/95198625?v=4?s=100" width="100px;" alt="SxLiuYu"/><br /><sub><b>SxLiuYu</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/issues?q=author%3ASxLiuYu" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://allcontributors.org"><img src="https://avatars.githubusercontent.com/u/46410174?v=4?s=100" width="100px;" alt="All Contributors"/><br /><sub><b>All Contributors</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=all-contributors" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/gxc-myh"><img src="https://avatars.githubusercontent.com/u/85919258?v=4?s=100" width="100px;" alt="铁甲小宝"/><br /><sub><b>铁甲小宝</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=gxc-myh" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=gxc-myh" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/click33"><img src="https://avatars.githubusercontent.com/u/36243476?v=4?s=100" width="100px;" alt="click33"/><br /><sub><b>click33</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=click33" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://jpom.io/"><img src="https://avatars.githubusercontent.com/u/16408873?v=4?s=100" width="100px;" alt="蒋小小"/><br /><sub><b>蒋小小</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=bwcx-jzy" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://www.zhihu.com/people/kevinbauer"><img src="https://avatars.githubusercontent.com/u/28581579?v=4?s=100" width="100px;" alt="Kevin Huang"/><br /><sub><b>Kevin Huang</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=kevinhuangwl" title="Documentation">📖</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/TJxiaobao"><img src="https://avatars.githubusercontent.com/u/85919258?v=4?s=100" width="100px;" alt="铁甲小宝"/><br /><sub><b>铁甲小宝</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/issues?q=author%3ATJxiaobao" title="Bug reports">🐛</a> <a href="https://github.com/apache/hertzbeat/commits?author=TJxiaobao" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=TJxiaobao" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Jack-123-power"><img src="https://avatars.githubusercontent.com/u/84333501?v=4?s=100" width="100px;" alt="Captain Jack"/><br /><sub><b>Captain Jack</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Jack-123-power" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/haibo-duan"><img src="https://avatars.githubusercontent.com/u/7974845?v=4?s=100" width="100px;" alt="haibo.duan"/><br /><sub><b>haibo.duan</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=haibo-duan" title="Tests">⚠️</a> <a href="https://github.com/apache/hertzbeat/commits?author=haibo-duan" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/assassinfym"><img src="https://avatars.githubusercontent.com/u/15188754?v=4?s=100" width="100px;" alt="assassin"/><br /><sub><b>assassin</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/issues?q=author%3Aassassinfym" title="Bug reports">🐛</a> <a href="https://github.com/apache/hertzbeat/commits?author=assassinfym" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/csyshu"><img src="https://avatars.githubusercontent.com/u/46591658?v=4?s=100" width="100px;" alt="Reverse wind"/><br /><sub><b>Reverse wind</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=csyshu" title="Tests">⚠️</a> <a href="https://github.com/apache/hertzbeat/commits?author=csyshu" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/luxx-lq"><img src="https://avatars.githubusercontent.com/u/58515565?v=4?s=100" width="100px;" alt="luxx"/><br /><sub><b>luxx</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=luxx-lq" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://bandism.net/"><img src="https://avatars.githubusercontent.com/u/22633385?v=4?s=100" width="100px;" alt="Ikko Ashimine"/><br /><sub><b>Ikko Ashimine</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=eltociear" title="Documentation">📖</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/zenan08"><img src="https://avatars.githubusercontent.com/u/80514991?v=4?s=100" width="100px;" alt="leizenan"/><br /><sub><b>leizenan</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=zenan08" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/BKing2020"><img src="https://avatars.githubusercontent.com/u/28869121?v=4?s=100" width="100px;" alt="BKing"/><br /><sub><b>BKing</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=BKing2020" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/xingshuaiLi"><img src="https://avatars.githubusercontent.com/u/119487588?v=4?s=100" width="100px;" alt="xingshuaiLi"/><br /><sub><b>xingshuaiLi</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=xingshuaiLi" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/wangke6666"><img src="https://avatars.githubusercontent.com/u/113656595?v=4?s=100" width="100px;" alt="wangke6666"/><br /><sub><b>wangke6666</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=wangke6666" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/LWBobo"><img src="https://avatars.githubusercontent.com/u/50368698?v=4?s=100" width="100px;" alt="刺猬"/><br /><sub><b>刺猬</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/issues?q=author%3ALWBobo" title="Bug reports">🐛</a> <a href="https://github.com/apache/hertzbeat/commits?author=LWBobo" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="http://www.zanglikun.com"><img src="https://avatars.githubusercontent.com/u/61591648?v=4?s=100" width="100px;" alt="Haste"/><br /><sub><b>Haste</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=zanglikun" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SuitSmile"><img src="https://avatars.githubusercontent.com/u/38679717?v=4?s=100" width="100px;" alt="zhongshi.yi"/><br /><sub><b>zhongshi.yi</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=SuitSmile" title="Documentation">📖</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://www.smallq.cn"><img src="https://avatars.githubusercontent.com/u/39754275?v=4?s=100" width="100px;" alt="Qi Zhang"/><br /><sub><b>Qi Zhang</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=zzzhangqi" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/MrAndyMing"><img src="https://avatars.githubusercontent.com/u/49541483?v=4?s=100" width="100px;" alt="MrAndyMing"/><br /><sub><b>MrAndyMing</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=MrAndyMing" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://idongliming.github.io/"><img src="https://avatars.githubusercontent.com/u/31564353?v=4?s=100" width="100px;" alt="idongliming"/><br /><sub><b>idongliming</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=idongliming" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://earthjasonlin.github.io"><img src="https://avatars.githubusercontent.com/u/83632110?v=4?s=100" width="100px;" alt="Zichao Lin"/><br /><sub><b>Zichao Lin</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=earthjasonlin" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=earthjasonlin" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="http://blog.liudonghua.com"><img src="https://avatars.githubusercontent.com/u/2276718?v=4?s=100" width="100px;" alt="liudonghua"/><br /><sub><b>liudonghua</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=liudonghua123" title="Code">💻</a> <a href="#ideas-liudonghua123" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/orangeyts"><img src="https://avatars.githubusercontent.com/u/4250869?v=4?s=100" width="100px;" alt="Jerry"/><br /><sub><b>Jerry</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=orangeyts" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=orangeyts" title="Tests">⚠️</a> <a href="#ideas-orangeyts" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://dynamictp.cn"><img src="https://avatars.githubusercontent.com/u/13051908?v=4?s=100" width="100px;" alt="yanhom"/><br /><sub><b>yanhom</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=yanhom1314" title="Documentation">📖</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://www.jianshu.com/u/a8f822c04f67"><img src="https://avatars.githubusercontent.com/u/18587688?v=4?s=100" width="100px;" alt="fsl"/><br /><sub><b>fsl</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=fengshunli" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/xttttv"><img src="https://avatars.githubusercontent.com/u/116323904?v=4?s=100" width="100px;" alt="xttttv"/><br /><sub><b>xttttv</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=xttttv" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/NavinKumarBarnwal"><img src="https://avatars.githubusercontent.com/u/44504274?v=4?s=100" width="100px;" alt="NavinKumarBarnwal"/><br /><sub><b>NavinKumarBarnwal</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=NavinKumarBarnwal" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/z641205699"><img src="https://avatars.githubusercontent.com/u/45276423?v=4?s=100" width="100px;" alt="Zakkary"/><br /><sub><b>Zakkary</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=z641205699" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/898349230"><img src="https://avatars.githubusercontent.com/u/21972532?v=4?s=100" width="100px;" alt="sunxinbo"/><br /><sub><b>sunxinbo</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=898349230" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=898349230" title="Tests">⚠️</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ldzbook"><img src="https://avatars.githubusercontent.com/u/13903790?v=4?s=100" width="100px;" alt="ldzbook"/><br /><sub><b>ldzbook</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=ldzbook" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Aldzbook" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/SurryChen"><img src="https://avatars.githubusercontent.com/u/91116490?v=4?s=100" width="100px;" alt="余与雨"/><br /><sub><b>余与雨</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=SurryChen" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=SurryChen" title="Tests">⚠️</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/MysticalDream"><img src="https://avatars.githubusercontent.com/u/78899028?v=4?s=100" width="100px;" alt="MysticalDream"/><br /><sub><b>MysticalDream</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=MysticalDream" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=MysticalDream" title="Tests">⚠️</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/zhouyoulin12"><img src="https://avatars.githubusercontent.com/u/17086633?v=4?s=100" width="100px;" alt="zhouyoulin12"/><br /><sub><b>zhouyoulin12</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=zhouyoulin12" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=zhouyoulin12" title="Tests">⚠️</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jerjjj"><img src="https://avatars.githubusercontent.com/u/93431283?v=4?s=100" width="100px;" alt="jerjjj"/><br /><sub><b>jerjjj</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=jerjjj" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://wjl110.xyz/"><img src="https://avatars.githubusercontent.com/u/53851034?v=4?s=100" width="100px;" alt="wjl110"/><br /><sub><b>wjl110</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=wjl110" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ngyhd"><img src="https://avatars.githubusercontent.com/u/29095207?v=4?s=100" width="100px;" alt="Sean"/><br /><sub><b>Sean</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=ngyhd" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Daydreamer-ia"><img src="https://avatars.githubusercontent.com/u/83362909?v=4?s=100" width="100px;" alt="chenyiqin"/><br /><sub><b>chenyiqin</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Daydreamer-ia" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=Daydreamer-ia" title="Tests">⚠️</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/hudongdong129"><img src="https://avatars.githubusercontent.com/u/34374227?v=4?s=100" width="100px;" alt="hudongdong129"/><br /><sub><b>hudongdong129</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=hudongdong129" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=hudongdong129" title="Tests">⚠️</a> <a href="https://github.com/apache/hertzbeat/commits?author=hudongdong129" title="Documentation">📖</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/TherChenYang"><img src="https://avatars.githubusercontent.com/u/124348939?v=4?s=100" width="100px;" alt="TherChenYang"/><br /><sub><b>TherChenYang</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=TherChenYang" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=TherChenYang" title="Tests">⚠️</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/HattoriHenzo"><img src="https://avatars.githubusercontent.com/u/5141285?v=4?s=100" width="100px;" alt="HattoriHenzo"/><br /><sub><b>HattoriHenzo</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=HattoriHenzo" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=HattoriHenzo" title="Tests">⚠️</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ycilry"><img src="https://avatars.githubusercontent.com/u/63967101?v=4?s=100" width="100px;" alt="ycilry"/><br /><sub><b>ycilry</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=ycilry" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/aoshiguchen"><img src="https://avatars.githubusercontent.com/u/10580997?v=4?s=100" width="100px;" alt="aoshiguchen"/><br /><sub><b>aoshiguchen</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=aoshiguchen" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/commits?author=aoshiguchen" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/caibenxiang"><img src="https://avatars.githubusercontent.com/u/4568241?v=4?s=100" width="100px;" alt="蔡本祥"/><br /><sub><b>蔡本祥</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=caibenxiang" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="http://www.fckeverything.cn:4000/"><img src="https://avatars.githubusercontent.com/u/13827124?v=4?s=100" width="100px;" alt="浮游"/><br /><sub><b>浮游</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=lifefloating" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Grass-Life"><img src="https://avatars.githubusercontent.com/u/114381513?v=4?s=100" width="100px;" alt="Grass-Life"/><br /><sub><b>Grass-Life</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Grass-Life" title="Code">💻</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/xiaohe428"><img src="https://avatars.githubusercontent.com/u/99130317?v=4?s=100" width="100px;" alt="xiaohe428"/><br /><sub><b>xiaohe428</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=xiaohe428" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=xiaohe428" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/baiban114"><img src="https://avatars.githubusercontent.com/u/59152619?v=4?s=100" width="100px;" alt="TableRow"/><br /><sub><b>TableRow</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=baiban114" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/commits?author=baiban114" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ByteIDance"><img src="https://avatars.githubusercontent.com/u/100207562?v=4?s=100" width="100px;" alt="ByteIDance"/><br /><sub><b>ByteIDance</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=ByteIDance" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/mangel2002"><img src="https://avatars.githubusercontent.com/u/9348020?v=4?s=100" width="100px;" alt="Jangfe"/><br /><sub><b>Jangfe</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=mangel2002" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/zqr10159"><img src="https://avatars.githubusercontent.com/u/30048352?v=4?s=100" width="100px;" alt="zqr10159"/><br /><sub><b>zqr10159</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=zqr10159" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/commits?author=zqr10159" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/vinci-897"><img src="https://avatars.githubusercontent.com/u/55838224?v=4?s=100" width="100px;" alt="vinci"/><br /><sub><b>vinci</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=vinci-897" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=vinci-897" title="Documentation">📖</a> <a href="#design-vinci-897" title="Design">🎨</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/js110"><img src="https://avatars.githubusercontent.com/u/51191863?v=4?s=100" width="100px;" alt="js110"/><br /><sub><b>js110</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=js110" title="Code">💻</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/JavaLionLi"><img src="https://avatars.githubusercontent.com/u/31852897?v=4?s=100" width="100px;" alt="CrazyLionLi"/><br /><sub><b>CrazyLionLi</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=JavaLionLi" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="http://www.banmajio.com"><img src="https://avatars.githubusercontent.com/u/53471385?v=4?s=100" width="100px;" alt="banmajio"/><br /><sub><b>banmajio</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=banmajio" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://suder.fun"><img src="https://avatars.githubusercontent.com/u/69955165?v=4?s=100" width="100px;" alt="topsuder"/><br /><sub><b>topsuder</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=topsuder" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/richar2022"><img src="https://avatars.githubusercontent.com/u/129016397?v=4?s=100" width="100px;" alt="richar2022"/><br /><sub><b>richar2022</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=richar2022" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/fcb-xiaobo"><img src="https://avatars.githubusercontent.com/u/60566194?v=4?s=100" width="100px;" alt="fcb-xiaobo"/><br /><sub><b>fcb-xiaobo</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=fcb-xiaobo" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/wenkyzhang"><img src="https://avatars.githubusercontent.com/u/13983669?v=4?s=100" width="100px;" alt="wenkyzhang"/><br /><sub><b>wenkyzhang</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=wenkyzhang" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ZangJuxy"><img src="https://avatars.githubusercontent.com/u/71380295?v=4?s=100" width="100px;" alt="ZangJuxy"/><br /><sub><b>ZangJuxy</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=ZangJuxy" title="Documentation">📖</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/l646505418"><img src="https://avatars.githubusercontent.com/u/50475131?v=4?s=100" width="100px;" alt="l646505418"/><br /><sub><b>l646505418</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=l646505418" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="http://www.carpewang.com"><img src="https://avatars.githubusercontent.com/u/78642589?v=4?s=100" width="100px;" alt="Carpe-Wang"/><br /><sub><b>Carpe-Wang</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Carpe-Wang" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/moshu023"><img src="https://avatars.githubusercontent.com/u/48593205?v=4?s=100" width="100px;" alt="莫枢"/><br /><sub><b>莫枢</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=moshu023" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/huangcanda"><img src="https://avatars.githubusercontent.com/u/4470566?v=4?s=100" width="100px;" alt="huangcanda"/><br /><sub><b>huangcanda</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=huangcanda" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://www.zrkizzy.com"><img src="https://avatars.githubusercontent.com/u/85340613?v=4?s=100" width="100px;" alt="世纪末的架构师"/><br /><sub><b>世纪末的架构师</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Architect-Java" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ShuningWan"><img src="https://avatars.githubusercontent.com/u/31086770?v=4?s=100" width="100px;" alt="ShuningWan"/><br /><sub><b>ShuningWan</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=ShuningWan" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/MrYZhou"><img src="https://avatars.githubusercontent.com/u/44339602?v=4?s=100" width="100px;" alt="MrYZhou"/><br /><sub><b>MrYZhou</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=MrYZhou" title="Documentation">📖</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/suncqujsj"><img src="https://avatars.githubusercontent.com/u/8012932?v=4?s=100" width="100px;" alt="suncqujsj"/><br /><sub><b>suncqujsj</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=suncqujsj" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/sunqinbo"><img src="https://avatars.githubusercontent.com/u/1428540?v=4?s=100" width="100px;" alt="sunqinbo"/><br /><sub><b>sunqinbo</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=sunqinbo" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/haoww"><img src="https://avatars.githubusercontent.com/u/32739294?v=4?s=100" width="100px;" alt="haoww"/><br /><sub><b>haoww</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=haoww" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/i-mayuan"><img src="https://avatars.githubusercontent.com/u/101498477?v=4?s=100" width="100px;" alt="i-mayuan"/><br /><sub><b>i-mayuan</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=i-mayuan" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/fengruge"><img src="https://avatars.githubusercontent.com/u/85803831?v=4?s=100" width="100px;" alt="fengruge"/><br /><sub><b>fengruge</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=fengruge" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/aystzh"><img src="https://avatars.githubusercontent.com/u/38125392?v=4?s=100" width="100px;" alt="zhanghuan"/><br /><sub><b>zhanghuan</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=aystzh" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/shenyumin"><img src="https://avatars.githubusercontent.com/u/8438506?v=4?s=100" width="100px;" alt="shenymin"/><br /><sub><b>shenymin</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=shenyumin" title="Code">💻</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/dhruva1995"><img src="https://avatars.githubusercontent.com/u/12976351?v=4?s=100" width="100px;" alt="Dhruva Chandra"/><br /><sub><b>Dhruva Chandra</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=dhruva1995" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/weiwang988"><img src="https://avatars.githubusercontent.com/u/58241726?v=4?s=100" width="100px;" alt="miss_z"/><br /><sub><b>miss_z</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=weiwang988" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/wyt990"><img src="https://avatars.githubusercontent.com/u/86013697?v=4?s=100" width="100px;" alt="wyt990"/><br /><sub><b>wyt990</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=wyt990" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/licocon"><img src="https://avatars.githubusercontent.com/u/36863277?v=4?s=100" width="100px;" alt="licocon"/><br /><sub><b>licocon</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=licocon" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/2406450951"><img src="https://avatars.githubusercontent.com/u/48074721?v=4?s=100" width="100px;" alt="Mi Na"/><br /><sub><b>Mi Na</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=2406450951" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Kylin-Guo"><img src="https://avatars.githubusercontent.com/u/131239856?v=4?s=100" width="100px;" alt="Kylin-Guo"/><br /><sub><b>Kylin-Guo</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Kylin-Guo" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/1797899698"><img src="https://avatars.githubusercontent.com/u/40411650?v=4?s=100" width="100px;" alt="Mr灬Dong先生"/><br /><sub><b>Mr灬Dong先生</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=1797899698" title="Code">💻</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="http://neilblaze.live"><img src="https://avatars.githubusercontent.com/u/48355572?v=4?s=100" width="100px;" alt="Pratyay Banerjee"/><br /><sub><b>Pratyay Banerjee</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Neilblaze" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/commits?author=Neilblaze" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/yujianzhong520"><img src="https://avatars.githubusercontent.com/u/63705063?v=4?s=100" width="100px;" alt="yujianzhong520"/><br /><sub><b>yujianzhong520</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=yujianzhong520" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://sppan24.github.io/"><img src="https://avatars.githubusercontent.com/u/15795173?v=4?s=100" width="100px;" alt="SPPan"/><br /><sub><b>SPPan</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=sppan24" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/1130600015"><img src="https://avatars.githubusercontent.com/u/67859663?v=4?s=100" width="100px;" alt="ZhangJiashu"/><br /><sub><b>ZhangJiashu</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=1130600015" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/QZmp236478"><img src="https://avatars.githubusercontent.com/u/56623162?v=4?s=100" width="100px;" alt="impress"/><br /><sub><b>impress</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=QZmp236478" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jx3775250"><img src="https://avatars.githubusercontent.com/u/40455946?v=4?s=100" width="100px;" alt="凌晨一点半"/><br /><sub><b>凌晨一点半</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=jx3775250" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/eeshaanSA"><img src="https://avatars.githubusercontent.com/u/100678386?v=4?s=100" width="100px;" alt="Eeshaan Sawant"/><br /><sub><b>Eeshaan Sawant</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=eeshaanSA" title="Code">💻</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/nandofromthebando"><img src="https://avatars.githubusercontent.com/u/87321214?v=4?s=100" width="100px;" alt="nandofromthebando"/><br /><sub><b>nandofromthebando</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=nandofromthebando" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/caiboking"><img src="https://avatars.githubusercontent.com/u/6509883?v=4?s=100" width="100px;" alt="caiboking"/><br /><sub><b>caiboking</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=caiboking" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/baixing99"><img src="https://avatars.githubusercontent.com/u/73473087?v=4?s=100" width="100px;" alt="baixing99"/><br /><sub><b>baixing99</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=baixing99" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ifrenzyc"><img src="https://avatars.githubusercontent.com/u/543927?v=4?s=100" width="100px;" alt="Yang Chuang"/><br /><sub><b>Yang Chuang</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=ifrenzyc" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/wlin20"><img src="https://avatars.githubusercontent.com/u/20657577?v=4?s=100" width="100px;" alt="wlin20"/><br /><sub><b>wlin20</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=wlin20" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/guojing1983"><img src="https://avatars.githubusercontent.com/u/60596094?v=4?s=100" width="100px;" alt="guojing1983"/><br /><sub><b>guojing1983</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=guojing1983" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/itxxq"><img src="https://avatars.githubusercontent.com/u/46962357?v=4?s=100" width="100px;" alt="moxi"/><br /><sub><b>moxi</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=itxxq" title="Documentation">📖</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/qq471754603"><img src="https://avatars.githubusercontent.com/u/23146592?v=4?s=100" width="100px;" alt="qq471754603"/><br /><sub><b>qq471754603</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=qq471754603" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/san346596324"><img src="https://avatars.githubusercontent.com/u/30828520?v=4?s=100" width="100px;" alt="渭雨"/><br /><sub><b>渭雨</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=san346596324" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/luoxuanzao"><img src="https://avatars.githubusercontent.com/u/44692579?v=4?s=100" width="100px;" alt="liuxuezhuo"/><br /><sub><b>liuxuezhuo</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=luoxuanzao" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/lisongning"><img src="https://avatars.githubusercontent.com/u/93140178?v=4?s=100" width="100px;" alt="lisongning"/><br /><sub><b>lisongning</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=lisongning" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/YutingNie"><img src="https://avatars.githubusercontent.com/u/104416402?v=4?s=100" width="100px;" alt="YutingNie"/><br /><sub><b>YutingNie</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=YutingNie" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=YutingNie" title="Documentation">📖</a> <a href="#design-YutingNie" title="Design">🎨</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/mikezzb"><img src="https://avatars.githubusercontent.com/u/23418428?v=4?s=100" width="100px;" alt="Mike Zhou"/><br /><sub><b>Mike Zhou</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=mikezzb" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=mikezzb" title="Documentation">📖</a> <a href="#design-mikezzb" title="Design">🎨</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/a-little-fool"><img src="https://avatars.githubusercontent.com/u/105542329?v=4?s=100" width="100px;" alt="小笨蛋"/><br /><sub><b>小笨蛋</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=a-little-fool" title="Code">💻</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/littlezhongzer"><img src="https://avatars.githubusercontent.com/u/33685289?v=4?s=100" width="100px;" alt="littlezhongzer"/><br /><sub><b>littlezhongzer</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=littlezhongzer" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ChenXiangxxxxx"><img src="https://avatars.githubusercontent.com/u/90089594?v=4?s=100" width="100px;" alt="ChenXiangxxxxx"/><br /><sub><b>ChenXiangxxxxx</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=ChenXiangxxxxx" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Mr-zhou315"><img src="https://avatars.githubusercontent.com/u/10276100?v=4?s=100" width="100px;" alt="Mr.zhou"/><br /><sub><b>Mr.zhou</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Mr-zhou315" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/XimfengYao"><img src="https://avatars.githubusercontent.com/u/17541537?v=4?s=100" width="100px;" alt="姚贤丰"/><br /><sub><b>姚贤丰</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=XimfengYao" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/LINGLUOJUN"><img src="https://avatars.githubusercontent.com/u/16778977?v=4?s=100" width="100px;" alt="lingluojun"/><br /><sub><b>lingluojun</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=LINGLUOJUN" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="http://www.luelueking.com"><img src="https://avatars.githubusercontent.com/u/93204032?v=4?s=100" width="100px;" alt="1ue"/><br /><sub><b>1ue</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=luelueking" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="http://www.jimmyqiao.top"><img src="https://avatars.githubusercontent.com/u/67301054?v=4?s=100" width="100px;" alt="qyaaaa"/><br /><sub><b>qyaaaa</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=qyaaaa" title="Code">💻</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://novohit.top"><img src="https://avatars.githubusercontent.com/u/101090395?v=4?s=100" width="100px;" alt="novohit"/><br /><sub><b>novohit</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=novohit" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/rbsrcy"><img src="https://avatars.githubusercontent.com/u/4798540?v=4?s=100" width="100px;" alt="zhuoshangyi"/><br /><sub><b>zhuoshangyi</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=rbsrcy" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ruanliang-hualun"><img src="https://avatars.githubusercontent.com/u/65543716?v=4?s=100" width="100px;" alt="ruanliang"/><br /><sub><b>ruanliang</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=ruanliang-hualun" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/commits?author=ruanliang-hualun" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Eden4701"><img src="https://avatars.githubusercontent.com/u/68422437?v=4?s=100" width="100px;" alt="Eden4701"/><br /><sub><b>Eden4701</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Eden4701" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=Eden4701" title="Documentation">📖</a> <a href="#design-Eden4701" title="Design">🎨</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/XiaTian688"><img src="https://avatars.githubusercontent.com/u/111830921?v=4?s=100" width="100px;" alt="XiaTian688"/><br /><sub><b>XiaTian688</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=XiaTian688" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/liyin"><img src="https://avatars.githubusercontent.com/u/863169?v=4?s=100" width="100px;" alt="liyinjiang"/><br /><sub><b>liyinjiang</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=liyin" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jiashu1024"><img src="https://avatars.githubusercontent.com/u/67859663?v=4?s=100" width="100px;" alt="ZhangJiashu"/><br /><sub><b>ZhangJiashu</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=jiashu1024" title="Documentation">📖</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/1036664317"><img src="https://avatars.githubusercontent.com/u/7696697?v=4?s=100" width="100px;" alt="moghn"/><br /><sub><b>moghn</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=1036664317" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/xiaoguolong"><img src="https://avatars.githubusercontent.com/u/33684988?v=4?s=100" width="100px;" alt="xiaoguolong"/><br /><sub><b>xiaoguolong</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=xiaoguolong" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Clownsw"><img src="https://avatars.githubusercontent.com/u/28394742?v=4?s=100" width="100px;" alt="Smliexx"/><br /><sub><b>Smliexx</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Clownsw" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Calvin979"><img src="https://avatars.githubusercontent.com/u/131688897?v=4?s=100" width="100px;" alt="Naruse"/><br /><sub><b>Naruse</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Calvin979" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/commits?author=Calvin979" title="Code">💻</a> <a href="#design-Calvin979" title="Design">🎨</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/bbelide2"><img src="https://avatars.githubusercontent.com/u/26840796?v=4?s=100" width="100px;" alt="Bala Sukesh"/><br /><sub><b>Bala Sukesh</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=bbelide2" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jinyaoMa"><img src="https://avatars.githubusercontent.com/u/25066570?v=4?s=100" width="100px;" alt="Jinyao Ma"/><br /><sub><b>Jinyao Ma</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=jinyaoMa" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://linuxsuren.github.io/open-source-best-practice/"><img src="https://avatars.githubusercontent.com/u/1450685?v=4?s=100" width="100px;" alt="Rick"/><br /><sub><b>Rick</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=LinuxSuRen" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=LinuxSuRen" title="Tests">⚠️</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ZY945"><img src="https://avatars.githubusercontent.com/u/74083801?v=4?s=100" width="100px;" alt="东风"/><br /><sub><b>东风</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=ZY945" title="Code">💻</a> <a href="#design-ZY945" title="Design">🎨</a> <a href="https://github.com/apache/hertzbeat/commits?author=ZY945" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/prolevel1"><img src="https://avatars.githubusercontent.com/u/51995525?v=4?s=100" width="100px;" alt="sonam singh"/><br /><sub><b>sonam singh</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=prolevel1" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ZhangZixuan1994"><img src="https://avatars.githubusercontent.com/u/20011653?v=4?s=100" width="100px;" alt="ZhangZixuan1994"/><br /><sub><b>ZhangZixuan1994</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=ZhangZixuan1994" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/hurenjie1"><img src="https://avatars.githubusercontent.com/u/40120355?v=4?s=100" width="100px;" alt="SHIG"/><br /><sub><b>SHIG</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=hurenjie1" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://tslj1024.github.io/"><img src="https://avatars.githubusercontent.com/u/155222677?v=4?s=100" width="100px;" alt="泰上老菌"/><br /><sub><b>泰上老菌</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=tslj1024" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ldysdu"><img src="https://avatars.githubusercontent.com/u/15815338?v=4?s=100" width="100px;" alt="ldysdu"/><br /><sub><b>ldysdu</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=ldysdu" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/GEM0816g"><img src="https://avatars.githubusercontent.com/u/85116017?v=4?s=100" width="100px;" alt="梁同学"/><br /><sub><b>梁同学</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=GEM0816g" title="Code">💻</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/avvCode"><img src="https://avatars.githubusercontent.com/u/113538532?v=4?s=100" width="100px;" alt="avv"/><br /><sub><b>avv</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=avvCode" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/yqxxgh"><img src="https://avatars.githubusercontent.com/u/42080876?v=4?s=100" width="100px;" alt="yqxxgh"/><br /><sub><b>yqxxgh</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=yqxxgh" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/CharlieShi46"><img src="https://avatars.githubusercontent.com/u/149798885?v=4?s=100" width="100px;" alt="CharlieShi46"/><br /><sub><b>CharlieShi46</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=CharlieShi46" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Nctllnty"><img src="https://avatars.githubusercontent.com/u/33241818?v=4?s=100" width="100px;" alt="Nctllnty"/><br /><sub><b>Nctllnty</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Nctllnty" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Wang-Yonghao"><img src="https://avatars.githubusercontent.com/u/48146606?v=4?s=100" width="100px;" alt="Wang-Yonghao"/><br /><sub><b>Wang-Yonghao</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Wang-Yonghao" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://www.yuque.com/dudiao/yy"><img src="https://avatars.githubusercontent.com/u/38355949?v=4?s=100" width="100px;" alt="读钓"/><br /><sub><b>读钓</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=dudiao" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/starmilkxin"><img src="https://avatars.githubusercontent.com/u/55646681?v=4?s=100" width="100px;" alt="Xin"/><br /><sub><b>Xin</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=starmilkxin" title="Code">💻</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/handy-git"><img src="https://avatars.githubusercontent.com/u/32837980?v=4?s=100" width="100px;" alt="handy"/><br /><sub><b>handy</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=handy-git" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/LiuTianyou"><img src="https://avatars.githubusercontent.com/u/30208283?v=4?s=100" width="100px;" alt="LiuTianyou"/><br /><sub><b>LiuTianyou</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=LiuTianyou" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/WinterKi1ler"><img src="https://avatars.githubusercontent.com/u/160592092?v=4?s=100" width="100px;" alt="WinterKi1ler"/><br /><sub><b>WinterKi1ler</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=WinterKi1ler" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="http://sharehoo.cn/"><img src="https://avatars.githubusercontent.com/u/45377370?v=4?s=100" width="100px;" alt="miki"/><br /><sub><b>miki</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=miki-hmt" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://codeflex.substack.com/"><img src="https://avatars.githubusercontent.com/u/85513042?v=4?s=100" width="100px;" alt="Keshav Carpenter"/><br /><sub><b>Keshav Carpenter</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=alpha951" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/makechoicenow"><img src="https://avatars.githubusercontent.com/u/9911918?v=4?s=100" width="100px;" alt="makechoicenow"/><br /><sub><b>makechoicenow</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=makechoicenow" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/gjjjj0101"><img src="https://avatars.githubusercontent.com/u/71874373?v=4?s=100" width="100px;" alt="Gao Jian"/><br /><sub><b>Gao Jian</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=gjjjj0101" title="Code">💻</a></td>
</tr>
</tbody>
</table>
## Special Thanks
Thank you to all contributors who have participated in the community.
Special thanks to the Champions and Mentors who have kindly offered guidance to HertzBeat:
**Champion**
* Yonglun Zhang(zhangyonglun at apache dot org)
> Thanks to Champion @Yonglun for leading the project from the proposal drafting stage to discussions and initiating the voting process, providing selfless assistance and guidance throughout.
**Mentors**
* Yu Xiao [xiaoyu at apache dot org]
* Yonglun Zhang [zhangyonglun at apache dot org]
* Justin Mclean [jmclean at apache dot org]
* Francis Chuang [francischuang at apache dot org]
> Thanks to Mentors @XiaoYu, @Yonglun, @Justin, and @Francis for their selfless assistance, providing professional guidance on compliance and process advancement. From the Dromara open-source community to the Apache Incubator, @XiaoYu has always been the guiding light for HertzBeat's open-source journey. We believe that under the guidance of all mentors, the community will grow even healthier in the future.
## Message from the Dromara Community
> From being a star project in the Dromara community to becoming a member of the Apache Incubator, HertzBeat has demonstrated strong vitality and healthy growth momentum. We are proud and excited about every step forward that HertzBeat has taken. Here, we extend our sincerest congratulations to the HertzBeat team and express deep gratitude to all community members who have contributed to the project.
>
> May HertzBeat continue to grow and innovate in its future journey, becoming a shining star in the open-source community. We believe that with the outstanding talent of the team and the extensive support of the community, HertzBeat will achieve even greater achievements, providing high-quality services and experiences to developers and users worldwide. Dromara will continue to fully support and pay attention to the development of HertzBeat, looking forward to it creating more wonderful chapters!
---
**Repo Url**
**[https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)**
Welcome to star us🐶🐶🐶
**Home Url**
**[https://hertzbeat.apache.org/](https://hertzbeat.apache.org/)**
**Email List**
**[dev@hertzbeat.apache.org](mailto:dev@hertzbeat.apache.org)**
@@ -0,0 +1,105 @@
# [Open Source Summer] HertzBeat project introduction
## What is HertzBeat?
HertzBeat is a powerful custom monitoring capabilities, high-performance cluster, compatible with Prometheus, agentless open source real-time monitoring alarm system.
### **Features**
- Set **monitoring + alarm + notification** as a whole, support for application services, applications, database, cache, operating system, big data, middleware, Web server, cloud native, network, custom and other monitoring threshold alarm notification in one step.
- Easy to use and friendly, no `Agent`, full `WEB` page operation, a mouse click can monitor alarms, zero hand learning costs.
- Protocol specifications such as Http, Jmx, Ssh, Snmp, Jdbc, Prometheus, etc. can be configured, and the monitoring template YML can be configured in the browser to use these protocols to customize the desired metrics. Do you believe that you can immediately adapt a new monitoring type such as`K8s` or `Docker` just by configuring it?
- Compatible with Prometheus` ecosystem and more, only page operations can monitor what Prometheus can monitor.
- High-performance, supports horizontal expansion of multiple collector clusters, supports multi-isolated network monitoring, and cloud edge collaboration.
- Free alarm threshold rules, `mail,` `Discord,` `Slack,` `Telegram,` `Dingding,` `wechat,` `Feibook,` `SMS,` `Webhook,` `Server sauce,` and other ways to send messages in a timely manner.
**Github: [https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)**
**Gitee: [https://gitee.com/hertzbeat/hertzbeat](https://gitee.com/hertzbeat/hertzbeat)**
## What is Open Source Summer?
Open Source Summer is a summer open source activity initiated and long-term supported by the "Open Source Software Supply Chain Lighting Program" of the Institute of Software of the Chinese Academy of Sciences, aiming to encourage the development of open source
School students actively participate in the development and maintenance of open source software, cultivate and discover more excellent developers, promote the vigorous development of excellent open source software community, and help open
Source software supply chain construction.
Open Source Summer The Open source community within and outside the United Nations provides project tasks for the development and maintenance of important open source software, open to university students around the world
Selected students will participate in open source contributions, complete development work and contribute to the open source community under the guidance of senior project developers (project mentors)
**Event Rules**
Open Source Summer Website:
[*https://summer-ospp.ac.cn/*](https://summer-ospp.ac.cn/)
Students are free to choose the project, communicate with the community mentor to realize the plan and write the project plan. The selected students will complete the development work as planned under the guidance of community mentors and contribute the results to the community. The community evaluates the student`s completion, and the sponsor distributes the financial aid to the student based on the evaluation results.
## HertzBeat project
### 1、 the realization of monitoring template market store
**Project difficulty: Advanced /Advanced**
**Background:** Because `HertzBeat` is a highly customized monitoring system through yml files, we can configure the relevant yml files to do so
Capture the metrics we want to monitor. Some different users may have different requirements for some middleware data indicators, `HertzBeat` official come with
the yml configuration may not satisfy every user, so our goal is to let users contribute their own yml template to benefit more people.
This can not only make the ecology of `HertzBeat` more perfect, but also make the user experience better!
**Requirements:**
1. Use Java17, springboot3 to write the back-end code, Angular(recommended) or Vue to write the front-end code.
2. Search, download, and share yml template files (no login required).
3. The template page displays the number of downloads, categories, template description, and (optional) template versions.
4. Realize user personal page registration, login (later), upload template.
**Output:**
1. Feature code can be incorporated into the HertzBeat repository as PR.
2. Complete the HertzBeat official template market
3. Update the help documents
**Contact Tutor:** Qingran Zhao [zqr10159@dromara.org](mailto:zqr10159@dromara.org)
### 2、 implementation of Java native ipmi2 communication protocol
**Project difficulty: Advanced /Advanced**
**Background:** `HertzBeat` supports multiple monitoring protocols, such as http, jmx, jdbc, and snmp. By encapsulating these protocols can be implemented against various
middleware monitoring without Agent. In order for HertzBeat to have a wider monitoring area, we intend to be based on the Java language and not rely on third parties
package, the implementation of the native IPMI2 protocol in the query part, and use the protocol to obtain server motherboard information, network card information, power supply information, fan information,
temperature sensor information and clock information.
**Requirements:**
1. Use Java to implement the native IPMI2 protocol (query part) based on the UDP protocol, without relying on any third-party package.
2. Use the implemented IPMI2 protocol to query indicators of the IPMI enabled server, including mainboard information, network adapter information, power supply information, and fan information
alarm, temperature sensor information and clock information.
3. Abstract and standardize the queried indicator information to implement configuration management (optional).
4. Output detailed project documents, including design ideas, implementation details, usage instructions, etc.
**Output:**
- Feature code can be incorporated into the HertzBeat repository as PR.
- Complete the encapsulation of native IPMI2 protocol in Java based on UDP protocol and monitor the corresponding server.
- You can configure YML files to highly customize monitoring indicators (optional).
- Improve help documentation.
**Contact Tutor:** Tiejia Xiaobao [tjxiaobao2024@qq.com](mailto:tjxiaobao2024@qq.com)
## What can you gain by participating in HertzBeat?
Some of you may wonder what can be gained by participating in Open Source Summer?
1. **【Your code is widely reused by the society】Your code may run in the core business logic of tens of thousands of enterprises to help enterprises solve problems.**
2. **【 Win the maximum 12000 bonus 】 The total bonus is divided into advanced 12000 Yuan and basic 8000 Yuan according to the difficulty of the project (Note: the bonus amount is RMB before tax)**
3. **【 Community core staff counseling rapid growth 】 As long as you sign up and are selected, the tutor of each topic will carefully teach you to integrate into the community, and help you complete the design of the topic and the final landing.**
4. **【Recommended Entry/Internship】 Students with excellent performance in this Programming Summer project can be recommended to work in your preferred company.**
5. **【Additional community surprise】 All students participating in this Summer of Programming project have the opportunity to become Apache HertzBeat™ committer and have their own apache email.**
**There are 100% prizes to take oh**, now the only problem is that time is running out, hurry up to sign up! The deadline for registration is June 4, so hurry up and sign up for 2023 Summer of Programming.
@@ -0,0 +1,151 @@
# HertzBeat 1.6.0 Upgrade Guide
**Note: This guide is applicable for upgrading from 1.5.0 to 1.6.0 to version 1.6.0.**
**If you are using an older version, it is recommended to reinstall using the export function, or upgrade to 1.5.0 and then follow this guide to 1.6.0.**
## Binary Installation Package Upgrade
### Upgrade Java Environment
Since version 1.6.0 uses Java 17 and the installation package no longer provides a built-in JDK version, use the new HertzBeat according to the following situations:
- When the default environment variable on your server is Java 17, you do not need to take any action for this step.
- When the default environment variable on your server is not Java 17, such as Java 8 or Java 11, and if there are no other applications on your server that require a lower version of Java, download the appropriate version from [https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html) according to your system, and search the engine for how to set a new environment variable pointing to the new Java 17.
- When the default environment variable on your server is not Java 17, such as Java 8 or Java 11, and if there are other applications on your server that require a lower version of Java, download the appropriate version from [https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html) according to your system, and rename the extracted folder to `java`, then copy it to the HertzBeat extraction directory.
### Upgrade Database
Go to [https://github.com/apache/hertzbeat/tree/master/hertzbeat-startup/src/main/resources/db/migration](https://github.com/apache/hertzbeat/tree/master/hertzbeat-startup/src/main/resources/db/migration), choose the directory of your database and execute the corresponding `V160__update_column.sql` file for the upgrade SQL.
### Upgrade Configuration Files
Due to significant changes in `application.yml` and `sureness.yml`, it is recommended to directly use the new `yml` configuration files and then modify them based on your own needs.
#### `application.yml` generally needs to modify the following parts
Default is:
```yaml
datasource:
driver-class-name: org.h2.Driver
username: sa
password: 123456
url: jdbc:h2:./data/hertzbeat;MODE=MYSQL
hikari:
max-lifetime: 120000
jpa:
show-sql: false
database-platform: org.eclipse.persistence.platform.database.MySQLPlatform
database: h2
properties:
eclipselink:
logging:
level: SEVERE
```
If you change to a MySQL database, here is an example:
```yaml
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: root
url: jdbc:mysql://localhost:3306/hertzbeat?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
hikari:
max-lifetime: 120000
jpa:
show-sql: false
database-platform: org.eclipse.persistence.platform.database.MySQLPlatform
database: mysql
properties:
eclipselink:
logging:
level: SEVERE
```
#### `sureness.yml` modification is optional, usually when you need to change account passwords
```yaml
# account info config
# eg: admin has role [admin,user], password is hertzbeat
# eg: tom has role [user], password is hertzbeat
# eg: lili has role [guest], plain password is lili, salt is 123, salted password is 1A676730B0C7F54654B0E09184448289
account:
- appId: admin
credential: hertzbeat
role: [admin]
- appId: tom
credential: hertzbeat
role: [user]
- appId: guest
credential: hertzbeat
role: [guest]
- appId: lili
# credential = MD5(password + salt)
# plain password: hertzbeat
# attention: digest authentication does not support salted encrypted password accounts
credential: 94C6B34E7A199A9F9D4E1F208093B489
salt: 123
role: [user]
```
### Add the corresponding database drivers
Due to the Apache Foundation's requirements for license compliance, HertzBeat's installation package cannot include dependencies with GPL licenses such as MySQL, Oracle, etc. Users need to add them themselves. Users can download the drivers from the following links and copy them to the `ext-lib` directory of the installation:
- MySQL: [https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.25.zip](https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.25.zip)
- Oracle (If you want to monitor Oracle, these two drivers are required):
- [https://repo1.maven.org/maven2/com/oracle/database/jdbc/ojdbc8/23.4.0.24.05/ojdbc8-23.4.0.24.05.jar](https://repo1.maven.org/maven2/com/oracle/database/jdbc/ojdbc8/23.4.0.24.05/ojdbc8-23.4.0.24.05.jar)
- [https://repo.mavenlibs.com/maven/com/oracle/database/nls/orai18n/21.5.0.0/orai18n-21.5.0.0.jar](https://repo.mavenlibs.com/maven/com/oracle/database/nls/orai18n/21.5.0.0/orai18n-21.5.0.0.jar)
Next, run the start-up script as before to experience the latest HertzBeat 1.6.0!
## Docker Upgrade - Mysql Database
- Stop the HertzBeat container:
```shell
docker stop hertzbeat
```
- Upgrade the database script:
- Go to [https://github.com/apache/hertzbeat/tree/master/hertzbeat-startup/src/main/resources/db/migration](https://github.com/apache/hertzbeat/tree/master/hertzbeat-startup/src/main/resources/db/migration), choose the directory of your database and execute the corresponding `V160__update_column.sql` file in MySQL.
- Upgrade the configuration files:
- As mentioned, due to significant changes in `application.yml` and `sureness.yml`, it is recommended to directly mount and use the new `yml` configuration files, and then modify them based on your own needs.
- Add the corresponding database drivers:
- Due to the Apache Foundation's license compliance requirements, HertzBeat's installation package cannot include MySQL, Oracle, and other GPL-licensed dependencies. Users need to add them themselves by downloading the driver jars from the above links and placing them in the local `ext-lib` directory, then mounting `ext-lib` to the container's `/opt/hertzbeat/ext-lib` directory when starting.
Next, run HertzBeat using Docker as before to experience the latest HertzBeat 1.6.0!
## Docker Installation Upgrade - H2 Built-in Database (Not recommended for production use)
- Stop the HertzBeat container:
```shell
docker stop hertzbeat
```
- Edit the H2 database files:
- Assuming you have mounted the H2 database files in the `data` directory to the local system, or copied the `/opt/hertzbeat/data` directory from the old container manually.
- Download the H2 driver jar from [https://mvnrepository.com/artifact/com.h2database/h2/2.2.220](https://mvnrepository.com/artifact/com.h2database/h2/2.2.220).
- Start the database locally using the H2 driver jar:
```shell
java -jar h2-2.2.220.jar -url jdbc:h2:file:./hertzbeat -user sa -password 123456
```
- Upgrade the configuration files:
- As mentioned, due to significant changes in `application.yml` and `sureness.yml`, it is recommended to directly mount and use the new `yml` configuration files, and then modify them based on your own needs.
- Add the corresponding database drivers:
- As mentioned, due to the Apache Foundation's license compliance requirements, HertzBeat's installation package cannot include MySQL, Oracle, and other GPL-licensed dependencies. Users need to add them themselves by downloading the driver jars from the above links and placing them in the local `ext-lib` directory, then mounting `ext-lib` to the container's `/opt/hertzbeat/ext-lib` directory when starting.
Next, run the Docker to start HertzBeat as before to experience the latest HertzBeat 1.6.0!
## Upgrade via Export and Import
If you do not want to go through the tedious script upgrade method mentioned above, you can directly export and import the monitoring tasks and threshold information from the old environment.
- Deploy a new environment with the latest version.
- Export the monitoring tasks and threshold information from the old environment on the page
+391
View File
@@ -0,0 +1,391 @@
---
title: HertzBeat First Apache version v1.6.0 released now!
author: tom
author_title: tom
author_url: https://github.com/tomsun28
tags: [opensource, practice]
keywords: [open source, monitoring, alerting]
---
**Hi guys, We are excited to announce that Apache HertzBeat™ has released its first Apache version v1.6.0! 🎉.**
Through nearly five months of community development iteration and two months of Apache Incubator incubation process, Apache HertzBeat™ v1.6.0 is finally out.
In this version, we added monitoring for OpenAi, Redfish protocol servers, plugin mechanism, and support for NebulaGraph, Apache Yarn, HDFS, Hbase, Storm, and more functional features.
Due to license compatibility issues, we replaced multiple dependencies at the bottom layer, Hibernate -> EclipseLink, which is also a rare migration pitfall practice in the JPA ecosystem.
At the same time, some bugs were fixed and some functions were optimized, and more complete documents. Welcome everyone to try to use, put forward valuable opinions and suggestions, and promote the development of HertzBeat together.
**Of course, the most important thing is to give the best thanks to the contributors in the community!**
Download Page: [https://hertzbeat.apache.org/docs/download/](https://hertzbeat.apache.org/docs/download/)
Upgrade Guide: [https://hertzbeat.apache.org/blog/2024/06/11/hertzbeat-v1.6.0-update/](https://hertzbeat.apache.org/blog/2024/06/11/hertzbeat-v1.6.0-update/)
## What is HertzBeat?
[Apache HertzBeat](https://github.com/apache/hertzbeat) is an easy-to-use, open source, real-time observability system with agentless, high performance cluster, prometheus-compatible, offers powerful custom monitoring and status page building capabilities.
## Features
* Combines **monitoring, alarm, and notification** features into one platform, and supports monitoring for web service, program, database, cache, os, webserver, middleware, bigdata, cloud-native, network, custom and more.
* Easy to use and agentless, web-based and with one-click monitoring and alerting, zero learning curve.
* Makes protocols such as `Http, Jmx, Ssh, Snmp, Jdbc, Prometheus` configurable, allowing you to collect any metrics by simply configuring the template `YML` file online. Imagine being able to quickly adapt to a new monitoring type like K8s or Docker simply by configuring online with HertzBeat.
* Compatible with the `Prometheus` ecosystem and more, can monitoring what `Prometheus` can monitoring with few clicks on webui.
* High performance, supports horizontal expansion of multi-collector clusters, multi-isolated network monitoring and cloud-edge collaboration.
* Provides flexible alarm threshold rules and timely notifications delivered via `Discord` `Slack` `Telegram` `Email` `Dingtalk` `WeChat` `FeiShu` `Webhook` `SMS` `ServerChan`.
* Provides powerful status page building capabilities, easily communicate the real-time status of your service to users.
> HertzBeat's powerful customization, multi-type support, high performance, easy expansion, and low coupling, aims to help users quickly build their own monitoring system.
![HertzBeat](/img/docs/hertzbeat-arch.png)
**Github: [https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)**
## HertzBeat's 1.6.0 Version Release
## Highlights
* HertzBeat is donated to the Apache Incubator.
* migrate repo, clean up code, license, add more help doc and more
* add dependency license doc
* [feature]HertzBeat custom plugin. by @zqr10159 in #1973
* [feature] add apache hugegraph monitor by @zhangshenghang in #1972
* [improve]\[HIP\] HIP-01: Implement refactoring AbstractCollect by @crossoverJie in #1966
* [feature] Support monitoring of OpenAI accounts by @zuobiao-zhou in #1947
* [feature] add apache yarn monitor by @zhangshenghang in #1937
* [featrue]add apache hdfs monitor by @zhangshenghang in #1920
* [feature] support use ngql query metrics from nebulaGraph by @LiuTianyou in #1917
* [feature] support random jwt secret when not custom by @tomsun28 in #1897
* feat Support Time Type to Tengine Data Storage by @Clownsw in #1890
* [feature] support the VictoriaMetrics cluster by @xuziyang in #1880
* [feature] support flyway database migration by @tomsun28 in #1875
* [feature] Support Redfish protocol to monitoring server by @gjjjj0101 in #1867
* [feature] add influxdb metrics monitoring by @TJxiaobao in #1730
* [improve] use apache jexl replace of aviator by @tomsun28 in #1859
* [feature] Add Linux process monitoring by @zhangshenghang in #1857
* [feature] Add Apache Hbase RegionServer monitoring by @zhangshenghang in #1833
* [improve] use eclipselink orm replace of hibernate orm by @tomsun28 in #1801
* [feature]Add monitoring for Hbase Master by @zhangshenghang in #1820
* [feature] Improve the import checkstyle by @crossoverJie in #1802
* [Improve]When multiple lines are returned, each alarm is triggered instead of only the first alarm by @15613060203 in #1797
* [improve]Add external lib folder to store mysql and oracle driver. by @zqr10159 in #1783
* [feature:update-checkstyle] Limit the java file header by @YxYL6125 in #1799
* monitor center add search type modal by @tomsun28 in #1699
* mongodb monitoring support custom connection timeout param by @ZY945 in #1697
* System config theme by @TJxiaobao in #1636
* [feature] add storm monitor by @starmilkxin in #1673
* add a online prometheus parser and a prometheus-like push style. by @vinci-897 in #1644
* and more bugfix, doc, features power by our contributors, thanks to them.
## What's Changed
* bugfix collector can not startup alone by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1633](https://github.com/apache/hertzbeat/pull/1633)
* translate some hertzbeat blog by @TJxiaobao in [https://github.com/apache/hertzbeat/pull/1635](https://github.com/apache/hertzbeat/pull/1635)
* Check class description by @ZY945 in [https://github.com/apache/hertzbeat/pull/1638](https://github.com/apache/hertzbeat/pull/1638)
* translate class description to english by @TJxiaobao in [https://github.com/apache/hertzbeat/pull/1641](https://github.com/apache/hertzbeat/pull/1641)
* support monitor metrics name i18n: ClickHouse by @ZY945 in [https://github.com/apache/hertzbeat/pull/1642](https://github.com/apache/hertzbeat/pull/1642)
* translate blog 20220601 to English by @vinci-897 in [https://github.com/apache/hertzbeat/pull/1646](https://github.com/apache/hertzbeat/pull/1646)
* add a online prometheus parser and a prometheus-like push style. by @vinci-897 in [https://github.com/apache/hertzbeat/pull/1644](https://github.com/apache/hertzbeat/pull/1644)
* translate blog 20220320 to English by @vinci-897 in [https://github.com/apache/hertzbeat/pull/1647](https://github.com/apache/hertzbeat/pull/1647)
* support monitor metrics name i18n: DynamicTp by @ZY945 in [https://github.com/apache/hertzbeat/pull/1649](https://github.com/apache/hertzbeat/pull/1649)
* translate blog 20220228 to English by @vinci-897 in [https://github.com/apache/hertzbeat/pull/1648](https://github.com/apache/hertzbeat/pull/1648)
* translate blog 20220310 to English by @vinci-897 in [https://github.com/apache/hertzbeat/pull/1651](https://github.com/apache/hertzbeat/pull/1651)
* translate blog 20220904 to English by @vinci-897 in [https://github.com/apache/hertzbeat/pull/1652](https://github.com/apache/hertzbeat/pull/1652)
* support monitor metrics name i18n: Airflow by @ZY945 in [https://github.com/apache/hertzbeat/pull/1654](https://github.com/apache/hertzbeat/pull/1654)
* support monitor metrics name i18n: IoTDB by @ZY945 in [https://github.com/apache/hertzbeat/pull/1659](https://github.com/apache/hertzbeat/pull/1659)
* Translate 2022-02-11-hertzbeat document by @wang1027-wqh in [https://github.com/apache/hertzbeat/pull/1660](https://github.com/apache/hertzbeat/pull/1660)
* bugfix The annotation @Transactional specifies rollbackFor. by @handy-git in [https://github.com/apache/hertzbeat/pull/1643](https://github.com/apache/hertzbeat/pull/1643)
* add handy-git as a contributor for code by @allcontributors in [https://github.com/apache/hertzbeat/pull/1661](https://github.com/apache/hertzbeat/pull/1661)
* feature:Translate 2022-02-17-hertzbeat Document by @wang1027-wqh in [https://github.com/apache/hertzbeat/pull/1662](https://github.com/apache/hertzbeat/pull/1662)
* support monitor metrics name i18n: rocketmq by @ZY945 in [https://github.com/apache/hertzbeat/pull/1663](https://github.com/apache/hertzbeat/pull/1663)
* [doc] update relate doc and readme by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1667](https://github.com/apache/hertzbeat/pull/1667)
* bugfix monitoring mongodb not work in springboot3 by @ZY945 in [https://github.com/apache/hertzbeat/pull/1668](https://github.com/apache/hertzbeat/pull/1668)
* [feature] add storm monitor by @starmilkxin in [https://github.com/apache/hertzbeat/pull/1673](https://github.com/apache/hertzbeat/pull/1673)
* [bugfix] fixed the issue in http_sd where services were incorrectly reported as available when they were actually unavailable by @starmilkxin in [https://github.com/apache/hertzbeat/pull/1678](https://github.com/apache/hertzbeat/pull/1678)
* remove mysql-oracle dependency jar from release package lib by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1680](https://github.com/apache/hertzbeat/pull/1680)
* System config theme by @TJxiaobao in [https://github.com/apache/hertzbeat/pull/1636](https://github.com/apache/hertzbeat/pull/1636)
* update webapp menu layout and doc by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1682](https://github.com/apache/hertzbeat/pull/1682)
* bugfix can not find mysql dependency when startup by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1686](https://github.com/apache/hertzbeat/pull/1686)
* support config common aes secret by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1683](https://github.com/apache/hertzbeat/pull/1683)
* [bugfix]fix the issue of add redis cluster node test error report(#1601) by @LiuTianyou in [https://github.com/apache/hertzbeat/pull/1684](https://github.com/apache/hertzbeat/pull/1684)
* add LiuTianyou as a contributor for code by @allcontributors in [https://github.com/apache/hertzbeat/pull/1687](https://github.com/apache/hertzbeat/pull/1687)
* mongodb monitoring support custom connection timeout param by @ZY945 in [https://github.com/apache/hertzbeat/pull/1697](https://github.com/apache/hertzbeat/pull/1697)
* bugfix old data decode error when use new common-secret by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1696](https://github.com/apache/hertzbeat/pull/1696)
* [bugfix] fix bug where reopening pop-up window still retained previously edited data after closing. by @starmilkxin in [https://github.com/apache/hertzbeat/pull/1698](https://github.com/apache/hertzbeat/pull/1698)
* monitor center add search type modal by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1699](https://github.com/apache/hertzbeat/pull/1699)
* fix status page logo overflow by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1700](https://github.com/apache/hertzbeat/pull/1700)
* bugfix npe monitor jobid may be null by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1701](https://github.com/apache/hertzbeat/pull/1701)
* support custom main menus in monitor template by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1703](https://github.com/apache/hertzbeat/pull/1703)
* update home website doc by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1712](https://github.com/apache/hertzbeat/pull/1712)
* [Improve] change package group to org Apache HertzBeat™ by @vinci-897 in [https://github.com/apache/hertzbeat/pull/1724](https://github.com/apache/hertzbeat/pull/1724)
* [improve] initial license clean up by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1725](https://github.com/apache/hertzbeat/pull/1725)
* update manager and collector logback config(#1704) by @handy-git in [https://github.com/apache/hertzbeat/pull/1723](https://github.com/apache/hertzbeat/pull/1723)
* fix(sec): upgrade com.h2database:h2 to by @WinterKi1ler in [https://github.com/apache/hertzbeat/pull/1718](https://github.com/apache/hertzbeat/pull/1718)
* add WinterKi1ler as a contributor for code by @allcontributors in [https://github.com/apache/hertzbeat/pull/1736](https://github.com/apache/hertzbeat/pull/1736)
* update asf branch protected check by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1738](https://github.com/apache/hertzbeat/pull/1738)
* [doc]Update star chart by @zqr10159 in [https://github.com/apache/hertzbeat/pull/1737](https://github.com/apache/hertzbeat/pull/1737)
* [fixed] fixed click collector online offline button error by @miki-hmt in [https://github.com/apache/hertzbeat/pull/1734](https://github.com/apache/hertzbeat/pull/1734)
* [improve] initial doc clean up by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1741](https://github.com/apache/hertzbeat/pull/1741)
* [Improvement]Support multiple receivers. by @zqr10159 in [https://github.com/apache/hertzbeat/pull/1731](https://github.com/apache/hertzbeat/pull/1731)
* [improvement]Add lisence. by @zqr10159 in [https://github.com/apache/hertzbeat/pull/1746](https://github.com/apache/hertzbeat/pull/1746)
* Backend LICENSE Initialize by @wang1027-wqh in [https://github.com/apache/hertzbeat/pull/1744](https://github.com/apache/hertzbeat/pull/1744)
* Back-end dependency upgrade by @TJxiaobao in [https://github.com/apache/hertzbeat/pull/1743](https://github.com/apache/hertzbeat/pull/1743)
* [Improve] run hertzbeat in docker compose support dependen service condition by @gjjjj0101 in [https://github.com/apache/hertzbeat/pull/1748](https://github.com/apache/hertzbeat/pull/1748)
* [bugfix] fix statuspage index exception by @makechoicenow in [https://github.com/apache/hertzbeat/pull/1747](https://github.com/apache/hertzbeat/pull/1747)
* remove unlicensed dependency 'wolfy87 eventemitter' by @alpha951 in [https://github.com/apache/hertzbeat/pull/1745](https://github.com/apache/hertzbeat/pull/1745)
* [improve] auto label when pr, update asf config by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1749](https://github.com/apache/hertzbeat/pull/1749)
* [improve] update asf config set required status checks context by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1751](https://github.com/apache/hertzbeat/pull/1751)
* [improve] home add apache info by @a-little-fool in [https://github.com/apache/hertzbeat/pull/1740](https://github.com/apache/hertzbeat/pull/1740)
* [doc] Change e2e path by @crossoverJie in [https://github.com/apache/hertzbeat/pull/1758](https://github.com/apache/hertzbeat/pull/1758)
* fix : ingress tls inoperative by @PeixyJ in [https://github.com/apache/hertzbeat/pull/1760](https://github.com/apache/hertzbeat/pull/1760)
* [refactor] method improvement rationale by @dukbong in [https://github.com/apache/hertzbeat/pull/1757](https://github.com/apache/hertzbeat/pull/1757)
* [improve] create disclaimer file, add incubating in describe by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1764](https://github.com/apache/hertzbeat/pull/1764)
* [improve] update new hertzbeat brand logo, update doc by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1761](https://github.com/apache/hertzbeat/pull/1761)
* Complete the code comment translation of the common module by @Hi-Mr-Wind in [https://github.com/apache/hertzbeat/pull/1766](https://github.com/apache/hertzbeat/pull/1766)
* Remove unnecessary if-else statement. by @dukbong in [https://github.com/apache/hertzbeat/pull/1770](https://github.com/apache/hertzbeat/pull/1770)
* [doc] remove and translate chinese to english in warehous by @xuziyang in [https://github.com/apache/hertzbeat/pull/1773](https://github.com/apache/hertzbeat/pull/1773)
* Replace deprecated methods with builder pattern for RedisURI construction by @dukbong in [https://github.com/apache/hertzbeat/pull/1772](https://github.com/apache/hertzbeat/pull/1772)
* remove and translate chinese to english in collector,script,push,remoting and manager module by @MananPoojara in [https://github.com/apache/hertzbeat/pull/1774](https://github.com/apache/hertzbeat/pull/1774)
* Added the function of sending SMS messages through Alibaba Cloud. by @lwqzz in [https://github.com/apache/hertzbeat/pull/1768](https://github.com/apache/hertzbeat/pull/1768)
* [improve]Add frontend license. by @zqr10159 in [https://github.com/apache/hertzbeat/pull/1776](https://github.com/apache/hertzbeat/pull/1776)
* [test] Add RedisSingleCollectImplTest by @crossoverJie in [https://github.com/apache/hertzbeat/pull/1784](https://github.com/apache/hertzbeat/pull/1784)
* [refactor] add override annotation by @handy-git in [https://github.com/apache/hertzbeat/pull/1782](https://github.com/apache/hertzbeat/pull/1782)
* '[docs]bugfix: display syntax error of ipmi protocol' by @tomorrowshipyltm in [https://github.com/apache/hertzbeat/pull/1793](https://github.com/apache/hertzbeat/pull/1793)
* [doc] translate alerter moudle code chinese to english by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1765](https://github.com/apache/hertzbeat/pull/1765)
* [refactor] database-related properties class, type changed to record by @xuziyang in [https://github.com/apache/hertzbeat/pull/1786](https://github.com/apache/hertzbeat/pull/1786)
* Fix snmp template unit conversion problem by @TJxiaobao in [https://github.com/apache/hertzbeat/pull/1796](https://github.com/apache/hertzbeat/pull/1796)
* [doc] Add help documentation for clickhouse monitoring by @LiuTianyou in [https://github.com/apache/hertzbeat/pull/1798](https://github.com/apache/hertzbeat/pull/1798)
* [feature:update-checkstyle] Limit the java file header by @YxYL6125 in [https://github.com/apache/hertzbeat/pull/1799](https://github.com/apache/hertzbeat/pull/1799)
* [improve]Add external lib folder to store mysql and oracle driver. by @zqr10159 in [https://github.com/apache/hertzbeat/pull/1783](https://github.com/apache/hertzbeat/pull/1783)
* [Improve]When multiple lines are returned, each alarm is triggered instead of only the first alarm by @15613060203 in [https://github.com/apache/hertzbeat/pull/1797](https://github.com/apache/hertzbeat/pull/1797)
* [doc] add team page in website by @alpha951 in [https://github.com/apache/hertzbeat/pull/1800](https://github.com/apache/hertzbeat/pull/1800)
* [feature] Improve the import checkstyle by @crossoverJie in [https://github.com/apache/hertzbeat/pull/1802](https://github.com/apache/hertzbeat/pull/1802)
* [doc] Add help document for dns monitoring by @LiuTianyou in [https://github.com/apache/hertzbeat/pull/1804](https://github.com/apache/hertzbeat/pull/1804)
* [improve] preventing NPE by @dukbong in [https://github.com/apache/hertzbeat/pull/1808](https://github.com/apache/hertzbeat/pull/1808)
* [refactor] change the warehouse properties the type to record by @xuziyang in [https://github.com/apache/hertzbeat/pull/1806](https://github.com/apache/hertzbeat/pull/1806)
* Refactor: upgrade syntax to jdk17(instanceof & switch) by @Calvin979 in [https://github.com/apache/hertzbeat/pull/1807](https://github.com/apache/hertzbeat/pull/1807)
* [test] Add NginxCollect test by @crossoverJie in [https://github.com/apache/hertzbeat/pull/1809](https://github.com/apache/hertzbeat/pull/1809)
* [website] update team page by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1803](https://github.com/apache/hertzbeat/pull/1803)
* [test] Add RedisClusterCollectImplTest by @crossoverJie in [https://github.com/apache/hertzbeat/pull/1789](https://github.com/apache/hertzbeat/pull/1789)
* [improve] Fix typo ReqStatusResponse by @crossoverJie in [https://github.com/apache/hertzbeat/pull/1811](https://github.com/apache/hertzbeat/pull/1811)
* Comparing N objects for null with Assert.noNullElements(). by @dukbong in [https://github.com/apache/hertzbeat/pull/1814](https://github.com/apache/hertzbeat/pull/1814)
* [doc] Add help document for elasticsearch monitoring and ftp monitoring by @LiuTianyou in [https://github.com/apache/hertzbeat/pull/1815](https://github.com/apache/hertzbeat/pull/1815)
* [doc] add help documentation for huawei switch monitoring by @Alanxtl in [https://github.com/apache/hertzbeat/pull/1813](https://github.com/apache/hertzbeat/pull/1813)
* chore: upgrade the api-testing (e2e) to v0.0.16 by @LinuxSuRen in [https://github.com/apache/hertzbeat/pull/1817](https://github.com/apache/hertzbeat/pull/1817)
* [Remove]\[Improve\]Mail config by @zqr10159 in [https://github.com/apache/hertzbeat/pull/1819](https://github.com/apache/hertzbeat/pull/1819)
* Remove and translate chinese to english in code by @dukbong in [https://github.com/apache/hertzbeat/pull/1816](https://github.com/apache/hertzbeat/pull/1816)
* [feature]Add monitoring for Hbase Master by @zhangshenghang in [https://github.com/apache/hertzbeat/pull/1820](https://github.com/apache/hertzbeat/pull/1820)
* [doc] resolve code conflicts and coverage caused by pr(#1813) merge by @LiuTianyou in [https://github.com/apache/hertzbeat/pull/1821](https://github.com/apache/hertzbeat/pull/1821)
* [doc] Add help document for tidb and nacos monitoring by @Alanxtl in [https://github.com/apache/hertzbeat/pull/1823](https://github.com/apache/hertzbeat/pull/1823)
* [improve] use eclipselink orm replace of hibernate orm by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1801](https://github.com/apache/hertzbeat/pull/1801)
* [improve] Add whitespace checkstyle by @crossoverJie in [https://github.com/apache/hertzbeat/pull/1824](https://github.com/apache/hertzbeat/pull/1824)
* [bugfix] dns monitoring template add query class parameter by @LiuTianyou in [https://github.com/apache/hertzbeat/pull/1825](https://github.com/apache/hertzbeat/pull/1825)
* [Refactor] Preventing Unnecessary Object Creation and Using Utility Methods by @dukbong in [https://github.com/apache/hertzbeat/pull/1818](https://github.com/apache/hertzbeat/pull/1818)
* [doc]Add and modify Doris FE Chinese and English documentation by @zhangshenghang in [https://github.com/apache/hertzbeat/pull/1828](https://github.com/apache/hertzbeat/pull/1828)
* [docs] Optimize: add help docs for UDP port & Springboot3 help doc by @zuobiao-zhou in [https://github.com/apache/hertzbeat/pull/1832](https://github.com/apache/hertzbeat/pull/1832)
* Code Simplification, Structure Changes, and Translation Work, Along with a Question by @dukbong in [https://github.com/apache/hertzbeat/pull/1827](https://github.com/apache/hertzbeat/pull/1827)
* [doc] add help document for mongodb monitoring by @LiuTianyou in [https://github.com/apache/hertzbeat/pull/1834](https://github.com/apache/hertzbeat/pull/1834)
* [collector] fix: inverts the compareTo sort of MetricsCollect run queue by @Pzz-2021 in [https://github.com/apache/hertzbeat/pull/1837](https://github.com/apache/hertzbeat/pull/1837)
* [doc]Doc add debian system by @zhangshenghang in [https://github.com/apache/hertzbeat/pull/1842](https://github.com/apache/hertzbeat/pull/1842)
* [feature] Add Apache Hbase RegionServer monitoring by @zhangshenghang in [https://github.com/apache/hertzbeat/pull/1833](https://github.com/apache/hertzbeat/pull/1833)
* [improve] Optimize websocket monitor by @LiuTianyou in [https://github.com/apache/hertzbeat/pull/1838](https://github.com/apache/hertzbeat/pull/1838)
* [refactor] Split the WarehouseProperties class by @xuziyang in [https://github.com/apache/hertzbeat/pull/1830](https://github.com/apache/hertzbeat/pull/1830)
* [test] Add test for HttpsdImpl by @crossoverJie in [https://github.com/apache/hertzbeat/pull/1840](https://github.com/apache/hertzbeat/pull/1840)
* [fix] Fix the wrong comment by @xuziyang in [https://github.com/apache/hertzbeat/pull/1843](https://github.com/apache/hertzbeat/pull/1843)
* [refactor] trans and use assert by @dukbong in [https://github.com/apache/hertzbeat/pull/1841](https://github.com/apache/hertzbeat/pull/1841)
* [bugfix] modify the command in the mongodb monitoring template by @LiuTianyou in [https://github.com/apache/hertzbeat/pull/1844](https://github.com/apache/hertzbeat/pull/1844)
* [bigfix]Fix Debian system Top10 monitoring bug by @zhangshenghang in [https://github.com/apache/hertzbeat/pull/1846](https://github.com/apache/hertzbeat/pull/1846)
* [cleanup]Delete the corresponding Chinese comments by @hudongdong129 in [https://github.com/apache/hertzbeat/pull/1847](https://github.com/apache/hertzbeat/pull/1847)
* [doc] translates chinese comment to english. by @dukbong in [https://github.com/apache/hertzbeat/pull/1853](https://github.com/apache/hertzbeat/pull/1853)
* [doc] fix error and add help document for prometheus task by @LiuTianyou in [https://github.com/apache/hertzbeat/pull/1852](https://github.com/apache/hertzbeat/pull/1852)
* [feature] Add Linux process monitoring by @zhangshenghang in [https://github.com/apache/hertzbeat/pull/1857](https://github.com/apache/hertzbeat/pull/1857)
* [test] Add test for FtpCollectImpl by @crossoverJie in [https://github.com/apache/hertzbeat/pull/1856](https://github.com/apache/hertzbeat/pull/1856)
* [improve] use apache jexl replace of aviator by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1859](https://github.com/apache/hertzbeat/pull/1859)
* [bugfix] jpa data save logic repair by @zhangshenghang in [https://github.com/apache/hertzbeat/pull/1863](https://github.com/apache/hertzbeat/pull/1863)
* [feature] add influxdb metrics monitoring by @TJxiaobao in [https://github.com/apache/hertzbeat/pull/1730](https://github.com/apache/hertzbeat/pull/1730)
* [doc] add help document for rocketmq by @LiuTianyou in [https://github.com/apache/hertzbeat/pull/1874](https://github.com/apache/hertzbeat/pull/1874)
* [improve] Imporve checkstyle of test code. by @crossoverJie in [https://github.com/apache/hertzbeat/pull/1864](https://github.com/apache/hertzbeat/pull/1864)
* [feature] Support Redfish protocol to monitoring server by @gjjjj0101 in [https://github.com/apache/hertzbeat/pull/1867](https://github.com/apache/hertzbeat/pull/1867)
* Fix debian monitoring template issue about process monitoring by @LLP2333 in [https://github.com/apache/hertzbeat/pull/1868](https://github.com/apache/hertzbeat/pull/1868)
* [bugfix] centos Top10 shows missing one by @zhangshenghang in [https://github.com/apache/hertzbeat/pull/1870](https://github.com/apache/hertzbeat/pull/1870)
* [improve] add website apache incubator footer by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1860](https://github.com/apache/hertzbeat/pull/1860)
* [doc] update help document by @LiuTianyou in [https://github.com/apache/hertzbeat/pull/1861](https://github.com/apache/hertzbeat/pull/1861)
* [featurn] support flyway database migration by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1875](https://github.com/apache/hertzbeat/pull/1875)
* [improve] Delete the timestamp field in the class MetricFamily.Metric by @xuziyang in [https://github.com/apache/hertzbeat/pull/1878](https://github.com/apache/hertzbeat/pull/1878)
* [improve] Use java.lang.AutoCloseable instead of CacheCloseable by @crossoverJie in [https://github.com/apache/hertzbeat/pull/1879](https://github.com/apache/hertzbeat/pull/1879)
* [bugfix]Fix top10 process command. by @zqr10159 in [https://github.com/apache/hertzbeat/pull/1876](https://github.com/apache/hertzbeat/pull/1876)
* [feature] support the VictoriaMetrics cluster by @xuziyang in [https://github.com/apache/hertzbeat/pull/1880](https://github.com/apache/hertzbeat/pull/1880)
* [improve] Refactor common cache code by @crossoverJie in [https://github.com/apache/hertzbeat/pull/1881](https://github.com/apache/hertzbeat/pull/1881)
* Eliminate Unnecessary Unboxing and Generics by @handy-git in [https://github.com/apache/hertzbeat/pull/1882](https://github.com/apache/hertzbeat/pull/1882)
* [bugfix]\[doc\]Add kafka sidebar. by @zqr10159 in [https://github.com/apache/hertzbeat/pull/1883](https://github.com/apache/hertzbeat/pull/1883)
* [doc] I18n for monitoring template yml metrics by @zuobiao-zhou in [https://github.com/apache/hertzbeat/pull/1888](https://github.com/apache/hertzbeat/pull/1888)
* [refactor] StoreProperties is no longer useful, delete it by @xuziyang in [https://github.com/apache/hertzbeat/pull/1887](https://github.com/apache/hertzbeat/pull/1887)
* bugfix statistical metrics data matching fails by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1884](https://github.com/apache/hertzbeat/pull/1884)
* [doc] add help doc for flink monitoring by @HeartLinked in [https://github.com/apache/hertzbeat/pull/1893](https://github.com/apache/hertzbeat/pull/1893)
* [doc] add almalinux documentation by @zhangshenghang in [https://github.com/apache/hertzbeat/pull/1892](https://github.com/apache/hertzbeat/pull/1892)
* [improve] Missing a generic by @crossoverJie in [https://github.com/apache/hertzbeat/pull/1889](https://github.com/apache/hertzbeat/pull/1889)
* [bugfix] Fixed some metrics of Jexlespression not matching in Elasticsearch by @zhangshenghang in [https://github.com/apache/hertzbeat/pull/1894](https://github.com/apache/hertzbeat/pull/1894)
* feat(*): Support Time Type to Tengine Data Storage by @Clownsw in [https://github.com/apache/hertzbeat/pull/1890](https://github.com/apache/hertzbeat/pull/1890)
* [feature] support random jwt secret when not custom by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1897](https://github.com/apache/hertzbeat/pull/1897)
* [doc] add opensuse doc by @zhangshenghang in [https://github.com/apache/hertzbeat/pull/1902](https://github.com/apache/hertzbeat/pull/1902)
* fix when manager restart, collect register error by @Ceilzcx in [https://github.com/apache/hertzbeat/pull/1896](https://github.com/apache/hertzbeat/pull/1896)
* [bugfix] fix can not use empty collection as query params in eclipselink by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1900](https://github.com/apache/hertzbeat/pull/1900)
* [doc] update doc add download page and pic by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1904](https://github.com/apache/hertzbeat/pull/1904)
* [test] Add test for UdpCollectImpl by @crossoverJie in [https://github.com/apache/hertzbeat/pull/1906](https://github.com/apache/hertzbeat/pull/1906)
* fix license by @yqxxgh in [https://github.com/apache/hertzbeat/pull/1907](https://github.com/apache/hertzbeat/pull/1907)
* [improve] refactor code by @Ceilzcx in [https://github.com/apache/hertzbeat/pull/1901](https://github.com/apache/hertzbeat/pull/1901)
* [type:bugfix] fix customized menu invalid bug #1898 by @Aias00 in [https://github.com/apache/hertzbeat/pull/1908](https://github.com/apache/hertzbeat/pull/1908)
* [type:bugfix] fix HTTP API bug #1895 by @Aias00 in [https://github.com/apache/hertzbeat/pull/1909](https://github.com/apache/hertzbeat/pull/1909)
* [test] Add test for WebsocketCollectImpl by @crossoverJie in [https://github.com/apache/hertzbeat/pull/1912](https://github.com/apache/hertzbeat/pull/1912)
* [doc] translates chinese comment to english. by @westboy in [https://github.com/apache/hertzbeat/pull/1914](https://github.com/apache/hertzbeat/pull/1914)
* [doc] Add HIP document and template by @crossoverJie in [https://github.com/apache/hertzbeat/pull/1913](https://github.com/apache/hertzbeat/pull/1913)
* [improve] clean up home webapp unused code by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1915](https://github.com/apache/hertzbeat/pull/1915)
* [feature] support use ngql query metrics from nebulaGraph by @LiuTianyou in [https://github.com/apache/hertzbeat/pull/1917](https://github.com/apache/hertzbeat/pull/1917)
* [doc] Improve the Contribution Documentation. by @crossoverJie in [https://github.com/apache/hertzbeat/pull/1918](https://github.com/apache/hertzbeat/pull/1918)
* [featrue]add apache hdfs monitor by @zhangshenghang in [https://github.com/apache/hertzbeat/pull/1920](https://github.com/apache/hertzbeat/pull/1920)
* [doc] update hbase documentation description by @zhangshenghang in [https://github.com/apache/hertzbeat/pull/1921](https://github.com/apache/hertzbeat/pull/1921)
* [doc] Add documentation for nebulaGraph cluster monitoring and custom monitoring using NGQL, and clean up useless parameters by @LiuTianyou in [https://github.com/apache/hertzbeat/pull/1923](https://github.com/apache/hertzbeat/pull/1923)
* [test] Add test for TelnetCollectImplTest by @crossoverJie in [https://github.com/apache/hertzbeat/pull/1924](https://github.com/apache/hertzbeat/pull/1924)
* fix(*): fix TdEngine Init not found Database by @Clownsw in [https://github.com/apache/hertzbeat/pull/1891](https://github.com/apache/hertzbeat/pull/1891)
* [doc] update contribution and add run-build guide by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1919](https://github.com/apache/hertzbeat/pull/1919)
* bugfix collector startup error can not find JdbcClient by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1925](https://github.com/apache/hertzbeat/pull/1925)
* [doc] add help document for freebsd monitoring by @LiuTianyou in [https://github.com/apache/hertzbeat/pull/1928](https://github.com/apache/hertzbeat/pull/1928)
* [refactoring] Split AbstractHistoryDataStorage class by @xuziyang in [https://github.com/apache/hertzbeat/pull/1926](https://github.com/apache/hertzbeat/pull/1926)
* [fix] fixed name error in monitoring template and improve NGQL protocol by @LiuTianyou in [https://github.com/apache/hertzbeat/pull/1931](https://github.com/apache/hertzbeat/pull/1931)
* [refactoring] Split AbstractRealTimeDataStorage class by @xuziyang in [https://github.com/apache/hertzbeat/pull/1935](https://github.com/apache/hertzbeat/pull/1935)
* [bugfix] fix ssl-cert days_remaining and npe by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1934](https://github.com/apache/hertzbeat/pull/1934)
* [feature] add apache yarn monitor by @zhangshenghang in [https://github.com/apache/hertzbeat/pull/1937](https://github.com/apache/hertzbeat/pull/1937)
* [doc] add help document for redhat monitoring and rocky linux monitoring by @LiuTianyou in [https://github.com/apache/hertzbeat/pull/1939](https://github.com/apache/hertzbeat/pull/1939)
* [test] Add test for NtpCollectImpl by @crossoverJie in [https://github.com/apache/hertzbeat/pull/1940](https://github.com/apache/hertzbeat/pull/1940)
* [bugfix] fix alarm center tags display error by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1938](https://github.com/apache/hertzbeat/pull/1938)
* [improve] prepare for release hertzbeat v1.6.0 by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1929](https://github.com/apache/hertzbeat/pull/1929)
* add:Updated the Open Source Summer Project blog. by @TJxiaobao in [https://github.com/apache/hertzbeat/pull/1943](https://github.com/apache/hertzbeat/pull/1943)
* [feature] Support monitoring of OpenAI accounts by @zuobiao-zhou in [https://github.com/apache/hertzbeat/pull/1947](https://github.com/apache/hertzbeat/pull/1947)
* [refactoring] Inject a single instance of the data store by @xuziyang in [https://github.com/apache/hertzbeat/pull/1944](https://github.com/apache/hertzbeat/pull/1944)
* [refactoring] AbstractHistoryDataStorage implement the DisposableBean by @xuziyang in [https://github.com/apache/hertzbeat/pull/1946](https://github.com/apache/hertzbeat/pull/1946)
* [doc] update iotdb init document by @zhangshenghang in [https://github.com/apache/hertzbeat/pull/1948](https://github.com/apache/hertzbeat/pull/1948)
* [improve] update build script by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1949](https://github.com/apache/hertzbeat/pull/1949)
* [test] add test for NgqlCollectImpl by @LiuTianyou in [https://github.com/apache/hertzbeat/pull/1953](https://github.com/apache/hertzbeat/pull/1953)
* [bugfix]Replace monitors to alert. by @zqr10159 in [https://github.com/apache/hertzbeat/pull/1954](https://github.com/apache/hertzbeat/pull/1954)
* [improve] add llm, server menu and update doc by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1955](https://github.com/apache/hertzbeat/pull/1955)
* [improve]\[HIP\] HIP-01: Refactoring AbstractCollect by @crossoverJie in [https://github.com/apache/hertzbeat/pull/1930](https://github.com/apache/hertzbeat/pull/1930)
* [bugfix] fix ConnectionCommonCache possible npe by @crossoverJie in [https://github.com/apache/hertzbeat/pull/1959](https://github.com/apache/hertzbeat/pull/1959)
* [doc] add help document for eulerOS monitoring by @LiuTianyou in [https://github.com/apache/hertzbeat/pull/1960](https://github.com/apache/hertzbeat/pull/1960)
* [fixbug] Fix the problem of no data for springboot3 monitoring by @zhangshenghang in [https://github.com/apache/hertzbeat/pull/1961](https://github.com/apache/hertzbeat/pull/1961)
* commitfix the front-end popup cannot exit by @Yanshuming1 in [https://github.com/apache/hertzbeat/pull/1957](https://github.com/apache/hertzbeat/pull/1957)
* [fixbug] expression rule adaptation by @zhangshenghang in [https://github.com/apache/hertzbeat/pull/1963](https://github.com/apache/hertzbeat/pull/1963)
* [doc] add help doc for influxdb-promql and kafka-promql monitoring by @LiuTianyou in [https://github.com/apache/hertzbeat/pull/1965](https://github.com/apache/hertzbeat/pull/1965)
* [doc]: update readme-cn docs by @yuluo-yx in [https://github.com/apache/hertzbeat/pull/1964](https://github.com/apache/hertzbeat/pull/1964)
* [improve]\[HIP\] HIP-01: Implement refactoring AbstractCollect by @crossoverJie in [https://github.com/apache/hertzbeat/pull/1966](https://github.com/apache/hertzbeat/pull/1966)
* [chore] update .gitignore to save .idea/icon.png by @yuluo-yx in [https://github.com/apache/hertzbeat/pull/1971](https://github.com/apache/hertzbeat/pull/1971)
* [improve]\[bugfix\]: fix AlertTemplateUtilTest test exception and update code style by @yuluo-yx in [https://github.com/apache/hertzbeat/pull/1969](https://github.com/apache/hertzbeat/pull/1969)
* [feature] add apache hugegraph monitor by @zhangshenghang in [https://github.com/apache/hertzbeat/pull/1972](https://github.com/apache/hertzbeat/pull/1972)
* [improve] Implement cascading parameter list for SNMP protocol by @zuobiao-zhou in [https://github.com/apache/hertzbeat/pull/1976](https://github.com/apache/hertzbeat/pull/1976)
* [improve] optimize DateUtil and add test case by @yuluo-yx in [https://github.com/apache/hertzbeat/pull/1974](https://github.com/apache/hertzbeat/pull/1974)
* [feature]HertzBeat custom plugin. by @zqr10159 in [https://github.com/apache/hertzbeat/pull/1973](https://github.com/apache/hertzbeat/pull/1973)
* update login page and status page color by @lwjxy in [https://github.com/apache/hertzbeat/pull/1977](https://github.com/apache/hertzbeat/pull/1977)
* [chore] update code style and add some comment by @yuluo-yx in [https://github.com/apache/hertzbeat/pull/1975](https://github.com/apache/hertzbeat/pull/1975)
* [doc]HertzBeat plugin doc. by @zqr10159 in [https://github.com/apache/hertzbeat/pull/1980](https://github.com/apache/hertzbeat/pull/1980)
* [doc] update contributors and update status page style by @tomsun28 in [https://github.com/apache/hertzbeat/pull/1981](https://github.com/apache/hertzbeat/pull/1981)
* [feature] Implement cascading parameter list by @zuobiao-zhou in [https://github.com/apache/hertzbeat/pull/1978](https://github.com/apache/hertzbeat/pull/1978)
* [doc]update threshold alarm doc by @zhangshenghang in [https://github.com/apache/hertzbeat/pull/1983](https://github.com/apache/hertzbeat/pull/1983)
* [chore] optimize code style by @yuluo-yx in [https://github.com/apache/hertzbeat/pull/1984](https://github.com/apache/hertzbeat/pull/1984)
* [fix] Compatible with MongoDB versions earlier than 3.6 by @gjjjj0101 in [https://github.com/apache/hertzbeat/pull/1988](https://github.com/apache/hertzbeat/pull/1988)
* [chore] optimize manager code style by @yuluo-yx in [https://github.com/apache/hertzbeat/pull/1993](https://github.com/apache/hertzbeat/pull/1993)
* [doc] Translate part of documentation development.md under `zh-cn` directory from `en` to `zh-cn` by @Thespica in [https://github.com/apache/hertzbeat/pull/1995](https://github.com/apache/hertzbeat/pull/1995)
* [improve] http protocol prometheus parsing optimization by @zhangshenghang in [https://github.com/apache/hertzbeat/pull/1996](https://github.com/apache/hertzbeat/pull/1996)
* [feature] add at function for wechat by @Yanshuming1 in [https://github.com/apache/hertzbeat/pull/1994](https://github.com/apache/hertzbeat/pull/1994)
* [improve] add common util test by @yuluo-yx in [https://github.com/apache/hertzbeat/pull/2001](https://github.com/apache/hertzbeat/pull/2001)
* [improve] update release license notice and package by @tomsun28 in [https://github.com/apache/hertzbeat/pull/2003](https://github.com/apache/hertzbeat/pull/2003)
* [bugfix] fix collector startup error classpath by @tomsun28 in [https://github.com/apache/hertzbeat/pull/2004](https://github.com/apache/hertzbeat/pull/2004)
* [chore] optimize code style by @yuluo-yx in [https://github.com/apache/hertzbeat/pull/2000](https://github.com/apache/hertzbeat/pull/2000)
* [improve] Bump up `eslint-plugin-jsdoc` to 48.2.5 to support node 20+ by @Thespica in [https://github.com/apache/hertzbeat/pull/2005](https://github.com/apache/hertzbeat/pull/2005)
* [doc] fix doc highlighting by @boatrainlsz in [https://github.com/apache/hertzbeat/pull/2006](https://github.com/apache/hertzbeat/pull/2006)
* [web-app]feature: case insensitive search by @JavaProgrammerLB in [https://github.com/apache/hertzbeat/pull/2007](https://github.com/apache/hertzbeat/pull/2007)
* [feature] Support time calculation expressions. by @LiuTianyou in [https://github.com/apache/hertzbeat/pull/2009](https://github.com/apache/hertzbeat/pull/2009)
* [doc] add document for time expression by @LiuTianyou in [https://github.com/apache/hertzbeat/pull/2012](https://github.com/apache/hertzbeat/pull/2012)
* [feature] Add Apache Pulsar monitor by @zhangshenghang in [https://github.com/apache/hertzbeat/pull/2013](https://github.com/apache/hertzbeat/pull/2013)
* [doc] home verify release doc update by @tomsun28 in [https://github.com/apache/hertzbeat/pull/2014](https://github.com/apache/hertzbeat/pull/2014)
* [Improve] Improve clickhouse monitor And Improve Pulsar monitor by @zhangshenghang in [https://github.com/apache/hertzbeat/pull/2015](https://github.com/apache/hertzbeat/pull/2015)
* [doc] translate help document for memcached monitoring by @LiuTianyou in [https://github.com/apache/hertzbeat/pull/2019](https://github.com/apache/hertzbeat/pull/2019)
* [improve] optimize collector httpsd discovery by @yuluo-yx in [https://github.com/apache/hertzbeat/pull/1991](https://github.com/apache/hertzbeat/pull/1991)
* [optimize] optimize code style and logic, add unit test by @yuluo-yx in [https://github.com/apache/hertzbeat/pull/2010](https://github.com/apache/hertzbeat/pull/2010)
* [fix] Fix possible potential thread safe bugs by @gjjjj0101 in [https://github.com/apache/hertzbeat/pull/2021](https://github.com/apache/hertzbeat/pull/2021)
* [improve] add ci for home by @LiuTianyou in [https://github.com/apache/hertzbeat/pull/2024](https://github.com/apache/hertzbeat/pull/2024)
* [bugfix]Tag with empty value Shouldn't transform to Tag: by @JavaProgrammerLB in [https://github.com/apache/hertzbeat/pull/2025](https://github.com/apache/hertzbeat/pull/2025)
* [bugfix] modify popup confirm to clear cache and cancel popup save by @Yanshuming1 in [https://github.com/apache/hertzbeat/pull/2026](https://github.com/apache/hertzbeat/pull/2026)
* [improve] update monitor state desc by @tomsun28 in [https://github.com/apache/hertzbeat/pull/2028](https://github.com/apache/hertzbeat/pull/2028)
* bugfix: fix overflow of integers by @Calvin979 in [https://github.com/apache/hertzbeat/pull/2029](https://github.com/apache/hertzbeat/pull/2029)
* [improve] tips need update initial default password by @tomsun28 in [https://github.com/apache/hertzbeat/pull/2030](https://github.com/apache/hertzbeat/pull/2030)
* [improve] deprecate support iotdb 0.* version by @Ceilzcx in [https://github.com/apache/hertzbeat/pull/2032](https://github.com/apache/hertzbeat/pull/2032)
* [fixbug] required field check by @zhangshenghang in [https://github.com/apache/hertzbeat/pull/2022](https://github.com/apache/hertzbeat/pull/2022)
* [improve] add IcmpCollectImplTest by @zuobiao-zhou in [https://github.com/apache/hertzbeat/pull/2033](https://github.com/apache/hertzbeat/pull/2033)
* [improve] fix code style by @zuobiao-zhou in [https://github.com/apache/hertzbeat/pull/2034](https://github.com/apache/hertzbeat/pull/2034)
* [improve] increase the length limit of the username field by @zuobiao-zhou in [https://github.com/apache/hertzbeat/pull/2035](https://github.com/apache/hertzbeat/pull/2035)
* [improve] Checkstyle include testSource by @crossoverJie in [https://github.com/apache/hertzbeat/pull/2036](https://github.com/apache/hertzbeat/pull/2036)
* [bugfix] fix collector and frontend dependent license error by @tomsun28 in [https://github.com/apache/hertzbeat/pull/2037](https://github.com/apache/hertzbeat/pull/2037)
* [improve] Add test for MemcachedCollectImpl by @zuobiao-zhou in [https://github.com/apache/hertzbeat/pull/2044](https://github.com/apache/hertzbeat/pull/2044)
* [imprve] Remove duplicate indices by @zuobiao-zhou in [https://github.com/apache/hertzbeat/pull/2045](https://github.com/apache/hertzbeat/pull/2045)
* [docs]: fix several typos in docs by @lw-yang in [https://github.com/apache/hertzbeat/pull/2047](https://github.com/apache/hertzbeat/pull/2047)
* Add the missing parts of docs, fix layout, sync the English version with the Chinese version by @xfl12345 in [https://github.com/apache/hertzbeat/pull/2048](https://github.com/apache/hertzbeat/pull/2048)
* [improve] add filename check in home ci by @LiuTianyou in [https://github.com/apache/hertzbeat/pull/2049](https://github.com/apache/hertzbeat/pull/2049)
* [improve] update dependency licenses and remove the aliyun sms depend by @tomsun28 in [https://github.com/apache/hertzbeat/pull/2058](https://github.com/apache/hertzbeat/pull/2058)
## New Contributors
* @handy-git made their first contribution in [https://github.com/apache/hertzbeat/pull/1643](https://github.com/apache/hertzbeat/pull/1643)
* @LiuTianyou made their first contribution in [https://github.com/apache/hertzbeat/pull/1684](https://github.com/apache/hertzbeat/pull/1684)
* @WinterKi1ler made their first contribution in [https://github.com/apache/hertzbeat/pull/1718](https://github.com/apache/hertzbeat/pull/1718)
* @miki-hmt made their first contribution in [https://github.com/apache/hertzbeat/pull/1734](https://github.com/apache/hertzbeat/pull/1734)
* @gjjjj0101 made their first contribution in [https://github.com/apache/hertzbeat/pull/1748](https://github.com/apache/hertzbeat/pull/1748)
* @makechoicenow made their first contribution in [https://github.com/apache/hertzbeat/pull/1747](https://github.com/apache/hertzbeat/pull/1747)
* @alpha951 made their first contribution in [https://github.com/apache/hertzbeat/pull/1745](https://github.com/apache/hertzbeat/pull/1745)
* @crossoverJie made their first contribution in [https://github.com/apache/hertzbeat/pull/1758](https://github.com/apache/hertzbeat/pull/1758)
* @PeixyJ made their first contribution in [https://github.com/apache/hertzbeat/pull/1760](https://github.com/apache/hertzbeat/pull/1760)
* @dukbong made their first contribution in [https://github.com/apache/hertzbeat/pull/1757](https://github.com/apache/hertzbeat/pull/1757)
* @xuziyang made their first contribution in [https://github.com/apache/hertzbeat/pull/1773](https://github.com/apache/hertzbeat/pull/1773)
* @MananPoojara made their first contribution in [https://github.com/apache/hertzbeat/pull/1774](https://github.com/apache/hertzbeat/pull/1774)
* @lwqzz made their first contribution in [https://github.com/apache/hertzbeat/pull/1768](https://github.com/apache/hertzbeat/pull/1768)
* @tomorrowshipyltm made their first contribution in [https://github.com/apache/hertzbeat/pull/1793](https://github.com/apache/hertzbeat/pull/1793)
* @YxYL6125 made their first contribution in [https://github.com/apache/hertzbeat/pull/1799](https://github.com/apache/hertzbeat/pull/1799)
* @15613060203 made their first contribution in [https://github.com/apache/hertzbeat/pull/1797](https://github.com/apache/hertzbeat/pull/1797)
* @Alanxtl made their first contribution in [https://github.com/apache/hertzbeat/pull/1813](https://github.com/apache/hertzbeat/pull/1813)
* @zhangshenghang made their first contribution in [https://github.com/apache/hertzbeat/pull/1820](https://github.com/apache/hertzbeat/pull/1820)
* @zuobiao-zhou made their first contribution in [https://github.com/apache/hertzbeat/pull/1832](https://github.com/apache/hertzbeat/pull/1832)
* @Pzz-2021 made their first contribution in [https://github.com/apache/hertzbeat/pull/1837](https://github.com/apache/hertzbeat/pull/1837)
* @LLP2333 made their first contribution in [https://github.com/apache/hertzbeat/pull/1868](https://github.com/apache/hertzbeat/pull/1868)
* @HeartLinked made their first contribution in [https://github.com/apache/hertzbeat/pull/1893](https://github.com/apache/hertzbeat/pull/1893)
* @Aias00 made their first contribution in [https://github.com/apache/hertzbeat/pull/1908](https://github.com/apache/hertzbeat/pull/1908)
* @westboy made their first contribution in [https://github.com/apache/hertzbeat/pull/1914](https://github.com/apache/hertzbeat/pull/1914)
* @Yanshuming1 made their first contribution in [https://github.com/apache/hertzbeat/pull/1957](https://github.com/apache/hertzbeat/pull/1957)
* @yuluo-yx made their first contribution in [https://github.com/apache/hertzbeat/pull/1964](https://github.com/apache/hertzbeat/pull/1964)
* @lwjxy made their first contribution in [https://github.com/apache/hertzbeat/pull/1977](https://github.com/apache/hertzbeat/pull/1977)
* @Thespica made their first contribution in [https://github.com/apache/hertzbeat/pull/1995](https://github.com/apache/hertzbeat/pull/1995)
* @boatrainlsz made their first contribution in [https://github.com/apache/hertzbeat/pull/2006](https://github.com/apache/hertzbeat/pull/2006)
* @JavaProgrammerLB made their first contribution in [https://github.com/apache/hertzbeat/pull/2007](https://github.com/apache/hertzbeat/pull/2007)
* @lw-yang made their first contribution in [https://github.com/apache/hertzbeat/pull/2047](https://github.com/apache/hertzbeat/pull/2047)
* @xfl12345 made their first contribution in [https://github.com/apache/hertzbeat/pull/2048](https://github.com/apache/hertzbeat/pull/2048)
## Just one command to get started
```docker run -d -p 1157:1157 -p 1158:1158 --name hertzbeat apache/hertzbeat```
```or use quay.io (if dockerhub network connect timeout)```
```docker run -d -p 1157:1157 -p 1158:1158 --name hertzbeat quay.io/tancloud/hertzbeat```
Detailed refer to HertzBeat Document [https://hertzbeat.apache.org/docs](https://hertzbeat.apache.org/docs)
---
**Github: [https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)**
Download Page: [https://hertzbeat.apache.org/docs/download/](https://hertzbeat.apache.org/docs/download/)
Upgrade Guide: [https://hertzbeat.apache.org/blog/2024/06/11/hertzbeat-v1.6.0-update/](https://hertzbeat.apache.org/blog/2024/06/11/hertzbeat-v1.6.0-update/)
Have Fun!
---
HertzBeat, Make Monitoring Easier!
Apache HertzBeat™ Team
+40
View File
@@ -0,0 +1,40 @@
---
title: Welcome to HertzBeat Community Committer!
author: crossoverJie
author_title: crossoverJie
author_url: https://github.com/crossoverjie
tags: [opensource, practice]
keywords: [open source monitoring system, alerting system]
---
![HertzBeat](/img/blog/new-committer.png)
> 🎉 I am very pleased to become a Committer for the Apache HertzBeat™ project, and I have been invited by the community to introduce myself 🥰.
I have been working in backend development since I started my career in 2015, engaging in business development, infrastructure, and technical management. Currently, I am working as an infrastructure engineer at an internet company.
I have always been passionate about the open-source community, and I am also a Committer for Apache Pulsar and a Contributor for OpenTelemetry and VictoriaMetrics.
## My Connection with HertzBeat
In April of this year, when HertzBeat entered the Apache Incubator, I happened to see a recommendation on a WeChat Official Account in my social circle.
My first reaction was that the name was really well chosen 😄. Then, after looking closely at the features it provides and the problems it solves, I realized its powerful functionalities 💪.
Since I also need to maintain an observability system at my company, and I have participated in an open-source project called cprobe (which has some similar goals to HertzBeat), I have some experience with monitoring systems and a strong interest in them. Therefore, I read the documentation and quickly started it locally (the community has done a great job in this regard, as many open-source projects lose potential developers right at the initial startup step).
## Starting Contributions
My first PR was to fix an incorrect path in a PR template, and the community responded very quickly, which gave me a very positive impression.
So I started reading some of the core collection code of HertzBeat and found that many logics did not have unit tests at the time. Thus, I began to fill in these tests.
> Starting with unit tests is indeed a good way to get familiar with a new project.
While supplementing the unit tests, I also discovered some code logic optimizations and code formatting inconsistencies, which I addressed and reported to the community.
Similarly, the community's response was swift 🏎, which greatly encouraged my enthusiasm.
During this process, I also incorporated some excellent experiences from other communities (Pulsar, OpenTelemetry) into HertzBeat. Everyone learned from each other, which is undoubtedly the charm of open source.
Lastly, I want to thank the community's logicz for inviting me to become a Committer and tom for reviewing my PRs. I wish HertzBeat a successful graduation from the incubator and becoming a star project 🎊.
+50
View File
@@ -0,0 +1,50 @@
---
title: Welcome to HertzBeat Community Committer!
author: zhangshenghang
author_title: zhangshenghang
author_url: https://github.com/zhangshenghang
tags: [opensource, practice]
keywords: [open source monitoring system, alerting system]
---
![HertzBeat](/img/blog/new-committer.png)
## First acquaintance with Apache HertzBeat
I first came into contact with the Apache HertzBeat™ project by chance. At that time, I was looking for an open source project to monitor our company's related services. As a general monitoring project, Apache HertzBeat™ naturally came into my sight. I began to understand its architecture and functions by reading official documents and browsing the project's code base.
### Start contributing
After having a preliminary understanding of the project, I found that it needed to complete the monitoring scope of the big data field, so I decided to start contributing some code. I started with supplementing big data monitoring. This not only helped me understand the project more deeply, but also gradually let other members of the community know me.
I remember that the first Pull Request I submitted was to add a new Hbase cluster monitoring template. Although it seems insignificant, I was very excited when it was merged. This was a real interaction between me and the open source community and my first step towards greater contribution.
### In-depth participation
As my understanding of the project deepened, I began to challenge some more complex problems. I read a lot of code, participated in daily discussions in the community, monthly meeting discussions, and actively spoke in issue/pr. These activities not only helped me improve my technical skills, but also gave me a better grasp of the direction of the project. I began to put forward my own ideas and suggestions, actively participated in design discussions, and proposed some new features.
### Nominated as Committer
After a period of active contribution, I received a nomination from the community (tom) Committer. Becoming a Committer means that I will have greater responsibilities and authority. The nomination process is open and transparent, and every member of the community has the opportunity to express their opinions.
### Experience after becoming a Committer
After becoming a Committer, my role has changed. Not only did I continue to contribute code, I also began to be responsible for reviewing other contributors' code, helping them solve problems, and guiding their contributions. This process has taught me a lot and made me more deeply realize the importance of community collaboration.
As a Committer, I need to find a balance between code quality and project development. I learned how to conduct code reviews effectively, how to provide constructive feedback, and how to deal with conflicts. These experiences have not only improved my technical skills, but also made me make great progress in communication and collaboration.
### Mental journey
Looking back on the whole process, from the initial wait-and-see attitude to active participation, and then to becoming a Committer, I have experienced a lot of challenges and growth. Sometimes I feel confused because of technical difficulties, and sometimes I feel lost because my contribution is not accepted. But it is these challenges that make me constantly reflect and improve, and constantly improve my abilities.
In this process, I also received help and support from many people. The predecessors in the community gave me a lot of guidance and advice, and their selfless sharing benefited me a lot. I also met many like-minded friends. We participated in open source together, discussed problems together, solved problems together, and celebrated success together.
### Personal feelings
Becoming a Committer of Apache HertzBeat™ is an important milestone in my career. This is not only a recognition of my technical ability, but also an affirmation of my contribution to the open source community. Becoming a Committer is not an end, but a new beginning. I still have a lot to learn and improve.
This process made me understand the importance of cooperation and made me feel the charm of the open source spirit. Open source is not only a way to share technology, but also a concept of collaboration and common progress. I am very honored to be a member of the Apache HertzBeat™ community and hope to continue to contribute to the development of the project in the future.
### Conclusion
Becoming a Committer of the Apache HertzBeat™ project is a challenging and rewarding journey. Through continuous learning and contribution, I have not only improved my technical ability, but also found a sense of belonging and accomplishment in the community.
I hope that my experience can inspire more people to participate in the open source community and jointly promote the progress and development of technology. To borrow the words of Tom: Participating in open source should not affect everyone's work and life, otherwise it will go against the original intention. Everyone should participate in the free time after get off work.
+33
View File
@@ -0,0 +1,33 @@
---
title: Welcome to HertzBeat Community Committer!
author: LiuTianyou
author_title: LiuTianyou
author_url: https://github.com/LiuTianyou
tags: [opensource, practice]
keywords: [open source monitoring system, alerting system]
---
![HertzBeat](/img/blog/new-committer.png)
Hello everyone, I am very honored to receive an invitation from the community to be nominated as a Committer for Apache HertzBeat. Let me introduce myself briefly. I have been working as a backend developer since 2019, mainly using Java. Currently, I am working at a network security company, focusing on the backend development of network security-related products.
## Encounter
In my work, several physical servers are deployed, running various databases and middleware. Although we have deployed the Prometheus + Grafana monitoring combination, most services and servers require additional installation of exporters.
As a result, this monitoring system does not cover the entire project. Sometimes, we only realize a service is down when it is too late. One day in April, I came across an article introducing HertzBeat. I was immediately attracted by its unique features, such as no need for agents and fully visualized configuration, along with support for one-click deployment via Docker. I quickly deployed HertzBeat and put it into use.
### Familiarization
Due to the fully visualized operation, I quickly incorporated the servers, databases, and middleware used in the project into HertzBeat's management. Afterwards, the community was preparing to release the first Apache version and needed to supplement a large amount of documentation. I attempted to submit some documents to familiarize myself with the community's process for submitting code and documentation, and at the same time, I got familiar with the relevant parts of the code while supplementing the documents.
### Trying to Add Something
The first major change I made was to enable HertzBeat to support querying metrics from NebulaGraph using NGQL statements. Additionally, I added a monitoring template for NebulaGraph clusters based on this protocol. The idea initially came from my own needs. When I submitted this idea to the community, I quickly received a response and affirmation from the community, which greatly increased my confidence in continuously participating in this project.
### Joining
Due to my continuous writing of documents and contributing code, I started to become familiar with this community and this project, and began to make some of my own suggestions. Many of these suggestions were adopted by the community and released in new versions. After the first Apache version was released, I received an invitation from @tomsun28 and @TJxiaobao to be nominated as a Committer.
### Conclusion
I am very honored to be able to participate in this project and be recognized by the community. I would like to thank @tomsun28, @TJxiaobao, @zqr10159, @tuohai666, @yuluo-yx, @crossoverJie, @zhangshenghang, and @pwallk for reviewing my code, providing guidance, and helping me. Finally, I wish Apache HertzBeat™ to grow strong and have more and more contributors participating.
+38
View File
@@ -0,0 +1,38 @@
---
title: Welcome to HertzBeat Community Committer!
author: Calvin979
author_title: Calvin979
author_url: https://github.com/Calvin979
tags: [opensource, practice]
keywords: [open source monitoring system, alerting system]
---
![HertzBeat](/img/blog/new-committer.png)
> It's an honor for me to become a Committer of Apache HertzBeat
## Personal introduction
I have been working as a Java back-end developer for three years. At present, I participate in the development of converged message center in an Internet company.
## First met Apache HertzBeat
Reading code and design in open-source framework is one way for me to improve myself. One day a thought came to my mind, which is to contribute to open-source community. Then I met HertzBeat in an article on the internet, which is completely different from Prometheus and Skywalking that I had known before. HertzBeat fascinated me with its feature, agentless and anyone can custom monitoring by modifying yaml. I forked HertzBeat on GitHub and tried to run it locally for further study.
## My first PR
I failed to start HertzBeat when I followed instructions in CONTRIBUTING. The exception shows that Node.js version at least 18 is required. Therefore I modified CONTRIBUTING and opened my first PR in HertzBeat community.
## Keep active in community
I'm getting familiar with HertzBeat as I read documents and code. In addition to perfecting documentation and fixing bugs, I completed DNS monitoring and Registry monitoring. After that, I started to develop new feature named http_sd in V1.6.1, which is supported to manage monitor automatically.
## Reward
At the beginning, it was only the simplest revision and translation of documents. Although it was a very simple job, the community was really welcoming, which made me deeply feel the inclusiveness of this community. Later, while developing the new feature http_sd, my conversation with author tom gave me a better understanding of the overall architecture and responsibilities of each module of HertzBeat, which led to the completion of the new feature.
During the reading of HertzBeat source code, I learned a lot of code writing and design, which is helpful for my personal growth.
## Conclusion
It's an interesting experience for me to become a Committer of Apache HertzBeat™ and it motivates me day by day. I will continue to contribute to the Apache HertzBeat™ community in the future, and I hope that Apache HertzBeat™ can successfully graduate from the Apache incubator.
+38
View File
@@ -0,0 +1,38 @@
---
title: Welcome to HertzBeat Community Committer!
author: linDong
author_title: linDong
author_url: https://github.com/Yanshuming1
tags: [opensource, practice]
keywords: [open source monitoring system, alerting system]
---
![HertzBeat](/img/blog/new-committer.png)
> It's an honor for me to become a Committer of Apache HertzBeat
>
## Personal introduction
I graduated in 2023 and am currently working as a Java developer in an Internet company.
## First met Apache HertzBeat
After graduation and working for half a year, I had the idea of getting involved in open source. However, when searching for open source projects on GitHub, I found that many communities were not very active, and the official documentation was not complete, making it quite difficult to start with the projects. Therefore, I put the matter of open source on hold for the time being.
One day, I saw a post by Senior Xiaobao on a certain platform and was immediately intrigued. I then privately messaged Xiaobao to consult about open source matters. Senior Xiaobao was extremely enthusiastic and meticulous in explaining many aspects of open source to me and recommended the HertzBeat project.
## My first PR
I downloaded the source code of HertzBeat and compiled and tested it according to the documentation. Then, when clicking on the functions on the page, I discovered a bug in the front-end pop-up window. So, I submitted my first issue and successfully claimed this issue, thus starting my first PR.
## Keep active in community
After submitting the first PR, I continuously followed the issues in the HertzBeat community and attempted to solve the existing problems. I have successively completed tasks such as specifying @people on WeChat, integrating AI, adding a PrestoDB monitor, modifying bugs, and contributing to the official website documentation.
## Reward
After several months of contributing to open source, I have reaped a lot. I have learned the business logic in the code, code norms, some technical frameworks that I have never used before, and some algorithms. It can be said that I have benefited greatly.
## Conclusion
Becoming a Committer of Apache HertzBeat™ is a very meaningful thing for me. In the future, I will continue to contribute to the Apache HertzBeat™ community. I also hope that Apache HertzBeat™ can successfully graduate from the incubator and that the community will become better and better.
+39
View File
@@ -0,0 +1,39 @@
---
title: Welcome to HertzBeat Community Committer!
author: kerwin612
author_title: Le Zhang
author_url: https://github.com/kerwin612
tags: [opensource, practice]
keywords: [open source monitoring system, alerting system]
---
![HertzBeat](/img/blog/new-committer.png)
> It's an honor for me to become a Committer of Apache HertzBeat
## Becoming Part of a Stronger Team: My Contributions and Growth
In the open-source community, every contribution not only pushes the project forward but also signifies personal growth. Recently, in the Apache HertzBeat™ project, I have contributed through a series of optimizations and feature enhancements, which have not only advanced the project but also improved my skills. Today, I would like to share my contribution experience and insights into my growth.
## Starting from the Details: Optimizing Visuals and Interactions
I firmly believe that details determine success or failure. When I first joined the project, I began by optimizing the interface to enhance the user's visual and interactive experience. I refined the modal window layout of the monitoring selection menu to better align with user operation habits.
I adjusted the header style and content layout of the monitoring details page to make information presentation clearer and more intuitive. Additionally, I unified the border-radius values of components and addressed issues such as missing internationalization translations, ensuring the consistency and completeness of the system interface.
These seemingly minor changes significantly enhanced the overall aesthetics and user experience of the system. Through this process, I gained a profound understanding of the importance of interface design for user experience and honed my attention to detail.
## Delving into Functional Modules for Enhanced Capabilities
In addition to interface optimization, I actively engaged in expanding and enhancing the functional modules of the system. I refactored repetitive code within the system, abstracted common components, and improved code reusability and maintainability. These improvements not only simplified the development process but also reduced the cost of maintenance in the long run. Furthermore, I extended the capabilities of the multi-functional input component by adding support for password types and search types, further enriching its functionality and versatility.
During the process of implementing these features, I encountered numerous challenges. However, these challenges spurred me to continuously learn and explore new technologies and methodologies. By consulting official documentation and other resources, I gradually overcame these obstacles and successfully completed the tasks. This process not only enhanced my technical abilities but also deepened my understanding of the importance of team collaboration.
## Emphasizing User Feedback for Continuous Product Optimization
I firmly believe that users are the ultimate judges of a product. As such, I continuously collect and analyze user feedback both within the company and in the community, using these insights to guide targeted optimizations and improvements. By refining search and filtering functionalities and adopting a consistent and concise set of interactive elements, I have consistently enhanced the user experience.
In this process, I realized the importance of a user-centric approach. Only by genuinely focusing on users' needs and expectations can we create products that meet market demands.
## Looking Ahead: Continuous Contribution and Growth
Reflecting on my past contributions, I feel a profound sense of pride and satisfaction. However, I am also acutely aware of the many areas where I still have room for improvement and need to continue learning and growing. Moving forward, I will uphold the spirit of rigor, innovation, and user-centricity, continuously exploring and practicing to contribute even more to the Apache HertzBeat™ project. I eagerly anticipate the opportunity to grow and progress alongside my fellow team members, jointly driving the project towards prosperity and success.
+99
View File
@@ -0,0 +1,99 @@
---
title: Becoming an Apache Committer is a recognition of my participation in open source
author: yuluo-yx
author_title: Shown Ji
author_url: https://github.com/yuluo-yx
tags: [opensource, practice]
keywords: [open source monitoring system, alerting system, Apache, Apache Committer, HertzBeat]
---
## My open source journey
Speaking of open source, I came into contact with it at the beginning of my junior year. The scene at that time is still vivid in my mind.
In retrospect, my first official Github Pull Request was to remove a redundant Pom dependency for the Spring Cloud Alibaba project. I was very busy at the time, and after more than two hours of figuring it out, I finally submitted the first Pull Request successfully. I am very grateful to [Cheng Pu](https://github.com/steverao), who introduced me to open source and took the crucial first step in participating in open source.
From the initial rush of using Git, to now `git c -m XXX`, as well as participating in various PR/Issue on Github. Looking back, I have so many thoughts. I think life is nothing more than this. Learn and explore -> use skillfully -> make achievements.
From my junior year to the present, I still maintain my passion for open source and participate in open source. To this day, I am already a committer on three projects.
## Participate in the Apache Community
[Apache Software Foundation (ASF)](https://community.apache.org/) is an American non-profit organization that aims to support various open source software projects. ASF was originally formed by a group of developers of Apache HTTP Server and was officially established on March 25, 1999. As of 2021, its total membership is approximately 1,000. The name comes from a local Indian tribe in North America.
This tribe is famous for its superb military literacy and superhuman endurance. In the second half of the 19th century, it resisted the invaders who invaded their territory. In order to show respect for this Indian tribe, the name of the tribe (Apache) is used as the server name.
But when it comes to this naming, there is an interesting story circulating here. Because this server is based on the NCSA HTTPd server and is the product of continuous revision and patching through the efforts of everyone, it is nicknamed "A Patchy Server" (a patch server). Here, because "A Patchy" and "Apache" are homophones, it was finally officially named "Apache Server".
The above is an introduction to the Apache Software Foundation from Wikipedia.
The Apache Software Foundation was originally composed of developers who developed [Apache HTTPd](https://httpd.apache.org/). Starting from the Apache HTTPd web server project, they created many excellent open source projects, attracting Common open source enthusiasts around the world participate in the maintenance and iteration of the project. Projects continue to be retired, and new projects are constantly being hatched, over and over again. Only then did the Apache Software Foundation become what it is today.
![Apache HTTPd Server Logo](/img/blog/committer/yuluo-yx/4.jpg)
### First contribution
The first contribution in the Apache community should be to delete a `{@link}` code link to the Dubbo project. I'm ashamed to say that [Dubbo](https://github.com/apache/dubbo) is the first open source project I participated in Apache, and there are only 6 submissions so far. In May, I came into contact with the [Apache HertzBeat](https://github.com/apache/hertzbeat) project through [Rick](https://github.com/LinuxSuRen), and started my Apache contribution from unit testing. road.
### Get nominated and become a Committer
This nomination was recommended by PPMC Member [Logic](https://github.com/zqr10159) of Apache HertzBeat. Thanks to the Apache HertzBeat™ Team. I was successfully nominated to become a HertzBeat Committer and got my own Apache mailbox.
![Apache ID Email](/img/blog/committer/yuluo-yx/3.jpg)
### The meaning of Apache Committer
As the saying goes, the greater the ability, the greater the task. Becoming a project committer is not only a change of identity, but also an recognition and affirmation of one's own abilities. When reviewing the PR, my LGTM is no longer a gray style, but has become blue (due to different personal Github themes, the execution color is also different). No need to wait for other Committer Approve CIs. It means that you have management rights over the project.
![PR approval](/img/blog/committer/yuluo-yx/5.jpg)
## How to participate in open source
Anyone who wants to do something needs an opportunity and a guide. Among the many Apache projects, there are many people who pay attention to the project's Issue List. The one time that remains fresh in my memory is: one night after writing the unit test of a tool class, I discovered a small bug. What I thought at the time was that there was too much contextual information and it was not good to write it in a PR, so I opened an Issue to record the context.
How small is this bug? It was so small that I just created the Issue. After submitting the unit test and the code to fix the bug together, I refreshed the PR List again and saw a PR Title to fix the bug.
In fact, there is no shortage of people paying attention to the project, but more of an opportunity! Opportunities to participate in projects.
### The Apache Way
[The Apache Way](https://www.apache.org/theapacheway/) pursued by the Apache Community. The community is greater than the code. A good community is often more important than excellent code. The components of the community include developers, users, etc. Users are the first users of the project code. A healthy community status is when users discover problems, then report problems, and finally solve problems during use.
A more likely scenario is that a user reports a problem, switches from being a user to a developer, and solves the problem. And continue to participate in the maintenance of community projects.
### Paths to participate in open source
Open source is often pure, and the Apache Foundation exists to protect projects and developers.
#### Apache Community Identity
Before contributing to the community, it is important to understand the community's definition of identity, where a project's Committers are located, and how to become a Committer. The Apache community has a clear definition of [Contributor Identity]([https://community.apache.org/contributor-ladder](https://community.apache.org/contributor-ladder). html): [Contributor Identity]([https://community.apache.org/contributor-ladder](https://community.apache.org/contributor-ladder). html). The Apache community has a very clear definition of [contributor status](. html):
! [Apache contributor label](/img/blog/committer/yuluo-yx/6.jpg)
#### Project Committer Nomination Criteria
The conditions for a Project PPMC Team to nominate a Committer are different. Take Apache HertzBeat™ for example:
! [Apache HertzBeat™ becoming committer](/img/blog/committer/yuluo-yx/7.jpg)
Each project has its own standards, and these standards are not set in stone and will be adjusted at each stage of the project.
#### How to Participate in Open Source
Next is the highlight of this section, how to participate in open source and get nominated as a Committer?
##### Open Source Events
Students, because of their special status, do not have the experience of developing large-scale projects and do not have the opportunity to cut their teeth in a production environment. Therefore, it is often difficult to get involved in open source and there is a lack of opportunities.
I think the best way to get involved in open source and get nominated is the **Open Source Summer (OSPP) or Google Summer of Open Source (GSOC) events**. After completing the topic in question, gradual familiarization with the project's features, code, and continued participation will result in a nomination. There is also no lack of students who are nominated to become project Committer directly after completing the topic.
The next step is to **Improve your Coding ability**, find the missing unit tests and code bugs in the project, and then submit PR to fix them. This is often difficult for students who are just starting out, and the Coding ability is often built up after optimizing the project code and understanding every change.
The ecosystem around a good project**is often crucial**. A good documentation allows users/developers to quickly get started and participate in contributing. Multi-language extensions allow the project to be used in projects built in other languages, expanding the project's audience. A good Example repository allows users to discover more ways to use the project. Therefore, participating in the construction of the Example repository and writing and translating documentation is one of the ways to familiarize yourself with the project and get nominated.
Finally, I would like to say that getting nominated is something that just happens. You should not participate in open source just for the sake of getting nominated, and you should never forget your original intention.
Project communities tend to welcome contributions in all ways: be it code, documentation or sermons.
## Random Thoughts
I'm writing this post to commemorate the special occasion of becoming an Apache HertzBeat™ Committer, and to motivate me to get involved in open source in the future.
Keep up the enthusiasm, keep up the coding, and thank you for all the people who have helped me while I've been involved in open source. I wish HertzBeat the best of luck in its incubation and graduation to become a top Apache project! 🎉
+38
View File
@@ -0,0 +1,38 @@
---
title: Welcome to HertzBeat Community Committer!
author: aias00
author_title: Hongyu Liu
author_url: https://github.com/Aias00
tags: [opensource, practice]
keywords: [open source monitoring system, alerting system, Apache, Apache Committer, HertzBeat]
---
## Self-Introduction
Hello everyone, I am deeply honored to be invited as a Committer for Apache HertzBeat.
I have been in the software development industry for many years, currently working as a backend development engineer in my company, mainly responsible for the development and maintenance of core business systems. In my daily work, I not only focus on code quality and system performance but also actively participate in the design and optimization of technical solutions.
Besides work, I am also passionate about the open-source community. Participating in open-source projects not only allows me to continuously learn new technologies and best practices but also helps me meet like-minded developers and jointly promote technological advancement. Becoming a Committer for Apache HertzBeat™ is an important milestone in my open-source journey, and I will continue to strive to make more contributions to the project and community.
## Participating in the Apache Community
The first Apache project I participated in was Apache ShenYu ([https://github.com/apache/shenyu](https://github.com/apache/shenyu)). As an API gateway project, ShenYu provided me with an opportunity to gain a deep understanding of microservice architecture and gateway technology. Through my involvement in ShenYu's development, I not only enhanced my technical skills but also learned about the collaboration methods and open-source spirit of the Apache community.
This experience gave me a deeper understanding of the Apache community and laid the foundation for my later participation in other Apache projects, such as HertzBeat. From ShenYu to HertzBeat, I gradually deepened my understanding and contribution to Apache projects, eventually becoming a Committer for HertzBeat.
## Encountering HertzBeat and Starting to Contribute
After participating in the Apache ShenYu project, I gained a deeper understanding of how open-source communities operate. At this time, I came across the Apache HertzBeat™ project by chance, which aims to create an easy-to-use, high-performance open-source real-time monitoring and alerting system.
HertzBeat's philosophy and functionality immediately caught my interest. As a backend development engineer, I deeply understand the importance of monitoring systems in modern software architecture. HertzBeat not only provides rich monitoring features but also focuses on user experience and scalability, which aligns very well with my technical philosophy.
With enthusiasm for the project, I began to delve into HertzBeat's codebase and documentation. I found many interesting challenges and areas for improvement in the project, which sparked my desire to contribute. After gradually familiarizing myself with the project structure and contribution process, I contributed my accumulated experience in monitoring various relational databases, NoSQL, and other middleware from my work to the project.
As my understanding of the project deepened, I began to try solving more complex problems, such as performance optimization and new feature development. Each contribution not only taught me new knowledge but also made me feel the power and warmth of the open-source community. The feedback and support from project maintainers and other contributors further convinced me that participating in HertzBeat was the right choice.
Through continuous contributions and interactions with community members, I gradually became an active member of the HertzBeat community. This experience not only improved my technical skills but also gave me a deep understanding of the open-source spirit and the importance of collaboration. It was these ongoing contributions and participation that ultimately led to my nomination as a Committer for HertzBeat.
## Conclusion
Becoming a Committer for Apache HertzBeat™ is an important milestone in my open-source journey. I will continue to strive to make more contributions to the project and community, while also looking forward to growing and progressing together with more team members, jointly promoting the prosperity and development of the project.
+47
View File
@@ -0,0 +1,47 @@
---
title: Warmly Welcome HertzBeat's New Community Committer!
author: zuobiao-zhou
author_title: Yuxuan Zhang
author_url: https://github.com/zuobiao-zhou
tags: [opensource, practice]
keywords:
[
open source monitoring system,
alerting system,
Apache,
Apache Committer,
HertzBeat,
]
---
## Self-Introduction
Hello everyone, I'm Yuxuan Zhang, a graduate student from Beijing University of Technology. I am deeply honored to become a Committer for the Apache HertzBeat™ project.
## My Journey with Apache HertzBeat
I came across the HertzBeat project through this year's [Open Source Promotion Plan](https://summer-ospp.ac.cn/) event. I was thrilled by the project's introduction, which mentioned "Agentless" and "Full web-based operation." I thought to myself, could monitoring really be this simple? At the time, our lab had just set up a new server, which I used to monitor with this project.
The project also supports one-click deployment via Docker, making it incredibly easy to get started. The refreshing interface also caught my eye. After using it, I was deeply attracted by the project's simplicity, ease of use, and comprehensive monitoring features. Moreover, issues and PRs in the project were responded to quickly, which motivated me to get involved in the project's development.
Contributing to a project takes time, so the first step was to thoroughly understand it. I usually start with the project documentation. It so happened that there was an issue about improving the documentation, so I took it on. By referencing the user interface, examining the source code, and following the existing document format, I successfully submitted my first PR to the project.
As I dug deeper, I added [a monitoring template for OpenAI accounts via the HTTP protocol](https://github.com/apache/hertzbeat/pull/1947). Later, I implemented [support for the IMAP protocol](https://github.com/apache/hertzbeat/pull/2059) and features to [monitor systems directly via script commands on Windows and Linux](https://github.com/apache/hertzbeat/pull/2313).
During this time, I also submitted several minor fixes and feature PRs, such as [correctly displaying the monitoring status after creating, modifying, or restarting monitoring](https://github.com/apache/hertzbeat/pull/2065) and [implementing cascading parameter lists on the front-end](https://github.com/apache/hertzbeat/pull/1978).
## Experience Sharing: University Students Participating in Open Source
University students can learn excellent coding styles and design patterns from projects while participating in real-world development.
Passion is the best motivation. First, find a project you're interested in, whether it's for its functionality, interface, or something else.
A good community environment is also crucial. This is usually reflected in having active contributors, detailed and comprehensive README and project documentation, and quick responses to issues and PRs.
Once you've found a project that meets the above criteria, you can pull the project's code to your local machine, follow the documentation to deploy and run it. Start as a user, and during this process, you might notice minor issues or incomplete features, which naturally leads to filing issues and attempting to fix them, even if it's just correcting a typo or misspelling. The community will always welcome it. You can gradually dive deeper through the project documentation and contribute to the project.
## Conclusion
I'm very happy to become a Committer for the community. This is an important milestone for me, and I will continue contributing to the Apache HertzBeat™ community in the future. I also hope that Apache HertzBeat™ will successfully graduate from the incubator and that the community will continue to grow.
I want to extend my heartfelt thanks to [TJxiaobao](https://github.com/TJxiaobao) for guiding me in getting started with the project and for always supporting my contributions. I also want to thank [Tom](https://github.com/tomsun28) for the prompt and detailed reviews of my PRs.
+90
View File
@@ -0,0 +1,90 @@
---
title: Announcement of Apache HertzBeat™ 1.6.1 Release
author: zhangshenghang
author_title: zhangshenghang
author_url: https://github.com/zhangshenghang
tags: [opensource, practice]
keywords: [open source monitoring system, alerting system]
---
Dear Community Members,
We are thrilled to announce the official release of Apache HertzBeat™ version 1.6.1! This release incorporates 468 pull requests, introducing numerous new features and enhancements. In this post, well delve into the key updates of version 1.6.1. We warmly welcome more developers and users to join our open-source community!
## Downloads and Documentation
- **Apache HertzBeat™ 1.6.1 Download Link**: [https://hertzbeat.apache.org/zh-cn/docs/download](https://hertzbeat.apache.org/zh-cn/docs/download)
- **Apache HertzBeat™ Documentation**: [https://hertzbeat.apache.org/zh-cn/docs/](https://hertzbeat.apache.org/zh-cn/docs/)
## Major Updates
### New Features and Enhancements
- **Expanded Monitoring Capabilities**: Added support for monitoring Apache HBase, InfluxDB, VictoriaMetrics clusters, HDFS, Yarn, Linux processes, HBase RegionServer, OpenAI accounts, and Redfish protocol.
- **Prometheus Support**: Introduced Prometheus parser and Prometheus-like push mode.
- **Internationalization**: Added internationalization support for monitoring metrics of ClickHouse, DynamicTp, Airflow, IoTDB, RocketMQ, and others.
- **Custom Monitoring Menu**: Monitoring templates now support customizable main menus.
- **NebulaGraph Support**: Added support for querying monitoring data from NebulaGraph using `ngql`.
- **SMS Functionality**: Enabled SMS notifications through Alibaba Cloud.
- **Docker Support**: Added support for running HertzBeat using Docker Compose.
### Bug Fixes
- **Startup Issues**: Resolved Collector standalone startup issues, MySQL dependency problems, and MongoDB monitoring compatibility with Spring Boot 3.
- **Data Issues**: Fixed errors in JPA data persistence logic, Redis cluster node testing, and old data decoding.
- **Null Pointer Exceptions**: Addressed multiple NPE-related issues.
- **Other Bug Fixes**: Fixed issues such as data loss in command windows and MongoDB template command errors.
### Refactoring and Optimization
- **Code Simplification**: Optimized code structure, used the Assert class to simplify null checks, removed unnecessary if-else statements, and adopted Java 17 syntax.
- **Dependency Management**: Removed redundant dependencies and refactored certain packages into standalone modules.
- **Performance Improvements**: Enhanced performance through WebSocket connection optimization and better Redis URI construction.
- **Logs and Configurations**: Updated logback configurations for Collector and Manager.
### Documentation Enhancements
- **Translation Work**: Translated multiple class descriptions, blog posts, and monitoring template documentation from Chinese to English.
- **New Help Documentation**: Added help documentation for monitoring projects like ClickHouse, DNS, and Flink.
- **Updated Documentation Structure**: Refined the official website documentation, contribution guidelines, and homepage descriptions.
### Security Updates
- **Dependency Upgrades**: Upgraded the H2 database library to address security vulnerabilities.
- **Other Security Enhancements**: Fixed SSL certificate remaining days calculation and security matching in JexExpression.
### Additional Test Cases
- **Improved Test Coverage**: Added test cases for Redis, Nginx, Telnet, and other monitoring features, enhancing overall test coverage.
## Acknowledgements
Special thanks to **@zqr10159** for supporting this release and to the following community members for their collaborative efforts, ensuring the smooth completion of this release:
> LinuxSuRen, transactional, JavaProgrammerLB, westboy, xuziyang, makechoicenow, crossoverJie, xfl12345, boatrainlsz, lw-yang, tomsun28, Alanxtl, Aias00, Clownsw, zhangshenghang, zqr10159, LiuTianyou, handy-git, hudongdong129, dukbong, 15613060203, yqxxgh, miki-hmt, PeixyJ, allcontributors, Ceilzcx, lwjxy, starmilkxin, leo-934, zuobiao-zhou, tomorrowshipyltm, LLP2333, lwqzz, wang1027-wqh, gjjjj0101, ZY945, yuluo-yx, HeartLinked, alpha951, Hi-Mr-Wind, TJxiaobao, YxYL6125, MananPoojara, a-little-fool, Pzz-2021, Yanshuming1, Thespica, Calvin979, WinterKi1ler
>
## Apache HertzBeat
**Repository URL:**
[https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)
**Official Website:**
[https://hertzbeat.apache.org/](https://hertzbeat.apache.org/)
**Apache HertzBeat™ Download Link:**
[https://hertzbeat.apache.org/zh-cn/docs/download](https://hertzbeat.apache.org/zh-cn/docs/download)
**Apache HertzBeat™ Docker Images:**
Apache HertzBeat™ provides Docker images for each release, available on Docker Hub:
- HertzBeat: [https://hub.docker.com/r/apache/hertzbeat](https://hub.docker.com/r/apache/hertzbeat)
- HertzBeat Collector: [https://hub.docker.com/r/apache/hertzbeat-collector](https://hub.docker.com/r/apache/hertzbeat-collector)
**How to Contribute to the Apache HertzBeat™ Open Source Community?**
[https://hertzbeat.apache.org/zh-cn/docs/community/contribution](https://hertzbeat.apache.org/zh-cn/docs/community/contribution)
+618
View File
@@ -0,0 +1,618 @@
---
title: How to Participate in Developing Custom Collectors
author: zhangshenghang
author_title: zhangshenghang
author_url: https://github.com/zhangshenghang
tags: [opensource, practice]
keywords: [open source monitoring system, alerting system]
---
## Introduction to the Collector Module
[model-desc](/img/blog/model-desc.png)
The overall structure of the Collector module can be divided into four main parts, each responsible for different tasks:
- **Collector Entry Point**: This is the entry point for running the Collector module, from which collection tasks are executed after startup.
- **collector-basic**: This module mainly includes basic Collector implementations, such as monitoring for common protocols like HTTP and JDBC. The Collectors here typically do not require additional proprietary dependencies and can meet most basic monitoring needs.
- **collector-common**: This module stores some general-purpose utility classes and methods, such as shared connection pools and caching mechanisms, which other modules can reuse.
- **collector-xxx**: This is the extension Collector module for different services or protocols. For example, monitoring for specific services like MongoDB or RocketMQ often requires introducing their proprietary dependencies and developing within their respective modules. Below is an example of MongoDB's dependency:
```xml
`<dependency>`
`<groupId>`org.mongodb`</groupId>`
`<artifactId>`mongodb-driver-sync`</artifactId>`
`</dependency>`
```
Through this modular design, the Collector can easily be extended to adapt to various monitoring scenarios.
## Adding New Collector Monitoring
Next, we will demonstrate how to develop a new Collector through the practical case of creating a `kafka-collector` module.
### 1. Creating the `kafka-collector` Module
First, we need to create a new module in the project for Kafka monitoring, named `kafka-collector`. Then, modify the `pom.xml` file in this module.
[model-create](/img/blog/model-create.png)
**`pom.xml` Configuration**
```xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
`<modelVersion>`4.0.0`</modelVersion>`
`<parent>`
`<groupId>`org.apache.hertzbeat`</groupId>`
`<artifactId>`hertzbeat-collector`</artifactId>`
`<version>`2.0-SNAPSHOT`</version>`
`</parent>`
`<artifactId>`hertzbeat-collector-kafka`</artifactId>`
`<name>`${project.artifactId}`</name>`
`<properties>`
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
`</properties>`
`<dependencies>`
`<dependency>`
`<groupId>`org.apache.hertzbeat`</groupId>`
`<artifactId>`hertzbeat-collector-common`</artifactId>`
`<scope>`provided`</scope>`
`</dependency>`
<!-- kafka -->
`<dependency>`
`<groupId>`org.apache.kafka`</groupId>`
`<artifactId>`kafka-clients`</artifactId>`
`</dependency>`
`</dependencies>`
`</project>`
```
Points to note:
- Set `artifactId` to `hertzbeat-collector-kafka` to maintain naming consistency.
- Manually add the dependencies required for Kafka in `dependencies`.
### 2. Adding the Kafka Protocol Class
To enable the Collector module to handle the Kafka monitoring protocol, we need to create a `KafkaProtocol` class to define the connection parameters for Kafka. This class should be located at `common/src/main/java/org/apache/hertzbeat/common/entity/job/protocol/KafkaProtocol.java`.
```java
package org.apache.hertzbeat.common.entity.job.protocol;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class KafkaProtocol {
/**
* IP address or domain name
*/
private String host;
/**
* Port number
*/
private String port;
/**
* Timeout
*/
private String timeout;
/**
* Command
*/
private String command;
}
```
### 3. Adding Kafka Support in Metrics
In the `common/src/main/java/org/apache/hertzbeat/common/entity/job/Metrics.java` class, add support for the Kafka protocol.
```java
private KafkaProtocol kclient;
```
### 4. Adding Constants
Define constants for the Kafka protocol in the `DispatchConstants` class.
```java
String PROTOCOL_KAFKA = "kclient";
```
### 5. Adding the Kafka Connection Class
The `KafkaConnect` class is used to manage the connection logic for the Kafka Admin.
```java
package org.apache.hertzbeat.collector.collect.kafka;
import org.apache.hertzbeat.collector.collect.common.cache.AbstractConnection;
import org.apache.kafka.clients.admin.AdminClient;
import org.apache.kafka.clients.admin.AdminClientConfig;
import org.apache.kafka.clients.admin.KafkaAdminClient;
import java.util.Properties;
public class KafkaConnect extends AbstractConnection`<AdminClient>` {
private static AdminClient adminClient;
public KafkaConnect(String brokerList) {
Properties properties = new Properties();
properties.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, brokerList);
properties.put(AdminClientConfig.RETRIES_CONFIG, 3);
adminClient = KafkaAdminClient.create(properties);
}
@Override
public AdminClient getConnection() {
return adminClient;
}
@Override
public void closeConnection() throws Exception {
if (this.adminClient != null) {
this.adminClient.close();
}
}
public static synchronized AdminClient getAdminClient(String brokerList) {
if (adminClient == null) {
Properties properties = new Properties();
properties.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, brokerList);
adminClient = KafkaAdminClient.create(properties);
}
return adminClient;
}
}
```
### 6. Implementing the Kafka Collection Class
Inherit from the `AbstractCollect` class and implement the specific data collection logic within it. Specific logic details are not covered here.
```java
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.hertzbeat.collector.collect.kafka;
import lombok.extern.slf4j.Slf4j;
import org.apache.hertzbeat.collector.collect.AbstractCollect;
import org.apache.hertzbeat.collector.dispatch.DispatchConstants;
import org.apache.hertzbeat.common.entity.job.Metrics;
import org.apache.hertzbeat.common.entity.job.protocol.KafkaProtocol;
import org.apache.hertzbeat.common.entity.message.CollectRep;
import org.apache.kafka.clients.admin.AdminClient;
import org.apache.kafka.clients.admin.DescribeTopicsResult;
import org.apache.kafka.clients.admin.ListTopicsOptions;
import org.apache.kafka.clients.admin.ListTopicsResult;
import org.apache.kafka.clients.admin.OffsetSpec;
import org.apache.kafka.clients.admin.TopicDescription;
import org.apache.kafka.common.TopicPartition;
import org.apache.kafka.common.TopicPartitionInfo;
import org.springframework.util.Assert;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
@Slf4j
public class KafkaCollectImpl extends AbstractCollect {
@Override
public void preCheck(Metrics metrics) throws IllegalArgumentException {
KafkaProtocol kafkaProtocol = metrics.getKclient();
// Ensure that metrics and kafkaProtocol are not null
Assert.isTrue(metrics != null && kafkaProtocol != null, "Kafka collect must have kafkaProtocol params");
// Ensure that host and port are not empty
Assert.hasText(kafkaProtocol.getHost(), "Kafka Protocol host is required.");
Assert.hasText(kafkaProtocol.getPort(), "Kafka Protocol port is required.");
}
@Override
public void collect(CollectRep.MetricsData.Builder builder, long monitorId, String app, Metrics metrics) {
try {
KafkaProtocol kafkaProtocol = metrics.getKclient();
String command = kafkaProtocol.getCommand();
boolean isKafkaCommand = SupportedCommand.isKafkaCommand(command);
if (!isKafkaCommand) {
log.error("Unsupported command: {}", command);
return;
}
// Create AdminClient with the provided host and port
AdminClient adminClient = KafkaConnect.getAdminClient(kafkaProtocol.getHost() + ":" + kafkaProtocol.getPort());
// Execute the appropriate collection method based on the command
switch (SupportedCommand.fromCommand(command)) {
case TOPIC_DESCRIBE:
collectTopicDescribe(builder, adminClient);
break;
case TOPIC_LIST:
collectTopicList(builder, adminClient);
break;
case TOPIC_OFFSET:
collectTopicOffset(builder, adminClient);
break;
default:
log.error("Unsupported command: {}", command);
break;
}
} catch (InterruptedException | ExecutionException e) {
log.error("Kafka collect error", e);
}
}
/**
* Collect the earliest and latest offsets for each topic
*
* @param builder The MetricsData builder
* @param adminClient The AdminClient
* @throws InterruptedException If the thread is interrupted
* @throws ExecutionException If an error occurs during execution
*/
private void collectTopicOffset(CollectRep.MetricsData.Builder builder, AdminClient adminClient) throws InterruptedException, ExecutionException {
ListTopicsResult listTopicsResult = adminClient.listTopics(new ListTopicsOptions().listInternal(true));
Set`<String>` names = listTopicsResult.names().get();
names.forEach(name -> {
try {
Map<String, TopicDescription> map = adminClient.describeTopics(Collections.singleton(name)).all().get(3L, TimeUnit.SECONDS);
map.forEach((key, value) -> value.partitions().forEach(info -> extractedOffset(builder, adminClient, name, value, info)));
} catch (TimeoutException | InterruptedException | ExecutionException e) {
log.warn("Topic {} get offset fail", name);
}
});
}
private void extractedOffset(CollectRep.MetricsData.Builder builder, AdminClient adminClient, String name, TopicDescription value, TopicPartitionInfo info) {
try {
TopicPartition topicPartition = new TopicPartition(value.name(), info.partition());
long earliestOffset = getEarliestOffset(adminClient, topicPartition);
long latestOffset = getLatestOffset(adminClient, topicPartition);
CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder();
valueRowBuilder.addColumns(value.name());
valueRowBuilder.addColumns(String.valueOf(info.partition()));
valueRowBuilder.addColumns(String.valueOf(earliestOffset));
valueRowBuilder.addColumns(String.valueOf(latestOffset));
builder.addValues(valueRowBuilder.build());
} catch (TimeoutException | InterruptedException | ExecutionException e) {
log.warn("Topic {} get offset fail", name);
}
}
/**
* Get the earliest offset for a given topic partition
*
* @param adminClient The AdminClient
* @param topicPartition The TopicPartition
* @return The earliest offset
*/
private long getEarliestOffset(AdminClient adminClient, TopicPartition topicPartition)
throws InterruptedException, ExecutionException, TimeoutException {
return adminClient
.listOffsets(Collections.singletonMap(topicPartition, OffsetSpec.earliest()))
.all()
.get(3L, TimeUnit.SECONDS)
.get(topicPartition)
.offset();
}
/**
* Get the latest offset for a given topic partition
*
* @param adminClient The AdminClient
* @param topicPartition The TopicPartition
* @return The latest offset
*/
private long getLatestOffset(AdminClient adminClient, TopicPartition topicPartition)
throws InterruptedException, ExecutionException, TimeoutException {
return adminClient
.listOffsets(Collections.singletonMap(topicPartition, OffsetSpec.latest()))
.all()
.get(3L, TimeUnit.SECONDS)
.get(topicPartition)
.offset();
}
/**
* Collect the list of topics
*
* @param builder The MetricsData builder
* @param adminClient The AdminClient
*/
private static void collectTopicList(CollectRep.MetricsData.Builder builder, AdminClient adminClient) throws InterruptedException, ExecutionException {
ListTopicsOptions options = new ListTopicsOptions().listInternal(true);
Set`<String>` names = adminClient.listTopics(options).names().get();
names.forEach(name -> {
CollectRep.ValueRow valueRow = CollectRep.ValueRow.newBuilder().addColumns(name).build();
builder.addValues(valueRow);
});
}
/**
* Collect the description of each topic
*
* @param builder The MetricsData builder
* @param adminClient The AdminClient
*/
private static void collectTopicDescribe(CollectRep.MetricsData.Builder builder, AdminClient adminClient) throws InterruptedException, ExecutionException {
ListTopicsOptions options = new ListTopicsOptions();
options.listInternal(true);
ListTopicsResult listTopicsResult = adminClient.listTopics(options);
Set`<String>` names = listTopicsResult.names().get();
DescribeTopicsResult describeTopicsResult = adminClient.describeTopics(names);
Map<String, TopicDescription> map = describeTopicsResult.all().get();
map.forEach((key, value) -> {
List`<TopicPartitionInfo>` listp = value.partitions();
listp.forEach(info -> {
CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder();
valueRowBuilder.addColumns(value.name());
valueRowBuilder.addColumns(String.valueOf(value.partitions().size()));
valueRowBuilder.addColumns(String.valueOf(info.partition()));
valueRowBuilder.addColumns(info.leader().host());
valueRowBuilder.addColumns(String.valueOf(info.leader().port()));
valueRowBuilder.addColumns(String.valueOf(info.replicas().size()));
valueRowBuilder.addColumns(String.valueOf(info.replicas()));
builder.addValues(valueRowBuilder.build());
});
});
}
@Override
public String supportProtocol() {
return DispatchConstants.PROTOCOL_KAFKA;
}
}
```
### 7. Configuring the SPI Service File
In the `collector/collector/src/main/resources/META-INF/services/org.apache.hertzbeat.collector.collect.AbstractCollect` file, add the `KafkaCollectImpl` class.
```text
...
org.apache.hertzbeat.collector.collect.kafka.KafkaCollectImpl
```
### 8. Adding Kafka Dependencies to the Collector Module
The final step is to add the `kafka-collector` module dependency in `collector/collector/pom.xml`:
```xml
`<dependency>`
`<groupId>`org.apache.hertzbeat`</groupId>`
`<artifactId>`hertzbeat-collector-kafka`</artifactId>`
`<version>`${hertzbeat.version}`</version>`
`</dependency>`
```
By following the above steps, we have completed the development of a Kafka Collector, from protocol definition to the final SPI configuration and dependency management, fully extending a Kafka monitoring module.
## Adding Configuration Parsing Files
```yaml
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# The monitoring type category: service-application service monitoring db-database monitoring custom-custom monitoring os-operating system monitoring
category: mid
# The monitoring type e.g.: linux windows tomcat mysql aws...
app: kafka_client
# The monitoring i18n name
name:
zh-CN: Kafka消息系统(客户端)
en-US: Kafka Message (Client)
zh-TW: Kafka消息系統(客戶端)
# The description and help of this monitoring type
help:
zh-CN: HertzBeat 使用 <a href="https://hertzbeat.apache.org/docs/advanced/extend-jmx">Kafka Admin Client`</a>` 对 Kafka 的通用指标进行采集监控。`</span>`
en-US: HertzBeat uses <a href='https://hertzbeat.apache.org/docs/advanced/extend-jmx'>Kafka Admin Client`</a>` to monitor Kafka general metrics. `</span>`
zh-TW: HertzBeat 使用 <a href="https://hertzbeat.apache.org/docs/advanced/extend-jmx">Kafka Admin Client`</a>` 對 Kafka 的通用指標進行采集監控。`</span>`
helpLink:
zh-CN: https://hertzbeat.apache.org/zh-cn/docs/help/kafka_client
en-US: https://hertzbeat.apache.org/docs/help/kafka_client
# Input params define for monitoring (render web UI by the definition)
params:
# field-param field key
- field: host
# name-param field display i18n name
name:
zh-CN: 目标Host
en-US: Target Host
# type-param field type (most mapping the HTML input type)
type: host
# required-true or false
required: true
- field: port
name:
zh-CN: 端口
en-US: Port
type: number
# when type is number, range is required
range: '[0,65535]'
required: true
defaultValue: 9092
# collect metrics config list
metrics:
# metrics - server_info
- name: topic_list
i18n:
zh-CN: 主题列表
en-US: Topic List
# metrics scheduling priority (0->127) -> (high->low), metrics with the same priority will be scheduled in parallel
# priority 0's metrics are availability metrics, they will be scheduled first, only if availability metrics collect successfully will the scheduling continue
priority: 0
# collect metrics content
fields:
# field-metric name, type-metric type (0-number, 1-string), unit-metric unit ('%', 'ms', 'MB'), label-whether it is a metrics label field
- field: TopicName
type: 1
i18n:
zh-CN: 主题名称
en-US: Topic Name
# the protocol used for monitoring, e.g., sql, ssh, http, telnet, wmi, snmp, sdk
protocol: kclient
# the config content when protocol is jmx
kclient:
host: ^_^host^_^
port: ^_^port^_^
command: topic-list
- name: topic_detail
i18n:
zh-CN: 主题详细信息
en-US: Topic Detail Info
# metrics scheduling priority (0->127) -> (high->low), metrics with the same priority will be scheduled in parallel
# priority 0's metrics are availability metrics, they will be scheduled first, only if availability metrics collect successfully will the scheduling continue
priority: 0
# collect metrics content
fields:
# field-metric name, type-metric type (0-number, 1-string), unit-metric unit ('%', 'ms', 'MB'), label-whether it is a metrics label field
- field: TopicName
type: 1
i18n:
zh-CN: 主题名称
en-US: Topic Name
- field: PartitionNum
type: 1
i18n:
zh-CN: 分区数量
en-US: Partition Num
- field: PartitionLeader
type: 1
i18n:
zh-CN: 分区领导者
en-US: Partition Leader
- field: BrokerHost
type: 1
i18n:
zh-CN: Broker主机
en-US: Broker Host
- field: BrokerPort
type: 1
i18n:
zh-CN: Broker端口
en-US: Broker Port
- field: ReplicationFactorSize
type: 1
i18n:
zh-CN: 复制因子大小
en-US: Replication Factor Size
- field: ReplicationFactor
type: 1
i18n:
zh-CN: 复制因子
en-US: Replication Factor
# the protocol used for monitoring, e.g., sql, ssh, http, telnet, wmi, snmp, sdk
protocol: kclient
# the config content when protocol is jmx
kclient:
host: ^_^host^_^
port: ^_^port^_^
command: topic-describe
- name: topic_offset
i18n:
zh-CN: 主题偏移量
en-US: Topic Offset
# metrics scheduling priority (0->127) -> (high->low), metrics with the same priority will be scheduled in parallel
# priority 0's metrics are availability metrics, they will be scheduled first, only if availability metrics collect successfully will the scheduling continue
priority: 0
# collect metrics content
fields:
# field-metric name, type-metric type (0-number, 1-string), unit-metric unit ('%', 'ms', 'MB'), label-whether it is a metrics label field
- field: TopicName
type: 1
i18n:
zh-CN: 主题名称
en-US: Topic Name
- field: PartitionNum
type: 1
i18n:
zh-CN: 分区数量
en-US: Partition Num
- field: earliest
type: 0
i18n:
zh-CN: 最早偏移量
en-US: Earliest Offset
- field: latest
type: 0
i18n:
zh-CN: 最新偏移量
en-US: Latest Offset
# the protocol used for monitoring, e.g., sql, ssh, http, telnet, wmi, snmp, sdk
protocol: kclient
# the config content when protocol is jmx
kclient:
host: ^_^host^_^
port: ^_^port^_^
command: topic-offset
```
With these steps, the custom development of the `collector` is complete. You can start the service and begin monitoring metrics according to the normal logic.
## Development and Debugging
When starting the `manager` module locally, if the added monitoring cannot find the class, add the dependency to the `manager` module.
**Note: When packaging and submitting code, do not submit the dependencies under the `manager` module.**
```xml
<!-- collector-kafka -->
`<dependency>`
`<groupId>`org.apache.hertzbeat`</groupId>`
`<artifactId>`hertzbeat-collector-kafka`</artifactId>`
`<version>`${hertzbeat.version}`</version>`
`</dependency>`
```
+121
View File
@@ -0,0 +1,121 @@
---
title: GSOC Google Summer of Code 2025 Recruitment is Underway | We Look Forward to Your Proposals
author: zhangshenghang
author_title: zhangshenghang
author_url: https://github.com/zhangshenghang
tags: [opensource, practice]
keywords: [open source monitoring system, alerting system]
---
## The Origin and Purpose of GSOC
GSOC, namely Google Summer of Code, is a global initiative launched by Google. It aims to encourage students to participate in the development of open-source software projects. Here is a detailed introduction:
- GSOC started in 2005. Initially, it was a project established by Google to promote the development of the open-source community and encourage more students to engage in the development and innovation of open-source software. Through this project, Google hopes to inject fresh blood into the open-source world, enabling students to enhance their technical capabilities through practice, and at the same time, bring new ideas and contributions to open-source projects.
## Task: An AI Agent for Monitoring Information Interaction Based on the MCP Protocol
**Website**: `https://hertzbeat.apache.org/`
**Github**: `http://github.com/apache/hertzbeat/`
### Background
Apache HertzBeat™ is an open-source real-time monitoring tool that supports a wide range of monitoring targets, including web services, databases, middleware, and more. It is characterized by high performance, scalability, and security.
With the continuous advancement of artificial intelligence (AI) technology, integrating AI with monitoring systems can significantly improve their usability and interactivity. By developing an AI agent based on the Model Context Protocol (MCP), we aim to enable conversational interaction for querying monitoring information, adding new monitoring tasks, and retrieving monitoring metrics. This will provide a more user-friendly and intelligent monitoring management experience.
## Functional Requirements
### Query Monitoring and Alarm Information
1. **Monitoring Item Status Monitoring**
Be able to obtain the status of monitoring items through natural language;
For example: Which monitoring items are currently abnormal? It should inform the user which monitoring items are abnormal and the time when the abnormality occurred.
2. **Search for Metric Data**
Be able to obtain metric data through natural language;
For example: a. Which servers currently have a CPU usage rate exceeding 80%?
b. Display the CPU usage of server 192.168.1.1 in the last day in the form of a chart.
3. **Alarm Data**
Obtain alarm data through natural language;
For example: Which monitoring alarms have been more frequent recently?
### Add New Monitoring Tasks
1. **Add New Monitoring Targets**
Be able to add new monitoring targets through natural language;
For example: a. I want to monitor the response time of the web service.
b. Please help me add monitoring for the database connection pool.
2. **Configure Alarm Thresholds**
Be able to configure alarm thresholds through natural language;
For example: a. Trigger an alarm when the web service response time exceeds 5 seconds.
b. Send a notification when the database connection pool usage rate exceeds 90%.
### Considerations During Design
1. There are many data sources supported by the underlying storage. How to monitor? For example: Natural language -> SQL -> Query data source -> Large language model.
2. Compatibility with large language models, supporting commonly used models.
3. The usability of the solution, making it convenient for users to use.
### Requirement Analysis
- **Apache HertzBeat**: As the core backend of the monitoring system, it provides data collection, storage, and management functions.
- **MCP Protocol**: An open protocol that enables seamless integration between large language model (LLM) applications and external data sources and tools.
- **Front-end Interaction**: Develop a user-friendly interface that supports voice or text input and displays monitoring information and interaction results.
### Recommended Skills
- **Java + TypeScript**: Apache HertzBeat™ is developed based on this technology stack. Therefore, mastering these technologies is crucial for integrating with HertzBeat.
- **SpringAi**: It is recommended to use SpringAi to build the AI agent.
- **LLM + MCP**: You need to understand large language models (LLM) and the MCP protocol. SpringAi seems to support the MCP protocol, or you can consider using the mcp-sdk directly.
### Scale
- **Difficulty**: Difficult
- **Project Scale**: Approximately 350 hours
### Mentors
If you are interested, you can send an email to the mentors, including your solution and ideas.
- **Gong Chao**: `gongchao@apache.org`
- **Zhang Shenghang**: `shenghang@apache.org`
## How Can I Increase My Chances of Being Selected as a GSoC Contributor?
1. After the list of organizations is announced, please visit the program website to view these organizations and find several organizations that interest you.
2. Carefully read the "Project Ideas" list of these organizations.
3. If you see an idea that interests you, please contact the organization through the organization's preferred communication method (listed on the organization's page on the GSoC website).
4. Communicate with the mentors and community members to determine whether this project idea is something you are willing to implement during the program. If what you do is not something you are interested in, it will not be a pleasant summer vacation for you and your mentor.
5. During the communication with the mentors and other members of the organization's community, you have obtained some information. Use this information to write a proposal.
6. Please submit the proposal as early as possible so that the mentors have time to provide feedback. You need to have time to make revisions based on their feedback and resubmit it before the deadline. Do not wait until the last minute to submit the proposal!
## 2025 Google Summer of Code Timeline
All times are Coordinated Universal Time (UTC)
1. **January 27th - 18:00**: Mentor organizations can start submitting applications to Google.
2. **February 11th - 18:00**: Deadline for mentor organization applications.
3. **February 11th to 26th**: Google program administrators review organization applications.
4. **February 27th - 18:00**: Release the list of approved mentor organizations.
5. **February 27th to March 24th**: Potential GSoC contributors discuss proposal ideas with the mentoring organizations.
6. **March 24th - 18:00**: Start accepting applications from Google Summer of Code contributors (i.e., GSoC contributors).
7. **April 8th - 18:00**: Deadline for GSoC contributor applications.
8. **April 29th - 18:00**: Organization administrators need to determine the ranking of GSoC contributor proposals.
9. **May 8th - 18:00**: Announce the accepted GSoC contributor projects.
10. **May 8th to June 1st**: Community interaction period. Participating Google Summer of Code contributors (GSoC contributors) get to know the mentors, read the documentation, learn relevant information, and prepare for starting the project work.
11. **June 2nd**: Start coding officially!
12. **July 14th - 18:00**: Mentors and Google Summer of Code contributors can start submitting mid-term evaluations (applicable to standard 12-week programming projects).
13. **July 18th - 18:00**: Deadline for mid-term evaluations (standard coding cycle).
14. **July 14th to August 25th**: Working stage. Under the guidance of the mentors, GSoC contributors carry out the projects.
15. **August 25th to September 1st - 18:00**: Final week. GSoC contributors submit the final results and the final mentor evaluations (standard coding cycle).
16. **September 1st to 8th - 18:00**: Mentors submit the final evaluation results of GSoC contributors (standard coding cycle).
17. **September 1st to November 9th**: GSoC contributors with an extended schedule can continue coding.
18. **November 10th - 18:00**: Deadline for all Google Summer of Code contributors to submit the final results and final evaluations.
19. **November 17th - 18:00**: Final date for mentors to submit evaluations for GSoC contributor projects with an extended deadline.
## Frequently Asked Questions about Google Summer of Code
[https://developers.google.com/open-source/gsoc/faq?hl=zh-cn](https://developers.google.com/open-source/gsoc/faq?hl=zh-cn)
+47
View File
@@ -0,0 +1,47 @@
---
title: Warmly Welcome HertzBeat's New Community Committer!
author: yunfan24
author_title: Lixin Diao
author_url: https://github.com/yunfan24
tags: [opensource, practice]
keywords:
[
open source monitoring system,
alerting system,
Apache,
Apache Committer,
HertzBeat,
]
---
🎉 Hello everyone. I'm very glad to receive an invitation from the Apache HertzBeat™ community and officially become a Committer of the project!
## My Open Source Journey
As a senior undergraduate student, my interest in open source began in my sophomore year. However, early attempts were challenging—even getting projects to run smoothly was difficult, which once made me hesitant to dive deeper. That changed when I discovered HertzBeat in a tech community.
HertzBeat's detailed contribution guidelines significantly lowered the entry barrier. Thanks to those who paved the way, I got the project running in just a few steps. Its graphical interface helped me quickly grasp the business logic. Later, I watched Tom's introductory video on Bilibili, which deepened my understanding.
Starting with bug fixes, I gradually explored the codebase through breakpoint debugging and log analysis. What kept me motivated was the community's responsiveness—my first PR was merged on the same day, and my GitHub ID appeared in the contributors list the next morning. This positive feedback loop was incredibly encouraging.
## Entry Points for Open Source Participation
For developers looking to contribute, here are my suggestions:
1. **Start from a user's perspective**: Use the project first, then identify optimizations like UI improvements (pagination, fuzzy search). Even typo fixes are welcome!
2. **Technical debt treasure hunt**: Search globally for `TODO`/`FIXME` comments to uncover "hidden quests" left by predecessors.
3. **Watch Issues/Discussions**: Stay updated through GitHub subscriptions or community chats. Engage in discussions and tackle interesting problems.
4. **Documentation contributions**: Fix typos, broken links, or missing translations—these are great starting points.
5. **Enhance testing**: Add unit/E2E tests to improve coverage and project stability.
6. **Be proactive**: Join developer groups, subscribe to mailing lists, or attend project meetings. Express your interests and align contributions with the project roadmap.
## Personal Growth
Contributing to HertzBeat taught me the essence of geek culture—every line of code and detail is meticulously crafted, not just "good enough." This mindset has elevated my development skills.
Open source has also broadened my horizons. Previously, "Apache" only existed in my project dependencies. Through the community, I learned about the Apache Software Foundation's operations—and now I'm part of an ASF project myself!
Most importantly, I've connected with experts from diverse regions and industries. Their experiences are invaluable treasures to me.
## Closing Thoughts
Thank you to the community and everyone who reviewed my code! Wishing Apache HertzBeat™ a successful graduation from the Apache Incubator and continued growth! 🚀
@@ -0,0 +1,106 @@
---
title: "Behind the Scenes of HertzBeat: How Metric Collection Works"
author: JuJinPark
author_title: JuJin
author_url: https://github.com/JuJinPark
tags: [opensource, practice]
keywords: [open source monitoring system]
---
## Behind the Scenes of HertzBeat: How Metric Collection Works
HertzBeat is an open-source, real-time monitoring system designed for flexibility and ease of use. But how exactly does it collect, process, and store metrics from various systems?
In this post, well walk through the internal architecture behind **HertzBeats metric collection pipeline** — from job distribution to alerting and storage — with the help of a high-level system diagram.
---
### HertzBeats Metric Collection Architecture
![HertzBeat Architecture](/img/docs/hertzbeat-metrics-collection-arch.png)
> **Figure:** High-level architecture of HertzBeat's metric collection system. The Manager handles job scheduling, alerting, and storage, while Collectors (external or internal) perform the actual metric collection. Communication between the Manager and Collectors uses a custom Netty TCP protocol.
---
### 1. Job Distribution: Assigning What to Monitor
When the **Manager** component starts, it loads monitoring targets from the database. These targets define the host, collection interval, and other parameters.
To distribute the workload, the Manager sends jobs to **external Collectors** over a custom **Netty-based TCP protocol**. The `CollectJobScheduling` module handles this logic using **consistent hashing**, ensuring jobs are evenly distributed across collectors.
> 💡 HertzBeat also includes a built-in **main collector** (identified as `MAIN_COLLECTOR_NODE`) that runs directly inside the Manager. This allows HertzBeat to operate in **standalone mode** without requiring any external collectors.
---
### 2. Task Scheduling: When to Monitor
Once a Collector receives a job, it registers it with the **`TimerDispatch`** system.
- For **external collectors**, the Manager sends the task via the TCP connection.
- For the **main collector**, the Manager directly invokes `CollectJobService` within the same process.
Each Collector runs a **`Timer`** in a background thread, which schedules tasks according to their configured intervals. When the time is up, the timer triggers a `TimerTask` to begin metric collection.
---
### 3. Task Execution: How Metrics Are Collected
When a `TimerTask` is triggered, it creates a `MetricsCollect` task and passes it to `MetricsTaskDispatch`, which places it in the **`MetricsCollectorQueue`**.
- A dedicated thread (`CommonDispatcher`) continuously polls this queue.
- Tasks are executed by a **worker thread pool**, allowing multiple metric collections to run concurrently.
- Each task uses a specific **collector strategy** (e.g., HTTP, JDBC, SSH) to fetch metrics from the target system.
---
### 4. Result Processing: What Happens to Collected Data
Once metrics are collected, the results are processed by the **`CollectDataDispatch`** module.
- If the task is recurring, it is rescheduled via `TimerDispatch`.
- Results are added to a **`CommonDataQueue`** for further handling.
For external collectors, results are sent **back to the Manager** via the Netty TCP connection. For the main collector, results are forwarded **directly** to the next processing stage without network overhead.
---
### 5. Alerting & Storage: Making Metrics Useful
The Manager receives metric data and pushes it into the `MetricsDataToAlertQueue`, where it is processed through two main pipelines:
#### 🔔 Alerting
- The `RealTimeAlertCalculator` consumes metrics from the alert queue.
- It checks each metric against user-defined alert rules and triggers alerts if conditions are met.
#### 🧠 Storage
- After alert evaluation, metrics are added to the `MetricsDataToStorageQueue`.
- A background thread (`DataStorageDispatch`) processes this queue and stores the metrics in a database for long-term analysis and dashboard visualization.
---
### Standalone Mode: No External Collectors Required
Thanks to the built-in **main collector**, HertzBeat can operate entirely in standalone mode. This is especially useful for testing, small deployments, or quick setup. All core components — job scheduling, collection, alerting, and storage — run within a single process.
---
### 🧠 Conclusion
HertzBeats metric collection system is designed for **performance, scalability, and flexibility**. With its:
- **Queue-based, multi-threaded architecture**
- **Persistent TCP connections** for reliable job/result flow
- **Built-in main collector** for standalone operation
it handles large-scale monitoring workloads with minimal overhead and high efficiency.
---
### 🙌 Whats Next?
If you're curious to explore more:
- ⭐️ [Star the project on GitHub](https://github.com/apache/hertzbeat)
- 🤝 [Contribute or open an issue](https://github.com/apache/hertzbeat/issues)
+69
View File
@@ -0,0 +1,69 @@
---
title: From Commiter to PMC The Journey of Growth at Apache HertzBeat™
author: zhangshenghang
author_title: zhangshenghang
author_url: https://github.com/zhangshenghang
tags: [opensource, practice]
keywords: [open source monitoring system, alerting system]
---
## From Committer to PMC: The Transformation and Growth of Roles
A year ago, when I received the notification of becoming an Apache HertzBeat™ **Committer**, the joy and sense of mission I felt are still vivid in my memory. At that time, I was more focused on specific technical implementations and feature developments. Now, being invited to join the **PMC** means that I need to view the project's development from a more comprehensive perspective. This is not only an acknowledgment of my participation in open source but also a call for future responsibilities.
### In-depth Participation: Accumulation during the Committer Period
After becoming a Committer, my daily work changed significantly:
- **Code review became the norm**: From the initial simple PR reviews to the ability to systematically evaluate code quality, the rationality of the architecture, and consistency with the overall project direction.
- **Tighter community collaboration**: I started to regularly participate in community meetings, assist new contributors in solving problems, and even take the lead in the development and implementation of certain features.
- **Participation in technical decision-making**: On key issues such as monitoring protocol support and storage engine optimization, I began to put forward my own opinions and jointly develop implementation plans with the core team.
During this period, I deeply realized that **the vitality of an open source project lies not only in the code but also in community collaboration and trust**. Every code merge and every problem discussion are minor adjustments to the project's direction, and the role of the Committer gave me the opportunity to be involved.
## Becoming a PMC: The Upgrade of Responsibilities and Challenges
The responsibilities of the PPMC go far beyond the code level. It requires members to have a deeper understanding and thinking about the project's **technical direction, community governance, and long-term development**. When I received the PPMC invitation, I felt excited but also realized that I needed to face new challenges:
### 1. Participation in Technical Strategy
As a PMC, I need to jointly plan the long-term roadmap of HertzBeat with other members. For example:
- **Performance optimization**: In the face of large-scale monitoring scenarios, how to optimize storage and query efficiency.
- **Enhanced scalability**: How to design a more flexible plugin mechanism to facilitate the community to contribute new monitoring types.
These issues are no longer simple code implementations but involve in-depth discussions on technical selection, community resource allocation, and even project positioning.
### 2. Community Governance and Health
The PPMC needs to pay attention to the long-term healthy development of the community, including:
- **Contributor experience**: How to optimize the documentation and lower the entry threshold for new members.
- **Community culture**: Ensure a friendly discussion atmosphere and that conflicts can be properly resolved.
- **Sustainable development**: Motivate long-term contributors while attracting new blood.
## Personal Growth: The Transformation of Skills and Mentality
This year's experience has improved me in multiple dimensions:
- **Technical breadth**: From focusing on specific functions to understanding the overall architecture of the distributed monitoring system.
- **Soft skills**: Learned how to communicate effectively, coordinate different opinions, and promote community consensus.
- **Project management**: Understood the operation mode of open source projects and balanced the ideal and practical constraints.
The most profound realization is that **in the open source community, technical ability is just the foundation, and the real value lies in whether you can create achievements greater than the individual through collaboration**.
## Future Prospects: Moving Forward with HertzBeat
As a newly appointed PMC, I have several key directions for the future:
1. **Promote HertzBeat to become an important choice in the field of cloud-native monitoring**, especially to form a differentiated advantage in terms of lightweight and ease of use.
2. **Build a more active contributor community** and cultivate core contributors through mentorship programs, regular activities, and other means.
3. **Improve the project governance process** to make decision-making more transparent and participation smoother.
## Acknowledgments and Encouragement
I would like to especially thank **Tom** for his guidance and all community partners for their support. The Apache Way emphasizes that "community is more important than code", and this concept has deeply influenced my way of working.
Finally, I want to share with you who are reading this: **Open source is a long-lasting and warm journey. There is no need to pursue quick success. Just keep contributing, and the rewards will come naturally**. I look forward to meeting more like-minded friends in the HertzBeat community!
As we often say: **"Participating in open source is to make technology better, not to make life busier"** —— Let's encourage each other 😊
+315
View File
@@ -0,0 +1,315 @@
---
title: Announcement of Apache HertzBeat™ 1.7.0 Release
author: tomsun28
author_title: tomsun28
author_url: https://github.com/zhangshenghang
tags: [opensource, release]
keywords: [open source monitoring system, alerting system, HertzBeat, release]
---
Dear Community Members,
We are thrilled to announce the official release of Apache HertzBeat™ version 1.7.0!
## Downloads and Documentation
- **Apache HertzBeat™ 1.7.0 Download Link**: [https://hertzbeat.apache.org/docs/download](https://hertzbeat.apache.org/docs/download)
- **Apache HertzBeat™ Documentation**: [https://hertzbeat.apache.org/docs/](https://hertzbeat.apache.org/docs/)
## Major Updates
### New Features and Enhancements
- **Custom Refresh Interval**: Supports custom refresh intervals for each group of metrics to meet monitoring needs in different scenarios.
- **Task Auto Discovery**: Supports automatic task discovery via `http_sd`, enhancing task flexibility and manageability.
- **New Alarm Module**: Supports real-time threshold and scheduled threshold, grouped convergence, alarm suppression, alarm silencing, and more.
- **Kafka Monitoring Enhancement**: Optimized Kafka monitoring features, including improved Kafka chart displays and added Kafka consumer group monitoring metrics.
- **Support for Multiple Protocols and Monitoring Types**: Added support for monitoring `Plc` protocol, further expanding the monitoring scope.
- **Alarm Function Enhancement**: Supports replacing Tencent Cloud SDK with HTTP API for sending SMS notifications, increasing the flexibility and scalability of alarm notifications. Additionally, it supports multi-query expression threshold alarms and periodic alarm thresholds.
- **Multilingual Support**: Added support for languages such as Japanese and Traditional Chinese, enhancing the international user experience.
- **Monitoring Function Enhancement**: Supports monitoring for more types such as `StarRocks FE`, providing users with more monitoring options.
- **E2E Testing Enhancement**: Added multiple E2E test codes, including for Kafka, SSH, and API, improving test coverage and stability.
- **Data Storage Optimization**: Updated `VictoriaMetrics` and `Greptime` storage to improve data storage performance and stability.
- **More New Features**
### Bug Fixes
- **Fix Docker Build Errors**: Fixed the collector Docker build errors, ensuring normal Docker image builds.
- **Fix Linux Process Monitoring Issue**: Fixed an issue where Linux process monitoring failed without warning when a process exited abnormally, improving monitoring stability.
- **Fix Windows Chinese Encoding Issue**: Fixed the issue with Chinese encoding on Windows, ensuring normal operation in Windows environments.
- **Fix Grafana Configuration Issue**: Fixed issues related to Grafana configuration, improving the Grafana integration experience.
- **Fix Windows Metric Configuration Issue**: Updated Windows metric YAML files to resolve related issues.
- **Fix Flyway Location Detection Issue**: Fixed the issue where Flyway could not automatically detect vendor locations, improving database migration reliability.
- **Fix Data Storage Issues**: Fixed issues related to data storage, including Prometheus data storage issues and data update logic issues, ensuring data accuracy and integrity.
- **Fix Alarm Notification Issues**: Fixed issues related to alarm notifications, including duplicate sending and configuration problems, improving alarm notification accuracy and reliability.
- **Fix Monitoring Status Update Issue**: Fixed the issue where monitoring status wasn't updated, ensuring real-time and accurate monitoring status.
- **And Other Bug Fixes**
### Refactoring and Optimization
- **Memory Structure Optimization**: Used `Apache Arrow` as the in-memory data structure, improving memory usage efficiency and performance.
- **Code Standard Optimization**: Optimized the code according to coding standards, improving code quality and readability.
- **Cache Optimization**: Added an `LRU` local cache based on the Singleton pattern, improving cache efficiency and performance.
- **Memory Leak Fix**: Fixed potential memory leak issues, improving system stability and reliability.
- **And Other Optimizations**
### Documentation Enhancements
- **Updated Deployment Documentation**: Updated deployment documentation with more detailed deployment guidance.
- **Updated Security Model Documentation**: Updated the security model documentation.
- **Updated Grafana Configuration Documentation**: Updated Grafana configuration methods and documentation for exposing URLs, enhancing user experience.
- **Updated Windows Monitoring Documentation**: Updated Windows system monitoring documentation with more detailed monitoring guidance.
- **Updated Monitoring Metrics Documentation**: Updated documentation for multiple monitoring metrics, including Kafka, Linux processes, etc., improving the accuracy and completeness of the documentation.
- **Updated Developer Documentation**: Added documentation for custom collector development, helping developers with secondary development.
- **More Documentation Updates**
## Acknowledgements
Special thanks to the following community members for their collaborative efforts:
> @ghyghoo8 @kerwin612 @pjfanning @helei1030 @shinestare @simonsigre @myangle1120 @MasamiYui @Craaaaazy77 @tomsun28 @Aias00 @zhangshenghang @wanhao23 @zqr10159 @LiuTianyou
> @hasimmollah @lixiaobaivv @LL-LIN @JuJinPark @ponfee @starryCoder @NikhilMurugesan @leo-934 @Rancho-7 @MonsterChenzhuo @zuobiao-zhou @pwallk @bigcyy @ZY945 @sarthakeash
> @All-The-Best-for @TJxiaobao @yyahang @yunfan24 @a-little-fool @yasminvo @Yanshuming1 @ayu-v0 @jonasHanhan @Calvin979 @Suvrat1629 @Vedant7789 @notbugggg @lctking @po-168 @doveLin0818
## What's Changed
```markdown
* [doc](download): update for v1.6.1 release by @zqr10159 in https://github.com/apache/hertzbeat/pull/2794
* [Doc] improve website by @zhangshenghang in https://github.com/apache/hertzbeat/pull/2795
* [doc] update deploy doc by @tomsun28 in https://github.com/apache/hertzbeat/pull/2796
* [Task][OSPP] HertzBeat Official Template Marketplace by @All-The-Best-for in https://github.com/apache/hertzbeat/pull/2641
* [improve]:Improve the way Ai is entered and requested by @Yanshuming1 in https://github.com/apache/hertzbeat/pull/2762
* [bugfix] fix collector docker build error by @tomsun28 in https://github.com/apache/hertzbeat/pull/2799
* [fix]Remove the duplicate declaration of commons-net by @shinestare in https://github.com/apache/hertzbeat/pull/2801
* [doc] update new contributors by @tomsun28 in https://github.com/apache/hertzbeat/pull/2802
* [Improve] Improve module name by @zhangshenghang in https://github.com/apache/hertzbeat/pull/2805
* [improve] code according to code specifications by @po-168 in https://github.com/apache/hertzbeat/pull/2809
* [feature] Support custom refresh intervals for each group of metrics by @zuobiao-zhou in https://github.com/apache/hertzbeat/pull/2718
* [improve] Fix error links caused by module name changes. by @zuobiao-zhou in https://github.com/apache/hertzbeat/pull/2807
* [fix] fix the Linux process monitoring process exits abnormally without warning by @LiuTianyou in https://github.com/apache/hertzbeat/pull/2810
* [Doc] Add blog by @zhangshenghang in https://github.com/apache/hertzbeat/pull/2812
* [Improve] improve kafka monitor by @zhangshenghang in https://github.com/apache/hertzbeat/pull/2813
* [Feature] add e2e code by @zhangshenghang in https://github.com/apache/hertzbeat/pull/2811
* [improve] modify e2e test by @zhangshenghang in https://github.com/apache/hertzbeat/pull/2814
* [improve] update windows metrics yml by @tomsun28 in https://github.com/apache/hertzbeat/pull/2816
* [improve] update grafana auth method and add expose url by @tomsun28 in https://github.com/apache/hertzbeat/pull/2818
* Fixed the omissions in #2805 by @kerwin612 in https://github.com/apache/hertzbeat/pull/2826
* [refactor] change name from http_sd to registry by @Calvin979 in https://github.com/apache/hertzbeat/pull/2827
* [fix]fix windows chinese encoding by @starryCoder in https://github.com/apache/hertzbeat/pull/2831
* [doc] Added custom development collector documentation by @zhangshenghang in https://github.com/apache/hertzbeat/pull/2833
* [improve] update and fix template yml priority by @tomsun28 in https://github.com/apache/hertzbeat/pull/2829
* [chore] Delete redundant Spaces by @ayu-v0 in https://github.com/apache/hertzbeat/pull/2834
* [doc]: update sidebar category label and plugin documentation by @zqr10159 in https://github.com/apache/hertzbeat/pull/2837
* [fix] bugfix flyway location can not auto detect vendor when not h2 by @tomsun28 in https://github.com/apache/hertzbeat/pull/2835
* [improve] update victoriametrics and greptime store by @tomsun28 in https://github.com/apache/hertzbeat/pull/2836
* [feature] support managing tasks by using http_sd by @Calvin979 in https://github.com/apache/hertzbeat/pull/2830
* [fix] auto generated by protocol buffer by @tomsun28 in https://github.com/apache/hertzbeat/pull/2842
* [Feature] Add ssh e2e code by @zhangshenghang in https://github.com/apache/hertzbeat/pull/2843
* [bugfix]Fix wrong app name by @zqr10159 in https://github.com/apache/hertzbeat/pull/2845
* [doc] add security model doc and update contributors by @tomsun28 in https://github.com/apache/hertzbeat/pull/2846
* [improve] improve dependency by @zhangshenghang in https://github.com/apache/hertzbeat/pull/2855
* [doc] update security doc and some by @tomsun28 in https://github.com/apache/hertzbeat/pull/2856
* A bug fix by @TJxiaobao in https://github.com/apache/hertzbeat/pull/2853
* [doc] Add ',' separator between monitoring types by @Rancho-7 in https://github.com/apache/hertzbeat/pull/2865
* [doc]improve-windows-monitoring:Update Windows system monitoring docu… by @starryCoder in https://github.com/apache/hertzbeat/pull/2869
* [Optimize] Add a reminder about potential collection issues caused by the Docker deployment method of collector. by @zuobiao-zhou in https://github.com/apache/hertzbeat/pull/2844
* [improve]Add more helpful messages when adding a Kafka monitor by @Rancho-7 in https://github.com/apache/hertzbeat/pull/2876
* modified:add a small change. by @TJxiaobao in https://github.com/apache/hertzbeat/pull/2878
* [Fix] fix clickhouse monitor by @LiuTianyou in https://github.com/apache/hertzbeat/pull/2874
* [chore] Delete the redundant else by @ayu-v0 in https://github.com/apache/hertzbeat/pull/2881
* [improve]Remove stack property from line charts by @zqr10159 in https://github.com/apache/hertzbeat/pull/2888
* [improve]improve linux process by @LiuTianyou in https://github.com/apache/hertzbeat/pull/2889
* [Improve]Beautify Charts by @zqr10159 in https://github.com/apache/hertzbeat/pull/2891
* [doc] Add more hints when users are switching data source. by @Rancho-7 in https://github.com/apache/hertzbeat/pull/2880
* [collector]feature:Add monitoring metrics for consumer groups in Kafka client by @doveLin0818 in https://github.com/apache/hertzbeat/pull/2887
* [Improve] Improve Kafka chart display by @zhangshenghang in https://github.com/apache/hertzbeat/pull/2894
* [collector]bugfix:fix the issue of reusing the `adminClient` in the Kafka client. by @doveLin0818 in https://github.com/apache/hertzbeat/pull/2895
* [improve]add Plc protocol , Modbus monitor by @ZY945 in https://github.com/apache/hertzbeat/pull/2850
* [Improve] add notification when port number changes automatically due to HTTPS toggle.(#2779) by @yunfan24 in https://github.com/apache/hertzbeat/pull/2896
* [feature] integrate with Apache Arrow by @Calvin979 in https://github.com/apache/hertzbeat/pull/2864
* [Doc] update doc by @zhangshenghang in https://github.com/apache/hertzbeat/pull/2900
* [Imporve] Support Kafka internal topic configuration by @zhangshenghang in https://github.com/apache/hertzbeat/pull/2901
* [fix](flink): update calculate metrics definitions by @zqr10159 in https://github.com/apache/hertzbeat/pull/2905
* [feature] Add a new Singleton-pattern-based LRU local cache by @doveLin0818 in https://github.com/apache/hertzbeat/pull/2907
* add an online parser for prometheus. by @leo-934 in https://github.com/apache/hertzbeat/pull/2851
* [Improve] Improve OBS by @zhangshenghang in https://github.com/apache/hertzbeat/pull/2909
* [improve] fix import of CollectRep by @Calvin979 in https://github.com/apache/hertzbeat/pull/2910
* [feature](web-app): Add Alarm Voice Alerts by @zqr10159 in https://github.com/apache/hertzbeat/pull/2906
* [bugfix] Fix the bug where canceling an edit on a record still updates the page values. by @yunfan24 in https://github.com/apache/hertzbeat/pull/2911
* [bugfix] Fix docker container name unable to display problem by @zhangshenghang in https://github.com/apache/hertzbeat/pull/2914
* [improve] Optimize CacheService and add relevant unit test by @lctking in https://github.com/apache/hertzbeat/pull/2912
* [improve] Add required field indicators and form validation prompts for convergence strategies and silent strategies in the form. by @yunfan24 in https://github.com/apache/hertzbeat/pull/2913
* [Feture]Add docker e2e test by @zhangshenghang in https://github.com/apache/hertzbeat/pull/2916
* [bugfix]: fix setColumns method in CollectRep class by @zqr10159 in https://github.com/apache/hertzbeat/pull/2918
* [improve](warehouse): replace empty json object key with empty string by @zqr10159 in https://github.com/apache/hertzbeat/pull/2919
* [bugfix] Bug fix for alarm voice. by @yunfan24 in https://github.com/apache/hertzbeat/pull/2920
* Update app-windows_script.yml by @simonsigre in https://github.com/apache/hertzbeat/pull/2922
* [bugfix] Fixed the 'java.lang.UnsupportedOperationException' exception caused by getCurrentMetricsData by @lixiaobaivv in https://github.com/apache/hertzbeat/pull/2923
* [Improve] Optimize the e2e code structure by @zhangshenghang in https://github.com/apache/hertzbeat/pull/2926
* [improve] optimize website navbar css(#2928) by @ponfee in https://github.com/apache/hertzbeat/pull/2929
* [feature] Adding CPU Temperature Check Into Default Ubuntu Checks by @simonsigre in https://github.com/apache/hertzbeat/pull/2930
* [improve] Improve the synchronization of the mute status. by @yunfan24 in https://github.com/apache/hertzbeat/pull/2927
* [bugfix] Corrected case 'DashBoard' is a lower case 'B' by @simonsigre in https://github.com/apache/hertzbeat/pull/2935
* [bugfix] Modify the doris_be.md document into an English version by @Craaaaazy77 in https://github.com/apache/hertzbeat/pull/2936
* [improve] Refactor and Split the Message Notification Component. by @yunfan24 in https://github.com/apache/hertzbeat/pull/2924
* [home] updated navbar css #2928 by @Vedant7789 in https://github.com/apache/hertzbeat/pull/2934
* [Improve]Improve e2e code by @zhangshenghang in https://github.com/apache/hertzbeat/pull/2945
* [refactor] refactoring methods replaceCryPlaceholder and replaceSmilingPlace by @hasimmollah in https://github.com/apache/hertzbeat/pull/2832
* [alarm] refactor new alarm by @tomsun28 in https://github.com/apache/hertzbeat/pull/2902
* [bugfix](db): optimize column update. by @zqr10159 in https://github.com/apache/hertzbeat/pull/2947
* [doc] Add Supported MySQL Versions. by @yunfan24 in https://github.com/apache/hertzbeat/pull/2949
* [Feature] Support customized JMX monitoring through the Factory Pattern. by @doveLin0818 in https://github.com/apache/hertzbeat/pull/2932
* [Improve]Modify Chinese comments by @zhangshenghang in https://github.com/apache/hertzbeat/pull/2950
* [improve] fix some alarm relate bug, update alarm center ui by @tomsun28 in https://github.com/apache/hertzbeat/pull/2951
* 【Improve】adjust log level from INFO to WARN. by @Rancho-7 in https://github.com/apache/hertzbeat/pull/2952
* [Doc]:Add English version of documentation for Kafka Consumer Detail by @Rancho-7 in https://github.com/apache/hertzbeat/pull/2953
* [Imporve] Improve Huaweicloud by @zhangshenghang in https://github.com/apache/hertzbeat/pull/2954
* [improve] update alarm inhibit rule and alarm ui by @tomsun28 in https://github.com/apache/hertzbeat/pull/2957
* [bufix] fix collector job scheduler error by @tomsun28 in https://github.com/apache/hertzbeat/pull/2966
* [Improve]:Standardize Kafka metric naming by @Rancho-7 in https://github.com/apache/hertzbeat/pull/2961
* [BUG] "Advanced Settings" is all white in dark mode by @Suvrat1629 in https://github.com/apache/hertzbeat/pull/2965
* [Improve] add no popup option after next login by @LiuTianyou in https://github.com/apache/hertzbeat/pull/2969
* [feature] replace googletagmanager to matomo by @Aias00 in https://github.com/apache/hertzbeat/pull/2877
* Fix the search functionality issue. by @yunfan24 in https://github.com/apache/hertzbeat/pull/2970
* [bugfix](warehouse): add metrics data update logic in memory storage by @zqr10159 in https://github.com/apache/hertzbeat/pull/2973
* [Improve] Add more test cases for Kafka junit tests by @Rancho-7 in https://github.com/apache/hertzbeat/pull/2976
* [feature] alert integration extern source by @tomsun28 in https://github.com/apache/hertzbeat/pull/2978
* [bugfix] Fix NullPointerException by @ayu-v0 in https://github.com/apache/hertzbeat/pull/2849
* [webapp] key-value-input component hover effect fixed by @ghyghoo8 in https://github.com/apache/hertzbeat/pull/2972
* [bugfix] fix alert integration extern source bug by @tomsun28 in https://github.com/apache/hertzbeat/pull/2979
* [Feature] Support copy monitoring by @zhangshenghang in https://github.com/apache/hertzbeat/pull/2981
* [bugfix] fix hbase dashboard display anomalies and turn on HTTPS by @MonsterChenzhuo in https://github.com/apache/hertzbeat/pull/2980
* [improve] update i18n json stru and update search ui by @tomsun28 in https://github.com/apache/hertzbeat/pull/2986
* [MINOR UPDATE] improve xml parsing code by @pjfanning in https://github.com/apache/hertzbeat/pull/2988
* [docs]doc:Added spark Chinese documents and changed the original spar… by @helei1030 in https://github.com/apache/hertzbeat/pull/2987
* [type:improve] fix dependencies vulnerabilites by @Aias00 in https://github.com/apache/hertzbeat/pull/2989
* [feature] Add privateKey passphrase config for linux monitor by @MasamiYui in https://github.com/apache/hertzbeat/pull/2982
* [type:fix] remove matomo ip by @Aias00 in https://github.com/apache/hertzbeat/pull/2990
* [feature] Added multilingual defaults for forms by @wanhao23 in https://github.com/apache/hertzbeat/pull/2991
* [Improve]Add Copy token button by @zqr10159 in https://github.com/apache/hertzbeat/pull/2992
* [MINOR UPDATE] close HttpResponse in HttpCollectImpl by @pjfanning in https://github.com/apache/hertzbeat/pull/2993
* [MINOR UPDATE] close http response in PrometheusAutoCollectImpl by @pjfanning in https://github.com/apache/hertzbeat/pull/2994
* [MINOR UPDATE] fix more instances of unclosed Http Responses by @pjfanning in https://github.com/apache/hertzbeat/pull/2995
* [bugfix] fix wrong http user-agent content by @tomsun28 in https://github.com/apache/hertzbeat/pull/2996
* [feature] Support monitoring for StarRocks FE and StarRocks BE. by @yunfan24 in https://github.com/apache/hertzbeat/pull/2997
* [MINOR UPDATE] refactor base64 code to simplify the conversions by @pjfanning in https://github.com/apache/hertzbeat/pull/2999
* [webapp] bugfix edit monitor http query params error by @tomsun28 in https://github.com/apache/hertzbeat/pull/3001
* [feature] Complete multiple languages by @wanhao23 in https://github.com/apache/hertzbeat/pull/3002
* [feature] Add alerter_zh_TW.properties configuration to adapt to mult… by @jonasHanhan in https://github.com/apache/hertzbeat/pull/3004
* [bugfix] fix some unit tests that failed to run by @NikhilMurugesan in https://github.com/apache/hertzbeat/pull/3007
* [feature](alert): implement drag-and-drop functionality for alert templates by @zqr10159 in https://github.com/apache/hertzbeat/pull/3005
* [improve] Freeze the 'Operate' column on the right side of the list. by @yunfan24 in https://github.com/apache/hertzbeat/pull/3009
* [MINOR UPDATE] always specify the char encoding in getBytes by @pjfanning in https://github.com/apache/hertzbeat/pull/3011
* [bugfix]Fix page not found by @zqr10159 in https://github.com/apache/hertzbeat/pull/3014
* [bugfix] Modify mask issue by @myangle1120 in https://github.com/apache/hertzbeat/pull/3018
* [issue-2998] remove invalid check in isValidLabelValue by @pjfanning in https://github.com/apache/hertzbeat/pull/3015
* [MINOR UPDATE] Use Encode to string when possible (Base64) by @pjfanning in https://github.com/apache/hertzbeat/pull/3016
* [Improve] update english doc by @zhangshenghang in https://github.com/apache/hertzbeat/pull/3028
* [Feature] Add API e2e code by @zhangshenghang in https://github.com/apache/hertzbeat/pull/3029
* [doc] update new contributor wall by @tomsun28 in https://github.com/apache/hertzbeat/pull/3025
* OnlineParserTest doesn't test anything by @pjfanning in https://github.com/apache/hertzbeat/pull/3010
* [feature] periodic alert threshold by @tomsun28 in https://github.com/apache/hertzbeat/pull/3024
* [bugfix] fix and enable some unit tests. by @yunfan24 in https://github.com/apache/hertzbeat/pull/3031
* [feature] Add pagination and name-based search functionality in notification module by @yunfan24 in https://github.com/apache/hertzbeat/pull/2948
* [bugfix] Fixed the bug in the threshold rules search box. by @yunfan24 in https://github.com/apache/hertzbeat/pull/3034
* [improve] Replaced hardcoded text with internationalized string. by @yunfan24 in https://github.com/apache/hertzbeat/pull/3035
* [update] upgrade actions/upload-artifact to v4 by @yunfan24 in https://github.com/apache/hertzbeat/pull/3046
* [improve] Search ignores case sensitivity. by @yunfan24 in https://github.com/apache/hertzbeat/pull/3042
* Add sse support for alert center, no need to manually refresh the page, add slide-in animation by @zqr10159 in https://github.com/apache/hertzbeat/pull/3051
* [alert] support multi query expr threshold by @tomsun28 in https://github.com/apache/hertzbeat/pull/3054
* [improve](alert-center): enhance alert card animations and interactions by @zqr10159 in https://github.com/apache/hertzbeat/pull/3055
* [improve] update theme ui color by @tomsun28 in https://github.com/apache/hertzbeat/pull/3057
* [bugfix] Fix the issue where the monitoring status is not updated. by @yunfan24 in https://github.com/apache/hertzbeat/pull/3056
* [bugfix]style(alert-center): enhance 3D transformation and z-index layers by @zqr10159 in https://github.com/apache/hertzbeat/pull/3059
* [Feature]Add zookeeper e2e code by @zhangshenghang in https://github.com/apache/hertzbeat/pull/3030
* [feature] Add Sftp config for monitor by @MasamiYui in https://github.com/apache/hertzbeat/pull/3038
* [feature] Add Japanese by @wanhao23 in https://github.com/apache/hertzbeat/pull/3013
* [bugfix] fix singleton not support remove, search id error, audio fetch 401 by @tomsun28 in https://github.com/apache/hertzbeat/pull/3062
* [API DOC] Change Swagger description by @pwallk in https://github.com/apache/hertzbeat/pull/3061
* [webapp] update ui theme by @tomsun28 in https://github.com/apache/hertzbeat/pull/3064
* [feature] Support SSH Tunnel by @pwallk in https://github.com/apache/hertzbeat/pull/3060
* [improve] Complete the missing labels in the i18n file. by @yunfan24 in https://github.com/apache/hertzbeat/pull/3065
* [Feature]Add Chinese check by @zhangshenghang in https://github.com/apache/hertzbeat/pull/3066
* [improve] Refactor SMS sending and replace Tencent Cloud SDK with HTTP API. by @yunfan24 in https://github.com/apache/hertzbeat/pull/3063
* [Bugfix] fix when the monitor is modified, the status is erroneously changed by @pwallk in https://github.com/apache/hertzbeat/pull/3067
* [improve](web-app): update monitor chart configuration and springboot GreptimeDB version by @zqr10159 in https://github.com/apache/hertzbeat/pull/3071
* [doc] Update the SMS configuration document. by @yunfan24 in https://github.com/apache/hertzbeat/pull/3073
* [feature] SMS notification supports unisms. by @yunfan24 in https://github.com/apache/hertzbeat/pull/3077
* [webapp] update and fix alert ui when theme dark by @tomsun28 in https://github.com/apache/hertzbeat/pull/3082
* [improve] Improve and unify the search. by @yunfan24 in https://github.com/apache/hertzbeat/pull/3085
* [feature] supports alibaba SMS. by @yunfan24 in https://github.com/apache/hertzbeat/pull/3084
* [improve] optimize kafka collect test by @Rancho-7 in https://github.com/apache/hertzbeat/pull/3093
* correct home's new_committer_process by @a-little-fool in https://github.com/apache/hertzbeat/pull/3094
* [bugfix] kafka client detect error by @Rancho-7 in https://github.com/apache/hertzbeat/pull/3088
* [Doc]Improve openai doc by @zhangshenghang in https://github.com/apache/hertzbeat/pull/3097
* [Improve] Message notification prompt optimization by @zhangshenghang in https://github.com/apache/hertzbeat/pull/3095
* [webapp] fix web oom crash when backend api can not access by @tomsun28 in https://github.com/apache/hertzbeat/pull/3100
* [Feature] Add deepseek Api Monitor by @zhangshenghang in https://github.com/apache/hertzbeat/pull/3096
* feat/adding-ptBR-translation by @yasminvo in https://github.com/apache/hertzbeat/pull/3098
* [bugfix] fix alert sse illegal state exception by @tomsun28 in https://github.com/apache/hertzbeat/pull/3106
* [bugfix] Fix exception thrown when searching for CollectRep.Field in the list by @JuJinPark in https://github.com/apache/hertzbeat/pull/3109
* [type: fix] #3090 garbled characters by @notbugggg in https://github.com/apache/hertzbeat/pull/3113
* [doc]fix link by @zhangshenghang in https://github.com/apache/hertzbeat/pull/3123
* [doc] Add GSOC doc by @zhangshenghang in https://github.com/apache/hertzbeat/pull/3122
* [doc] Add alibaba SMS and unisms documentation. by @yunfan24 in https://github.com/apache/hertzbeat/pull/3114
* [improve] support reuse jdbc connection switch by @tomsun28 in https://github.com/apache/hertzbeat/pull/3101
* [webapp] fix monitor define param wrong placeholder tip by @tomsun28 in https://github.com/apache/hertzbeat/pull/3118
* [bugfix] Fix swagger opening exception that Failed to load API definition. (#3127) by @yyahang in https://github.com/apache/hertzbeat/pull/3129
* [doc] welcome new committer and contributor by @tomsun28 in https://github.com/apache/hertzbeat/pull/3132
* [feature] add smslocal sms notification by @a-little-fool in https://github.com/apache/hertzbeat/pull/3135
* [improve] Optimize the progress display of monitoring imports by @MasamiYui in https://github.com/apache/hertzbeat/pull/3120
* [improve] fix potential memory leakage and content length issues. by @tomsun28 in https://github.com/apache/hertzbeat/pull/3128
* [bugfix] fix overflow arrow buffer index by @tomsun28 in https://github.com/apache/hertzbeat/pull/3137
* [improve] improve plugin upload by @LiuTianyou in https://github.com/apache/hertzbeat/pull/3139
* [doc] Add new committer blog by @yunfan24 in https://github.com/apache/hertzbeat/pull/3140
* Configuring gitpod with java by @kerwin612 in https://github.com/apache/hertzbeat/pull/3141
* Fix the issue of the empty dropdown menu on the Kanban board page. by @kerwin612 in https://github.com/apache/hertzbeat/pull/3142
* [feature] Add AWS sms client by @JuJinPark in https://github.com/apache/hertzbeat/pull/3134
* [feature] Support skywalking alert source by @MasamiYui in https://github.com/apache/hertzbeat/pull/3144
* [feature] support SSH proxy jump connections by @LL-LIN in https://github.com/apache/hertzbeat/pull/3138
* [improve] support bind metrics label and others into alert by @tomsun28 in https://github.com/apache/hertzbeat/pull/3146
* [bugfix] Fixed #3112, disappear left menu tree item when restart service by @notbugggg in https://github.com/apache/hertzbeat/pull/3116
* [bugfix] fix collect dispatch error by @tomsun28 in https://github.com/apache/hertzbeat/pull/3150
* [improve] Merge SMS configuration class. by @yunfan24 in https://github.com/apache/hertzbeat/pull/3148
* [webapp] fix less style file over max build error by @tomsun28 in https://github.com/apache/hertzbeat/pull/3151
* [bugfix] fix nightly docker build github action by @tomsun28 in https://github.com/apache/hertzbeat/pull/3153
* [feature] Supports sending messages to a specific Telegram group topic.(#3079) by @bigcyy in https://github.com/apache/hertzbeat/pull/3143
* Abstract Redundant Input Components into ConfigurableFieldComponent for Unified Management by @kerwin612 in https://github.com/apache/hertzbeat/pull/3152
* [feature] Support TencentCloud alert source by @bigcyy in https://github.com/apache/hertzbeat/pull/3149
* [bugfix]: fix incomplete class documentation in AppServiceImpl by @bigcyy in https://github.com/apache/hertzbeat/pull/3162
* [bugfix] Fix http header being incorrectly encoded. by @yunfan24 in https://github.com/apache/hertzbeat/pull/3108
* [bugfix] retain sorting state after monitor list auto-refresh by @LL-LIN in https://github.com/apache/hertzbeat/pull/3156
* [feature] add twilio sms client support by @sarthakeash in https://github.com/apache/hertzbeat/pull/3159
* [doc] Add alert integration japanese i18 by @MasamiYui in https://github.com/apache/hertzbeat/pull/3164
* [release] update release version 1.7.0 version and docs by @tomsun28 in https://github.com/apache/hertzbeat/pull/3165
* [feature] implement labels-based monitors filtering in bulletin creation flow by @LL-LIN in https://github.com/apache/hertzbeat/pull/3161
* [bugfix] fix postgre mount error, use mariadb instead of mysql in compose by @tomsun28 in https://github.com/apache/hertzbeat/pull/3168
* [bugfix] fix bind Labels are not updated when the Alarm Severity switches by @bigcyy in https://github.com/apache/hertzbeat/pull/3170
* [improve] update git archive export ignore by @tomsun28 in https://github.com/apache/hertzbeat/pull/3172
* [improve] update notice copyright years by @tomsun28 in https://github.com/apache/hertzbeat/pull/3171
```
## Apache HertzBeat
**Repository URL:**
[https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)
**Official Website:**
[https://hertzbeat.apache.org/](https://hertzbeat.apache.org/)
**Apache HertzBeat™ Download Link:**
[https://hertzbeat.apache.org/docs/download](https://hertzbeat.apache.org/docs/download)
**Apache HertzBeat™ Docker Images:**
Apache HertzBeat™ provides Docker images for each release, available on Docker Hub:
- HertzBeat: [https://hub.docker.com/r/apache/hertzbeat](https://hub.docker.com/r/apache/hertzbeat)
- HertzBeat Collector: [https://hub.docker.com/r/apache/hertzbeat-collector](https://hub.docker.com/r/apache/hertzbeat-collector)
**How to Contribute to the Apache HertzBeat™ Open Source Community?**
[https://hertzbeat.apache.org/docs/community/contribution](https://hertzbeat.apache.org/docs/community/contribution)
@@ -0,0 +1,94 @@
# HertzBeat Upgrade Guide (Docker Mode)
## Docker-based Upgrade
### 1. Data Backup
- **Back up the database**: Manually back up MySQL data as needed.
```bash
mysqldump -h<HOST-IP> -P`<PORT>` -uroot -p"PASSWORD" `<DB_NAME>` > hertzbeat_backup-`date +%Y-%m-%d`.sql # Single database
mysqldump -h<HOST-IP> -P`<PORT>` -uroot -p"PASSWORD" --all-databases > hertzbeat_backup-`date +%Y-%m-%d`.sql # Full database
```
- **Back up configuration files and data directory**:
```bash
mv application.yml application-bak.yml && mv sureness.yml sureness-bak.yml
cp -R data data-`date +%Y-%m-%d`.bak
```
### 2. Stop and Remove the HertzBeat Container
```bash
docker stop hertzbeat && docker rm hertzbeat
```
### 3. Upgrade Database Schema
Navigate to [HertzBeat GitHub Migration Scripts](https://github.com/apache/hertzbeat/tree/master/hertzbeat-startup/src/main/resources/db/migration), select the appropriate `V160__update_column.sql` file under your database type (e.g., MySQL), and execute it in MySQL.
### 4. Restart HertzBeat with the New Image
```bash
docker run -d -p 1157:1157 -p 1158:1158 \
-v $(pwd)/data:/opt/hertzbeat/data \
-v $(pwd)/logs:/opt/hertzbeat/logs \
-v $(pwd)/application.yml:/opt/hertzbeat/config/application.yml \
-v $(pwd)/sureness.yml:/opt/hertzbeat/config/sureness.yml \
--restart=always \
--name hertzbeat apache/hertzbeat:v1.7.0
```
### 5. Update Configuration Files
Modify the backup configurations as needed:
- **`application.yml`** (Typical modifications):
```yaml
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: root
url: jdbc:mysql://localhost:3306/hertzbeat?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
hikari:
max-lifetime: 120000
jpa:
show-sql: false
database-platform: org.eclipse.persistence.platform.database.MySQLPlatform
database: mysql
properties:
eclipselink:
logging:
level: SEVERE
```
- **`sureness.yml`** (Optional, modify for account/password changes):
```yaml
account:
- appId: admin
credential: hertzbeat
role: [admin]
- appId: tom
credential: hertzbeat
role: [user]
- appId: guest
credential: hertzbeat
role: [guest]
- appId: lili
credential: 94C6B34E7A199A9F9D4E1F208093B489
salt: 123
role: [user]
```
### 6. Add Database Drivers
Due to Apache Foundations license compliance requirements, HertzBeat cannot include GPL-licensed dependencies (e.g., MySQL, Oracle). Users must manually download drivers and place them in the `ext-lib` directory, then mount it to `/opt/hertzbeat/ext-lib`:
- **MySQL Driver**: [Download MySQL Connector/J 8.0.25](https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.25.zip)
- **Oracle Driver** (Required for Oracle monitoring):
- [ojdbc8.jar](https://download.oracle.com/otn-pub/otn_software/jdbc/234/ojdbc8.jar)
- [orai18n-21.5.0.0.jar](https://repo.mavenlibs.com/maven/com/oracle/database/nls/orai18n/21.5.0.0/orai18n-21.5.0.0.jar)
@@ -0,0 +1,95 @@
# HertzBeat Upgrade Guide from v1.6.1 to v1.7.0 (Helm Mode)
## 1. Prerequisites
1. Ensure the following tools are installed:
- Helm 3.x
- kubectl
- Git (optional)
2. Verify current deployment information:
```bash
helm list -n <your-namespace>
# If the old chart package is missing, export values.yaml with:
helm get values hertzbeat -n <your-namespace> > hertzbeat-1.6.1-values.yaml
```
3. Data Backup:
> **For custom monitoring templates:**
>
> - Backup `/opt/hertzbeat/define` from the running pod:
>
> ```bash
> kubectl cp hertzbeat/hertzbeat-978477f84-fr894:/opt/hertzbeat/define ./define
> ```
>
> **For external databases (MySQL/PostgreSQL):**
>
> - Use `mysqldump`/`pg_dump` or copy PVC directories:
>
> ```bash
> kubectl get pvc -n hertzbeat
> ```
## 2. Upgrade Steps
### 1. Pull the latest Chart
```bash
helm repo update
helm pull hertzbeat/hertzbeat --version 1.7.0 --untar
cd hertzbeat
```
Or clone from GitHub:
```bash
git clone https://github.com/hertzbeat/helm-charts.git
cd helm-charts/charts/hertzbeat
```
### 2. Update values.yaml
Compare and merge configurations:
```bash
diff -u ../hertzbeat-1.6.1-values.yaml values.yaml
# Use vimdiff to compare and merge changes
```
Key configurations to check:
- `image.tag`
- `resources`
- `persistence`
- `service.type`
- Ingress settings
- External database configurations
### 3. Dry-run Upgrade
```bash
helm upgrade hertzbeat . -n <your-namespace> \
--values values.yaml \
--dry-run \
--debug
```
### 4. Execute Upgrade
```bash
helm upgrade hertzbeat . -n <your-namespace> \
--values values.yaml \
--atomic \ # Auto-rollback on failure
--timeout 10m # Set timeout
```
### 5. Verify Upgrade
```bash
helm status hertzbeat -n <your-namespace>
kubectl get pods -n <your-namespace> -l app.kubernetes.io/instance=hertzbeat
kubectl logs -n <your-namespace> -l app.kubernetes.io/instance=hertzbeat --tail=100
```
+37
View File
@@ -0,0 +1,37 @@
---
title: Welcome HertzBeat's New Community Committer!
author: pwallk
author_title: Kang Li
author_url: https://github.com/pwallk
tags: [opensource, practice]
keywords:
[
open source monitoring system,
alerting system,
Apache,
Apache Committer,
HertzBeat,
]
---
> Hello everyone, it's a great honor to be invited by the community to become a Committer of the Apache HertzBeat™ project.
## Self-Introduction
I have been engaged in Java backend development since 2022. Currently, I am working as a backend developer in a company and also taking on some operations and maintenance tasks.
## Getting to know Apache HertzBeat
Last year, I came across the Apache HertzBeat™ project by chance. After reading the documentation, I found that this monitoring tool is easy to use, does not require an Agent, and can be operated entirely through a web page. So, I quickly set it up within the company based on Docker and put it into use.
Due to the `All in one` design architecture of Apache HertzBeat™, it has greatly reduced my mental burden, and I was able to quickly integrate various internal company services into the monitoring system.
## Participate and Contribute
During the usage process, I discovered a database query bug. So, I forked the code and started debugging it locally. I found that the fix was not complicated and since no one else had addressed it, I submitted my first PR. To my surprise, it was merged quickly, which greatly encouraged me.
In the following period, I continued to familiarize myself with the Apache HertzBeat™ code, paying close attention to ISSUES and PRs. As my understanding of the system deepened, apart from fixing BUGs and improving documentation, I also developed some new features, such as database storage templates and SSH tunnels.
## Conclusion
I'm deeply grateful to [@tomsun28](https://github.com/tomsun28) for inviting me to become a committer for this project. I also want to thank other members of the community for assisting me in reviewing code and providing invaluable help. Apache HertzBeat™ boasts a highly active community, and I sincerely hope more people will join and contribute to it, Finally, I wish Apache HertzBeat™ can graduate from the incubator soon!
+225
View File
@@ -0,0 +1,225 @@
---
title: Announcement of Apache HertzBeat™ 1.7.1 Release
author: tomsun28
author_title: tomsun28
author_url: https://github.com/zhangshenghang
tags: [opensource, release]
keywords: [open source monitoring system, alerting system, HertzBeat, release]
---
Dear Community Members,
We are thrilled to announce the official release of Apache HertzBeat™ version 1.7.1!
## Downloads and Documentation
- **Apache HertzBeat™ 1.7.1 Download Link**: [https://hertzbeat.apache.org/docs/download](https://hertzbeat.apache.org/docs/download)
- **Apache HertzBeat™ Documentation**: [https://hertzbeat.apache.org/docs/](https://hertzbeat.apache.org/docs/)
## Major Updates
### New Features and Enhancements
- Added support for Siemens PLC S7 protocol (#3194)
- Introduced support for Hikvision, Dahua, and Uniview devices (#3211, #3214)
- Support for Uptime Kuma and Zabbix alert sources (#3312, #3317)
- Service discovery enhancements: Eureka, Consul, and DNS SD (#3323, #3326, #3328)
- Alert grouping and inhibition support (#3206)
- System notification as a new alert method (#3275)
- Collector-side alerting capability (#2693)
- Initial logging module implemented (#3218)
- Integrated OpenTelemetry for logs and traces (#3319)
- Added PushGateway support for pushing metrics (#3204)
- Enhanced Monitor List and Detail UIs (#3199, #3200)
- Improved Grafana configuration priorities and exception handling (#3241)
- Optimized prompts, UI labels, and display titles (#3270, #3289)
- Introduced an AI bot for assistance (#3285)
- Added i18n support for AI bot (#3330)
### Bug Fixes
- Fixed whitespace issue in instance filtering for alert expressions (#3276)
- Corrected incorrect webhook alert template (#3265)
- Fixed incorrect pendingTimeouts calculation in HashedWheelTimer (#3174)
- Resolved historical data display issues in VictoriaMetrics charts (#3248, #3264, #3297)
- Fixed async job cancellation not removing cached jobs (#3240)
- Fixed UI issue with bulletin indicator selection (#3201)
- Fixed Prometheus metric response parsing errors (#3274)
- Resolved Collector OOM error (#3295)
- Fixed frontend title showing “Not page name” when filtered by monitor type (#3289)
### Refactoring and Optimization
- Unified usage of label instead of tag (#3278)
- Refactored alert datasource calculations (#3253)
- Optimized Kafka collection logic and increased test coverage (#3189)
- Improved DnsCollectTest status code logic (#3209)
- Refactored HTTP service discovery implementation (#3300)
- Defaulted to UTF-8 encoding (#3315)
- Removed potential CVE vulnerability action (#3303)
### Tests and Quality
- Added unit tests for:
- AlertInhibitController (#3183)
- XML response parsing (#3212)
- PeriodicAlertCalculator (#3304)
- Added E2E tests for:
- JDBC common collection (#3273)
- Redis collector (#3283)
- Kubernetes monitoring (#3280)
### Documentation Enhancements
- Help and usage docs:
- Alert Center, Alert Silence, Alarm Inhibition (#3181, #3229, #3206)
- Metrics collection workflow blog (#3195)
- Spring Boot 2.x/3.x monitoring config (#3231)
- Grafana dashboard setup (#3238)
- Upgrade guide (EN & CN) (#3302)
- Spring Boot auto practice use case (EN & CN) (#3293, #3298)
- Alert integration help documentation (#3308)
- Style and maintenance:
- Code style check documentation (#3232)
- Dead link checker improvements (#3302)
- Markdown formatting fixes and lint config updates (#3310)
- Internationalization:
- Japanese docs for README, ActiveMQ, Airflow, AlmaLinux (#3329, #3333, #3339, #3343)
## Acknowledgements
Special thanks to the following community members for their collaborative efforts:
> @LinuxSuRen @gagaradio @boyucjz @MasamiYui @tomsun28 @Aias00 @zhangshenghang @zqr10159 @LiuTianyou @a-little-fool @Calvin979
> @LL-LIN @JuJinPark @xiaomizhou2 @leo-934 @Rancho-7 @pwallk @bigcyy @sarthakeash @KevinLLF @PengJingzhao @Cyanty @markguo123
## What's Changed
- fix: Ai is a typo by @LinuxSuRen in #3176
- [Doc] Modify the error records in the document by @zhangshenghang in #3178
- [bug]bugfix:fix bug for package import error by @PengJingzhao in #3180
- [doc] add help documentation for Alarms Center by @bigcyy in #3181
- [docs] add collector user guide by @sarthakeash in #3187
- [bugfix] Modify inconsistent icons by @MasamiYui in #3190
- [doc] add blog bout How Does Metrics Collection Work by @JuJinPark in #3195
- [improve] update monitor detail ui by @tomsun28 in #3199
- [doc] update new hertzbeat ppmc by @tomsun28 in #3191
- [improve] update monitor list ui by @tomsun28 in #3200
- update download info by @Aias00 in #3203
- [bugfix] fix bulletin indicator selection status error by @bigcyy in #3201
- [improve] optimize kafka collection logic and expand test coverage by @Rancho-7 in #3189
- [improve] support the use of time expressions in HTTP payloads by @LiuTianyou in #3192
- [improve] i18n Portuguese by @LiuTianyou in #3193
- support plc s7 protocol for siemens by @boyucjz in #3194
- [doc] add doc for alarm grouping and alarm inhibit by @LiuTianyou in #3206
- [improve] optimize `DnsCollectTest` with status code. by @Rancho-7 in #3209
- [doc] archive version docs by @tomsun28 in #3207
- [feature]Implementation of Hikvision camera monitoring and http monitoring xml parsing function by @zqr10159 in #3211
- [test]add test for controller AlertInhibitController by @PengJingzhao in #3183
- [test] hertzbeat-collector: add unit test for XML response parsing by @zqr10159 in #3212
- add a Pushgateway to push module by @leo-934 in #3204
- [feature]add support for Dahua and Uniview devices by @zqr10159 in #3214
- [Doc] Fix dead link by @zhangshenghang in #3227
- [feature]A preliminary logging module implementation by @zqr10159 in #3218
- [Doc] Modify the YML configuration parameters for Spring Boot 2.0/3.0 monitoring by @Cyanty in #3231
- [Doc] Add Blog by @zhangshenghang in #3224
- [doc] add alerting silence doc. by @a-little-fool in #3229
- [doc] code style check by @a-little-fool in #3232
- [bugfix]: Fix the issue where pendingTimeouts may be incorrect in the HashedWheelTimer. by @gagaradio in #3174
- [doc] add code-style-check zh-ch. by @a-little-fool in #3236
- [doc]update Grafana dashboard setup instructions by @zqr10159 in #3238
- [bugfix] Added jobContentCache.remove(jobId) to cancelAsyncCollectJob by @bigcyy in #3240
- [doc] add new release 1.7.0 blog by @tomsun28 in #3237
- [improve] Adjust Grafana configuration priority hierarchy and optimize API request exception handling by @Cyanty in #3241
- switch to online parser & add query datasource by @leo-934 in #3215
- [feat] enable label-based filtering and selection for monitoring thresholds by @bigcyy in #3223
- [doc] add new contributors to wall by @tomsun28 in #3243
- fix UriComponentsBuilder in PromqlQueryExecutor by @leo-934 in #3244
- [Feature] Add log mcp for java by @zhangshenghang in #3254
- [bugfix] fix a remote command execution. by @a-little-fool in #3250
- [refactor] Alert datasource calculate by @MasamiYui in #3253
- [bugfix] Resolve incorrect display of detailed information in Prometheus task history monitoring charts under VictoriaMetrics. by @KevinLLF in #3248
- [doc] add new contributor in wall by @tomsun28 in #3259
- [bugfix] Set the prometheus monitoring time and correct historical data queries (#3264) by @Cyanty in #3264
- [bugfix] Wrong webhook alert template by @MasamiYui in #3265
- [bugfix] correct instance filtering regex in RealTimeAlertCalculator by @bigcyy in #3269
- [feature] Support Collector Alarm by @pwallk in #2693
- [feature] add Maven Wrapper scripts by @zhangshenghang in #3271
- [webapp] update header logo style by @tomsun28 in #3272
- [Improve] optimize prompt by @zhangshenghang in #3270
- [bugfix] fix the prometheus metric response data parsing is abnormal by @LiuTianyou in #3274
- [feature] new alert supports reminding through system notifications by @LiuTianyou in #3275
- [bugfix] support no-whitespace alert expressions in instance filtering by @bigcyy in #3276
- [refactor] refact tag to label code by @tomsun28 in #3278
- [doc] update contributors wall by @tomsun28 in #3281
- [improve] Add jdbc common collect e2e code (#3273) by @Cyanty in #3273
- [improve] Add E2E tests for Redis collector by @KevinLLF in #3283
- [Feature]Support AI bot by @zhangshenghang in #3285
- [bugfix]: page title show "Not page name" when filter monitor list by type by @LiuTianyou in #3289
- [Task] Set local database as default file server provider by @MasamiYui in #3282
- [doc] update doc, usecase blog and help doc by @tomsun28 in #3286
- [e2e] add e2e test for k8s monitor by @LiuTianyou in #3280
- [webapp] try reduce memory growth and fix crash by @tomsun28 in #3292
- [Doc] Add springboot auto practice usecase by @Cyanty in #3293
- [bugfix] fix collector direct oom by @tomsun28 in #3295
- [Doc] Add English doc for springboot auto practice usecase by @Cyanty in #3298
- [bugfix] enables support for VictoriaMetrics in cluster mode within HertzBeat by @bigcyy in #3297
- [improve] Optimize the way of Dead Link Check by @Cyanty in #3302
- [docs] Add Chinese and English versions of the HertzBeat upgrade guide by @markguo123 in #3294
- [refactor] Remove the possible CVE-2025-30066 security vulnerability action and ignore the 500 code for link check by @Cyanty in #3303
- [Improve] Add unit test for PeriodicAlertCalculator by @MasamiYui in #3304
- [docs] Correct Markdown formatting and update lint config to enable local checking by @bigcyy in #3310
- [docs] add help documentation for alert integration by @bigcyy in #3308
- [feature] Support Uptime Kuma alert source by @xiaomizhou2 in #3312
- [refactor] refactor auto discovery http sd by @tomsun28 in #3300
- [refactor] set default encoding charset utf8 by @tomsun28 in #3315
- [feature] Support Zabbix alert source by @xiaomizhou2 in #3317
- update the license file, to add the plc4j-driver-s7 license by @boyucjz in #3318
- [bugfix] fix the calculator expr exist not work by @tomsun28 in #3314
- [feature]: integrate OpenTelemetry for GreptimeDB logs and traces- Rename hertzbeat-log to hertzbeat-otel by @zqr10159 in #3319
- [doc] japanese readme by @Calvin979 in #3329
- [Improve] Add i18 for ai bot by @MasamiYui in #3330
- [feature] Support Eureka Service Discovery by @pwallk in #3323
- [doc] japanese activemq by @Calvin979 in #3333
- [feat] add deep wiki badge by @Aias00 in #3334
- [doc] japanese airflow by @Calvin979 in #3339
- [feature] Support Consul Service Discovery by @pwallk in #3326
- [feat] Enhance Label Management for Monitors by @bigcyy in #3327
- [doc] japanese almalinux by @Calvin979 in #3343
- [feature] Support DNS Service Discovery by @MasamiYui in #3328
- [build] Update .gitignore and add Maven wrapper properties by @zhangshenghang in #3346
- [bugfix] Fix frontend error when all monitor metrics are selected in new bulletin form by @LL-LIN in #3345
- [release] update release version 1.7.1 by @zhangshenghang in #3347
## New Contributors
- @PengJingzhao made their first contribution in #3180
- @boyucjz made their first contribution in #3194
- @gagaradio made their first contribution in #3174
- @KevinLLF made their first contribution in #3248
- @markguo123 made their first contribution in #3294
## Apache HertzBeat
**Repository URL:**
[https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)
**Official Website:**
[https://hertzbeat.apache.org/](https://hertzbeat.apache.org/)
**Apache HertzBeat™ Download Link:**
[https://hertzbeat.apache.org/docs/download](https://hertzbeat.apache.org/docs/download)
**Apache HertzBeat™ Docker Images:**
Apache HertzBeat™ provides Docker images for each release, available on Docker Hub:
- HertzBeat: [https://hub.docker.com/r/apache/hertzbeat](https://hub.docker.com/r/apache/hertzbeat)
- HertzBeat Collector: [https://hub.docker.com/r/apache/hertzbeat-collector](https://hub.docker.com/r/apache/hertzbeat-collector)
**How to Contribute to the Apache HertzBeat™ Open Source Community?**
[https://hertzbeat.apache.org/docs/community/contribution](https://hertzbeat.apache.org/docs/community/contribution)
+41
View File
@@ -0,0 +1,41 @@
---
title: Welcome HertzBeat's New Community Committer!
author: MasamiYui
author_title: Yijun Yin
author_url: https://github.com/MasamiYui
tags: [opensource, practice]
keywords:
[
open source monitoring system,
alerting system,
Apache,
Apache Committer,
HertzBeat,
]
---
> Hello everyone, it's a great honor to be invited by the community to become Apache HertzBeat™ Committer.
## Self-Introduction
I've been working in development since 2019, engaging in various fields such as blockchain, cybersecurity, big data, new energy, and video technology. I'm a jack-of-all-trades engineer who dabbles in a bit of everything.
## My Journey with HertzBeat
Initially, while setting up several services for myself, I needed a way to visualize metrics but didn't want to introduce overly complex monitoring systems. I hoped to find an out-of-the-box monitoring tool that was comprehensive and easy to extend thats when I discovered HertzBeat.
As I used it more deeply, I began exploring its source code and developed a desire to contribute to the community. I still vividly remember the anticipation during my first pull request (PR), going through multiple rounds of debugging and verification, eagerly hoping it would be accepted into the main branch. With increased involvement, tracking community updates has gradually become a daily habit.
## Welcoming Community Atmosphere
The community thrives with activity, as code submissions and reviews pour in even during late-night hours. It embraces newcomers with open arms, ensuring that whether you're filing an ISSUE to report a bug or submitting a PR to contribute code, your efforts will spark thoughtful discussions and elicit detailed, actionable feedback.
Currently, HertzBeat is in a phase of rapid development, with capabilities such as metrics, logs, and tracing requiring continuous enhancement and refinement. If you're interested in contributing to open-source, this is an excellent opportunity to get involved.
## About Open Source
For me, open source is a vessel for technical passion; growing alongside the community makes for a profoundly meaningful journey.
## Conclusion
A heartfelt thank you to [@tomsun28](https://github.com/tomsun28) for the nomination and guidance. I hope this encouragement drives me to make even more valuable contributions to the community. Finally, wishing Apache HertzBeat™ a smooth graduation from the Apache Incubator and may the community continue to grow and thrive!
+197
View File
@@ -0,0 +1,197 @@
---
title: Announcement of Apache HertzBeat™ 1.7.2 Release
author: tomsun28
author_title: tomsun28
author_url: https://github.com/zhangshenghang
tags: [opensource, release]
keywords: [open source monitoring system, alerting system, HertzBeat, release]
---
Dear Community Members,
We are thrilled to announce the official release of Apache HertzBeat™ version 1.7.2!
## Downloads and Documentation
- **Apache HertzBeat™ 1.7.2 Download Link**: [https://hertzbeat.apache.org/docs/download](https://hertzbeat.apache.org/docs/download)
- **Apache HertzBeat™ Documentation**: [https://hertzbeat.apache.org/docs/](https://hertzbeat.apache.org/docs/)
## Major Updates
### New Features and Enhancements
- **Cloud Alert Integration**: Supports Alibaba Cloud SLS Log Service alert sources (#3422), Huawei Cloud Monitor alert sources (#3443), and Volcano Engine alert sources (#3451).
- **Service Discovery Enhancements**: Added Zookeeper service discovery support (#3377), Nacos auto-discovery (#3324), and HTTP service discovery collector with authentication support (#3388).
- **AI & Data Source Expansion**: Integrated Ollama AI model (#3441), added OpenRouter AI provider support (#3439), and enabled GreptimeDB as a Grafana data source (#3403).
- **Expression & Data Processing**: Supports sql and promql expression syntax (#3410); added batch import metrics to VictoriaMetrics (#3337).
- **Platform Compatibility**: Added Darwin (macOS) platform support (#3431).
- **Monitoring Metric Enhancements**: New statusCode metric data (#3446).
- **Other new features**
### Bug Fixes
- **Alert Notification Issues**: Fixed Uptime Kuma/Zabbix/Tencent Cloud Webhook URL errors (#3351); corrected Feishu notification format (#3508).
- **Threshold Functionality**: Fixed real-time Prometheus threshold failure (#3434).
- **Monitoring Status Errors**: Resolved incorrect sub-monitor status display (#3340) and monitoring list pagination issues (#3467).
- **System Stability**: Fixed null pointer exception in custom monitoring dashboard (#3448); resolved Jacoco test report generation failure (#3455).
- **Data Parsing Issues**: Fixed ANTLR4 parsing logic (binary operators/vectors) (#3482, #3488); corrected alert expression parsing errors (#3497, #3504).
- **Data Storage Optimization**: Improved GreptimeDB storage and query logic (#3387).
- **Other bug fixes**
### Refactoring and Optimization
- **Security Validation Enhancements**: Strengthened URL validation (WeCom/Telegram/Slack/ServerChan) (#3361-3364); added JNDI security checks (#3358); verified plugin service paths (#3375).
- **Architecture & Storage Optimization**: Updated security model (#3450); optimized DB column types (commonAnnotations/alertFingerprints to TEXT) (#3463); adjusted JDBC logic (#3500).
- **Dev Toolchain**: Added Maven Wrapper (mvnw) (#3430); updated dependencies (#3359, #3498); supported mvnd and optimized backend builds (#3491).
- **Observability**: Disabled OpenTelemetry exporters by default to prevent connection errors (#3437, #3461).
- **Community Collaboration**: Updated Issue templates (#3421).
- **Other optimizations**
### Tests and Quality
- **Unit Test Coverage**: Added unit tests for HttpSdCollectImpl (#3386).
### Documentation Enhancements
- **Internationalization**: Added 30+ Japanese documentation components (API/CentOS/Cisco switches/ClickHouse, etc.) (#3352, #3376, #3389).
- **Alert Documentation**: Updated alert threshold configuration (#3399), notification templates (#3466), and Volcano Engine integration guide (#3460).
- **Deployment & Configuration**: Added Grafana anonymous auth configuration (#3407); Rainbond cloud one-click installation guide (#3440).
- **Content Refinement**: Fixed time template syntax errors (#3378); optimized Chinese terminology (#3380, #3383); updated Greptime-init docs (#3355).
- **Community**: Added contributor/committer profiles (#3357, #3391, #3395); release blogs (#3449).
- **More documentation updates**
## Acknowledgements
Special thanks to the following community members for their collaborative efforts:
> @pruidong @MasamiYui @tomsun28 @Aias00 @zhangshenghang @zqr10159 @LiuTianyou @LL-LIN @lx1229 @xiaomizhou2 @pwallk
> @bigcyy @yuluo-yx @TJxiaobao @RainBondsongyg @Duansg @Calvin979 @Cyanty
## What's Changed
```markdown
* [bugfix] Fix incorrect webhook URLs for Uptime Kuma, Zabbix, and Tencent Cloud by @bigcyy in https://github.com/apache/hertzbeat/pull/3351
* [doc] japanese api by @Calvin979 in https://github.com/apache/hertzbeat/pull/3352
* [doc] update OS monitor by @MasamiYui in https://github.com/apache/hertzbeat/pull/3353
* [doc](start): update greptime-init documentation by @zqr10159 in https://github.com/apache/hertzbeat/pull/3355
* [doc] new ppmc liutianyou and update qq num by @tomsun28 in https://github.com/apache/hertzbeat/pull/3357
* [bugfix] Incorrect SD sub-monitor status by @MasamiYui in https://github.com/apache/hertzbeat/pull/3340
* [improve] improve url validation for WeComRobotAlertNotifyHandlerImpl by @Aias00 in https://github.com/apache/hertzbeat/pull/3361
* [improve] improve url validation for TelegramBotAlertNotifyHandlerImpl by @Aias00 in https://github.com/apache/hertzbeat/pull/3362
* [improve] improve url validation for SlackAlertNotifyHandlerImpl by @Aias00 in https://github.com/apache/hertzbeat/pull/3363
* [improve] improve url validation for serverChan by @Aias00 in https://github.com/apache/hertzbeat/pull/3364
* [improve] improve jndi validation by @Aias00 in https://github.com/apache/hertzbeat/pull/3358
* update maven dep by @Aias00 in https://github.com/apache/hertzbeat/pull/3359
* [doc] japanese centos by @Calvin979 in https://github.com/apache/hertzbeat/pull/3376
* [doc] fix incorrect time template syntax usercase in doc by @LL-LIN in https://github.com/apache/hertzbeat/pull/3378
* [doc] Add blog by @LiuTianyou in https://github.com/apache/hertzbeat/pull/3379
* [improve] add path validation for pluginservice by @Aias00 in https://github.com/apache/hertzbeat/pull/3375
* [feat] Support Zookeeper Service Discovery by @bigcyy in https://github.com/apache/hertzbeat/pull/3377
* [doc] modify chinese words by @Duansg in https://github.com/apache/hertzbeat/pull/3380
* [Task] Batch import metrics data in victoria-metrics by @MasamiYui in https://github.com/apache/hertzbeat/pull/3337
* [feature] support auto nacos service discovery by @xiaomizhou2 in https://github.com/apache/hertzbeat/pull/3324
* [doc] modify supplement related documentation by @Duansg in https://github.com/apache/hertzbeat/pull/3383
* [doc] japanese cisco switch by @Calvin979 in https://github.com/apache/hertzbeat/pull/3389
* [test] Add unit tests for HttpSdCollectImpl by @xiaomizhou2 in https://github.com/apache/hertzbeat/pull/3386
* [fix](warehouse): improve GreptimeDB data storage and querying by @zqr10159 in https://github.com/apache/hertzbeat/pull/3387
* [doc] japanese clickhouse by @Calvin979 in https://github.com/apache/hertzbeat/pull/3390
* [doc] new contributor and committer, update doc by @tomsun28 in https://github.com/apache/hertzbeat/pull/3391
* [doc] japanese consul sd by @Calvin979 in https://github.com/apache/hertzbeat/pull/3392
* [doc]add new committer blog by @pwallk in https://github.com/apache/hertzbeat/pull/3395
* [doc] japanese coreos by @Calvin979 in https://github.com/apache/hertzbeat/pull/3393
* [doc] japanese dahua by @Calvin979 in https://github.com/apache/hertzbeat/pull/3396
* [doc] japanese Debian by @Calvin979 in https://github.com/apache/hertzbeat/pull/3398
* [improve] http sd collector adds authentication by @Cyanty in https://github.com/apache/hertzbeat/pull/3388
* [doc] japanese deepseek & dm by @Calvin979 in https://github.com/apache/hertzbeat/pull/3400
* [docs] update alert threshold doc by @bigcyy in https://github.com/apache/hertzbeat/pull/3399
* [doc] japanese dns by @Calvin979 in https://github.com/apache/hertzbeat/pull/3404
* [doc] japanese dns sd by @Calvin979 in https://github.com/apache/hertzbeat/pull/3405
* [doc] japanese docker by @Calvin979 in https://github.com/apache/hertzbeat/pull/3408
* [doc] japanese doris_be by @Calvin979 in https://github.com/apache/hertzbeat/pull/3409
* [Doc] Update 1.7.1 by @zhangshenghang in https://github.com/apache/hertzbeat/pull/3411
* [doc] update home doc by @tomsun28 in https://github.com/apache/hertzbeat/pull/3418
* [doc] Update anonymous user auth configuration of the grafana dashboard document by @Cyanty in https://github.com/apache/hertzbeat/pull/3407
* [doc] japanese doris_fe by @Calvin979 in https://github.com/apache/hertzbeat/pull/3416
* [infra]: Update issue tmpl by @yuluo-yx in https://github.com/apache/hertzbeat/pull/3421
* [feature]Make GreptimeDB as a grafana data source by @zqr10159 in https://github.com/apache/hertzbeat/pull/3403
* [feat] support sql("...") and promql("...") expressions including SQL condition parsing by @bigcyy in https://github.com/apache/hertzbeat/pull/3410
* [doc] japanese dynamic_tp by @Calvin979 in https://github.com/apache/hertzbeat/pull/3419
* [doc] japanese elasticsearch by @Calvin979 in https://github.com/apache/hertzbeat/pull/3423
* [feature]Support Alibaba Cloud 'Simple Log Service(SLS)' alert source by @Duansg in https://github.com/apache/hertzbeat/pull/3422
* [Improve] add mvnw by @zhangshenghang in https://github.com/apache/hertzbeat/pull/3430
* [doc] japanese emqx by @Calvin979 in https://github.com/apache/hertzbeat/pull/3433
* [improvement] disable default OpenTelemetry exporters to prevent connection errors by @bigcyy in https://github.com/apache/hertzbeat/pull/3437
* [bugfix] Fix the issue where Prometheus RealTime Threshold is not eff… by @Duansg in https://github.com/apache/hertzbeat/pull/3434
* [feat] add support for ollama and update docs by @bigcyy in https://github.com/apache/hertzbeat/pull/3441
* [release] add support for darwin by @lx1229 in https://github.com/apache/hertzbeat/pull/3431
* [feature] Support Huawei Cloud `Cloud Eye` alert source by @Duansg in https://github.com/apache/hertzbeat/pull/3443
* [doc] japanese euleros by @Calvin979 in https://github.com/apache/hertzbeat/pull/3442
* docs: Add one-click installation for Rainbond Cloud by @RainBondsongyg in https://github.com/apache/hertzbeat/pull/3440
* [feat] add support for OpenRouter AI provider by @bigcyy in https://github.com/apache/hertzbeat/pull/3439
* [doc] japanese flink by @Calvin979 in https://github.com/apache/hertzbeat/pull/3447
* [security] update hertzbeat security model by @tomsun28 in https://github.com/apache/hertzbeat/pull/3450
* [feature] support volcengine alert source by @LiuTianyou in https://github.com/apache/hertzbeat/pull/3451
* [doc] add publish version 1.7.1 blog by @tomsun28 in https://github.com/apache/hertzbeat/pull/3449
* [doc] japanese flink on yarn by @Calvin979 in https://github.com/apache/hertzbeat/pull/3452
* [doc] japanese freebsd by @Calvin979 in https://github.com/apache/hertzbeat/pull/3456
* [improvement] disable default OpenTelemetry exporters to prevent connection errors by @bigcyy in https://github.com/apache/hertzbeat/pull/3461
* [doc] add doc for integrate volcengine alerts by @LiuTianyou in https://github.com/apache/hertzbeat/pull/3460
* [Fix] fix custom monitoring bulletin `NullPointerException` by @Duansg in https://github.com/apache/hertzbeat/pull/3448
* [fix] fix jacoco can not generate test reports. by @Duansg in https://github.com/apache/hertzbeat/pull/3455
* [doc] Alert notification template by @MasamiYui in https://github.com/apache/hertzbeat/pull/3466
* [doc] japanese greenplum by @Calvin979 in https://github.com/apache/hertzbeat/pull/3468
* [improvement] change column definitions for commonAnnotations and alertFingerprints to TEXT type by @bigcyy in https://github.com/apache/hertzbeat/pull/3463
* [fix] Fix `Monitors` paging display. by @Duansg in https://github.com/apache/hertzbeat/pull/3467
* [doc] japanese greptime by @Calvin979 in https://github.com/apache/hertzbeat/pull/3469
* [doc] japanese h3c switch by @Calvin979 in https://github.com/apache/hertzbeat/pull/3471
* [feature] Add statusCode metrics data. by @Duansg in https://github.com/apache/hertzbeat/pull/3446
* [doc] japanese hadoop by @Calvin979 in https://github.com/apache/hertzbeat/pull/3476
* [docs](webhook): update Chinese documentation for alert integration by @zqr10159 in https://github.com/apache/hertzbeat/pull/3478
* [doc] japanese hbase master by @Calvin979 in https://github.com/apache/hertzbeat/pull/3477
* [doc] japanese hbase region server by @Calvin979 in https://github.com/apache/hertzbeat/pull/3479
* [doc] japanese hdfs datanode by @Calvin979 in https://github.com/apache/hertzbeat/pull/3487
* [fix] antlr4 `vectors and` parse semantic fixes and optimizations by @Duansg in https://github.com/apache/hertzbeat/pull/3482
* [ci]: add mvnd support and update backend build by @zqr10159 in https://github.com/apache/hertzbeat/pull/3491
* [doc] japanese hdfs namenode by @Calvin979 in https://github.com/apache/hertzbeat/pull/3490
* [doc] japanese hertzbeat by @Calvin979 in https://github.com/apache/hertzbeat/pull/3492
* [fix] Fix antlr4 parsing of `or` and `unless` logical and set binary operators by @Duansg in https://github.com/apache/hertzbeat/pull/3488
* [doc] japanese hertzbeat token by @Calvin979 in https://github.com/apache/hertzbeat/pull/3493
* [feat] update_mvnd_version by @Aias00 in https://github.com/apache/hertzbeat/pull/3498
* add:a small jdbc modified. by @TJxiaobao in https://github.com/apache/hertzbeat/pull/3500
* fixed:a minor issue change by @TJxiaobao in https://github.com/apache/hertzbeat/pull/3428
* [bugfix] Fix incorrect expression parsing in alert setting component by @bigcyy in https://github.com/apache/hertzbeat/pull/3497
* [bugfix] Correctly parse binary comparison expressions by @bigcyy in https://github.com/apache/hertzbeat/pull/3504
* [bugfix]Fixed an error in the format of the flying book notification by @pruidong in https://github.com/apache/hertzbeat/pull/3508
* [release] release new version 1.7.2 by @tomsun28 in https://github.com/apache/hertzbeat/pull/3510
```
## New Contributors
- @Duansg made their first contribution in [https://github.com/apache/hertzbeat/pull/3380](https://github.com/apache/hertzbeat/pull/3380)
- @lx1229 made their first contribution in [https://github.com/apache/hertzbeat/pull/3431](https://github.com/apache/hertzbeat/pull/3431)
- @RainBondsongyg made their first contribution in [https://github.com/apache/hertzbeat/pull/3440](https://github.com/apache/hertzbeat/pull/3440)
## Apache HertzBeat
**Repository URL:**
[https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)
**Official Website:**
[https://hertzbeat.apache.org/](https://hertzbeat.apache.org/)
**Apache HertzBeat™ Download Link:**
[https://hertzbeat.apache.org/docs/download](https://hertzbeat.apache.org/docs/download)
**Apache HertzBeat™ Docker Images:**
Apache HertzBeat™ provides Docker images for each release, available on Docker Hub:
- HertzBeat: [https://hub.docker.com/r/apache/hertzbeat](https://hub.docker.com/r/apache/hertzbeat)
- HertzBeat Collector: [https://hub.docker.com/r/apache/hertzbeat-collector](https://hub.docker.com/r/apache/hertzbeat-collector)
**How to Contribute to the Apache HertzBeat™ Open Source Community?**
[https://hertzbeat.apache.org/docs/community/contribution](https://hertzbeat.apache.org/docs/community/contribution)
+47
View File
@@ -0,0 +1,47 @@
---
title: Welcome HertzBeat's New Community Committer!
author: bigcyy
author_title: Yang Chen
author_url: https://github.com/bigcyy
tags: [opensource, practice]
keywords:
[
open source monitoring system,
alerting system,
Apache,
Apache Committer,
HertzBeat,
]
---
Hello everyone, I'm Yang Chen, currently a graduate student at Chongqing University of Posts and Telecommunications. I'm deeply honored to receive recognition and invitation from the Apache HertzBeat™ community to officially become a project Committer. This marks the true beginning of my open-source journey!
## My Open Source Exploration
As early as my undergraduate years, I had exposure to open source.
Back then, I developed a [epidemic notice QQ bot](https://github.com/bigcyy/GroupNotifier) based on the open-source [Mirai](https://github.com/mamoe/mirai) framework. However, that was more at the usage level.
In my junior year, I attempted to independently open-source an AI project called [customized_chat](https://github.com/bigcyy/customized-chat), which was my first step into "open source."
But these experiences were all solo explorations, and I deeply felt that this wasn't true open source, as it failed to establish a complete community ecosystem.
## Meeting HertzBeat: True Open Source Practice
To participate more deeply in open source, I began searching for suitable open-source activities and thus encountered HertzBeat. For me, this was the true beginning of my open-source journey. Here, I not only learned solid technical development but also experienced a mature community ecosystem. I deeply understood the essence of the "Apache Way" - the community builds the project, not the project builds the community.
I first learned about HertzBeat through GSoC (Google Summer of Code), when the community's proposal about developing monitoring MCP deeply attracted me. So I proactively contacted Tom and officially began participating in community activities. Tom was very enthusiastic, and the entire community was exceptionally active.
I clearly remember my first PR (Pull Request), when I even conducted online testing with a user in an Issue, which was quite a unique experience for me. Although I wasn't ultimately selected for GSoC, during that period, I had already deeply participated in the community and fully experienced its excellence.
## Growth and Gains from Open Source
Participating in open source has indeed significantly improved my abilities. By reading HertzBeat's architectural design and actively participating in community discussions, I've accumulated many valuable experiences, such as:
- Cutting-edge Technology: I gained deep understanding of monitoring system design and implementation, and practiced core technologies like concurrent programming and distributed systems in the project.
- Practical Abilities: Through solving real problems and participating in code contributions, I successfully transformed theoretical knowledge into practical operational skills.
- Community Culture Experience: I personally experienced the unique charm of the "Apache Way" and engaged in deep exchanges and learning with developers from around the world.
My experience has convinced me that open source is not just about writing code, but an excellent platform for learning, growing, and contributing.
If you're also passionate about technology, eager to improve yourself through practice, and want to experience true community collaboration, then the Apache HertzBeat™ community is definitely your best choice!
## Finally
I sincerely thank [Tom](https://github.com/tomsun28), [Shenghang](https://github.com/zhangshenghang), [Logic](https://github.com/zqr10159), and other community members for their meticulous code reviews and patient guidance. I hope Apache HertzBeat™ continues to thrive!
@@ -0,0 +1,126 @@
---
title: Apache HertzBeat™ Graduates as an Apache Top-Level Project!
author: TJxiaobao
author_url: https://github.com/TJxiaobao
tags: [opensource, apache]
---
> **A Milestone Moment for Our Open-Source Project**
>
> On August 21, 2025, the Apache Software Foundation (ASF), the world's largest open-source software foundation, officially announced that Apache HertzBeat™ has graduated to become an Apache Top-Level Project (TLP).
>
> Apache HertzBeat™ applied to join the Apache Incubator in April 2024 and released its first Apache version two months later. On August 21, 2025, the Apache Board of Directors approved the resolution for Apache HertzBeat's graduation, ending a 17-month incubation period and officially establishing Apache HertzBeat™ as an Apache Top-Level Project.
>
> This achievement signifies that Apache HertzBeat's technological innovation, community governance, and ecosystem maturity in the monitoring field have fully met the stringent standards of the Apache Foundation, making it a key choice for global open-source monitoring infrastructure.
## 1. What is Apache HertzBeat?
[Apache HertzBeat](https://github.com/apache/hertzbeat) is an easy-to-use, open-source, real-time monitoring and alerting system that requires no agent, features a high-performance cluster, is compatible with Prometheus, and offers powerful custom monitoring and status page building capabilities.
![hertzBeat](/img/docs/hertzbeat-arch.png)
### Features
- **All-in-one monitoring, alerting, and notification**, supporting one-stop monitoring, threshold alerting, and notifications for application services, applications, databases, caches, operating systems, big data, middleware, web servers, cloud-native, network, custom, and more.
- **User-friendly and easy to use**, requiring no `Agent`. All operations are done through a `WEB` interface, allowing you to set up monitoring and alerts with just a few clicks, with no learning curve.
- **Configurable protocol specifications** such as `Http, Jmx, Ssh, Snmp, Jdbc, Prometheus`. You only need to configure a monitoring template `YML` in your browser to use these protocols to collect any desired metrics. Can you believe that you can quickly adapt to a new monitoring type like `K8s` or `Docker` with just a simple configuration?
- **Compatible with the `Prometheus` ecosystem and more**, allowing you to monitor everything that Prometheus can with simple page operations.
- **High performance**, supporting horizontal scaling of multi-collector clusters, multi-isolated network monitoring, and cloud-edge collaboration.
- **Flexible alert threshold rules**, with timely notifications via `Email`, `Discord`, `Slack`, `Telegram`, `DingTalk`, `WeChat`, `Feishu`, `SMS`, `Webhook`, `ServerChan`, and other methods.
- **Powerful status page building capabilities**, making it easy to convey the real-time status of your product services to users.
## 2. Incubation Journey and Milestones
### **I. Incubation Journey**
- **April 2024**:
HertzBeat officially applied to join the Apache Incubator and became an Apache Incubator project.
- **June 2024**:
The first Apache version was released, marking the project's official entry into the Apache ecosystem. (During this period, a large number of non-compliant third-party dependencies were replaced, such as the database JPA specification implementation being replaced from Hibernate to EclipseLink).
- **August 21, 2025**:
After **17 months of efficient incubation**, the Apache Board of Directors passed the resolution for HertzBeat's graduation, officially promoting it to an Apache Top-Level Project (TLP).
Under the guidance of the Apache Foundation Incubator, three major transformations were completed:
- **Structured Governance:** Established a PMC-led open governance model, with community decisions made publicly through mailing lists.
- **Standardized Processes:** Adopted the Apache release process, with all versions approved by IPMC vote.
- **Global Collaboration:** Attracted developers and users from all over the world to contribute to Apache HertzBeat.
#### **II. Technical Milestones**
During the incubation period, HertzBeat maintained an active pace of research, development, and iteration, releasing multiple versions to bring users richer features, more stable performance, and a better experience.
- Released 5 ASF-compliant versions (1.6.0 - 1.7.2)
- Key feature enhancements include:
- **Multi-protocol expansion** - Added support for key components or protocols such as Ipmi, PLC, NVIDIA, Redfish.
- **Intelligent alert center** - Implemented multi-expression alerts, periodic thresholds, and alert suppression/silencing/dispatch functions.
- **Dynamic service discovery** - Achieved automatic task discovery through http_sd and Zookeeper/Nacos.
- **Cloud service integration** - Supported integration with alert sources from Alibaba Cloud SLS, Huawei Cloud, and Volcano Engine.
- **AI capability enhancement** - Integrated AI platforms such as OpenAI.
- **Storage optimization** - Upgraded storage performance for VictoriaMetrics and GreptimeDB.
- **Internationalization support** - Added multi-language interfaces, including Japanese/Traditional Chinese.
- **Data processing enhancement** - Supported SQL/PromQL expression syntax analysis, refactoring data flow with Apache Arrow.
The continuous iteration of these versions fully demonstrates HertzBeat's dedication to technology and its high regard for user needs. Each version release is a solid step in HertzBeat's growth, bringing users a more powerful and user-friendly monitoring experience.
#### **3. Community Development**
During the Apache incubation period, HertzBeat strictly adhered to the Apache Way:
- **Equal contribution and authority accumulation**: All developers participate equally, gradually building a reputation and gaining access, such as code repository submission rights, through code contributions, documentation improvements, and issue resolution.
- **Open and transparent communication**: Technical selections, version planning, and other discussions are conducted openly via mailing lists, with communication records archived and searchable. Members can participate anytime, anywhere, and new members can quickly integrate by reviewing these records.
- **Consensus-driven decision-making**: For key decisions such as adding or removing features and choosing technical routes, the community engages in thorough discussions, weighing various factors. If a complete consensus cannot be reached, voting is used to assist, ensuring that the project's direction aligns with the overall interests of the community.
- **Contributor Growth**:
- During the incubation period, **13 new Committers** were added, including **3 nominated PPMC members**, and the number of contributors reached 275. The core team also covers multiple time zones in China, the US, and Europe.
- GitHub **Stars surpassed 6K+**, with an average of **30+** monthly active developers.
- **User Ecosystem**:
- **Application Areas**: Since its incubation, Apache HertzBeat™ has been successfully implemented in various industry scenarios due to its lightweight, agentless, and highly scalable features, becoming a new choice for enterprise monitoring infrastructure.
- **Developer Ecosystem**: The community has contributed a large number of monitoring templates covering mainstream technology stacks such as Kubernetes, Docker, Redis, and MySQL, significantly reducing the cost of monitoring configuration.
## 3. Future Outlook and Plans
Becoming an Apache Top-Level Project is a milestone, but it is also a new beginning. The Apache HertzBeat™ community will continue to uphold the Apache Foundation's "community over code" philosophy and evolve around the following core directions, striving to become a world-leading open-source observability platform:
1. AI and Intelligent Capabilities
- Explore the application of AI in monitoring data analysis, anomaly detection, and intelligent alerting.
- Integrate more AI models and services to enhance the user experience.
2. Enhance Product Performance and Scalability
- Continuously optimize collection scheduling algorithms and cluster architecture to support larger-scale monitoring scenarios.
- Improve system stability, reduce resource consumption, and enhance data processing efficiency.
3. Improve Functionality and User Experience
- Simplify the monitoring configuration process and provide a more intuitive and user-friendly interface.
- Enhance the status page functionality and support more customization options.
4. Strengthen Community Building and Internationalization
- Expand the community size and attract more contributors to participate in project development.
- Improve multi-language support, including document internationalization and interface localization.
## 4. Acknowledgments
The successful graduation of Apache HertzBeat™ from the incubator would not have been possible without the collective efforts of all community members and supporters. We would like to express our sincerest gratitude to:
- **The Apache Foundation & Incubator**
Thank you to the Apache Foundation for providing a neutral collaboration platform, a comprehensive incubation process, and the help of incubator members in project governance, version releases, and community building.
- **Sincere thanks to our Apache mentors for their selfless dedication and guidance**
Thank you to our mentors (a tribute to the guidance of mentors such as **Yonglun Zhang**, **Yu Xiao**, **Justin Mclean**, and **Francis Chuang**) for their valuable advice, architectural reviews, and community governance guidance during the incubation process. Your professional experience and selfless help have guided the project in the right direction, in line with the Apache Way.
- **Sincere thanks to all code contributors, documentation maintainers, and community participants**
Thank you to the hundreds of contributors worldwide for their wisdom and efforts. Whether it's code submissions, issue feedback, document translation, or community discussions, your every effort is a vital driving force for the project's progress.
- **A special tribute to the core contributors and Project Management Committee members**
Thank you for your long-term persistence and dedication, which have played a key role in the evolution of the technical architecture, the establishment of community norms, and project promotion.
- **Thank you to all users and adopting organizations for their trust and support**
Thank you for your practical validation and continuous feedback in production environments. These valuable experiences have greatly promoted the maturity and improvement of the product.
Finally, we have always believed that: **Community Achieves Greatness**. A tribute to open source, a tribute to every participant, and may our code run on machines worldwide!
We welcome more developers to join us and have fun!
—— The Apache HertzBeat™ Community
+253
View File
@@ -0,0 +1,253 @@
---
title: Announcement of Apache HertzBeat™ 1.7.3 Release
author: LiuTianyou
author_title: LiuTianyou
author_url: https://github.com/LiuTianyou
tags: [opensource, release]
keywords: [open source monitoring system, alerting system, HertzBeat, release]
---
Dear Community Members,
We are thrilled to announce the official release of Apache HertzBeat™ 1.7.3. This also marks the first release since Apache HertzBeat™ graduated to become a Top-Level Project at Apache.
## Downloads and Documentation
- **Apache HertzBeat™ 1.7.3 Download Link**: [https://hertzbeat.apache.org/zh-cn/docs/download](https://hertzbeat.apache.org/zh-cn/docs/download)
- **Apache HertzBeat™ Documentation**: [https://hertzbeat.apache.org/zh-cn/docs/](https://hertzbeat.apache.org/zh-cn/docs/)
## Major Updates
### New Features and Enhancements
- **Monitoring Support Expansion**: Added monitoring support for Apache DolphinScheduler(#3656), TDengine(#3678), macOS systems(#3715), Synology NAS(#3721), and HertzBeat(#3641). Oracle monitoring now includes user password-related metrics(#3674).
- **Core Feature Enhancements**: Supports periodic threshold preview(#3505), export all monitoring configurations(#3509), monitoring templates support JSON nested parsing(#3645), HTTP collection supports parsing numeric data using JsonPath(#3612), and VictoriaMetrics metrics now support adding custom labels(#3622).
- **Internationalization (i18n)**: Supports internationalization for collector online notifications(#3585).
- **More New Features**
### Bug Fixes
- **Grafana Integration Issues**: Fixed visualization display issues in Grafana integration (#3666).
- **System Stability**: Fixed startup errors when VictoriaMetrics storage is not configured (#3552), resolved premature input stream closure in Prometheus parsing (#3567), and fixed missing offline notifications when collectors go offline (#3601).
- **Data Parsing Issues**: Fixed AES key decoding errors in collectors (#3652), resolved JDBC configuration parameter failures (#3625), and addressed multiple monitoring template parsing failures caused by Jexl keyword conflicts (#3629, #3632, #3685, #3686, #3687, #3693, #3705, #3707, #3708).
- **Other Bug Fixes**
### Refactoring and Optimization
- **Performance Optimization**: Optimized monitoring list page loading performance (#3719), improved scheduling logic for batch refresh tasks (#3660), enabled Gzip compression for VictoriaMetrics write requests (#3595).
- **Logic Refactoring & Improvements**: Refactored the processing logic of the Alarm Cache Manager (AlarmCacheManager) (#3525), redesigned Prometheus label parsing logic and PromQL generation logic (#3662, #3725), optimized comparators for alert judgment logic (#3574).
- **UI/UX Improvements**: Optimized status page layout and UI (#3680), enhanced status page event list (#3727), improved homepage navigation bar layout (#3616), refined interaction effects on the new monitoring page (#3726), updated UI theme (#3682), enhanced monitoring data chart components (#3668).
- **Other Optimizations**
### Tests and Quality
- **Unit Test Coverage**: Added unit tests for VictoriaMetrics data storage (#3595).
- **End-to-End Testing**: Improved Kafka end-to-end (e2e) test quality (#3520).
- **Testing Efficiency**: Implemented parallel CI to accelerate the build process (#3523).
- **Other Testing Improvements**
### Documentation Enhancements
- **Internationalized Documentation**: Led by @Calvin979, added extensive Japanese documentation (i18n) for numerous monitoring templates, covering dozens of templates including HPE Switch, Huawei Switch, Kafka, JVM, Linux, MySQL, Redis, SpringBoot, and more.
- **Content Corrections & Optimizations**: Fixed errors, broken links, and semantic issues in documentation (#3526, #3559, #3608, #3695).
- **Community & Ecosystem**: Added blog posts introducing new committers and PMC members (#3522, #3561, #3563, #3569), updated project graduation-related documentation and website content (#3584, #3692, #3701, #3729), updated contributor documentation (#3667).
- **More Documentation Updates**
## Acknowledgements
Special thanks to the following community members for their collaborative efforts:
> @pjfanning @chingjustwe @delei @rowankid @MasamiYui @tomsun28 @Aias00 @zhangshenghang @zqr10159 @LiuTianyou @yy549159265 @lx1229 @VampireAchao
> @cto-huhang @pwallk @bigcyy @sarthakeash @Carpe-Wang @YxYL6125 @tuzuy @lynx009 @Duansg @carlpinto25 @Calvin979 @Cyanty @Saramanda9988
## What's Changed
```markdown
* [release] release new version 1.7.2 by @tomsun28 in #3510
* [doc] japanese hpe switch by @Calvin979 in #3511
* [doc] japanese huawei switch by @Calvin979 in #3515
* [doc] japanese hive by @Calvin979 in #3506
* [doc] japanese hugeGraph by @Calvin979 in #3518
* [feature] Support for Periodic Threshold preview. by @Duansg in #3505
* [Improve] Improve kafka e2e by @zhangshenghang in #3520
* [doc] japanese iceberg by @Calvin979 in #3519
* [fix] Update the correct replacement of outdated functions and placeholders by @Cyanty in #3516
* [doc] japanese influxdb by @Calvin979 in #3521
* [doc] japanese hikvision by @Calvin979 in #3499
* [doc] Add new commiter blog by @MasamiYui in #3522
* [fix] fix i18n error and append two metrics about disk infos by @lx1229 in #3514
* [feat]parallel ci by @Aias00 in #3523
* [doc] japanese influxdb promql by @Calvin979 in #3527
* fix: fix something by @Aias00 in #3524
* [doc] japanese iotdb by @Calvin979 in #3530
* download version deal by @lynx009 in #3531
* [doc] update outdated links by @lynx009 in #3535
* [doc]update download page text by @zqr10159 in #3532
* [doc] japanese ipmi by @Calvin979 in #3537
* [doc] japanese jetty by @Calvin979 in #3539
* enable GitHub Dependabot to create PRs for security alerts but not for every dependency update by @pjfanning in #3543
* [doc] Fix some issues in the documentation by @Duansg in #3526
* [doc] recommend newer mysql connector jar by @pjfanning in #3541
* [doc] add hertzbeat maturity and fix doc by @tomsun28 in #3544
* [doc] update download page by @lynx009 in #3549
* [doc] japanese kafka by @Calvin979 in #3548
* [doc] japanese jvm by @Calvin979 in #3545
* [doc] japanese kafka client by @Calvin979 in #3550
* [feature] Support export all allmonitors by @YxYL6125 in #3509
* feat: Add LogUtil wrapper and optimize logging comments by @Carpe-Wang in #3489
* [refactor] AlarmCacheManager refactoring processing logic by @Duansg in #3525
* [improve] make jackson serialize all field visibility by @tomsun28 in #3551
* [bugfix] fix npe due the victoria insert not config when startup by @tomsun28 in #3552
* [doc] V1.7.2 version blog by @lynx009 in #3558
* [doc] japanese kafka promql by @Calvin979 in #3553
* [doc] Fix documentation error and adjust Chinese semantics by @Duansg in #3559
* [doc] add new pmc and committer by @tomsun28 in #3561
* [doc] japanese kingbase by @Calvin979 in #3562
* [doc] add new committer by @MasamiYui in #3563
* [feat] Add QueryExecutor does not support internationalization. by @Duansg in #3565
* [doc] japanese kubernetes by @Calvin979 in #3568
* [mqtt] refact the MQTT based on the Paho SDK and support both unidirectional and bidirectional MQTT over TLS connections. by @yy549159265 in #3474
* [docs] Add new committer blog by @bigcyy in #3569
* [bugfix] Fix MySQL WrongArgumentException by @pwallk in #3564
* [doc] japanese kvrocks by @Calvin979 in #3570
* [doc] japanese linux by @Calvin979 in #3571
* [fix]: Fix a problem where the inputstream was closed prematurely when parsing Prometheus by @zqr10159 in #3567
* [doc]: add FAQs about task limits by @zqr10159 in #3581
* [infra] upgrade openjdk image to fix Debian source failed by @tomsun28 in #3587
* [feature] Support i18n of collector online notification by @Duansg in #3585
* [doc] add japanese i18n in app-linux_script.yml by @Calvin979 in #3575
* [doc] add japanese i18n in app-mariadb.yml by @Calvin979 in #3577
* [doc] add japanese i18n in app-memcached.yml by @Calvin979 in #3578
* [doc] add japanese i18n in app-modbus.yml by @Calvin979 in #3580
* [feature] System time zone optimization. by @Duansg in #3588
* [doc] add japanese i18n in app-mongodb.yml by @Calvin979 in #3590
* [refactor] Refactor the comparison logic by @Duansg in #3574
* [fix] Fix collector online metadata filling by @Duansg in #3579
* [doc] add japanese i18n in app-mongodb_atlas.yml by @Calvin979 in #3593
* [doc] add japanese i18n in app-mysql.yml by @cto-huhang in #3594
* [doc] add japanese i18n in app-zookeeper.yml and app-zookeeper_sd.yml by @Cyanty in #3596
* [doc] add japanese i18n in app-nginx.yml by @Duansg in #3600
* [doc] add japanese i18n in app-rocketmq.yml and app-rabbitmq.yml by @Saramanda9988 in #3598
* [improve] VM write request sets up gzip compression and adds saveData unit tests by @Cyanty in #3595
* [feat] Auto-generate AES key if not configured by @bigcyy in #3604
* [doc] update japanese i18n in app-mqtt.yml and app-mysql.yml by @Calvin979 in #3597
* [fix] Fix collector offline without sending offline notification by @Duansg in #3601
* [doc] fix image reference issues in documents by @delei in #3608
* [doc] add japanese i18n in app-nacos.yml by @cto-huhang in #3599
* [doc] add japanese i18n in app-nvidia.yml, app-ping.yml, app-pop3.yml, app-port.yml and app-push.yml by @Calvin979 in #3611
* [doc] update japanese i18n in app-nacos_sd.yml, app-nebula_graph.yml, app-zookeeper.yml by @Calvin979 in #3602
* [doc] add japanese i18n in app-nebula_graph_cluster.yml and update japanese of client by @Calvin979 in #3603
* [bugfix] the tagValue may be null in the determineNewLabels method by @delei in #3606
* [doc] add japanese i18n in app-netease_mailbox.yml and app-ntp.yml by @Calvin979 in #3607
* [doc] add japanese i18n in app-oceanbase.yml by @VampireAchao in #3614
* [feat] Http collect supports jsonpath parsing of numeric type by @Duansg in #3612
* [doc] Optimize the home website navbar layout UI for medium-sized screens by @VampireAchao in #3616
* [doc] add japanese i18n in app-opensuse.yml by @Calvin979 in #3619
* [doc] add japanese i18n in app-oracle.yml by @Calvin979 in #3621
* [doc] add japanese i18n in app-postgresql.yml by @Calvin979 in #3624
* [doc] add linux operating system practice usecase by @delei in #3628
* [fix] Fixed springboot3abnormal use of the keyword jexl by @Duansg in #3629
* [Feature] add customized labels to VM metrics by @chingjustwe in #3622
* [fix] Fixed issue where jdbc url was replaced by @Duansg in #3625
* [fix] remove optional metrics by @Duansg in #3636
* [doc] add japanese i18n in app-openai.yml and app-opengauss.yml by @Calvin979 in #3617
* [doc] add japanese i18n in app-smtp.yml, app-ssl_cert.yml, app-storm.yml, app-udp_port.yml, app-uniview.yml, app-website.yml, app-websocket.yml by @Calvin979 in #3643
* [bugfix] fix potential StringIndexOutOfBoundsException by @delei in #3642
* [feat] Monitoring templates support JSON nested parsing. by @Duansg in #3645
* [doc] add English version of linux operating system practice usecase by @delei in #3631
* [bugfix] fixed jexl keyword issue in springboot2 monitoring template by @delei in #3632
* [doc] add japanese i18n in app-qq_mailbox.yml and app-redfish.yml by @Calvin979 in #3635
* [doc] add japanese i18n in app-prometheus.yml, app-pulsar.yml and app-registry.yml by @Calvin979 in #3639
* [doc] add japanese i18n in app-s7.yml, app-tplink_switch.yml, app-shenyu.yml by @Calvin979 in #3648
* [feature] Support HertzBeat self monitor by @zqr10159 in #3641
* [fix] Fixed an issue where template configuration was overwritten by @Duansg in #3649
* [bugfix] fix the collector aes decode with secret error by @tomsun28 in #3652
* [doc] add japanese i18n in app-tidb.yml, app-windows_script.yml by @Calvin979 in #3650
* [doc] add japanese i18n in app-springboot3.yml by @Duansg in #3658
* [doc] improve documentation formatting and readability by @delei in #3659
* [doc] add japanese i18n in app-prestodb.yml, app-spark.yml by @Calvin979 in #3651
* [doc] add japanese i18n in app-process.yml by @Calvin979 in #3654
* [doc] add japanese i18n in app-spring_gateway.yml, app-sqlserver.yml by @Calvin979 in #3661
* [doc] add japanese i18n in app-redhat.yml by @Calvin979 in #3655
* [doc] add japanese i18n and remove chinese in script folder by @Calvin979 in #3665
* [doc] update contribution doc by @tomsun28 in #3667
* [GSOC] MCP server setup, authorization, and basic tool support by @sarthakeash in #3610
* [doc] add japanese i18n in app-redis.yml by @Calvin979 in #3669
* [Feature] add Apache DolphinScheduler monitoring support by @delei in #3656
* [improve] Optimize the scheduling logic for batch flush tasks by @Cyanty in #3660
* [fix] Fixed Grafana visualization integration display issue by @Duansg in #3666
* [feature] add user password monitoring metrics in oracle monitor by @delei in #3674
* [doc] add japanese i18n in app-redis_cluster.yml by @Calvin979 in #3672
* [doc] add japanese i18n in app-dolphinscheduler.yml by @Calvin979 in #3677
* [improve] optimize status page layout and UI by @delei in #3680
* [doc] add japanese i18n in app-redis_sentinel.yml by @Calvin979 in #3681
* [doc] remove all (incubating) by @VampireAchao in #3584
* [bugfix] fixed jexl keyword issue in postgresql monitoring template by @delei in #3685
* [bugfix] fixed jexl keyword issue in hertzbeat monitoring template by @delei in #3686
* [bugfix] fixed jexl keyword issue in windows monitoring template by @delei in #3687
* [bugfix] fixed jexl keyword issue in spring_gateway monitoring template by @delei in #3693
* [doc] update doc while graduate by @tomsun28 in #3692
* [doc] Fixed menu path errors and MD document format anomalies. by @Duansg in #3695
* chore: update ui theme by @tomsun28 in #3682
* [doc] add japanese i18n in app-rockylinux.yml by @Calvin979 in #3688
* [doc] add japanese i18n in app-seatunnel.yml by @Calvin979 in #3691
* [doc] add japanese i18n in app-tomcat.yml by @Calvin979 in #3700
* [refactor] modify message column to TEXT type by @delei in #3698
* [doc] update website, doc while graduate by @tomsun28 in #3701
* [bugfix] resolve translation value fetching for uppercase app names by @rowankid in #3690
* [doc] add japanese i18n in app-vastbase.yml by @Calvin979 in #3704
* [bugfix] fixed jexl keyword issue in kingbase monitoring template by @delei in #3705
* [feat] Support TDengine monitoring by @Duansg in #3678
* [bugfix] fixed jexl keyword issue in greenplum monitoring template by @delei in #3707
* [bugfix] fixed jexl keyword issue in vastbase monitoring template by @delei in #3708
* refactor: Optimize the monitoring data chart component by @tuzuy in #3668
* [improve] Improve the parsing logic of prometheus label by @Duansg in #3662
* [doc] modify github link. by @lynx009 in #3714
* [doc] add japanese i18n in app-ubuntu.yml, app-windows.yml and app-yarn.yml by @Calvin979 in #3703
* [doc] add japanese i18n in app-valkey.yml by @Calvin979 in #3706
* [improve] Improve performance issues when loading large numbers of metric cards in Monitors by @Duansg in #3719
* [doc] add japanese i18n in app-tdengine.yml by @Calvin979 in #3717
* [feature] add macOS monitoring support by @delei in #3715
* [feature] add Synology NAS monitoring support by @delei in #3721
* [improve] Improve Prometheus label PromQL parsing logic by @Duansg in #3725
* [release] release new version 1.7.3 by @LiuTianyou in #3724
* [Improve] changed scroll of intervals in New Monitor page by @carlpinto25 in #3726
* [improve] optimize the incident list on the status page to support paginated queries by @delei in #3727
* docs: update doc and add graduation blog by @tomsun28 in #3729
```
## New Contributors
- @yy549159265 made their first contribution in [https://github.com/apache/hertzbeat/pull/3474](https://github.com/apache/hertzbeat/pull/3474)
- @cto-huhang made their first contribution in [https://github.com/apache/hertzbeat/pull/3594](https://github.com/apache/hertzbeat/pull/3594)
- @Saramanda9988 made their first contribution in [https://github.com/apache/hertzbeat/pull/3598](https://github.com/apache/hertzbeat/pull/3598)
- @delei made their first contribution in [https://github.com/apache/hertzbeat/pull/3608](https://github.com/apache/hertzbeat/pull/3608)
- @chingjustwe made their first contribution in [https://github.com/apache/hertzbeat/pull/3622](https://github.com/apache/hertzbeat/pull/3622)
- @rowankid made their first contribution in [https://github.com/apache/hertzbeat/pull/3690](https://github.com/apache/hertzbeat/pull/3690)
- @tuzuy made their first contribution in [https://github.com/apache/hertzbeat/pull/3668](https://github.com/apache/hertzbeat/pull/3668)
- @carlpinto25 made their first contribution in [https://github.com/apache/hertzbeat/pull/3726](https://github.com/apache/hertzbeat/pull/3726)
## Apache HertzBeat
**Repository URL:**
[https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)
**Official Website:**
[https://hertzbeat.apache.org/](https://hertzbeat.apache.org/)
**Apache HertzBeat™ Download Link:**
[https://hertzbeat.apache.org/docs/download](https://hertzbeat.apache.org/docs/download)
**Apache HertzBeat™ Docker Images:**
Apache HertzBeat™ provides Docker images for each release, available on Docker Hub:
- HertzBeat: [https://hub.docker.com/r/apache/hertzbeat](https://hub.docker.com/r/apache/hertzbeat)
- HertzBeat Collector: [https://hub.docker.com/r/apache/hertzbeat-collector](https://hub.docker.com/r/apache/hertzbeat-collector)
**How to Contribute to the Apache HertzBeat™ Open Source Community?**
[https://hertzbeat.apache.org/docs/community/contribution](https://hertzbeat.apache.org/docs/community/contribution)
+30
View File
@@ -0,0 +1,30 @@
---
title: From First Encounter with Open Source to Becoming a PMC Member of Apache HertzBeat™
author: Calvin
author_title: Calvin
author_url: https://github.com/Calvin979
tags: [opensource, practice]
keywords: [open source monitoring system, alerting system]
---
## Personal Journey
In 2023, I stumbled upon the open-source project HertzBeat. At the time, I was still just following online tutorials and books to learn the source code of some well-known open-source frameworks.
With a mindset of learning, I attempted to run HertzBeat locally. However, I soon encountered an issue where the project wouldn't start. Because of this, I submitted my first PR—modifying the startup documentation.
This PR was swiftly merged into the master branch, which greatly encouraged me. From then on, I began to delve deeper into HertzBeat. It was challenging at first, and I didn't know where to start.
As I gained a deeper understanding of it, I gradually began to dissect its modules and code structure. During this period, I claimed numerous tasks and bugs from the community's issue list and submitted corresponding PRs.
From documentation, unit testing, frontend, backend, to new feature development, I unknowingly gained extensive knowledge within this project. This knowledge no longer felt cold and abstract like what's presented in books or blogs; instead, it came alive before my eyes.
A year later, I became a Committer—a new phase in my contributions to open-source projects. Beyond maintaining code, this role emphasizes proactively fostering a positive community atmosphere and mentoring new contributors to deepen their involvement with HertzBeat. This experience revealed that technology isn't just about code—it's about collaboration, sharing, and collective growth.
Today, I am honored to be invited to join the PMC. This recognition not only affirms my past contributions but also fuels my motivation to continue nurturing the community's growth! I sincerely wish Apache HertzBeat a healthy and enduring future.
### To Developers Interested in Contributing to Apache HertzBeat
For those considering open-source participation, I sincerely encourage you to build a solid foundation and cultivate genuine interest. Foundations enable you to quickly grasp new projects, while passion fuels your drive to contribute to open source.
Finally, hope everyone to actively engage with Apache HertzBeat and contribute to our community.
### Acknowledgments
Special thanks to [Tom](https://github.com/tomsun28) and all the Apache HertzBeat™ community members for their support.
+96
View File
@@ -0,0 +1,96 @@
---
title: Welcome HertzBeat's New Community Committer!
author: Duansg
author_title: SiGuo Duan
author_url: https://github.com/Duansg
tags: [opensource, practice]
keywords:
[
open source monitoring system,
alerting system,
Apache,
Apache Committer,
HertzBeat,
]
---
> Hello everyone, it's a great honor to be invited by the community to become Apache HertzBeat Committer.
## Self-Introduction
- **Name**: Siguo Duan
- **Github**: [Duansg](https://github.com/Duansg)
- **Email**: [duansg@apache.org](mailto:duansg@apache.org)
- **Position**: Senior Development Engineer
- **Primary Technical Focus**: Currently engaged in the e-commerce industry, primarily focused on the research and development of data processing and management for a billion-item product middle platform.
## First Encounter Apache HertzBeat
In practical projects, to enhance the existing monitoring system, we aim to implement visual monitoring and alerts for existing metrics. However, we also wish to avoid introducing or integrating overly complex monitoring systems. Consequently, I began searching for a monitoring solution that is ready-to-use, feature-rich, and easily extensible. It was during this process that I gradually encountered and became familiar with Apache HertzBeat.
Through continuous research and debugging, I began delving into its source code and gradually became involved in community contributions. Today, keeping up with community updates, reviewing pull requests, and discussing issues have become part of my daily routine.
## The Path to Open Source Contributions
The initial biggest challenge in formally contributing to the Apache HertzBeat project was unfamiliarity with its architecture, particularly the collaboration mechanisms between modules. By reading official documentation, source code, and historical PRs from the community, I gradually gained clarity on the project's structure. Simultaneously, discussions with community members during PR reviews provided invaluable advice and fresh perspectives—these exchanges fostered significant growth.
Through systematic reading of source code and analysis of historical changes, I gradually gained a deep understanding of the project structure and actively participated in code fixes and feature enhancements. To date, I have submitted and merged multiple contributions to the Apache HertzBeat project, including but not limited to:
> [47 commits](https://github.com/apache/hertzbeat/commits?author=Duansg) 23,649 ++ 5,547 --
**Submitted PR (47 commits)**
- Fix:
Prometheus real-time thresholds not taking effect issue([#3434](https://github.com/apache/hertzbeat/pull/3434))、null pointer exception in custom dashboards([#3448](https://github.com/apache/hertzbeat/pull/3448))、Jacoco test report generation failure([#3455](https://github.com/apache/hertzbeat/pull/3455))、
Page count calculation error([#3467](https://github.com/apache/hertzbeat/pull/3467))、ANTLR4 semantic parsing fixes and optimizations([#3482](https://github.com/apache/hertzbeat/pull/3482)、[#3488](https://github.com/apache/hertzbeat/pull/3488))、collector startup notification exception([#3579](https://github.com/apache/hertzbeat/pull/3579))、
Failure to send notifications when collector is offline([#3601](https://github.com/apache/hertzbeat/pull/3601))、JEXL keyword issue fixes and additions([#3629](https://github.com/apache/hertzbeat/pull/3629))、Security handling for JDBC URL([#3625](https://github.com/apache/hertzbeat/pull/3625))、
Monitoring template fixes([#3636](https://github.com/apache/hertzbeat/pull/3636)、[#3649](https://github.com/apache/hertzbeat/pull/3649))、Server-chan whitelist optimization([#3740](https://github.com/apache/hertzbeat/pull/3740))、Grafana visualization integration display issues([#3666](https://github.com/apache/hertzbeat/pull/3666))
- Improvement:
Prometheus parse([#3761](https://github.com/apache/hertzbeat/pull/3761)、[#3752](https://github.com/apache/hertzbeat/pull/3752)、[#3745](https://github.com/apache/hertzbeat/pull/3745)、[#3725](https://github.com/apache/hertzbeat/pull/3725)、[#3662](https://github.com/apache/hertzbeat/pull/3662))、Improved metric rendering performance[#3719](https://github.com/apache/hertzbeat/pull/3719)、
Styling improvements([#3734](https://github.com/apache/hertzbeat/pull/3734))、SSE exception handling improvements([#3775](https://github.com/apache/hertzbeat/pull/3775))、Threshold rule operation enhancements([#3780](https://github.com/apache/hertzbeat/pull/3780))
- Refactor:
Alert cache management([#3525](https://github.com/apache/hertzbeat/pull/3525))、PromQL threshold comparison logic([#3574](https://github.com/apache/hertzbeat/pull/3574))、Prometheus tag value UTF-8 support([#3810](https://github.com/apache/hertzbeat/pull/3810))
- New Features:
PromQL threshold configuration preview([#3505](https://github.com/apache/hertzbeat/pull/3505))、System time zone feature([#3588](https://github.com/apache/hertzbeat/pull/3588))、Metric Favorites Feature([#3735](https://github.com/apache/hertzbeat/pull/3735))
Jenkins Monitoring([#3774](https://github.com/apache/hertzbeat/pull/3774))、Apollo Configuration Center Monitoring([#3768](https://github.com/apache/hertzbeat/pull/3768))、TDengine monitoring([#3678](https://github.com/apache/hertzbeat/pull/3678))
Huawei Cloud alert integration([#3443](https://github.com/apache/hertzbeat/pull/3443))、Alibaba Cloud SLS alert integration([#3422](https://github.com/apache/hertzbeat/pull/3422))、Metrics Parsing([#3645](https://github.com/apache/hertzbeat/pull/3645)、[#3612](https://github.com/apache/hertzbeat/pull/3612))
Internationalization-Related([#3585](https://github.com/apache/hertzbeat/pull/3585)[#3565](https://github.com/apache/hertzbeat/pull/3565))
- Document:
Document-related([#3383](https://github.com/apache/hertzbeat/pull/3383)、[#3380](https://github.com/apache/hertzbeat/pull/3380)、[#3526](https://github.com/apache/hertzbeat/pull/3526)、[#3559](https://github.com/apache/hertzbeat/pull/3559)、[#3600](https://github.com/apache/hertzbeat/pull/3600)、[#3658](https://github.com/apache/hertzbeat/pull/3658)、[#3695](https://github.com/apache/hertzbeat/pull/3695))
## Community Engagement and Growth
By participating in Apache HertzBeat's regular meetings and contributing daily, I not only broadened my technical horizons but also learned how to collaborate more effectively within open-source projects. Communicating and working alongside community members has given me a deeper appreciation for the open, inclusive, and supportive spirit of the open-source community.
Becoming a Committer means taking on greater responsibility. Beyond continuing to refine the code, it is even more crucial to maintain a rigorous approach during code reviews, providing contributors with constructive feedback and recognition to help more people participate and grow.
## Advice for Open Source Developers
The journey into open source begins with passion and grows through practice. Open source is not only a vehicle for technical enthusiasm but also a journey of mutual growth with the community.
For developers new to open source, taking the plunge is the most crucial step. Even the smallest contributions can accumulate into invaluable experience. In your daily work, actively participate in community discussions and code reviews, learning continuously through collaboration. Maintain patience and persistence—every challenge you encounter presents an opportunity for growth.
Within the Apache HertzBeat community, there are ample opportunities to actively participate in projects. Keep a close eye on the issue list and engage in frequent communication—you'll always find someone eager to respond to your ideas and gain inspiration from your perspectives. This is the very essence of community collaboration: a mutual journey forward.
## Contribute to Apache HertzBeat
The best time to plant a tree was ten years ago. The second-best time is now. If you'd like to contribute to Apache HertzBeat, you can start in the following ways:
1. Documentation and Translation: Improving or translating project documentation not only helps you quickly familiarize yourself with the project but also enables more users to understand it.
2. Issue Fixing: Browse project issues and attempt to claim and resolve some simple issues or optimization points.
3. Functional Expansion: Participate in discussions and development of new features based on interests and project requirements, gradually deepening understanding of the project architecture and refining functionality.
## Conclusion
We hope Apache HertzBeat will continue to uphold the spirit of open source, attracting more talented developers to jointly build a technologically advanced and vibrant community. I will also continue to contribute my efforts to Apache HertzBeat, and I look forward to welcoming more developers to join us in advancing the project's development.
A huge thank you to everyone in the community for your meticulous reviews and patient guidance on every PR. May the project's impact continue to grow, and may the community thrive!
+52
View File
@@ -0,0 +1,52 @@
---
title: Welcome HertzBeat's New Community Committer!
author: Delei
author_title: ZiQiu Guo
author_url: https://github.com/delei
tags: [opensource, practice]
keywords:
[
open source monitoring system,
alerting system,
Apache,
Apache Committer,
HertzBeat,
]
---
> Hello everyone, it's a great honor to be invited by the community to become Apache HertzBeat Committer.
## Self-Introduction
Since starting my career, I have mainly been engaged in backend development work and have a great interest in open-source projects. I am currently employed at a financial software company and also undertake the management work of operation and maintenance.
## First Encounter Apache HertzBeat
In our actual work, we have been using the monitoring system consisting of Prometheus and Grafana. As the number of devices and services to be monitored increased, and due to the limited number of operation and maintenance personnel, the workload for daily configuration and maintenance rose sharply, making it impossible for us to promptly handle and respond to user feedback.
At this point, we have been constantly looking for a lightweight open-source monitoring system. Apache HertzBeat is ready to use out of the box, has comprehensive functions, does not require an agent, is compatible with Prometheus, and fully covers all the protocols we currently use. Therefore, we quickly set it up and put it into use based on Docker internally.
As an open-source enthusiast myself, I encountered a few minor issues after using the software for some time. Since it happened to be written in a programming language I'm proficient in, I delved into the source code, endeavoured to refine the implementation, and contributed my improvements back to the community.
## The Path to Open Source Contributions
I initially began using the tagging feature, only to discover right away that tag maintenance had an NPE issue. So I delved into the source code and gained a preliminary understanding of the cause. Following the official documentation, I submitted [issue#3605](https://github.com/apache/hertzbeat/issues/3605) and created my first pull request to address it. Though a minor change, it was merged promptly, which proved immensely encouraging.
During subsequent, more in-depth usage, based on the actual monitored devices and scenarios, I primarily added several new monitoring services, such as [Apache DolphinScheduler](https://github.com/apache/hertzbeat/pull/3656), [MacOS](https://github.com/apache/hertzbeat/pull/3715), [Synology NAS](https://github.com/apache/hertzbeat/pull/3721), amongst others. Collaborating with other community contributors, I refined and resolved the `jexl` keyword issue while also enhancing the status page functionality.
## Community Engagement and Growth
Through daily contributions to Apache HertzBeat, I have also learnt how to collaborate more effectively within open-source projects. Communicating and working alongside community members has given me a deeper appreciation for the unique appeal of the Apache Way and the spirit of open-source.
Becoming a Committer entails greater responsibility. Beyond continuing to contribute, it is vital to maintain a rigorous approach, offering constructive feedback and recognition to contributors, thereby helping more individuals participate in the community and grow within it.
## Advice for Open Source Developers
For developers who are new to open source, first of all, please be brave to try and let go of your worries to take the first step. The process of making contributions requires time, but as long as you have patience, you will achieve results.
In the Apache HertzBeat community, by communicating more, many enthusiastic and friendly open-source contributors in the community can collaborate together. We can first gradually use and experience the functions, and start to attempt to contribute. For example, small contributions such as correcting spelling errors in the documentation and fixing incorrect comments, and then gradually deepen our understanding of the source code and try to fix the problems.
## Conclusion
My heartfelt thanks to all community partners for your patient reviews and thoughtful guidance. It has been a tremendous privilege to witness Apache HertzBeat successfully graduate to a TLP project during this period.
Becoming a Committer marks merely a small milestone for me. I look forward to continuing to uphold the spirit of open source alongside Apache HertzBeat, attracting more outstanding developers to jointly build a technologically advanced and vibrant community.
+52
View File
@@ -0,0 +1,52 @@
---
title: "From User to PPMC Member: Contributing to Open Source with Passion at Apache HertzBeat"
author: liutianyou
author_title: liutianyou
author_url: https://github.com/Liutianyou
tags: [opensource, practice]
keywords: [open source monitoring system, alerting system]
---
## From Contributor to PMC
About a year ago, I discovered Apache HertzBeat™ - an agentless monitoring system with out-of-the-box features that immediately caught my interest through its pure web-based operations. After starting to use it, I made my first code contribution. When that initial PR got merged, my confidence in open source contribution skyrocketed. Since then, I've continuously looked for opportunities to contribute through documentation improvements, feature testing, code refactoring, and more in the community issue list.
As my contributions grew, I gradually evolved from an "occasional code submitter" to a "deep project participant". Fixing bugs, optimizing documentation, designing new features... This journey not only enhanced my technical skills but more importantly taught me how to collaborate effectively within a community.
After becoming a Committer, my responsibilities expanded beyond coding to include community discussions, PR reviews, and helping new members onboard. This experience gave me a profound realization: **Open source isn't just about code - it's fundamentally about human collaboration**.
This year, I was honored to be nominated as a PPMC member. Just like when I first received the Committer invitation, I felt the same excitement. I understand this recognition carries not just acknowledgment of past contributions but also the community's trust and expectations. As PMC, my responsibilities now include ensuring project health through strategic planning, community event organization, and requirement coordination. This role enables deeper involvement in core decision-making, from technical direction to ecosystem development, driving HertzBeat's continuous evolution.
### Personal Growth
My deep involvement in open source over this past year has brought significant growth:
- **Learning Best Practices**: Exposure to standardized code, excellent designs, and community best practices for tools like Git, CI/CD, and e2e testing
- **Collaboration & Communication**: Learning to write clear issue descriptions, participate in technical discussions, and resolve differences in distributed teams
- **Product Thinking Development**: Understanding user needs of open source projects and transitioning from developer to maintainer perspective
### Looking Ahead
For the future, I plan to focus on:
- **User Support**: Helping resolve user issues
- **Technology Promotion**: Making Apache HertzBeat™ a top choice in monitoring through wider adoption
- **Contributor Ecosystem**: Nurturing and developing more contributors for Apache HertzBeat
### What is Apache HertzBeat?
Apache HertzBeat™ is an open source real-time monitoring system emphasizing ease-of-use and lightweight design. It supports monitoring and alerting for servers, databases, middleware, and application services, providing a simple yet powerful solution for IT infrastructure monitoring.
### How to Contribute?
We welcome contributions of code, documentation, and ideas. My open source journey taught me that the hardest parts are starting and persisting. If interested, visit our contribution guide:
[https://hertzbeat.apache.org/zh-cn/docs/community/contribution](https://hertzbeat.apache.org/zh-cn/docs/community/contribution)
Feel free to email me at [liutianyou@apache.org](mailto:liutianyou@apache.org) - I'm happy to help you take your first open source steps!
- Official Site: [https://hertzbeat.apache.org](https://hertzbeat.apache.org)
- GitHub: [https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)
- Mailing List: [dev@hertzbeat.apache.org](mailto:dev@hertzbeat.apache.org)
### Acknowledgments
Special thanks to **Tom**, **Qingran Zhao**, **TJxiaobao**, **Jast** for guidance, and all Apache HertzBeat™ community members for support.
+207
View File
@@ -0,0 +1,207 @@
---
title: Announcement of Apache HertzBeat™ 1.8.0 Release
author: Apache HertzBeat Community
author_title: Apache HertzBeat Community
author_url: https://github.com/apache/hertzbeat
tags: [opensource, release, v1.8.0]
keywords: [open source monitoring system, alerting system, HertzBeat, release, v1.8.0, Apache]
---
Dear Community Members,
We are excited to announce the official release of Apache HertzBeat™ 1.8.0! This major release brings significant enhancements including AI-powered features, expanded monitoring capabilities, improved performance, and stronger community contributions.
## Downloads and Documentation
- **Apache HertzBeat™ 1.8.0 Download Link**: [https://hertzbeat.apache.org/docs/download](https://hertzbeat.apache.org/docs/download)
- **Apache HertzBeat™ Documentation**: [https://hertzbeat.apache.org/docs/](https://hertzbeat.apache.org/docs/)
- **Release Notes**: [https://github.com/apache/hertzbeat/releases/tag/1.8.0](https://github.com/apache/hertzbeat/releases/tag/1.8.0)
## 🚀 Major Updates
### New Features and Enhancements
#### AI-Powered Monitoring & Chat Interface
- **GSOC Chat UI**: Implemented comprehensive chat interface with conversation management and OpenAI chat client support (#3679)
- **Cross-Service Tools**: Added necessary AI-powered tools across all monitoring services (#3722)
- **MCP Server**: Implemented Model Context Protocol server to securely run scripts and commands (#3547)
#### Expanded Monitoring Support
- **QuestDB Integration**: Added QuestDB as a Time Series Database Storage option (#3731)
- **Dell iDRAC Monitoring**: Added configuration file for Dell iDRAC server monitoring (#3763)
- **Apollo Configuration Center**: Added support for Apollo configuration center monitoring (#3768)
- **Jenkins Monitoring**: Added comprehensive Jenkins monitoring capabilities (#3774)
- **DNS Record Types**: Enhanced DNS monitoring with additional record types (#3799)
#### Enhanced User Experience
- **Dashboard Optimization**: Completely redesigned dashboard page with new theme adaptation (#3730)
- **Indicator Favorites**: Added monitoring center indicator favorites feature for quick access (#3735)
- **Label Selector Component**: Implemented optimized label-selector component for better label management (#3762)
- **RISC-V Support**: Added RISC-V architecture support with Dockerfile modifications (#3713)
#### Log Monitoring Capabilities
- **OSPP Log Monitoring**: Implemented comprehensive log monitoring capabilities with advanced parsing and alerting (#3673)
### Performance Improvements
#### Prometheus Integration
- **Streaming Parsing**: Enhanced Prometheus streaming parsing with CRLF support (#3745)
- **Parsing Optimization**: Multiple rounds of Prometheus streaming parsing optimization (#3752, #3761)
- **Gretimedb Optimization**: Optimized Gretimedb time-series statistics (#3776)
#### System Performance
- **SSE Exception Handling**: Improved Server-Sent Events exception handling (#3775)
- **Threshold Rules**: Enhanced threshold rules operations and expression log output (#3780)
- **Query Parameter Handling**: Fixed Long.parseLong() errors when search parameters are floats (#3483)
### Bug Fixes and Stability
#### Core System Fixes
- **Default Path Whitelist**: Fixed issue where default path did not match whitelist (#3740)
- **Webhook URL Parameters**: Fixed missing webhook URL query parameters (#3779)
- **Service Discovery**: Fixed service discovery host field NullPointerException (#3767)
- **Database Migration**: Removed v174 and added v180 Flyway scripts (#3787)
#### Configuration and Deployment
- **AI Configuration Sync**: Fixed AI-related configuration synchronization for Docker Compose (#3751)
- **CNCF Link Update**: Updated CNCF link to current location (#3746)
### Documentation and Internationalization
#### Enhanced Documentation
- **RISC-V Documentation**: Added RISC-V related help documentation (#3712)
- **Japanese i18n**: Added Japanese internationalization support for iDRAC monitoring (#3766)
- **Release Documentation**: Updated documentation for release process and added 1.7.3 release notes (#3749)
- **Contributor Updates**: Regular contributor documentation updates (#3759, #3783)
#### UI/UX Improvements
- **Styling Issues**: Resolved various styling issues across the application (#3734)
- **Apache Branding**: Replaced logos with new ASF branding (#3770)
- **Localization**: Improved localization with nitpicking on en-US.json (#3800)
## 🌟 Community Growth
### New Contributors
We're thrilled to welcome 16 new contributors to the Apache HertzBeat community:
- @cxhello
- @yexuanyang
- @mengnankkkk
- @jl15988
- @dedyks
- @pentium100
- @AlbertYang0801
- @warrobe
- @Jetiaime
- @P-Peaceful
- @zhaoyangplus
- @KOYR
- @Lathika226
- @Sahil-Shadwal
- @Prakash1185
- @BhanuNidumolu
### Program Contributions
- **GSOC (Google Summer of Code)**: Significant contributions in chat interface and AI features
- **OSPP (Open Source Promotion Plan)**: Major contributions in RISC-V support, MCP server, and log monitoring
## 📊 Statistics
This release includes:
- **40+ Pull Requests** merged
- **16 New Contributors** joined the community
- **5 Major Features** added
- **20+ Bug Fixes** resolved
- **Multiple Performance Improvements**
## 🔄 Upgrade Instructions
### From v1.7.x to v1.8.0
#### Docker Deployment
```bash
# Stop existing container
docker stop hertzbeat
# Remove old container
docker rm hertzbeat
# Pull new version
docker pull apache/hertzbeat:1.8.0
# Run new container
docker run -d -p 1157:1157 -p 1158:1158 --name hertzbeat apache/hertzbeat:1.8.0
```
#### Package Deployment
1. Download v1.8.0 package from [download page](https://hertzbeat.apache.org/docs/download)
2. Backup your existing configuration
3. Extract new package and replace installation
4. Update configuration if needed
5. Restart HertzBeat service
#### Kubernetes/Helm Deployment
Update your Helm chart to use the new version:
```yaml
image:
tag: "1.8.0"
```
## 🚨 Important Notes
- **Database Migration**: This release includes database schema changes. Ensure proper backup before upgrading
- **Configuration Changes**: Some AI-related configurations may need to be updated
- **Breaking Changes**: Review the changelog for any breaking changes affecting your deployment
## 🔮 What's Next
The Apache HertzBeat community is already working on future releases with:
- Enhanced AI capabilities
- More monitoring integrations
- Performance optimizations
- Improved user experience
## 🙏 Acknowledgments
We extend our heartfelt gratitude to all contributors who made this release possible:
- All code contributors who submitted pull requests
- Community members who reported issues and provided feedback
- Documentation writers and translators
- Testers who helped ensure quality
- The Apache Software Foundation for their continued support
## 📞 Get Involved
- **GitHub**: [https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)
- **Mailing Lists**: [https://hertzbeat.apache.org/docs/community/mailing_lists](https://hertzbeat.apache.org/docs/community/mailing_lists)
- **Discord**: [https://discord.gg/Fb6M73htGr](https://discord.gg/Fb6M73htGr)
- **Documentation**: [https://hertzbeat.apache.org/docs/](https://hertzbeat.apache.org/docs/)
## 📋 Full Changelog
For a complete list of changes, please refer to the [full changelog](https://github.com/apache/hertzbeat/compare/v1.7.3...1.8.0).
---
**Download Apache HertzBeat™ 1.8.0 today and experience the power of AI-driven monitoring!**
*Apache HertzBeat, the Apache feather logo, and the HertzBeat name are trademarks of The Apache Software Foundation.*
+285
View File
@@ -0,0 +1,285 @@
---
id: extend-http-default
title: HTTP Protocol System Default Parsing Method
sidebar_label: Default Parsing Method
---
> After calling the HTTP api to obtain the response data, use the default parsing method of hertzbeat to parse the response data.
**The interface response data structure must be consistent with the data structure rules specified by hertzbeat**
## HertzBeat data format specification
Note⚠️ The response data is JSON format.
Single layer format key-value
```json
{
"metricName1": "metricValue",
"metricName2": "metricValue",
"metricName3": "metricValue",
"metricName4": "metricValue"
}
```
Multilayer formatSet key value in the array
```json
[
{
"metricName1": "metricValue",
"metricName2": "metricValue",
"metricName3": "metricValue",
"metricName4": "metricValue"
},
{
"metricName1": "metricValue",
"metricName2": "metricValue",
"metricName3": "metricValue",
"metricName4": "metricValue"
}
]
```
eg
Query the CPU information of the custom system. The exposed interface is `/metrics/cpu`. We need `hostname,core,usage` Metric.
If there is only one virtual machine, its single-layer format is :
```json
{
"hostname": "linux-1",
"core": 1,
"usage": 78.0,
"allTime": 200,
"runningTime": 100
}
```
If there are multiple virtual machines, the multilayer format is: :
```json
[
{
"hostname": "linux-1",
"core": 1,
"usage": 78.0,
"allTime": 200,
"runningTime": 100
},
{
"hostname": "linux-2",
"core": 3,
"usage": 78.0,
"allTime": 566,
"runningTime": 34
},
{
"hostname": "linux-3",
"core": 4,
"usage": 38.0,
"allTime": 500,
"runningTime": 20
}
]
```
**The corresponding monitoring template yml can be configured as follows**
```yaml
category: custom
# The monitoring type eg: linux windows tomcat mysql aws...
app: a_example
# The monitoring i18n name
name:
zh-CN: 模拟应用
en-US: EXAMPLE APP
# The description and help of this monitoring type
help:
zh-CN: HertzBeat 支持自定义监控,您只需配置监控模板 YML 就能适配一款自定义的监控类型。`<br>`定义流程如下:HertzBeat 页面 -> 监控模板菜单 -> 新增监控类型 -> 配置自定义监控模板YML -> 点击保存应用 -> 使用新监控类型添加监控。
en-US: "HertzBeat supports custom monitoring, and you only need to configure the monitoring template YML to adapt to a custom monitoring type. `<br>`Definition process as follow: HertzBeat Pages -> Main Menu -> Monitor Template -> edit and save -> apply this template."
zh-TW: HertzBeat支持自定義監控,您只需配寘監控模板YML就能適配一款自定義的監控類型。`<br>`定義流程如下:HertzBeat頁面->監控模板選單->新增監控類型->配寘自定義監控模板YML ->點擊保存應用->使用新監控類型添加監控。
helpLink:
zh-CN: https://hertzbeat.apache.org/zh-cn/docs/advanced/extend-point/
en-US: https://hertzbeat.apache.org/docs/advanced/extend-point/
# Input params define for monitoring(render web ui by the definition)
params:
# field-param field key
- field: host
# name-param field display i18n name
name:
zh-CN: 目标Host
en-US: Target Host
# type-param field type(most mapping the html input type)
type: host
# required-true or false
required: true
# field-param field key
- field: port
# name-param field display i18n name
name:
zh-CN: 端口
en-US: Port
# type-param field type(most mapping the html input type)
type: number
# when type is number, range is required
range: '[0,65535]'
# required-true or false
required: true
# default value
defaultValue: 80
# param field input placeholder
placeholder: 'Please Input Port'
# field-param field key
- field: username
# name-param field display i18n name
name:
zh-CN: 用户名
en-US: Username
# type-param field type(most mapping the html input type)
type: text
# when type is text, use limit to limit string length
limit: 50
# required-true or false
required: false
# hide param-true or false
hide: true
# field-param field key
- field: password
# name-param field display i18n name
name:
zh-CN: 用户密码
en-US: Password
# type-param field type(most mapping the html input tag)
type: password
# required-true or false
required: false
# hide param-true or false
hide: true
# field-param field key
- field: ssl
# name-param field display i18n name
name:
zh-CN: 启动SSL
en-US: SSL
# type-param field type(boolean mapping the html switch tag)
type: boolean
# required-true or false
required: false
# field-param field key
- field: method
# name-param field display i18n name
name:
zh-CN: 请求方式
en-US: Method
# type-param field type(radio mapping the html radio tag)
type: radio
# required-true or false
required: true
# when type is radio checkbox, use option to show optional values {name1:value1,name2:value2}
options:
- label: GET
value: GET
- label: POST
value: POST
- label: PUT
value: PUT
- label: DELETE
value: DELETE
# field-param field key
- field: headers
# name-param field display i18n name
name:
zh-CN: 请求Headers
en-US: Headers
# type-param field type(key-value mapping the html key-value input tags)
type: key-value
# required-true or false
required: false
# when type is key-value, use keyAlias to config key alias name
keyAlias: Header Name
# when type is key-value, use valueAlias to config value alias name
valueAlias: Header Value
# collect metrics config list
metrics:
# metrics - cpu
- name: cpu
# metrics name i18n label
i18n:
zh-CN: CPU 信息
en-US: CPU Info
# metrics scheduling priority(0->127)->(high->low), metrics with the same priority will be scheduled in parallel
# priority 0's metrics is availability metrics, it will be scheduled first, only availability metrics collect success will the scheduling continue
priority: 0
# collect metrics content
fields:
# field-metric name, i18n-metric name i18n label, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: hostname
type: 1
label: true
i18n:
zh-CN: 主机名称
en-US: Host Name
- field: usage
type: 0
unit: '%'
i18n:
zh-CN: 使用率
en-US: Usage
- field: cores
type: 0
i18n:
zh-CN: 核数
en-US: Cores
- field: waitTime
type: 0
unit: s
i18n:
zh-CN: 主机名称
en-US: Host Name
# (optional)metrics field alias name, it is used as an alias field to map and convert the collected data and metrics field
aliasFields:
- hostname
- core1
- core2
- usage
- allTime
- runningTime
# mapping and conversion expressions, use these and aliasField above to calculate metrics value
# eg: cores=core1+core2, usage=usage, waitTime=allTime-runningTime
calculates:
- hostname=hostname
- cores=core1+core2
- usage=usage
- waitTime=allTime-runningTime
# the protocol used for monitoring, eg: sql, ssh, http, telnet, wmi, snmp, sdk
protocol: http
# the config content when protocol is http
http:
# http host: ipv4 ipv6 domain
host: ^_^host^_^
# http port
port: ^_^port^_^
# http url
url: /metrics/cpu
# http method: GET POST PUT DELETE PATCH
method: GET
# if enabled https
ssl: false
# http request header content
headers:
^_^headers^_^: ^_^headers^_^
# http request params
params:
param1: param1
param2: param2
# http auth
authorization:
# http auth type: Basic Auth, Digest Auth, Bearer Token
type: Basic Auth
basicAuthUsername: ^_^username^_^
basicAuthPassword: ^_^password^_^
# http response data parse type: default-hertzbeat rule, jsonpath-jsonpath script, website-for website monitoring, prometheus-prometheus exporter rule
parseType: jsonPath
parseScript: '$'
```
@@ -0,0 +1,220 @@
---
id: extend-http-example-hertzbeat
title: Tutorial 1 Adapting a monitoring type based on HTTP protocol
sidebar_label: Tutorial 1 Adapting an HTTP protocol monitoring
---
Through this tutorial, we describe step by step how to add a monitoring type based on the http protocol under the hertzbeat monitoring tool.
Before reading this tutorial, we hope that you are familiar with how to customize types, metrics, protocols, etc. from [Custom Monitoring](extend-point) and [http Protocol Customization](extend-http).
## HTTP protocol parses the general response structure to obtain metric data
>
> In many scenarios, we need to monitor the provided HTTP API interface and obtain the index value returned by the interface. In this article, we use the http custom protocol to parse our common http interface response structure, and obtain the fields in the returned body as metric data.
```json
{
"code": 200,
"msg": "success",
"data": {}
}
```
As above, usually our background API interface will design such a general return. The same is true for the background of the hertzbeat system. Today, we will use the hertzbeat API as an example, add a new monitoring type **hertzbeat**, and monitor and collect its system summary statistics API
`http://localhost:1157/api/summary`, the response data is:
```json
{
"msg": null,
"code": 0,
"data": {
"apps": [
{
"category": "service",
"app": "jvm",
"status": 0,
"size": 2,
"availableSize": 0,
"unManageSize": 2,
"unAvailableSize": 0,
"unReachableSize": 0
},
{
"category": "service",
"app": "website",
"status": 0,
"size": 2,
"availableSize": 0,
"unManageSize": 2,
"unAvailableSize": 0,
"unReachableSize": 0
}
]
}
}
```
**This time we get the metric data such as `category`, `app`, `status`, `size`, `availableSize` under the app.**
### Add custom monitoring template `hertzbeat`
**HertzBeat Dashboard** -> **Monitoring Templates** -> **New Template** -> **Config Monitoring Template Yml** -> **Save and Apply** -> **Add A Monitoring with The New Monitoring Type**
> We define all monitoring collection types (mysql,jvm,k8s) as yml monitoring templates, and users can import these templates to support corresponding types of monitoring.
>
> Monitoring template is used to define *the name of monitoring type(international), request parameter mapping, index information, collection protocol configuration information*, etc.
Here we define a custom monitoring type `app` named `hertzbeat` which use the HTTP protocol to collect data.
**Monitoring Templates** -> **Config New Monitoring Template Yml** -> **Save and Apply**
```yaml
category: custom
# The monitoring type eg: linux windows tomcat mysql aws...
app: hertzbeat
name:
zh-CN: HertzBeat
en-US: HertzBeat
# The description and help of this monitoring type
help:
zh-CN: HertzBeat 对 HertzBeat 监控系统的通用指标进行测量监控。`<br>`您可以点击 “`<i>`新建 HertzBeat监控系统`</i>`” 并进行配置,或者选择“`<i>`更多操作`</i>`”,导入已有配置。
en-US: HertzBeat monitors HertzBeat Monitor through general performance metric. You could click the "`<i>`New HertzBeat Monitor`</i>`" button and proceed with the configuration or import an existing setup through the "`<i>`More Actions`</i>`" menu.
zh-TW: HertzBeat對HertzBeat監控系統的通用名額進行量測監控。`<br>`您可以點擊“`<i>`新建HertzBeat監控系統`</i>`”並進行配寘,或者選擇“`<i>`更多操作`</i>`”,導入已有配寘。
helpLink:
zh-CN: https://hertzbeat.apache.org/zh-cn/docs/help/hertzbeat
en-US: https://hertzbeat.apache.org/docs/help/hertzbeat
params:
- field: host
name:
zh-CN: 目标Host
en-US: Target Host
type: host
required: true
- field: port
name:
zh-CN: 端口
en-US: Port
type: number
range: '[0,65535]'
required: true
defaultValue: 1157
- field: ssl
name:
zh-CN: 启用HTTPS
en-US: HTTPS
type: boolean
required: true
- field: timeout
name:
zh-CN: 超时时间(ms)
en-US: Timeout(ms)
type: number
required: false
hide: true
- field: authType
name:
zh-CN: 认证方式
en-US: Auth Type
type: radio
required: false
hide: true
options:
- label: Basic Auth
value: Basic Auth
- label: Digest Auth
value: Digest Auth
- field: username
name:
zh-CN: 用户名
en-US: Username
type: text
limit: 50
required: false
hide: true
- field: password
name:
zh-CN: 密码
en-US: Password
type: password
required: false
hide: true
metrics:
# the first metrics summary
# attention: Built-in monitoring metrics contains (responseTime - Response time)
- name: summary
# metrics scheduling priority(0->127)->(high->low), metrics with the same priority will be scheduled in parallel
# priority 0's metrics is availability metrics, it will be scheduled first, only availability metrics collect success will the scheduling continue
priority: 0
# collect metrics content
fields:
# metrics content contains field-metric name, type-metric type:0-number,1-string, instance-if is metrics, unit-metric unit('%','ms','MB')
- field: app
type: 1
label: true
- field: category
type: 1
- field: status
type: 0
- field: size
type: 0
- field: availableSize
type: 0
# the protocol used for monitoring, eg: sql, ssh, http, telnet, wmi, snmp, sdk, we use HTTP protocol here
protocol: http
# the config content when protocol is http
http:
# host: ipv4 ipv6 domain
host: ^_^host^_^
# http port
port: ^_^port^_^
# http url, we don't need to enter a parameter here, just set the fixed value to /api/summary
url: /api/summary
timeout: ^_^timeout^_^
# http method: GET POST PUT DELETE PATCH, default fixed value is GET
method: GET
# if enabled https, default value is false
ssl: ^_^ssl^_^
# http auth
authorization:
# http auth type: Basic Auth, Digest Auth, Bearer Token
type: ^_^authType^_^
basicAuthUsername: ^_^username^_^
basicAuthPassword: ^_^password^_^
digestAuthUsername: ^_^username^_^
digestAuthPassword: ^_^password^_^
# http response data parse type: default-hertzbeat rule, jsonpath-jsonpath script, website-for website monitoring, we use jsonpath to parse response data here
parseType: jsonPath
parseScript: '$.data.apps.*'
```
**The addition is complete, now we save and apply. We can see that the system page has added a `hertzbeat` monitoring type.**
![HertzBeat](/img/docs/advanced/extend-http-example-1.png)
### The system page adds the monitoring of `hertzbeat` monitoring type
> We click Add `HertzBeat Monitoring Tool`, configure monitoring IP, port, collection cycle, account password in advanced settings, etc., click OK to add monitoring.
![HertzBeat](/img/docs/advanced/extend-http-example-2.png)
![HertzBeat](/img/docs/advanced/extend-http-example-3.png)
> After a certain period of time (depending on the collection cycle), we can see the specific metric data and historical charts in the monitoring details!
![HertzBeat](/img/docs/advanced/extend-http-example-4.png)
### Set threshold alarm notification
> Next, we can set the threshold normally. After the alarm is triggered, we can view it in the alarm center, add recipients, set alarm notifications, etc. Have Fun!!!
----
#### over
This is the end of the practice of custom monitoring of the HTTP protocol. The HTTP protocol also has other parameters such as headers and params. We can define it like postman, and the playability is also very high!
If you think hertzbeat is a good open source project, please star us on GitHub Gitee, thank you very much.
**github: [https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)**
@@ -0,0 +1,408 @@
---
id: extend-http-example-token
title: Tutorial 2 Obtain TOKEN index value based on HTTP protocol for subsequent collection and authentication
sidebar_label: Tutorial 2 Get TOKEN for subsequent authentication
---
Through this tutorial, we will describe step by step how to modify on the basis of tutorial 1, add metrics, first call the authentication interface to obtain the TOKEN, and use the TOKEN as a parameter for the subsequent metrics collection and authentication.
Before reading this tutorial, we hope that you are familiar with how to customize types, metrics, protocols, etc. from [Custom Monitoring](extend-point) and [http Protocol Customization](extend-http).
## Request process
【**Authentication information metrics (highest priority)**】【**HTTP interface carries account password call**】->【**Response data analysis**】->【**Analysis and issuance of TOKEN-accessToken as an metric**] -> [**Assign accessToken as a variable parameter to other collection index groups**]
> Here we still use the hertzbeat monitoring example of Tutorial 1! The hertzbeat background interface not only supports the basic direct account password authentication used in Tutorial 1, but also supports token authentication.
**We need `POST` to call the login interface `/api/account/auth/form` to get `accessToken`, the request body (json format) is as follows**:
```json
{
"credential": "hertzbeat",
"identifier": "admin"
}
```
**The response structure data is as follows**:
```json
{
"data": {
"token": "xxxx",
"refreshToken": "xxxx"
},
"msg": null,
"code": 0
}
```
### Add custom monitoring type `hertzbeat_token`
**HertzBeat Dashboard** -> **Monitoring Templates** -> **New Template** -> **Config Monitoring Template Yml** -> **Save and Apply** -> **Add A Monitoring with The New Monitoring Type**
> We define all monitoring collection types (mysql,jvm,k8s) as yml monitoring templates, and users can import these templates to support corresponding types of monitoring.
>
> Monitoring template is used to define *the name of monitoring type(international), request parameter mapping, index information, collection protocol configuration information*, etc.
1. The custom monitoring type needs to add a new configuration monitoring template yml. We directly reuse the `hertzbeat` monitoring type in Tutorial 1 and modify it based on it
A monitoring configuration definition file named after the monitoring type - hertzbeat_token
We directly reuse the definition content in `hertzbeat` and modify it to our current monitoring type `hertzbeat_auth` configuration parameters, such as `app, category, etc`.
```yaml
category: custom
# The monitoring type eg: linux windows tomcat mysql aws...
app: hertzbeat_token
# The monitoring i18n name
name:
zh-CN: HertzBeat(Token)
en-US: HertzBeat(Token)
# The description and help of this monitoring type
help:
zh-CN: HertzBeat 对 HertzBeat监控(Token)进行测量监控。`<br>`您可以点击 “`<i>`新建 HertzBeat监控(Token)`</i>`” 并进行配置,或者选择“`<i>`更多操作`</i>`”,导入已有配置。
en-US: HertzBeat monitors HertzBeat Monitor(Token). You could click the "`<i>`New HertzBeat Monitor(Token)`</i>`" button and proceed with the configuration or import an existing setup through the "`<i>`More Actions`</i>`" menu.
zh-TW: HertzBeat對HertzBeat監控(Token)進行量測監控。`<br>`您可以點擊“`<i>`新建HertzBeat監控(Token`</i>`”並進行配寘,或者選擇“`<i>`更多操作`</i>`”,導入已有配寘。
helpLink:
zh-CN: https://hertzbeat.apache.org/zh-cn/docs/help/hertzbeat_token
en-US: https://hertzbeat.apache.org/docs/help/hertzbeat_token
# Input params define for monitoring(render web ui by the definition)
params:
# field-param field key
- field: host
# name-param field display i18n name
name:
zh-CN: 目标Host
en-US: Target Host
# type-param field type(most mapping the html input type)
type: host
# required-true or false
required: true
- field: port
name:
zh-CN: 端口
en-US: Port
# type-param field type(most mapping the html input type)
type: number
# when type is number, range is required
range: '[0,65535]'
required: true
defaultValue: 1157
placeholder: 'Please input port'
- field: ssl
name:
zh-CN: 启动SSL
en-US: SSL
# type-param field type(boolean mapping the html switch tag)
type: boolean
required: false
- field: contentType
name:
zh-CN: Content-Type
en-US: Content-Type
type: text
placeholder: 'Request Body Type'
required: false
- field: payload
name:
zh-CN: 请求BODY
en-US: BODY
type: textarea
placeholder: 'Available When POST PUT'
required: false
# collect metrics config list
```
### Define metrics `auth` login request to get `token`
1. Add an index group definition `auth` in `hertzbeat_token`, set the collection priority to the highest 0, and collect the index `token`.
```yaml
category: custom
# The monitoring type eg: linux windows tomcat mysql aws...
app: hertzbeat_token
# The monitoring i18n name
name:
zh-CN: HertzBeat(Token)
en-US: HertzBeat(Token)
# The description and help of this monitoring type
help:
zh-CN: HertzBeat 对 HertzBeat监控(Token)进行测量监控。`<br>`您可以点击 “`<i>`新建 HertzBeat监控(Token)`</i>`” 并进行配置,或者选择“`<i>`更多操作`</i>`”,导入已有配置。
en-US: HertzBeat monitors HertzBeat Monitor(Token). You could click the "`<i>`New HertzBeat Monitor(Token)`</i>`" button and proceed with the configuration or import an existing setup through the "`<i>`More Actions`</i>`" menu.
zh-TW: HertzBeat對HertzBeat監控(Token)進行量測監控。`<br>`您可以點擊“`<i>`新建HertzBeat監控(Token`</i>`”並進行配寘,或者選擇“`<i>`更多操作`</i>`”,導入已有配寘。
helpLink:
zh-CN: https://hertzbeat.apache.org/zh-cn/docs/help/hertzbeat_token
en-US: https://hertzbeat.apache.org/docs/help/hertzbeat_token
# Input params define for monitoring(render web ui by the definition)
params:
# field-param field key
- field: host
# name-param field display i18n name
name:
zh-CN: 目标Host
en-US: Target Host
# type-param field type(most mapping the html input type)
type: host
# required-true or false
required: true
- field: port
name:
zh-CN: 端口
en-US: Port
# type-param field type(most mapping the html input type)
type: number
# when type is number, range is required
range: '[0,65535]'
required: true
defaultValue: 1157
placeholder: 'Please input port'
- field: ssl
name:
zh-CN: 启动SSL
en-US: SSL
# type-param field type(boolean mapping the html switch tag)
type: boolean
required: false
- field: contentType
name:
zh-CN: Content-Type
en-US: Content-Type
type: text
placeholder: 'Request Body Type'
required: false
- field: payload
name:
zh-CN: 请求BODY
en-US: BODY
type: textarea
placeholder: 'Available When POST PUT'
required: false
# collect metrics config list
metrics:
# metrics - auth
- name: auth
# metrics scheduling priority(0->127)->(high->low), metrics with the same priority will be scheduled in parallel
# priority 0's metrics is availability metrics, it will be scheduled first, only availability metrics collect success will the scheduling continue
priority: 0
# collect metrics content
fields:
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: token
type: 1
- field: refreshToken
type: 1
# the protocol used for monitoring, eg: sql, ssh, http, telnet, wmi, snmp, sdk
protocol: http
# the config content when protocol is http
http:
# http host: ipv4 ipv6 domain
host: ^_^host^_^
# http port
port: ^_^port^_^
# http url
url: /api/account/auth/form
# http method: GET POST PUT DELETE PATCH
method: POST
# if enabled https
ssl: ^_^ssl^_^
payload: ^_^payload^_^
# http request header content
headers:
content-type: ^_^contentType^_^
^_^headers^_^: ^_^headers^_^
# http request params
params:
^_^params^_^: ^_^params^_^
# http response data parse type: default-hertzbeat rule, jsonpath-jsonpath script, website-for website monitoring, prometheus-prometheus exporter rule
parseType: jsonPath
parseScript: '$.data'
---
```
**At this time, save and apply, add `hertzbeat_token` type monitoring on the system page, configure input parameters, `content-type` fill in `application/json`, `request Body` fill in the account password json as follows:**
```json
{
"credential": "hertzbeat",
"identifier": "admin"
}
```
![HertzBeat](/img/docs/advanced/extend-http-example-5.png)
**After the addition is successful, we can see the `token`, `refreshToken` metric data we collected on the details page.**
![HertzBeat](/img/docs/advanced/extend-http-example-6.png)
![HertzBeat](/img/docs/advanced/extend-http-example-7.png)
### Use `token` as a variable parameter to collect and use the following metricss
**Add an index group definition `summary` in `app-hertzbeat_token.yml`, which is the same as `summary` in Tutorial 1, and set the collection priority to 1**
**Set the authentication method in the HTTP protocol configuration of this index group to `Bearer Token`, assign the index `token` collected by the previous index group `auth` as a parameter, and use `^o^` as the internal replacement symbol, that is `^o^token^o^`. as follows:**
```yaml
- name: summary
# When the protocol is the http protocol, the specific collection configuration
http:
# authentication
authorization:
# Authentication methods: Basic Auth, Digest Auth, Bearer Token
type: Bearer Token
bearerTokenToken: ^o^token^o^
```
**The final `hertzbeat_token` template yml is defined as follows:**
```yaml
category: custom
# The monitoring type eg: linux windows tomcat mysql aws...
app: hertzbeat_token
# The monitoring i18n name
name:
zh-CN: HertzBeat(Token)
en-US: HertzBeat(Token)
# The description and help of this monitoring type
help:
zh-CN: HertzBeat 对 HertzBeat监控(Token)进行测量监控。`<br>`您可以点击 “`<i>`新建 HertzBeat监控(Token)`</i>`” 并进行配置,或者选择“`<i>`更多操作`</i>`”,导入已有配置。
en-US: HertzBeat monitors HertzBeat Monitor(Token). You could click the "`<i>`New HertzBeat Monitor(Token)`</i>`" button and proceed with the configuration or import an existing setup through the "`<i>`More Actions`</i>`" menu.
zh-TW: HertzBeat對HertzBeat監控(Token)進行量測監控。`<br>`您可以點擊“`<i>`新建HertzBeat監控(Token`</i>`”並進行配寘,或者選擇“`<i>`更多操作`</i>`”,導入已有配寘。
helpLink:
zh-CN: https://hertzbeat.apache.org/zh-cn/docs/help/hertzbeat_token
en-US: https://hertzbeat.apache.org/docs/help/hertzbeat_token
# Input params define for monitoring(render web ui by the definition)
params:
# field-param field key
- field: host
# name-param field display i18n name
name:
zh-CN: 目标Host
en-US: Target Host
# type-param field type(most mapping the html input type)
type: host
# required-true or false
required: true
- field: port
name:
zh-CN: 端口
en-US: Port
# type-param field type(most mapping the html input type)
type: number
# when type is number, range is required
range: '[0,65535]'
required: true
defaultValue: 1157
placeholder: 'Please input port'
- field: ssl
name:
zh-CN: 启动SSL
en-US: SSL
# type-param field type(boolean mapping the html switch tag)
type: boolean
required: false
- field: contentType
name:
zh-CN: Content-Type
en-US: Content-Type
type: text
placeholder: 'Request Body Type'
required: false
- field: payload
name:
zh-CN: 请求BODY
en-US: BODY
type: textarea
placeholder: 'Available When POST PUT'
required: false
# collect metrics config list
metrics:
# metrics - auth
- name: auth
# metrics scheduling priority(0->127)->(high->low), metrics with the same priority will be scheduled in parallel
# priority 0's metrics is availability metrics, it will be scheduled first, only availability metrics collect success will the scheduling continue
priority: 0
# collect metrics content
fields:
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: token
type: 1
- field: refreshToken
type: 1
# the protocol used for monitoring, eg: sql, ssh, http, telnet, wmi, snmp, sdk
protocol: http
# the config content when protocol is http
http:
# http host: ipv4 ipv6 domain
host: ^_^host^_^
# http port
port: ^_^port^_^
# http url
url: /api/account/auth/form
# http method: GET POST PUT DELETE PATCH
method: POST
# if enabled https
ssl: ^_^ssl^_^
payload: ^_^payload^_^
# http request header content
headers:
content-type: ^_^contentType^_^
^_^headers^_^: ^_^headers^_^
# http request params
params:
^_^params^_^: ^_^params^_^
# http response data parse type: default-hertzbeat rule, jsonpath-jsonpath script, website-for website monitoring, prometheus-prometheus exporter rule
parseType: jsonPath
parseScript: '$.data'
---
- name: summary
priority: 1
fields:
- field: app
type: 1
label: true
- field: category
type: 1
- field: status
type: 0
- field: size
type: 0
- field: availableSize
type: 0
protocol: http
http:
host: ^_^host^_^
port: ^_^port^_^
url: /api/summary
method: GET
ssl: ^_^ssl^_^
authorization:
type: Bearer Token
# ^o^xxx^o^ ^o^ substitution represents the value of the acquisition metric xxx of the previous priority
bearerTokenToken: ^o^token^o^
parseType: jsonPath
parseScript: '$.data.apps.*'
```
**After the configuration is complete, save and apply, and check the monitoring details page**
![HertzBeat](/img/docs/advanced/extend-http-example-8.png)
![HertzBeat](/img/docs/advanced/extend-http-example-9.png)
### Set threshold alarm notification
> Next, we can set the threshold normally. After the alarm is triggered, we can view it in the alarm center, add a new recipient, set alarm notification, etc. Have Fun!!!
---
#### over
This is the end of the practice of custom monitoring of the HTTP protocol. The HTTP protocol also has other parameters such as headers and params. We can define it like postman, and the playability is also very high!
If you think hertzbeat is a good open source project, please star us on GitHub Gitee, thank you very much.
**github: [https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)**
+174
View File
@@ -0,0 +1,174 @@
---
id: extend-http-jsonpath
title: HTTP Protocol JsonPath Parsing Method
sidebar_label: JsonPath Parsing Method
---
> After calling the HTTP api to obtain the response data, use JsonPath script parsing method to parse the response data.
Note⚠️ The response data is JSON format.
**Use the JsonPath script to parse the response data into data that conforms to the data structure rules specified by HertzBeat**
## JsonPath Operator
[JSONPath online verification](https://www.jsonpath.cn)
| JSONPATH | Help description |
|------------------|----------------------------------------------------------------------------------------|
| $ | Root object or element |
| @ | Current object or element |
| . or [] | Child element operator |
| .. | Recursively match all child elements |
| * | Wildcard. Match all objects or elements |
| [] | Subscript operator, jsonpath index starts from 0 |
| [,] | Join operator, return multiple results as an array. Jsonpath allows the use of aliases |
| [start:end:step] | Array slice operator |
| ?() | Filter (script) expression |
| () | Script Expression |
### HertzBeat data format specification
Single layer format key-value
```json
{
"metricName1": "metricValue",
"metricName2": "metricValue",
"metricName3": "metricValue",
"metricName4": "metricValue"
}
```
Multilayer formatSet key value in the array
```json
[
{
"metricName1": "metricValue",
"metricName2": "metricValue",
"metricName3": "metricValue",
"metricName4": "metricValue"
},
{
"metricName1": "metricValue",
"metricName2": "metricValue",
"metricName3": "metricValue",
"metricName4": "metricValue"
}
]
```
#### Example
Query the value information of the custom system, and its exposed interface is `/metrics/person`. We need `type,num` Metric.
The raw data returned by the interface is as follows
```json
{
"firstName": "John",
"lastName" : "doe",
"age" : 26,
"address" : {
"streetAddress": "naist street",
"city" : "Nara",
"postalCode" : "630-0192"
},
"number": [
{
"type": "core",
"num": 3343
},
{
"type": "home",
"num": 4543
}
]
}
```
We use the jsonpath script to parse, and the corresponding script is: `$.number[*]`The parsed data structure is as follows
```json
[
{
"type": "core",
"num": 3343
},
{
"type": "home",
"num": 4543
}
]
```
This data structure conforms to the data format specification of HertzBeat, and the Metric `type,num` is successfully extracted.
**The corresponding monitoring template yml can be configured as follows**
```yaml
# The monitoring type categoryservice-application service monitoring db-database monitoring custom-custom monitoring os-operating system monitoring
category: custom
# Monitoring application type(consistent with the file name) eg: linux windows tomcat mysql aws...
app: example
name:
zh-CN: 模拟应用类型
en-US: EXAMPLE APP
params:
# field-field name identifier
- field: host
# name-parameter field display name
name:
zh-CN: 主机Host
en-US: Host
# type-field type, style(most mappings are input label type attribute)
type: host
# required or not true-required false-optional
required: true
- field: port
name:
zh-CN: 端口
en-US: Port
type: number
# When type is number, range is used to represent the range.
range: '[0,65535]'
required: true
# port default
defaultValue: 80
# Prompt information of parameter input box
placeholder: 'Please enter the port'
# Metric group list
metrics:
# The first monitoring Metric group person
# Notethe built-in monitoring Metrics have (responseTime - response time)
- name: cpu
# The smaller Metric group scheduling priority(0-127), the higher the priority. After completion of the high priority Metric group collection,the low priority Metric group will then be scheduled. Metric groups with the same priority will be scheduled in parallel.
# Metric group with a priority of 0 is an availability group which will be scheduled first. If the collection succeeds, the scheduling will continue otherwise interrupt scheduling.
priority: 0
# metrics fields list
fields:
# Metric information include field: name type: field type(0-number: number, 1-string: string) label-if is metrics label unit: Metric unit
- field: type
type: 1
label: true
- field: num
type: 0
# protocol for monitoring and collection eg: sql, ssh, http, telnet, wmi, snmp, sdk
protocol: http
# Specific collection configuration when the protocol is HTTP protocol
http:
# host: ipv4 ipv6 domain name
host: ^_^host^_^
# port
port: ^_^port^_^
# url request interface path
url: /metrics/person
# request mode GET POST PUT DELETE PATCH
method: GET
# enable ssl/tls or not, that is to say, HTTP or HTTPS. The default is false
ssl: false
# parsing method for response data: default-system rules, jsonPath-jsonPath script, website-website availability Metric monitoring
# jsonPath parsing is used here
parseType: jsonPath
parseScript: '$.number[*]'
```
+326
View File
@@ -0,0 +1,326 @@
---
id: extend-http-xmlpath
title: HTTP Protocol XmlPath Parsing Method
sidebar_label: XmlPath Parsing Method
---
> After calling the HTTP API to obtain the response data, use the XmlPath script parsing method to parse the response data.
Note⚠️ The response data must be in XML format.
**Use XPath scripts to parse the response data into data that conforms to the data structure rules specified by HertzBeat.**
## XmlPath Parsing Logic
The XmlPath parsing method in HertzBeat uses a two-step XPath process:
1. **Main XPath Expression (`parseScript`)**: This XPath expression is defined in the `http` configuration section under `parseScript`. It is used to select one or more main XML nodes from the response. Each selected node will correspond to one row of metric data in HertzBeat.
2. **Relative Field XPath Expressions (`xpath`)**: For each metric field defined in the `fields` list, you can specify a relative `xpath`. This XPath expression is evaluated *relative to each main node* selected by the `parseScript` in step 1. It extracts the specific value for that metric field from the current main node.
This allows you to easily parse structured XML data where multiple records or items are present.
**Special Metrics**:
* `responseTime`: This built-in metric represents the HTTP request's response time and is automatically collected. It does not require an `xpath`.
* `keyword`: This built-in metric counts the occurrences of a specified keyword (configured in `http.keyword`) in the raw response body. It does not require an `xpath`.
### Example
Assume the HTTP API returns the following XML data:
```xml
<DeviceStatus xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
<CPUList>
<CPU>
<cpuUtilization>36.400002</cpuUtilization>
<CPU>
<CPUList>
<MemoryList>
<Memory>
<memoryUsage>399640</memoryUsage>
<memoryAvailable>98792</memoryAvailable>
<cacheSize>228492</cacheSize>
<Memory>
<MemoryList>
<NetPortStatusList>
<NetPortStatus>
<id>1</id>
<workSpeed>1000</workSpeed>
<NetPortStatus>
<NetPortStatus>
<id>2</id>
<workSpeed>0</workSpeed>
<NetPortStatus>
<NetPortStatusList>
<bootTime>2025-01-06 10:27:48</bootTime>
<deviceUpTime>87天0时55分59秒</deviceUpTime>
<lastCalibrationTime>2025-04-03 11:09:18</lastCalibrationTime>
<lastCalibrationTimeDiff>1</lastCalibrationTimeDiff>
<uploadTimeConsumingList>
<avgTime>16</avgTime>
<maxTime>23</maxTime>
<minTime>12</minTime>
</uploadTimeConsumingList>
<lastCalibrationTimeMode>NTP</lastCalibrationTimeMode>
<lastCalibrationTimeAddress>34.191.45.101</lastCalibrationTimeAddress>
<DeviceStatus>
```
We want to monitor the device status and extract various metrics.
Here's how you would configure the monitoring template YML:
```yaml
category: server
# The monitoring type eg: linux windows tomcat mysql aws...
app: hikvision_isapi
# The monitoring i18n name
name:
zh-CN: 海康威视 ISAPI
en-US: Hikvision ISAPI
# The description and help of this monitoring type
help:
zh-CN: 通过ISAPI接口监控海康威视设备状态,获取设备健康数据。
en-US: Monitor Hikvision devices through ISAPI interface to collect health data.
# Input params define for monitoring(render web ui by the definition)
params:
- field: host
name:
zh-CN: 主机Host
en-US: Host
type: host
required: true
- field: port
name:
zh-CN: 端口
en-US: Port
type: number
range: '[0,65535]'
required: true
defaultValue: 80
- field: timeout
name:
zh-CN: 超时时间(ms)
en-US: Timeout(ms)
type: number
range: '[1000,60000]'
required: true
defaultValue: 5000
- field: username
name:
zh-CN: 用户名
en-US: Username
type: text
required: true
- field: password
name:
zh-CN: 密码
en-US: Password
type: password
required: true
- field: ssl
name:
zh-CN: 启用HTTPS
en-US: SSL
type: boolean
required: false
defaultValue: false
# collect metrics config list
metrics:
- name: system_info
i18n:
zh-CN: 系统信息
en-US: System Info
priority: 0
protocol: http
http:
host: ^_^host^_^
port: ^_^port^_^
ssl: ^_^ssl^_^
url: /ISAPI/System/deviceInfo
method: GET
timeout: ^_^timeout^_^
authorization:
type: Digest Auth
digestAuthUsername: ^_^username^_^
digestAuthPassword: ^_^password^_^
parseType: xmlPath
parseScript: //DeviceInfo
fields:
- field: deviceName
type: 1
i18n:
zh-CN: 设备名称
en-US: Device Name
- field: deviceID
type: 1
i18n:
zh-CN: 设备ID
en-US: Device ID
- field: firmwareVersion
type: 1
i18n:
zh-CN: 固件版本
en-US: Firmware Version
- field: model
type: 1
i18n:
zh-CN: 设备型号
en-US: Device Model
- field: macAddress
type: 1
i18n:
zh-CN: mac地址
en-US: Mac Address
- name: status
i18n:
zh-CN: 设备状态
en-US: Status
priority: 0
protocol: http
http:
host: ^_^host^_^
port: ^_^port^_^
ssl: ^_^ssl^_^
url: /ISAPI/System/status
method: GET
timeout: ^_^timeout^_^
authorization:
type: Digest Auth
digestAuthUsername: ^_^username^_^
digestAuthPassword: ^_^password^_^
parseType: xmlPath
parseScript: //DeviceStatus
fields:
- field: CPU_utilization
i18n:
zh-CN: CPU 利用率
en-US: CPU Utilization
type: 0
unit: '%'
- field: memory_usage
i18n:
zh-CN: 内存使用量
en-US: Memory Usage
type: 0
unit: MB
- field: memory_available
i18n:
zh-CN: 可用内存
en-US: Memory Available
type: 0
unit: MB
- field: cache_size
i18n:
zh-CN: 缓存大小
en-US: Cache Size
type: 0
unit: MB
- field: net_port_1_speed
i18n:
zh-CN: 网口1速度
en-US: Net Port 1 Speed
type: 0
unit: Mbps
- field: net_port_2_speed
i18n:
zh-CN: 网口2速度
en-US: Net Port 2 Speed
type: 0
unit: Mbps
- field: boot_time
i18n:
zh-CN: 启动时间
en-US: Boot Time
type: 1
- field: device_uptime
i18n:
zh-CN: 运行时长
en-US: Device Uptime
type: 1
- field: last_calibration_time
i18n:
zh-CN: 上次校时时间
en-US: Last Calibration Time
type: 1
- field: last_calibration_time_diff
i18n:
zh-CN: 上次校时时间差
en-US: Last Calibration Time Diff
type: 0
unit: s
- field: avg_upload_time
i18n:
zh-CN: 平均上传耗时
en-US: Avg Upload Time
type: 0
unit: ms
- field: max_upload_time
i18n:
zh-CN: 最大上传耗时
en-US: Max Upload Time
type: 0
unit: ms
- field: min_upload_time
i18n:
zh-CN: 最小上传耗时
en-US: Min Upload Time
type: 0
unit: ms
- field: last_calibration_mode
i18n:
zh-CN: 上次校时模式
en-US: Last Calibration Mode
type: 1
- field: last_calibration_address
i18n:
zh-CN: 上次校时地址
en-US: Last Calibration Address
type: 1
- field: response_time
i18n:
zh-CN: 响应时间
en-US: Response Time
type: 0
unit: ms
aliasFields:
- CPUList/CPU/cpuUtilization
- MemoryList/Memory/memoryUsage
- MemoryList/Memory/memoryAvailable
- MemoryList/Memory/cacheSize
- NetPortStatusList/NetPortStatus[id='1']/workSpeed
- NetPortStatusList/NetPortStatus[id='2']/workSpeed
- bootTime
- deviceUpTime
- lastCalibrationTime
- lastCalibrationTimeDiff
- uploadTimeConsumingList/avgTime
- uploadTimeConsumingList/maxTime
- uploadTimeConsumingList/minTime
- lastCalibrationTimeMode
- lastCalibrationTimeAddress
- responseTime
calculates:
- CPU_utilization=CPUList/CPU/cpuUtilization
- memory_usage=MemoryList/Memory/memoryUsage
- memory_available=MemoryList/Memory/memoryAvailable
- cache_size=MemoryList/Memory/cacheSize
- net_port_1_speed=NetPortStatusList/NetPortStatus[id='1']/workSpeed
- net_port_2_speed=NetPortStatusList/NetPortStatus[id='2']/workSpeed
- boot_time=bootTime
- device_uptime=deviceUpTime
- last_calibration_time=lastCalibrationTime
- last_calibration_time_diff=lastCalibrationTimeDiff
- avg_upload_time=uploadTimeConsumingList/avgTime
- max_upload_time=uploadTimeConsumingList/maxTime
- min_upload_time=uploadTimeConsumingList/minTime
- last_calibration_mode=lastCalibrationTimeMode
- last_calibration_address=lastCalibrationTimeAddress
- response_time=responseTime
units:
- memory_usage=KB->MB
- memory_available=KB->MB
- cache_size=KB->MB
+281
View File
@@ -0,0 +1,281 @@
---
id: extend-http
title: HTTP Protocol Custom Monitoring
sidebar_label: HTTP Protocol Custom Monitoring
---
> From [Custom Monitoring](extend-point), you are familiar with how to customize types, Metrics, protocols, etc. Here we will introduce in detail how to use HTTP protocol to customize Metric monitoring
## HTTP protocol collection process
【**Call HTTP API**】->【**Response Verification**】->【**Parse Response Data**】->【**Default method parsingJsonPath script parsing | XmlPath parsing(todo) | Prometheus parsing**】->【**Metric data extraction**】
It can be seen from the process that we define a monitoring type of HTTP protocol. We need to configure HTTP request parameters, configure which Metrics to obtain, and configure the parsing method and parsing script for response data.
HTTP protocol supports us to customize HTTP request path, request header, request parameters, request method, request body, etc.
**System default parsing method**HTTP interface returns the JSON data structure specified by hertzbeat, that is, the default parsing method can be used to parse the data and extract the corresponding Metric data. For details, refer to [**System Default Parsing**](extend-http-default)
**JsonPath script parsing method**Use JsonPath script to parse the response JSON data, return the data structure specified by the system, and then provide the corresponding Metric data. For details, refer to [**JsonPath Script Parsing**](extend-http-jsonpath)
### Custom Steps
**HertzBeat Dashboard** -> **Monitoring Templates** -> **New Template** -> **Config Monitoring Template Yml** -> **Save and Apply** -> **Add A Monitoring with The New Monitoring Type**
-------
Configuration usages of the monitoring templates yml are detailed below. Please pay attention to usage annotation.
### Monitoring Templates YML
> We define all monitoring collection types (mysql,jvm,k8s) as yml monitoring templates, and users can import these templates to support corresponding types of monitoring.
>
> Monitoring template is used to define *the name of monitoring type(international), request parameter mapping, index information, collection protocol configuration information*, etc.
egDefine a custom monitoring type `app` named `example_http` which use the HTTP protocol to collect data.
**Monitoring Templates** -> **Config New Monitoring Template Yml** -> **Save and Apply**
```yaml
# The monitoring type categoryservice-application service monitoring db-database monitoring custom-custom monitoring os-operating system monitoring
category: custom
# The monitoring type eg: linux windows tomcat mysql aws...
app: a_example
# The monitoring i18n name
name:
zh-CN: 模拟应用
en-US: EXAMPLE APP
# The description and help of this monitoring type
help:
zh-CN: HertzBeat 支持自定义监控,您只需配置监控模板 YML 就能适配一款自定义的监控类型。`<br>`定义流程如下:HertzBeat 页面 -> 监控模板菜单 -> 新增监控类型 -> 配置自定义监控模板YML -> 点击保存应用 -> 使用新监控类型添加监控。
en-US: "HertzBeat supports custom monitoring, and you only need to configure the monitoring template YML to adapt to a custom monitoring type. `<br>`Definition process as follow: HertzBeat Pages -> Main Menu -> Monitor Template -> edit and save -> apply this template."
zh-TW: HertzBeat支持自定義監控,您只需配寘監控模板YML就能適配一款自定義的監控類型。`<br>`定義流程如下:HertzBeat頁面->監控模板選單->新增監控類型->配寘自定義監控模板YML ->點擊保存應用->使用新監控類型添加監控。
helpLink:
zh-CN: https://hertzbeat.apache.org/zh-cn/docs/advanced/extend-point/
en-US: https://hertzbeat.apache.org/docs/advanced/extend-point/
# Input params define for monitoring(render web ui by the definition)
params:
# field-param field key
- field: host
# name-param field display i18n name
name:
zh-CN: 目标Host
en-US: Target Host
# type-param field type(most mapping the html input type)
type: host
# required-true or false
required: true
# field-param field key
- field: port
# name-param field display i18n name
name:
zh-CN: 端口
en-US: Port
# type-param field type(most mapping the html input type)
type: number
# when type is number, range is required
range: '[0,65535]'
# required-true or false
required: true
# default value
defaultValue: 80
# param field input placeholder
placeholder: 'Please Input Port'
# field-param field key
- field: username
# name-param field display i18n name
name:
zh-CN: 用户名
en-US: Username
# type-param field type(most mapping the html input type)
type: text
# when type is text, use limit to limit string length
limit: 50
# required-true or false
required: false
# hide param-true or false
hide: true
# field-param field key
- field: password
# name-param field display i18n name
name:
zh-CN: 用户密码
en-US: Password
# type-param field type(most mapping the html input tag)
type: password
# required-true or false
required: false
# hide param-true or false
hide: true
# field-param field key
- field: ssl
# name-param field display i18n name
name:
zh-CN: 启动SSL
en-US: SSL
# type-param field type(boolean mapping the html switch tag)
type: boolean
# required-true or false
required: false
# field-param field key
- field: method
# name-param field display i18n name
name:
zh-CN: 请求方式
en-US: Method
# type-param field type(radio mapping the html radio tag)
type: radio
# required-true or false
required: true
# when type is radio checkbox, use option to show optional values {name1:value1,name2:value2}
options:
- label: GET
value: GET
- label: POST
value: POST
- label: PUT
value: PUT
- label: DELETE
value: DELETE
# field-param field key
- field: headers
# name-param field display i18n name
name:
zh-CN: 请求Headers
en-US: Headers
# type-param field type(key-value mapping the html key-value input tags)
type: key-value
# required-true or false
required: false
# when type is key-value, use keyAlias to config key alias name
keyAlias: Header Name
# when type is key-value, use valueAlias to config value alias name
valueAlias: Header Value
# collect metrics config list
metrics:
# metrics - cpu
- name: cpu
# metrics name i18n label
i18n:
zh-CN: CPU 信息
en-US: CPU Info
# metrics scheduling priority(0->127)->(high->low), metrics with the same priority will be scheduled in parallel
# priority 0's metrics is availability metrics, it will be scheduled first, only availability metrics collect success will the scheduling continue
priority: 0
# collect metrics content
fields:
# field-metric name, i18n-metric name i18n label, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field
- field: hostname
type: 1
label: true
i18n:
zh-CN: 主机名称
en-US: Host Name
- field: usage
type: 0
unit: '%'
i18n:
zh-CN: 使用率
en-US: Usage
- field: cores
type: 0
i18n:
zh-CN: 核数
en-US: Cores
- field: waitTime
type: 0
unit: s
i18n:
zh-CN: 主机名称
en-US: Host Name
# (optional)metrics field alias name, it is used as an alias field to map and convert the collected data and metrics field
aliasFields:
- hostname
- core1
- core2
- usage
- allTime
- runningTime
# mapping and conversion expressions, use these and aliasField above to calculate metrics value
# eg: cores=core1+core2, usage=usage, waitTime=allTime-runningTime
calculates:
- hostname=hostname
- cores=core1+core2
- usage=usage
- waitTime=allTime-runningTime
# the protocol used for monitoring, eg: sql, ssh, http, telnet, wmi, snmp, sdk
protocol: http
# the config content when protocol is http
http:
# http host: ipv4 ipv6 domain
host: ^_^host^_^
# http port
port: ^_^port^_^
# http url
url: /metrics/cpu
# http method: GET POST PUT DELETE PATCH
method: GET
# if enabled https
ssl: false
# http request header content
headers:
^_^headers^_^: ^_^headers^_^
# http request params
params:
param1: param1
param2: param2
# http auth
authorization:
# http auth type: Basic Auth, Digest Auth, Bearer Token
type: Basic Auth
basicAuthUsername: ^_^username^_^
basicAuthPassword: ^_^password^_^
# http response data parse type: default-hertzbeat rule, jsonpath-jsonpath script, website-for website monitoring, prometheus-prometheus exporter rule
parseType: jsonPath
parseScript: '$'
- name: memory
i18n:
zh-CN: 内存信息
en-US: Memory Info
priority: 1
fields:
- field: hostname
type: 1
label: true
i18n:
zh-CN: 主机名称
en-US: Hostname
- field: total
type: 0
unit: kb
i18n:
zh-CN: 总量
en-US: Total
- field: usage
type: 0
unit: '%'
i18n:
zh-CN: 使用率
en-US: Usage
- field: speed
type: 0
i18n:
zh-CN: 速率
en-US: Speed
protocol: http
http:
host: ^_^host^_^
port: ^_^port^_^
url: /metrics/memory
method: GET
headers:
apiVersion: v1
params:
param1: param1
param2: param2
authorization:
type: Basic Auth
basicAuthUsername: ^_^username^_^
basicAuthPassword: ^_^password^_^
parseType: default
```
+243
View File
@@ -0,0 +1,243 @@
---
id: extend-jdbc
title: JDBC Protocol Custom Monitoring
sidebar_label: JDBC Protocol Custom Monitoring
---
> From [Custom Monitoring](extend-point), you are familiar with how to customize types, Metrics, protocols, etc. Here we will introduce in detail how to use JDBC(support mysql,mariadb,postgresql,sqlserver at present) to customize Metric monitoring.
> JDBC protocol custom monitoring allows us to easily monitor Metrics we want by writing SQL query statement.
## JDBC protocol collection process
【**System directly connected to MYSQL**】->【**Run SQL query statement**】->【**parse response data: oneRow, multiRow, columns**】->【**Metric data extraction**】
It can be seen from the process that we define a monitoring type of JDBC protocol. We need to configure SSH request parameters, configure which Metrics to obtain, and configure query SQL statements.
### Data parsing method
We can obtain the corresponding Metric data through the data fields queried by SQL and the Metric mapping we need. At present, there are three mapping parsing methodsoneRow, multiRow, columns.
#### **oneRow**
> Query a row of data, return the column name of the result set through query and map them to the queried field.
eg
queried Metric fieldsone two three four
query SQLselect one, two, three, four from book limit 1;
Here the Metric field and the response data can be mapped into a row of collected data one by one.
#### **multiRow**
> Query multiple rows of data, return the column names of the result set and map them to the queried fields.
eg
queried Metric fieldsone two three four
query SQLselect one, two, three, four from book;
Here the Metric field and the response data can be mapped into multiple rows of collected data one by one.
#### **columns**
> Collect a row of Metric data. By matching the two columns of queried data (key value), key and the queried field, value is the value of the query field.
eg
queried fieldsone two three four
query SQLselect key, value from book;
SQL response data
| key | value |
|-------|-------|
| one | 243 |
| two | 435 |
| three | 332 |
| four | 643 |
Here by mapping the Metric field with the key of the response data, we can obtain the corresponding value as collection and monitoring data.
### Custom Steps
**HertzBeat Dashboard** -> **Monitoring Templates** -> **New Template** -> **Config Monitoring Template Yml** -> **Save and Apply** -> **Add A Monitoring with The New Monitoring Type**
-------
Configuration usages of the monitoring templates yml are detailed below.
### Monitoring Templates YML
> We define all monitoring collection types (mysql,jvm,k8s) as yml monitoring templates, and users can import these templates to support corresponding types of monitoring.
>
> Monitoring template is used to define *the name of monitoring type(international), request parameter mapping, index information, collection protocol configuration information*, etc.
egDefine a custom monitoring type `app` named `example_sql` which use the JDBC protocol to collect data.
```yaml
# The monitoring type categoryservice-application service monitoring db-database monitoring custom-custom monitoring os-operating system monitoring
category: db
# Monitoring application type(consistent with the file name) eg: linux windows tomcat mysql aws...
app: example_sql
name:
zh-CN: 模拟MYSQL应用类型
en-US: MYSQL EXAMPLE APP
# Monitoring parameter definition file is used to define required input parameter field structure definition Front-end page render input parameter box according to structure
params:
- field: host
name:
zh-CN: 主机Host
en-US: Host
type: host
required: true
- field: port
name:
zh-CN: 端口
en-US: Port
type: number
range: '[0,65535]'
required: true
defaultValue: 80
placeholder: 'Please enter the port'
- field: database
name:
zh-CN: 数据库名称
en-US: Database
type: text
required: false
- field: username
name:
zh-CN: 用户名
en-US: Username
type: text
limit: 50
required: false
- field: password
name:
zh-CN: 密码
en-US: Password
type: password
required: false
- field: url
name:
zh-CN: Url
en-US: Url
type: text
required: false
# Metric group list
metrics:
- name: basic
# The smaller Metric group scheduling priority(0-127), the higher the priority. After completion of the high priority Metric group collection,the low priority Metric group will then be scheduled. Metric groups with the same priority will be scheduled in parallel.
# Metric group with a priority of 0 is an availability group which will be scheduled first. If the collection succeeds, the scheduling will continue otherwise interrupt scheduling.
priority: 0
# metrics fields list
fields:
# Metric information include field: name type: field type(0-number: number, 1-string: string) label-if is metrics label unit: Metric unit
- field: version
type: 1
label: true
- field: port
type: 1
- field: datadir
type: 1
- field: max_connections
type: 0
# (optional)Monitoring Metric alias mapping to the Metric name above. The field used to collect interface data is not the final Metric name directly. This alias is required for mapping conversion.
aliasFields:
- version
- version_compile_os
- version_compile_machine
- port
- datadir
- max_connections
# (optional)The Metric calculation expression works with the above alias to calculate the final required Metric value.
# eg: cores=core1+core2, usage=usage, waitTime=allTime-runningTime
calculates:
- port=port
- datadir=datadir
- max_connections=max_connections
- version=version+"_"+version_compile_os+"_"+version_compile_machine
protocol: jdbc
jdbc:
# host: ipv4 ipv6 domain name
host: ^_^host^_^
# port
port: ^_^port^_^
platform: mysql
username: ^_^username^_^
password: ^_^password^_^
database: ^_^database^_^
# SQL query methodoneRow, multiRow, columns
queryType: columns
# sql
sql: show global variables where Variable_name like 'version%' or Variable_name = 'max_connections' or Variable_name = 'datadir' or Variable_name = 'port';
url: ^_^url^_^
- name: status
priority: 1
fields:
# Metric information include field: name type: field type(0-number: number, 1-string: string) label-if is metrics label unit: Metric unit
- field: threads_created
type: 0
- field: threads_connected
type: 0
- field: threads_cached
type: 0
- field: threads_running
type: 0
# (optional)Monitoring Metric alias mapping to the Metric name above. The field used to collect interface data is not the final Metric name directly. This alias is required for mapping conversion.
aliasFields:
- threads_created
- threads_connected
- threads_cached
- threads_running
# (optional)The Metric calculation expression works with the above alias to calculate the final required Metric value.
# eg: cores=core1+core2, usage=usage, waitTime=allTime-runningTime
calculates:
- threads_created=threads_created
- threads_connected=threads_connected
- threads_cached=threads_cached
- threads_running=threads_running
protocol: jdbc
jdbc:
# host: ipv4 ipv6 domain name
host: ^_^host^_^
# port
port: ^_^port^_^
platform: mysql
username: ^_^username^_^
password: ^_^password^_^
database: ^_^database^_^
# SQL query method: oneRow, multiRow, columns
queryType: columns
# sql
sql: show global status where Variable_name like 'thread%' or Variable_name = 'com_commit' or Variable_name = 'com_rollback' or Variable_name = 'questions' or Variable_name = 'uptime';
url: ^_^url^_^
- name: innodb
priority: 2
fields:
# Metric information include field: name type: field type(0-number: number, 1-string: string) label-if is metrics label unit: Metric unit
- field: innodb_data_reads
type: 0
unit: times
- field: innodb_data_writes
type: 0
unit: times
- field: innodb_data_read
type: 0
unit: kb
- field: innodb_data_written
type: 0
unit: kb
protocol: jdbc
jdbc:
# host: ipv4 ipv6 domain name
host: ^_^host^_^
# port
port: ^_^port^_^
platform: mysql
username: ^_^username^_^
password: ^_^password^_^
database: ^_^database^_^
# SQL query methodoneRow, multiRow, columns
queryType: columns
# sql
sql: show global status where Variable_name like 'innodb%';
url: ^_^url^_^
```
+194
View File
@@ -0,0 +1,194 @@
---
id: extend-jmx
title: JMX Protocol Custom Monitoring
sidebar_label: JMX Protocol Custom Monitoring
---
> From [Custom Monitoring](extend-point), you are familiar with how to customize types, Metrics, protocols, etc. Here we will introduce in detail how to use JMX to customize Metric monitoring.
> JMX protocol custom monitoring allows us to easily monitor Metrics we want by config JMX Mbeans Object.
## JMX protocol collection process
【**Peer Server Enable Jmx Service**】->【**HertzBeat Connect Peer Server Jmx**】->【**Query Jmx Mbean Object Data**】->【**Metric data extraction**】
It can be seen from the process that we define a monitoring type of JMX protocol. We need to configure JMX request parameters, configure which Metrics to obtain, and configure Mbeans Object.
### Data parsing method
By configuring the monitoring template YML metrics `field`, `aliasFields`, `objectName` of the `jmx` protocol to map and parse the `Mbean` object information exposed by the peer system.
### Custom Steps
**HertzBeat Dashboard** -> **Monitoring Templates** -> **New Template** -> **Config Monitoring Template Yml** -> **Save and Apply** -> **Add A Monitoring with The New Monitoring Type**
![HertzBeat](/img/docs/advanced/extend-point-1.png)
-------
Configuration usages of the monitoring templates yml are detailed below.
### Monitoring Templates YML
> We define all monitoring collection types (mysql,jvm,k8s) as yml monitoring templates, and users can import these templates to support corresponding types of monitoring.
>
> Monitoring template is used to define *the name of monitoring type(international), request parameter mapping, index information, collection protocol configuration information*, etc.
egDefine a custom monitoring type `app` named `example_jvm` which use the JVM protocol to collect data.
```yaml
# The monitoring type categoryservice-application service monitoring db-database monitoring custom-custom monitoring os-operating system monitoring
category: service
# The monitoring type eg: linux windows tomcat mysql aws...
app: example_jvm
# The monitoring i18n name
name:
zh-CN: 自定义JVM虚拟机
en-US: CUSTOM JVM
# Input params define for monitoring(render web ui by the definition)
params:
# field-param field key
- field: host
# name-param field display i18n name
name:
zh-CN: 主机Host
en-US: Host
# type-param field type(most mapping the html input type)
type: host
# required-true or false
required: true
# field-param field key
- field: port
# name-param field display i18n name
name:
zh-CN: 端口
en-US: Port
# type-param field type(most mapping the html input type)
type: number
# when type is number, range is required
range: '[0,65535]'
# required-true or false
required: true
# default value
defaultValue: 9999
# field-param field key
- field: url
# name-param field display i18n name
name:
zh-CN: JMX URL
en-US: JMX URL
# type-param field type(most mapping the html input type)
type: text
# required-true or false
required: false
# hide param-true or false
hide: true
# param field input placeholder
placeholder: 'service:jmx:rmi:///jndi/rmi://host:port/jmxrmi'
# field-param field key
- field: username
# name-param field display i18n name
name:
zh-CN: 用户名
en-US: Username
# type-param field type(most mapping the html input type)
type: text
# when type is text, use limit to limit string length
limit: 50
# required-true or false
required: false
# hide param-true or false
hide: true
# field-param field key
- field: password
# name-param field display i18n name
name:
zh-CN: 密码
en-US: Password
# type-param field type(most mapping the html input tag)
type: password
# required-true or false
required: false
# hide param-true or false
hide: true
# collect metrics config list
metrics:
# metrics - basic
- name: basic
# metrics scheduling priority(0->127)->(high->low), metrics with the same priority will be scheduled in parallel
# priority 0's metrics is availability metrics, it will be scheduled first, only availability metrics collect success will the scheduling continue
priority: 0
# collect metrics content
fields:
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-if is metrics label
- field: VmName
type: 1
- field: VmVendor
type: 1
- field: VmVersion
type: 1
- field: Uptime
type: 0
unit: ms
# the protocol used for monitoring, eg: sql, ssh, http, telnet, wmi, snmp, sdk
protocol: jmx
# the config content when protocol is jmx
jmx:
# host: ipv4 ipv6 domain
host: ^_^host^_^
# port
port: ^_^port^_^
username: ^_^username^_^
password: ^_^password^_^
# jmx mbean object name
objectName: java.lang:type=Runtime
url: ^_^url^_^
- name: memory_pool
priority: 1
fields:
- field: name
type: 1
label: true
- field: committed
type: 0
unit: MB
- field: init
type: 0
unit: MB
- field: max
type: 0
unit: MB
- field: used
type: 0
unit: MB
units:
- committed=B->MB
- init=B->MB
- max=B->MB
- used=B->MB
# (optional)metrics field alias name, it is used as an alias field to map and convert the collected data and metrics field
aliasFields:
- Name
- Usage->committed
- Usage->init
- Usage->max
- Usage->used
# mapping and conversion expressions, use these and aliasField above to calculate metrics value
# eg: cores=core1+core2, usage=usage, waitTime=allTime-runningTime
calculates:
- name=Name
- committed=Usage->committed
- init=Usage->init
- max=Usage->max
- used=Usage->used
protocol: jmx
jmx:
# host: ipv4 ipv6 domain
host: ^_^host^_^
# port
port: ^_^port^_^
username: ^_^username^_^
password: ^_^password^_^
objectName: java.lang:type=MemoryPool,name=*
url: ^_^url^_^
```
+174
View File
@@ -0,0 +1,174 @@
---
id: extend-ngql
title: NGQL Custom Monitoring
sidebar_label: NGQL Custom Monitoring
---
> From [Custom Monitoring](extend-point), you are familiar with how to customize types, Metrics, protocols, etc. Here we will introduce in detail how to use JDBC(support mysql,mariadb,postgresql,sqlserver at present) to customize Metric monitoring.
> NGQL custom monitoring allows us to easily query metric data from the NebulaGraph graph database using NGQL or OpenCypher, supporting NebulaGraph 3.X versions.
## Data Parsing Methods
Mapping the fields returned by NGQL queries to the metrics we need allows us to obtain corresponding metric data. Currently, there are four mapping and parsing methods: filterCount, oneRow, multiRow, columns.
### **filterCount**
>
> Counts the number of results returned by a query based on specified fields, usually used in `SHOW ...` statements. If NGQL statements can directly return the count, it is recommended to use NGQL statements for counting.
> Syntax for the `commands` field: aliasField#NGQL#filterName#filterValue
> `aliasField`: corresponds to the value in the `aliasFields` in the monitoring template
> `NGQL`: query statement
> `filterName`: filter attribute name (optional)
> `filterValue`: filter attribute value (optional)
For example:
- online_meta_count#SHOW HOSTS META#Status#ONLINE
Counts the number of rows returned by `SHOW HOSTS META` where Status equals ONLINE.
- online_meta_count#SHOW HOSTS META##
Counts the number of rows returned by `SHOW HOSTS META`.
#### **oneRow**
> Queries a single row of data by mapping the column names of the query result set to the queried fields.
For example:
- Metrics fields: a, b
- NGQL query: match (v:metrics) return v.metrics.a as a, v.metrics.b as b;
Here, the metric fields can be mapped to the response data row by row.
Notes:
- When using the `oneRow` method, if a single query statement returns multiple rows of results, only the first row of results will be mapped to the metric fields.
- When the `commands` field contains two or more query statements and the returned fields of multiple query statements are the same, the fields returned by the subsequent statement will overwrite those returned by the previous statement.
- It is recommended to use the limit statement to limit the number of rows returned in the result set when defining `commands`.
#### **multiRow**
> Queries multiple rows of data by mapping the column names of the query result set to the queried fields.
For example:
- Metrics fields: a, b
- NGQL query: match (v:metrics) return v.metrics.a as a, v.metrics.b as b;
Here, the metric fields can be mapped to the response data row by row.
Notes:
- When using the `multiRow` method, the `commands` field can only contain one query statement.
#### **columns**
> Collects a single row of metric data by mapping two columns of data (key-value), where the key matches the queried fields and the value is the value of the queried field.
Notes:
- When using the `columns` method, the first two columns of the result set are mapped to collect data by default, where the first column corresponds to the metric name and the second column corresponds to the metric value.
- When the `commands` field contains two or more query statements and the first column of data returned by multiple query statements is duplicated, the result of the last statement will be retained.
### Customization Steps
**HertzBeat Page** -> **Monitoring Template Menu** -> **Add Monitoring Type** -> **Configure Custom Monitoring Template YML** -> **Click Save Application** -> **Use the New Monitoring Type to Add Monitoring**
![HertzBeat Page](/img/docs/advanced/extend-point-1.png)
-------
Configuration usages of the monitoring templates yml are detailed below.
### Monitoring Template YML
> We define all monitoring collection types (mysql,jvm,k8s) as yml monitoring templates, and users can import these templates to support corresponding types of monitoring.
> Monitoring template is used to define the name of monitoring type(international), request parameter mapping, index information, collection protocol configuration information, etc.
eg: Customize a monitoring type named example_ngql, which collects metric data using NGQL.
```yaml
# Monitoring category: service-application service program-application program db-database custom-custom os-operating system bigdata-big data mid-middleware webserver-web server cache-cache cn-cloud native network-network monitoring, etc.
category: db
# Monitoring application type (consistent with the file name) eg: linux windows tomcat mysql aws...
app: example_ngql
name:
zh-CN: NGQL Custom Monitoring Application
en-US: NGQL Custom APP
# Monitoring parameter definition. These are input parameter variables, which can be written in the format of ^_^host^_^ to be replaced by system variable values in the later configuration
# This part is usually not modified
params:
# field-param field key
- field: host
name:
zh-CN: Target Host
en-US: Target Host
type: host
required: true
- field: graphPort
name:
zh-CN: Graph Port
en-US: Graph Port
type: number
range: '[0,65535]'
required: true
defaultValue: 9669
- field: username
name:
zh-CN: Username
en-US: Username
type: text
required: true
- field: password
name:
zh-CN: Password
en-US: Password
type: password
required: true
- field: spaceName
name:
zh-CN: Space Name
en-US: Space Name
type: text
required: false
- field: timeout
name:
zh-CN: Connect Timeout(ms)
en-US: Connect Timeout(ms)
type: number
unit: ms
range: '[0,100000]'
required: true
defaultValue: 6000
# Metric collection configuration list
metrics:
- name: base_info
i18n:
zh-CN: Vertex statistics
en-US: Vertex statistics
priority: 0
fields:
- field: tag1
type: 1
i18n:
zh-CN: tag1
en-US: tag1
- field: tag1
type: 1
i18n:
zh-CN: tag2
en-US: tag2
aliasFields:
- tag1
- tag2
protocol: ngql
ngql:
host: ^_^host^_^
username: ^_^username^_^
password: ^_^password^_^
port: ^_^graphPort^_^
spaceName: ^_^spaceName^_^
parseType: columns
# Define the query statements used to collect data
commands:
- match (v:tag1) return "tag1" as name ,count(v) as cnt
- match (v:tag2) return "tag2" as name ,count(v) as cnt
timeout: ^_^timeout^_^
```
+146
View File
@@ -0,0 +1,146 @@
---
id: extend-point
title: Custom Monitoring
sidebar_label: Custom Monitoring
---
> HertzBeat has custom monitoring ability. You only need to configure monitoring template yml to fit a custom monitoring type.
> Custom monitoring currently supports [HTTP protocol](extend-http)[JDBC protocol](extend-jdbc), [SSH protocol](extend-ssh), [JMX protocol](extend-jmx), [SNMP protocol](extend-snmp). And it will support more general protocols in the future.
## Custom Monitoring Steps
**HertzBeat Dashboard** -> **Monitoring Templates** -> **New Template** -> **Config Monitoring Template Yml** -> **Save and Apply** -> **Add A Monitoring with The New Monitoring Type**
### Custom Monitoring Metrics Refresh Interval
HertzBeat now supports setting different refresh intervals for various groups of monitoring metrics. This can be configured in the monitoring template under the `metrics` section by setting the `interval` field, with the unit being seconds. If not set, the default refresh interval specified during the creation of the monitoring will be used.
-------
Configuration usages of the monitoring templates yml are detailed below.
### Monitoring Templates YML
> We define all monitoring collection types (mysql,jvm,k8s) as yml monitoring templates, and users can import these templates to support corresponding types of monitoring.
>
> Monitoring template is used to define *the name of monitoring type(international), request parameter mapping, index information, collection protocol configuration information*, etc.
egDefine a custom monitoring type `app` named `example2` which use the HTTP protocol to collect data.
**Monitoring Templates** -> **Config New Monitoring Template Yml** -> **Save and Apply**
```yaml
# The monitoring type categoryservice-application service monitoring db-database monitoring custom-custom monitoring os-operating system monitoring
category: custom
# The monitoring type eg: linux windows tomcat mysql aws...
app: example2
# The monitoring i18n name
name:
zh-CN: 模拟网站监测
en-US: EXAMPLE WEBSITE
# The description and help of this monitoring type
help:
zh-CN: HertzBeat 支持自定义监控,您只需配置监控模板 YML 就能适配一款自定义的监控类型。`<br>`定义流程如下:HertzBeat 页面 -> 监控模板菜单 -> 新增监控类型 -> 配置自定义监控模板YML -> 点击保存应用 -> 使用新监控类型添加监控。
en-US: "HertzBeat supports custom monitoring, and you only need to configure the monitoring template YML to adapt to a custom monitoring type. `<br>`Definition process as follow: HertzBeat Pages -> Main Menu -> Monitor Template -> edit and save -> apply this template."
zh-TW: HertzBeat支持自定義監控,您只需配寘監控模板YML就能適配一款自定義的監控類型。`<br>`定義流程如下:HertzBeat頁面->監控模板選單->新增監控類型->配寘自定義監控模板YML ->點擊保存應用->使用新監控類型添加監控。
helpLink:
zh-CN: https://hertzbeat.apache.org/zh-cn/docs/advanced/extend-point/
en-US: https://hertzbeat.apache.org/docs/advanced/extend-point/
# Input params define for monitoring(render web ui by the definition)
params:
# field-param field key
- field: host
# name-param field display i18n name
name:
zh-CN: 主机Host
en-US: Host
# type-param field type(most mapping the html input type)
type: host
# required-true or false
required: true
# field-param field key
- field: port
# name-param field display i18n name
name:
zh-CN: 端口
en-US: Port
# type-param field type(most mapping the html input type)
type: number
# when type is number, range is required
range: '[0,65535]'
# required-true or false
required: true
# default value
defaultValue: 80
# field-param field key
- field: uri
# name-param field display i18n name
name:
zh-CN: 相对路径
en-US: URI
# type-param field type(most mapping the html input tag)
type: text
# when type is text, use limit to limit string length
limit: 200
# required-true or false
required: false
# param field input placeholder
placeholder: 'Website uri path(no ip port) EG:/console'
# field-param field key
- field: ssl
# name-param field display i18n name
name:
zh-CN: 启用HTTPS
en-US: HTTPS
# type-param field type(most mapping the html input type)
type: boolean
# required-true or false
required: true
# field-param field key
- field: timeout
# name-param field display i18n name
name:
zh-CN: 超时时间(ms)
en-US: Timeout(ms)
# type-param field type(most mapping the html input tag)
type: number
# required-true or false
required: false
# hide param-true or false
hide: true
metrics:
# metrics - summary, inner monitoring metrics (responseTime - response time, keyword - number of keywords)
- name: summary
# metrics scheduling priority(0->127)->(high->low), metrics with the same priority will be scheduled in parallel
# priority 0's metrics is availability metrics, it will be scheduled first, only availability metrics collect success will the scheduling continue
priority: 0
# refresh interval for this metrics group
interval: 600
# collect metrics content
fields:
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-if is metrics label
- field: responseTime
type: 0
unit: ms
- field: keyword
type: 0
# the protocol used for monitoring, eg: sql, ssh, http, telnet, wmi, snmp, sdk
protocol: http
# the config content when protocol is http
http:
# http host: ipv4 ipv6 domain
host: ^_^host^_^
# http port
port: ^_^port^_^
# http url
url: ^_^uri^_^
timeout: ^_^timeout^_^
# http method: GET POST PUT DELETE PATCH
method: GET
# if enabled https
ssl: ^_^ssl^_^
# http response data parse type: default-hertzbeat rule, jsonpath-jsonpath script, website-for website monitoring, prometheus-prometheus exporter rule
parseType: website
```
+26
View File
@@ -0,0 +1,26 @@
---
id: extend-push
title: Push Style Custom Monitoring
sidebar_label: Push Style Custom Monitoring
---
> Push style curstom monitor is a type of monitor which allow user to configure metrics format and push metrics to hertzbeat with their own service.
> Here we will introduce how to use this feature.
## Push style custom monitor collection process
【Peer Server Start Pushing Metrics】 -> 【HertzBeat Push Module Stage Metrics】-> 【HertzBeat Collect Module collect Metrics Periodically】
### Data parsing method
HertzBeat will parsing metrics with the format configured by user while adding new monitor.
### Create Monitor Steps
HertzBeat DashBoard -> Service Monitor -> Push Style Monitor -> New Push Style Monitor -> set Push Module Host (hertzbeat server ip, usually 127.0.0.1/localhost) -> set Push Module Port (hertzbeat server port, usually 1157) -> configure metrics field (unit: string, type: 0 number / 1 string) -> end
---
### Monitor Configuration Example
![HertzBeat](/img/docs/advanced/extend-push-example-1.png)
+171
View File
@@ -0,0 +1,171 @@
---
id: extend-snmp
title: SNMP Protocol Custom Monitoring
sidebar_label: SNMP Protocol Custom Monitoring
---
> From [Custom Monitoring](extend-point), you are familiar with how to customize types, Metrics, protocols, etc. Here we will introduce in detail how to use SNMP to customize Metric monitoring.
> JMX protocol custom monitoring allows us to easily monitor Metrics we want by config SNMP MIB OIDs.
## SNMP protocol collection process
【**Peer Server Enable SNMP Service**】->【**HertzBeat Connect Peer Server SNMP**】->【**Query Oids Data**】->【**Metric data extraction**】
It can be seen from the process that we define a monitoring type of Snmp protocol. We need to configure Snmp request parameters, configure which Metrics to obtain, and configure oids.
### Data parsing method
By configuring the metrics `field`, `aliasFields`, and `oids` under the `snmp` protocol of the monitoring template YML to capture the data specified by the peer and parse the mapping.
### Custom Steps
**HertzBeat Dashboard** -> **Monitoring Templates** -> **New Template** -> **Config Monitoring Template Yml** -> **Save and Apply** -> **Add A Monitoring with The New Monitoring Type**
![HertzBeat](/img/docs/advanced/extend-point-1.png)
-------
Configuration usages of the monitoring templates yml are detailed below.
### Monitoring Templates YML
> We define all monitoring collection types (mysql,jvm,k8s) as yml monitoring templates, and users can import these templates to support corresponding types of monitoring.
>
> Monitoring template is used to define *the name of monitoring type(international), request parameter mapping, index information, collection protocol configuration information*, etc.
egDefine a custom monitoring type `app` named `example_windows` which use the SNMP protocol to collect data.
```yaml
# The monitoring type categoryservice-application service monitoring db-database monitoring mid-middleware custom-custom monitoring os-operating system monitoring
category: os
# The monitoring type eg: linux windows tomcat mysql aws...
app: windows
# The monitoring i18n name
name:
zh-CN: Windows操作系统
en-US: OS Windows
# Input params define for monitoring(render web ui by the definition)
params:
# field-param field key
- field: host
# name-param field display i18n name
name:
zh-CN: 主机Host
en-US: Host
# type-param field type(most mapping the html input type)
type: host
# required-true or false
required: true
# field-param field key
- field: port
# name-param field display i18n name
name:
zh-CN: 端口
en-US: Port
# type-param field type(most mapping the html input type)
type: number
# when type is number, range is required
range: '[0,65535]'
# required-true or false
required: true
# default value
defaultValue: 161
# field-param field key
- field: version
# name-param field display i18n name
name:
zh-CN: SNMP 版本
en-US: SNMP Version
# type-param field type(radio mapping the html radio tag)
type: radio
# required-true or false
required: true
# when type is radio checkbox, use option to show optional values {name1:value1,name2:value2}
options:
- label: SNMPv1
value: 0
- label: SNMPv2c
value: 1
# field-param field key
- field: community
# name-param field display i18n name
name:
zh-CN: SNMP 团体字
en-US: SNMP Community
# type-param field type(most mapping the html input type)
type: text
# when type is text, use limit to limit string length
limit: 100
# required-true or false
required: true
# param field input placeholder
placeholder: 'Snmp community for v1 v2c'
# field-param field key
- field: timeout
# name-param field display i18n name
name:
zh-CN: 超时时间(ms)
en-US: Timeout(ms)
# type-param field type(most mapping the html input type)
type: number
# when type is number, range is required
range: '[0,100000]'
# required-true or false
required: false
# hide-is hide this field and put it in advanced layout
hide: true
# default value
defaultValue: 6000
# collect metrics config list
metrics:
# metrics - system
- name: system
# metrics scheduling priority(0->127)->(high->low), metrics with the same priority will be scheduled in parallel
# priority 0's metrics is availability metrics, it will be scheduled first, only availability metrics collect success will the scheduling continue
priority: 0
# collect metrics content
fields:
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-if is metrics label
- field: name
type: 1
- field: descr
type: 1
- field: uptime
type: 1
- field: numUsers
type: 0
- field: services
type: 0
- field: processes
type: 0
- field: responseTime
type: 0
unit: ms
- field: location
type: 1
# the protocol used for monitoring, eg: sql, ssh, http, telnet, wmi, snmp, sdk
protocol: snmp
# the config content when protocol is snmp
snmp:
# server host: ipv4 ipv6 domain
host: ^_^host^_^
# server port
port: ^_^port^_^
# snmp connect timeout
timeout: ^_^timeout^_^
# snmp community
community: ^_^community^_^
# snmp version
version: ^_^version^_^
# snmp operation: get, walk
operation: get
# metrics oids: metric_name - oid_value
oids:
name: 1.3.6.1.2.1.1.5.0
descr: 1.3.6.1.2.1.1.1.0
uptime: 1.3.6.1.2.1.25.1.1.0
numUsers: 1.3.6.1.2.1.25.1.5.0
services: 1.3.6.1.2.1.1.7.0
processes: 1.3.6.1.2.1.25.1.6.0
location: 1.3.6.1.2.1.1.6.0
```
+214
View File
@@ -0,0 +1,214 @@
---
id: extend-ssh
title: SSH Protocol Custom Monitoring
sidebar_label: SSH Protocol Custom Monitoring
---
> From [Custom Monitoring](extend-point), you are familiar with how to customize types, Metrics, protocols, etc. Here we will introduce in detail how to use SSH protocol to customize Metric monitoring.
> SSH protocol custom monitoring allows us to easily monitor and collect the Linux Metrics we want by writing sh command script.
## SSH protocol collection process
【**System directly connected to Linux**】->【**Run shell command script statement**】->【**parse response data: oneRow, multiRow**】->【**Metric data extraction**】
It can be seen from the process that we define a monitoring type of SSH protocol. We need to configure SSH request parameters, configure which Metrics to obtain, and configure query script statements.
### Data parsing method
We can obtain the corresponding Metric data through the data fields queried by the SHELL script and the Metric mapping we need. At present, there are two mapping parsing methodsoneRow and multiRow which can meet the needs of most Metrics.
#### **oneRow**
> Query out a column of data, return the field value (one value per row) of the result set through query and map them to the field.
eg
Metrics of Linux to be queried hostname-host nameuptime-start time
Host name original query command`hostname`
Start time original query command`uptime | awk -F "," '{print $1}'`
Then the query script of the two Metrics in hertzbeat is(Use `;` Connect them together)
`hostname; uptime | awk -F "," '{print $1}'`
The data responded by the terminal is
```shell
tombook
14:00:15 up 72 days
```
At last collected Metric data is mapped one by one as
hostname is `tombook`
uptime is `14:00:15 up 72 days`
Here the Metric field and the response data can be mapped into a row of collected data one by one
#### **multiRow**
> Query multiple rows of data, return the column names of the result set through the query, and map them to the Metric field of the query.
eg
Linux memory related Metric fields queriedtotal-Total memory, used-Used memory,free-Free memory, buff-cache-Cache size, available-Available memory
Memory metrics original query command`free -m`, Console response
```shell
total used free shared buff/cache available
Mem: 7962 4065 333 1 3562 3593
Swap: 8191 33 8158
```
In hertzbeat multiRow format parsing requires a one-to-one mapping between the column name of the response data and the indicator value, so the corresponding query SHELL script is:
`free -m | grep Mem | awk 'BEGIN{print "total used free buff_cache available"} {print $2,$3,$4,$6,$7}'`
Console response is
```shell
total used free buff_cache available
7962 4066 331 3564 3592
```
Here the Metric field and the response data can be mapped into collected data one by one.
### Custom Steps
**HertzBeat Dashboard** -> **Monitoring Templates** -> **New Template** -> **Config Monitoring Template Yml** -> **Save and Apply** -> **Add A Monitoring with The New Monitoring Type**
-------
Configuration usages of the monitoring templates yml are detailed below.
### Monitoring Templates YML
> We define all monitoring collection types (mysql,jvm,k8s) as yml monitoring templates, and users can import these templates to support corresponding types of monitoring.
>
> Monitoring template is used to define *the name of monitoring type(international), request parameter mapping, index information, collection protocol configuration information*, etc.
egDefine a custom monitoring type `app` named `example_linux` which use the SSH protocol to collect data.
```yaml
# The monitoring type categoryservice-application service monitoring db-database monitoring custom-custom monitoring os-operating system monitoring
category: os
# Monitoring application type(consistent with the file name) eg: linux windows tomcat mysql aws...
app: example_linux
name:
zh-CN: 模拟LINUX应用类型
en-US: LINUX EXAMPLE APP
params:
- field: host
name:
zh-CN: 主机Host
en-US: Host
type: host
required: true
- field: port
name:
zh-CN: 端口
en-US: Port
type: number
range: '[0,65535]'
required: true
defaultValue: 22
placeholder: 'Please enter the port'
- field: username
name:
zh-CN: 用户名
en-US: Username
type: text
limit: 50
required: true
- field: password
name:
zh-CN: 密码
en-US: Password
type: password
required: true
# Metric group list
metrics:
# The first monitoring Metric group basic
# Note: the built-in monitoring Metrics have (responseTime - response time)
- name: basic
# The smaller Metric group scheduling priority(0-127), the higher the priority. After completion of the high priority Metric group collection,the low priority Metric group will then be scheduled. Metric groups with the same priority will be scheduled in parallel.
# Metric group with a priority of 0 is an availability group which will be scheduled first. If the collection succeeds, the scheduling will continue otherwise interrupt scheduling.
priority: 0
# metrics fields list
fields:
# Metric information include field: name type: field type(0-number: number, 1-string: string) label-if is metrics label unit: Metric unit
- field: hostname
type: 1
label: true
- field: version
type: 1
- field: uptime
type: 1
# protocol for monitoring and collection eg: sql, ssh, http, telnet, wmi, snmp, sdk
protocol: ssh
# Specific collection configuration when the protocol is SSH protocol
ssh:
# host: ipv4 ipv6 domain name
host: ^_^host^_^
# port
port: ^_^port^_^
username: ^_^username^_^
password: ^_^password^_^
script: (uname -r ; hostname ; uptime | awk -F "," '{print $1}' | sed "s/ //g") | sed ":a;N;s/\n/^/g;ta" | awk -F '^' 'BEGIN{print "version hostname uptime"} {print $1, $2, $3}'
# parsing method for response dataoneRow, multiRow
parseType: multiRow
- name: cpu
priority: 1
fields:
# Metric information include field: name type: field type(0-number: number, 1-string: string) label-if is metrics label unit: Metric unit
- field: info
type: 1
- field: cores
type: 0
unit: the number of cores
- field: interrupt
type: 0
unit: number
- field: load
type: 1
- field: context_switch
type: 0
unit: number
# protocol for monitoring and collection eg: sql, ssh, http, telnet, wmi, snmp, sdk
protocol: ssh
# Specific collection configuration when the protocol is SSH protocol
ssh:
# 主机host: ipv4 ipv6 domain name
host: ^_^host^_^
# port
port: ^_^port^_^
username: ^_^username^_^
password: ^_^password^_^
script: "LANG=C lscpu | awk -F: '/Model name/ {print $2}';awk '/processor/{core++} END{print core}' /proc/cpuinfo;uptime | sed 's/,/ /g' | awk '{for(i=NF-2;i<=NF;i++)print $i }' | xargs;vmstat 1 1 | awk 'NR==3{print $11}';vmstat 1 1 | awk 'NR==3{print $12}'"
parseType: oneRow
- name: memory
priority: 2
fields:
# Metric information include field: name type: field type(0-number: number, 1-string: string) label-if is metrics label unit: Metric unit
- field: total
type: 0
unit: Mb
- field: used
type: 0
unit: Mb
- field: free
type: 0
unit: Mb
- field: buff_cache
type: 0
unit: Mb
- field: available
type: 0
unit: Mb
# protocol for monitoring and collection eg: sql, ssh, http, telnet, wmi, snmp, sdk
protocol: ssh
# Specific collection configuration when the protocol is SSH protocol
ssh:
# host: ipv4 ipv6 domain name
host: ^_^host^_^
# port
port: ^_^port^_^
username: ^_^username^_^
password: ^_^password^_^
script: free -m | grep Mem | awk 'BEGIN{print "total used free buff_cache available"} {print $2,$3,$4,$6,$7}'
parseType: multiRow
```
+299
View File
@@ -0,0 +1,299 @@
---
id: extend-telnet
title: Telnet Protocol Custom Monitoring
sidebar_label: Telnet Protocol Custom Monitoring
---
> From [Custom Monitoring](extend-point), you are familiar with how to customize types, Metrics, protocols, etc. Here we will introduce in detail how to use Telnet to customize Metric monitoring.
> Telnet protocol custom monitoring allows us to easily monitor and collect the Linux Metrics we want by writing sh command script.
## Telnet protocol collection process
【**System directly connected to Linux**】->【**Run shell command script statement**】->【**parse response data: oneRow, multiRow**】->【**Metric data extraction**】
It can be seen from the process that we define a monitoring type of Telnet protocol. We need to configure Telnet request parameters, configure which Metrics to obtain, and configure query script statements.
### Data parsing method
By configuring the metrics `field`, `aliasFields` the `Telnet` protocol of the monitoring template YML to capture the data specified by the peer and parse the mapping.
### Custom Steps
**HertzBeat Dashboard** -> **Monitoring Templates** -> **New Template** -> **Config Monitoring Template Yml** -> **Save and Apply** -> **Add A Monitoring with The New Monitoring Type**
![HertzBeat](/img/docs/advanced/extend-point-1.png)
-------
Configuration usages of the monitoring templates yml are detailed below.
### Monitoring Templates YML
> We define all monitoring collection types (mysql,jvm,k8s) as yml monitoring templates, and users can import these templates to support corresponding types of monitoring.
> Monitoring template is used to define *the name of monitoring type(international), request parameter mapping, index information, collection protocol configuration information*, etc.
egDefine a custom monitoring type `app` named `zookeeper` which use the telnet protocol to collect data.
```yaml
# The monitoring type categoryservice-application service monitoring db-database monitoring custom-custom monitoring os-operating system monitoring
# 监控类型所属类别:service-应用服务 program-应用程序 db-数据库 custom-自定义 os-操作系统 bigdata-大数据 mid-中间件 webserver-web服务器 cache-缓存 cn-云原生 network-网络监控等等
category: mid
# Monitoring application type(consistent with the file name) eg: linux windows tomcat mysql aws...
# 监控应用类型(与文件名保持一致) eg: linux windows tomcat mysql aws...
app: zookeeper
# The monitoring i18n name
# 监控类型国际化名称
name:
zh-CN: Zookeeper服务
en-US: Zookeeper Server
# 监控参数定义. field 这些为输入参数变量,即可以用^_^host^_^的形式写到后面的配置中,系统自动变量值替换
# 强制固定必须参数 - host
params:
# field-param field key
# field-字段名称标识符
- field: host
# name-param field display i18n name
# name-参数字段显示名称
name:
zh-CN: 主机Host
en-US: Host
# type-param field type(most mapping the html input type)
# type-字段类型,样式(大部分映射input标签type属性)
type: host
# required-true or false
# 是否是必输项 true-必填 false-可选
required: true
# field-param field key
# field-字段名称标识符
- field: port
# name-param field display i18n name
# name-参数字段显示名称
name:
zh-CN: 端口
en-US: Port
# type-param field type(most mapping the html input type)
# type-字段类型,样式(大部分映射input标签type属性)
type: number
# when type is number, range is required
# 当type为number时,用range表示范围
range: '[0,65535]'
# required-true or false
# 是否是必输项 true-必填 false-可选
required: true
# default
# 默认值
defaultValue: 2181
# param field input placeholder
# 参数输入框提示信息
placeholder: '请输入端口'
# field-param field key
# field-字段名称标识符
- field: timeout
# name-param field display i18n name
# name-参数字段显示名称
name:
zh-CN: 查询超时时间(ms)
en-US: Query Timeout(ms)
# type-param field type(most mapping the html input type)
# type-字段类型,样式(大部分映射input标签type属性)
type: number
# required-true or false
# 是否是必输项 true-必填 false-可选
required: false
# hide-is hide this field and put it in advanced layout
# 隐藏是隐藏这个字段,并把它放在高级布局
hide: true
# default
# 默认值
defaultValue: 6000
# collect metrics config list
# 采集指标配置列表
metrics:
# metrics - conf
# 第一个监控指标 conf
# 注意:内置监控指标有 (responseTime - 响应时间)
- name: conf
# metrics scheduling priority(0->127)->(high->low), metrics with the same priority will be scheduled in parallel
# priority 0's metrics is availability metrics, it will be scheduled first, only availability metrics collect success will the scheduling continue
# 指标采集调度优先级(0->127)->(优先级高->低) 优先级低的指标会等优先级高的指标采集完成后才会被调度, 相同优先级的指标会并行调度采集
# 优先级为0的指标为可用性指标,即它会被首先调度,采集成功才会继续调度其它指标,采集失败则中断调度
priority: 0
# collect metrics content
# 具体监控指标列表
fields:
# field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-if is metrics label
# 指标信息 包括 field名称 type字段类型:0-number数字,1-string字符串 label是否为标签 unit:指标单位
- field: clientPort
type: 0
i18n:
zh-CN: 客户端端口
en-US: Client Port
- field: dataDir
type: 1
i18n:
zh-CN: 数据目录
en-US: Data Directory
- field: dataDirSize
type: 0
unit: kb
i18n:
zh-CN: 数据目录大小
en-US: Data Directory Size
- field: dataLogDir
type: 1
i18n:
zh-CN: 日志目录
en-US: Data Log Directory
- field: dataLogSize
type: 0
unit: kb
i18n:
zh-CN: 日志目录大小
en-US: Data Log Size
- field: tickTime
type: 0
unit: ms
i18n:
zh-CN: 心跳间隔时间
en-US: Tick Time
- field: maxClientCnxns
type: 1
i18n:
zh-CN: 最大客户端连接数
en-US: Max Client Connections
- field: minSessionTimeout
type: 0
unit: ms
i18n:
zh-CN: 最小会话超时
en-US: Min Session Timeout
- field: maxSessionTimeout
type: 0
unit: ms
i18n:
zh-CN: 最大会话超时
en-US: Max Session Timeout
- field: serverId
type: 0
i18n:
zh-CN: 服务器ID
en-US: Server ID
# the protocol used for monitoring, eg: sql, ssh, http, telnet, wmi, snmp, sdk
# 监控采集使用协议 eg: sql, ssh, http, telnet, wmi, snmp, sdk
protocol: telnet
# the config content when protocol is telnet
# 当protocol为telnet协议时具体的采集配置
telnet:
# host: ipv4 ipv6 domain
# 主机host: ipv4 ipv6 域名
host: ^_^host^_^
# port
# 端口
port: ^_^port^_^
# timeout
# 超时时间
timeout: ^_^timeout^_^
# telnet instruction
# telnet指令
cmd: conf
- name: stats
priority: 1
fields:
- field: zk_version
type: 1
i18n:
zh-CN: ZooKeeper版本
en-US: ZooKeeper Version
- field: zk_server_state
type: 1
i18n:
zh-CN: 服务器状态
en-US: Server State
- field: zk_num_alive_connections
type: 0
unit:
i18n:
zh-CN: 存活连接数
en-US: Number of Alive Connections
- field: zk_avg_latency
type: 0
unit: ms
i18n:
zh-CN: 平均延迟
en-US: Average Latency
- field: zk_outstanding_requests
type: 0
unit:
i18n:
zh-CN: 未完成请求数
en-US: Outstanding Requests
- field: zk_znode_count
type: 0
unit:
i18n:
zh-CN: ZNode数量
en-US: ZNode Count
- field: zk_packets_sent
type: 0
unit:
i18n:
zh-CN: 发送数据包数
en-US: Packets Sent
- field: zk_packets_received
type: 0
unit:
i18n:
zh-CN: 接收数据包数
en-US: Packets Received
- field: zk_watch_count
type: 0
unit:
i18n:
zh-CN: Watch数量
en-US: Watch Count
- field: zk_max_file_descriptor_count
type: 0
unit:
i18n:
zh-CN: 最大文件描述符数量
en-US: Max File Descriptor Count
- field: zk_approximate_data_size
type: 0
unit: kb
i18n:
zh-CN: 大致数据大小
en-US: Approximate Data Size
- field: zk_open_file_descriptor_count
type: 0
unit:
i18n:
zh-CN: 打开的文件描述符数量
en-US: Open File Descriptor Count
- field: zk_max_latency
type: 0
unit: ms
i18n:
zh-CN: 最大延迟
en-US: Max Latency
- field: zk_ephemerals_count
type: 0
unit:
i18n:
zh-CN: 临时节点数量
en-US: Ephemerals Count
- field: zk_min_latency
type: 0
unit: ms
i18n:
zh-CN: 最小延迟
en-US: Min Latency
protocol: telnet
telnet:
host: ^_^host^_^
port: ^_^port^_^
timeout: ^_^timeout^_^
cmd: mntr
```
+232
View File
@@ -0,0 +1,232 @@
---
id: extend-tutorial
title: Quick Tutorial Customize and adapt a monitoring based on HTTP protocol
sidebar_label: Tutorial Case
---
Through this tutorial, we describe step by step how to customize and adapt a monitoring type based on the http protocol under the Apache HertzBeat.
Before reading this tutorial, we hope that you are familiar with how to customize types, metrics, protocols, etc. from [Custom Monitoring](extend-point) and [Http Protocol Customization](extend-http).
## HTTP protocol parses the general response structure to obtain metrics data
>
> In many scenarios, we need to monitor the provided HTTP API interface and obtain the index value returned by the interface. In this article, we use the http custom protocol to parse our common http interface response structure, and obtain the fields in the returned body as metric data.
```json
{
"code": 200,
"msg": "success",
"data": {}
}
```
As above, usually our background API interface will design such a general return. The same is true for the background of the hertzbeat system. Today, we will use the hertzbeat API as an example, add a new monitoring type **hertzbeat**, and monitor and collect its system summary statistics API
`http://localhost:1157/api/summary`, the response data is:
```json
{
"msg": null,
"code": 0,
"data": {
"apps": [
{
"category": "service",
"app": "jvm",
"status": 0,
"size": 2,
"availableSize": 0,
"unManageSize": 2,
"unAvailableSize": 0,
"unReachableSize": 0
},
{
"category": "service",
"app": "website",
"status": 0,
"size": 2,
"availableSize": 0,
"unManageSize": 2,
"unAvailableSize": 0,
"unReachableSize": 0
}
]
}
}
```
**This time we get the metrics data such as `category`, `app`, `status`, `size`, `availableSize` under the app.**
### Add Monitoring Template Yml
**HertzBeat Dashboard** -> **Monitoring Templates** -> **New Template** -> **Config Monitoring Template Yml** -> **Save and Apply** -> **Add A Monitoring with The New Monitoring Type**
> We define all monitoring collection types (mysql,jvm,k8s) as yml monitoring templates, and users can import these templates to support corresponding types of monitoring.
>
> Monitoring template is used to define *the name of monitoring type(international), request parameter mapping, index information, collection protocol configuration information*, etc.
Here we define a custom monitoring type `app` named `hertzbeat` which use the HTTP protocol to collect data.
**Monitoring Templates** -> **Config New Monitoring Template Yml** -> **Save and Apply**
```yaml
# The monitoring type categoryservice-application service monitoring db-database monitoring custom-custom monitoring os-operating system monitoring
category: custom
# The monitoring type eg: linux windows tomcat mysql aws...
app: hertzbeat
# The monitoring i18n name
name:
zh-CN: HertzBeat监控系统
en-US: HertzBeat Monitor
# The description and help of this monitoring type
help:
zh-CN: HertzBeat 对 HertzBeat 监控系统的通用指标进行测量监控。`<br>`您可以点击 “`<i>`新建 HertzBeat监控系统`</i>`” 并进行配置,或者选择“`<i>`更多操作`</i>`”,导入已有配置。
en-US: HertzBeat monitors HertzBeat Monitor through general performance metric. You could click the "`<i>`New HertzBeat Monitor`</i>`" button and proceed with the configuration or import an existing setup through the "`<i>`More Actions`</i>`" menu.
zh-TW: HertzBeat對HertzBeat監控系統的通用名額進行量測監控。`<br>`您可以點擊“`<i>`新建HertzBeat監控系統`</i>`”並進行配寘,或者選擇“`<i>`更多操作`</i>`”,導入已有配寘。
helpLink:
zh-CN: https://hertzbeat.apache.org/zh-cn/docs/help/hertzbeat
en-US: https://hertzbeat.apache.org/docs/help/hertzbeat
# Input params define for monitoring(render web ui by the definition)
params:
# field-param field key
- field: host
# name-param field display i18n name
name:
zh-CN: 主机Host
en-US: Host
# type-param field type(most mapping the html input type)
type: host
# required-true or false
required: true
# field-param field key
- field: port
# name-param field display i18n name
name:
zh-CN: 端口
en-US: Port
# type-param field type(most mapping the html input type)
type: number
# when type is number, range is required
range: '[0,65535]'
# required-true or false
required: true
# default value
defaultValue: 1157
- field: ssl
name:
zh-CN: 启用HTTPS
en-US: HTTPS
type: boolean
required: true
- field: timeout
name:
zh-CN: 超时时间(ms)
en-US: Timeout(ms)
type: number
required: false
hide: true
- field: authType
name:
zh-CN: 认证方式
en-US: Auth Type
type: radio
required: false
hide: true
options:
- label: Basic Auth
value: Basic Auth
- label: Digest Auth
value: Digest Auth
- field: username
name:
zh-CN: 用户名
en-US: Username
type: text
limit: 50
required: false
hide: true
- field: password
name:
zh-CN: 密码
en-US: Password
type: password
required: false
hide: true
metrics:
# the first metrics summary
# attention: Built-in monitoring metrics contains (responseTime - Response time)
- name: summary
# metrics scheduling priority(0->127)->(high->low), metrics with the same priority will be scheduled in parallel
# priority 0's metrics is availability metrics, it will be scheduled first, only availability metrics collect success will the scheduling continue
priority: 0
# collect metrics content
fields:
# metrics content contains field-metric name, type-metric type:0-number,1-string, label-if is metrics label, unit-metric unit('%','ms','MB')
- field: app
type: 1
label: true
- field: category
type: 1
- field: status
type: 0
- field: size
type: 0
- field: availableSize
type: 0
# the protocol used for monitoring, eg: sql, ssh, http, telnet, wmi, snmp, sdk, we use HTTP protocol here
protocol: http
# the config content when protocol is http
http:
# http host: ipv4 ipv6 domain
host: ^_^host^_^
# http port
port: ^_^port^_^
# http url, we don't need to enter a parameter here, just set the fixed value to /api/summary
url: /api/summary
timeout: ^_^timeout^_^
# http method: GET POST PUT DELETE PATCH, default fixed value is GET
method: GET
# if enabled https, default value is false
ssl: ^_^ssl^_^
# http auth
authorization:
# http auth type: Basic Auth, Digest Auth, Bearer Token
type: ^_^authType^_^
basicAuthUsername: ^_^username^_^
basicAuthPassword: ^_^password^_^
digestAuthUsername: ^_^username^_^
digestAuthPassword: ^_^password^_^
# http response data parse type: default-hertzbeat rule, jsonpath-jsonpath script, website-for website monitoring, we use jsonpath to parse response data here
parseType: jsonPath
parseScript: '$.data.apps.*'
```
**The addition is complete, now we restart the hertzbeat system. We can see that the system page has added a `hertzbeat` monitoring type.**
![HertzBeat](/img/docs/advanced/extend-http-example-1.png)
### The system page adds the monitoring of `hertzbeat` monitoring type
> We click Add `HertzBeat Monitoring Tool`, configure monitoring IP, port, collection cycle, account password in advanced settings, etc., click OK to add monitoring.
![HertzBeat](/img/docs/advanced/extend-http-example-2.png)
![HertzBeat](/img/docs/advanced/extend-http-example-3.png)
> After a certain period of time (depending on the collection cycle), we can see the specific metric data and historical charts in the monitoring details!
![HertzBeat](/img/docs/advanced/extend-http-example-4.png)
### Set threshold alarm notification
> Next, we can set the threshold normally. After the alarm is triggered, we can view it in the alarm center, add a new recipient, set alarm notification, etc. Have Fun!!!
----
#### over
This is the end of the practice of custom monitoring of the HTTP protocol. The HTTP protocol also has other parameters such as headers and params. We can define it like postman, and the playability is also very high!
If you think hertzbeat is a good open source project, please star us on GitHub Gitee, thank you very much. Thanks for the old iron support. Refill!
**github: [https://github.com/apache/hertzbeat](https://github.com/apache/hertzbeat)**
+83
View File
@@ -0,0 +1,83 @@
---
id: 'become_committer'
title: 'Become A Committer'
sidebar_position: 2
---
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
## Become A Committer of Apache HertzBeat
Anyone being supportive of the community and working in any of the
CoPDoC areas can become an Apache HertzBeat™ committer. The CoPDoC is an
acronym from ASF to describe how we recognize your contributions not
only by code.
- **Community** - You can join us via our mailing list, issue
trackers, discussions page to interact with community members, and
share vision and knowledge
- **Project** - a clear vision and consensus are needed
- **Documentation** - without it, the stuff remains only in the minds
of the authors
- **Code** - discussion goes nowhere without code
Apache HertzBeat™ community strives to be meritocratic. Thus, once someone
has contributed sufficiently to any area of CoPDoC they can be a
candidate for committer-ship and at last voted in as a HertzBeat
committer. Being an Apache HertzBeat™ committer does not necessarily mean
you must commit code with your commit privilege to the codebase; it
means you are committed to the HertzBeat project and are productively
contributing to our community's success.
## Committer requirements
There are no strict rules for becoming a committer or new PMC member.
Candidates for new committers are typically people that are active
contributors and community members. Anyway, if the rules can be
clarified a little bit, it can somehow clear the doubts in the minds
of contributors and make the community more transparent, reasonable,
and fair.
### Continuous contributions
Committer candidates should have a decent amount of continuous
engagements and contributions (fixing bugs, adding new features,
writing documentation, maintaining issues boards, code review, or answering
community questions) to HertzBeat.
- 3+ months with activity and engagement.
- 20+ pr coding, document, test or other contributions.
### Quality of contributions
- A solid general understanding of the project
- Well tested, well-designed, following Apache HertzBeat™ coding
standards, and simple patches.
- Well-organized and detailed user-oriented documentation.
### Community involvement
- Be active, courteous, and respectful on the dev mailing list and
help mentor newer contributors
and users.
- Be active, courteous, and respectful on the issue tracker for
project maintenance
- Be active, courteous, and respectful for pull requests reviewing
- Be involved in the design road map discussions with a professional
and diplomatic approach even if there is a disagreement
- Promoting the project by writing articles or holding events
+82
View File
@@ -0,0 +1,82 @@
---
id: 'become_pmc_member'
title: 'Become A new PMC member'
sidebar_position: 3
---
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
## Become A new PMC member of Apache HertzBeat
Anyone being supportive of the community and working in any of the
CoPDoC areas can become an Apache HertzBeat™ new PMC member. The CoPDoC is an
acronym from ASF to describe how we recognize your contributions not
only by code.
- **Community** - You can join us via our mailing list, issue
trackers, discussions page to interact with community members, and
share vision and knowledge
- **Project** - a clear vision and consensus are needed
- **Documentation** - without it, the stuff remains only in the minds
of the authors
- **Code** - discussion goes nowhere without code
Apache HertzBeat™ community strives to be meritocratic. Thus, once someone
has contributed sufficiently to any area of CoPDoC they can be a
candidate for new PMC membership and at last voted in as a HertzBeat
PMC member. Being an Apache HertzBeat™ new PMC member does not necessarily mean
you must commit code with your commit privilege to the codebase; it
means you are committed to the HertzBeat project and are productively
contributing to our community's success.
## new PMC member requirements
There are no strict rules for becoming a committer or new PMC member.
Candidates for new PMC member are typically people that are active
contributors and community members. Anyway, if the rules can be
clarified a little bit, it can somehow clear the doubts in the minds
of contributors and make the community more transparent, reasonable,
and fair.
### Continuous contributions
PMC member candidates should have a decent amount of continuous
engagements and contributions (fixing bugs, adding new features,
writing documentation, maintaining issues boards, code review, or answering
community questions) to HertzBeat.
- 12+ months with activity and engagement.
### Quality of contributions
- A solid general understanding of the project
- Well tested, well-designed, following Apache HertzBeat™ coding
standards, and simple patches.
- Well-organized and detailed user-oriented documentation.
### Community involvement
- Be active, courteous, and respectful on the dev mailing list and
help mentor newer contributors
and users.
- Be active, courteous, and respectful on the issue tracker for
project maintenance
- Be active, courteous, and respectful for pull requests reviewing
- Be involved in the design road map discussions with a professional
and diplomatic approach even if there is a disagreement
- Promoting the project by writing articles or holding events
@@ -0,0 +1,648 @@
---
id: 'code_style_and_quality_guide'
title: 'Code style and quality guide'
sidebar_position: 3
---
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
## 1 Pull Requests & Changes Rule
1. `ISSUE`/`PR`(pull request) driving and naming
- After creating a new `PR`, you need to associate the existing corresponding `ISSUE` at the Github Development button on the `PR` page (if there is no corresponding ISSUE, it is recommended to create a new corresponding ISSUE).
- Title naming format
`[feature/bugfix/doc/improve/refactor/bug/cleanup] title`
2. Description
- Please fill in the `PR` template to describe the contribution. So that the reviewer can understand the problem and solution from the description, rather than just from the code.
- Check the CheckList
3. It's recommended that `PR` should be arranged changes such as `cleanup`, `Refactor`, `improve`, and `feature` into separated `PRs`/`Commits`.
4. Commit message(English, lowercase, no special characters)
The commit of messages should follow a pattern similar to the `[feature/bugfix/doc/improve/refactor/bug/cleanup] title`
## 2 Code Checkstyle
### 2.1 Configure Checkstyle
1. Install the Checkstyle-IDEA plugin.
2. Open Checkstyle Settings. Click **Settings****Tools****Checkstyle**.
3. Set **Checkstyle version** to **10.14.2**.
4. Set **Scan scope** to **Only Java sources (including tests)**.
5. Click **+** button in the **Configuration** section to open a dialog to choose the checkstyle config file.
1. Enter a **Description**. For example, hertzbeat.
2. Select **Use a local checkstyle file**.
3. Set **File** to **script/checkstyle/checkstyle.xml**.
4. Select **Store relative to project location**.
5. Click **Next****Next****Finish**.
6. Activate the configuration you just added by toggling the corresponding box.
7. Click **OK**.
- Backend code specification Maven plugin: `checkstyle`
Just run `mvn checkstyle:checkstyle`.
- Frontend code formatting plugin `eslint`
Just run `pnpm run lint:fix` in web-app
### 2.2 Document style check
1. Install `markdownlint-cli2` and run `npm install markdownlint-cli2 --global`
2. Run `markdownlint-cli2 "home/**/*.md"` in the project to automatically detect the Markdown file format.
3. Run `markdownlint-cli2 --fix "home/**/*.md"` in the project to automatically format the Markdown file format to ensure that all documents meet the specifications.
Error code description:
| **Error code** | **description** |
|--------------------------------------------| ------------------------------------------------------------ |
| **MD001 heading-increment** | Heading levels should only increment by one level at a time |
| **MD003 heading-style** | Heading style |
| **MD004 ul-style** | Unordered list style |
| **MD005 list-indent** | Inconsistent indentation for list items at the same level |
| **MD007 ul-indent** | Unordered list indentation |
| **MD009 no-trailing-spaces** | Trailing spaces |
| **MD010 no-hard-tabs** | Hard tabs |
| **MD011 no-reversed-links** | Reversed link syntax |
| **MD012 no-multiple-blanks** | Multiple consecutive blank lines |
| **MD013 line-length** | Line length |
| **MD014 commands-show-output** | Dollar signs used before commands without showing output |
| **MD018 no-missing-space-atx** | No space after hash on atx style heading |
| **MD019 no-multiple-space-atx** | Multiple spaces after hash on atx style heading |
| **MD020 no-missing-space-closed-atx** | No space inside hashes on closed atx style heading |
| **MD021 no-multiple-space-closed-atx** | Multiple spaces inside hashes on closed atx style heading |
| **MD022 blanks-around-headings** | Headings should be surrounded by blank lines |
| **MD023 heading-start-left** | Headings must start at the beginning of the line |
| **MD024 no-duplicate-heading** | Multiple headings with the same content |
| **MD025 single-title/single-h1** | Multiple top-level headings in the same document |
| **MD026 no-trailing-punctuation** | Trailing punctuation in heading |
| **MD027 no-multiple-space-blockquote** | Multiple spaces after blockquote symbol |
| **MD028 no-blanks-blockquote** | Blank line inside blockquote |
| **MD029 ol-prefix** | Ordered list item prefix |
| **MD030 list-marker-space** | Spaces after list markers |
| **MD031 blanks-around-fences** | Fenced code blocks should be surrounded by blank lines |
| **MD032 blanks-around-lists** | Lists should be surrounded by blank lines |
| **MD033 no-inline-html** | Inline HTML |
| **MD034 no-bare-urls** | Bare URL used |
| **MD035 hr-style** | Horizontal rule style |
| **MD036 no-emphasis-as-heading** | Emphasis used instead of a heading |
| **MD037 no-space-in-emphasis** | Spaces inside emphasis markers |
| **MD038 no-space-in-code** | Spaces inside code span elements |
| **MD039 no-space-in-links** | Spaces inside link text |
| **MD040 fenced-code-language** | Fenced code blocks should have a language specified |
| **MD041 first-line-heading/first-line-h1** | First line in a file should be a top-level heading |
| **MD042 no-empty-links** | No empty links |
| **MD043 required-headings** | Required heading structure |
| **MD044 proper-names** | Proper names should have the correct capitalization |
| **MD045 no-alt-text** | Images should have alternate text (alt text) |
| **MD046 code-block-style** | Code block style |
| **MD047 single-trailing-newline** | Files should end with a single newline character |
| **MD048 code-fence-style** | Code fence style |
| **MD049 emphasis-style** | Emphasis style |
| **MD050 strong-style** | Strong style |
| **MD051 link-fragments** | Link fragments should be valid |
| **MD052 reference-links-images** | Reference links and images should use a label that is defined |
| **MD053 link-image-reference-definitions** | Link and image reference definitions should be needed |
| **MD054 link-image-style** | Link and image style |
| **MD055 table-pipe-style** | Table pipe style |
| **MD056 table-column-count** | Table column count |
## 3 Programming Specification
### 3.1 Naming Style
1. Prioritize selecting nouns for variable naming, it's easier to distinguish between `variables` or `methods`.
```java
Cache`<String>` publicKeyCache;
```
2. Pinyin abbreviations are prohibited for variables (excluding nouns such as place names), such as chengdu.
3. It is recommended to end variable names with a `type`.
For variables of type `Collection/List`, take `xxxx` (plural representing multiple elements) or end with `xxxList` (specific type).
For variables of type `map`, describe the `key` and `value` clearly:
```java
Map<Long, User> idUserMap;
Map<Long, String> userIdNameMap;
```
4. That can intuitively know the type and meaning of the variable through its name.
Method names should start with a verb first as follows:
```java
void computeVcores(Object parameter1);
```
> Note: It is not necessary to strictly follow this rule in the `Builder` tool class.
### 3.2 Constant Variables Definition
1. Redundant strings should be extracted as constants
> If a constant has been hardcoded twice or more times, please directly extract it as a constant and change the corresponding reference.
> In generally, constants in `log` can be ignored to extract.
- Negative demo:
```java
public static RestResponse success(Object data) {
RestResponse resp = new RestResponse();
resp.put("status", "success");
resp.put("code", ResponseCode.CODE_SUCCESS);
resp.put("data", data);
return resp;
}
public static RestResponse error() {
RestResponse resp = new RestResponse();
resp.put("status", "error");
resp.put("code", ResponseCode.CODE_FAIL);
resp.put("data", null);
return resp;
}
```
- Positive demo:
> Strings are extracted as constant references.
```java
public static final String STATUS = "status";
public static final String CODE = "code";
public static final String DATA = "data";
public static RestResponse success(Object data) {
RestResponse resp = new RestResponse();
resp.put(STATUS, "success");
resp.put(CODE, ResponseCode.CODE_SUCCESS);
resp.put(DATA, data);
return resp;
}
public static RestResponse error() {
RestResponse resp = new RestResponse();
resp.put(STATUS, "error");
resp.put(CODE, ResponseCode.CODE_FAIL);
resp.put(DATA, null);
return resp;
}
```
2. Ensure code readability and intuitiveness
- The string in the `annotation` symbol doesn't need to be extracted as constant.
- The referenced `package` or `resource` name doesn't need to be extracted as constant.
3. Variables that have not been reassigned must also be declared as `<mark>` final `</mark>` types.
4. About the arrangement order of `constant/variable` lines
Sort the variable lines in the class in the order of
1. `public static final V`, `static final V`,`protected static final V`, `private static final V`
2. `public static v`, `static v`,`protected static v`, `private static v`
3. `public v`, `v`, `protected v`, `private v`
### 3.3 Methods Rule
1. Sort the methods in the class in the order of `public`, `protected`, `private`
Static methods of a class can be placed after non-static methods and sorted according to consistent method visibility.
2. When there are restrictions on the method, the parameters and returned values of the method need to be annotated with `@Nonnull` or `@Nullable` annotations and constraints.
For example, if the parameter cannot be null, it is best to add a `@Nonnull` annotation. If the returned value can be null, the `@Nullable` annotation should be added first.
`<mark>` Note: that the package name is `<b>`javax.validation.requirements`</b>` `</mark>`
3. If there are too many lines of code in the method, please have a try on using multiple sub methods at appropriate points to segment the method body.
Generally speaking, it needs to adhere to the following principles:
- Convenient testing
- Good semantics
- Easy to read
In addition, it is also necessary to consider whether the splitting is reasonable in terms of components, logic, abstraction, and other aspects in the scenario.
> However, there is currently no clear definition of demo. During the evolution process, we will provide additional examples for developers to have a clearer reference and understanding.
### 3.4 Collection Rule
1. For `collection` returned values, unless there are special `concurrent` (such as thread safety), always return the `interface`, such as:
- returns `<mark>` List `</mark>` if use `ArrayList`
- returns `<mark>` Map `</mark>` if use `HashMap`
- returns `<mark>` Set `</mark>` if use `HashSet`
2. If there are multiple threads, the following declaration or returned types can be used:
```java
private CurrentHashMap map;
public CurrentHashMap funName();
```
3. Use `isEmpty()` instead of `length() == 0` or `size() == 0`
- Negative demo
```java
if (pathPart.length() == 0) {
return;
}
```
- Positive demo
```java
if (pathPart.isEmpty()) {
return;
}
```
### 3.5 Concurrent Processing
1. The `thread pool` needs to be managed, using a unified entry point to obtain the `thread pool`.
`<mark>` Note: During the evolution process, we will provide additional examples for developers to have a clearer reference and understanding. `</mark>`
2. `Thread pool` needs to be resource constrained to prevent resource leakage caused by improper handling
### 3.6 Control/Condition Statements
1. Avoid unreasonable `condition/control` branches order leads to:
- Multiple code line `depths` of `n+1`
- Redundant lines
Generally speaking, if a method's code line depth exceeds `2+ Tabs` due to continuous nested `if... else..`, it should be considered to try
- `merging branches`,
- `inverting branch conditions`
- `extracting private methods`
to reduce code line depth and improve readability like follows:
- Union or merge the logic into the next level calling
- Negative demo:
```java
if (isInsert) {
save(platform);
} else {
updateById(platform);
}
```
- Positive demo:
```java
saveOrUpdate(platform);
```
- Merge the conditions
- Negative demo:
```java
if (expression1) {
if (expression2) {
......
}
}
```
- Positive demo:
```java
if (expression1 && expression2) {
......
}
```
- Reverse the condition
- Negative demo:
```java
public void doSomething() {
// Ignored more deeper block lines
// .....
if (condition1) {
// ...
} else {
// ...
}
}
```
- Positive demo:
```java
public void doSomething() {
// Ignored more deeper block lines
// .....
if (!condition1) {
// ...
return;
}
// ...
}
```
- Using a single variable or method to reduce the complex conditional expression
- Negative demo:
```java
if (dbType.indexOf("sqlserver") >= 0 || dbType.indexOf("sql server") >= 0) {
// ...
}
```
- Positive demo:
```java
if (containsSqlServer(dbType)) {
// ....
}
//.....
// definition of the containsSqlServer
```
> Using `sonarlint` and `better highlights` to check code depth looks like good in the future.
### 3.7 Code Comments Rule
1. Method lacks comments:
- `When`: When can the method be called
- `How`: How to use this method and how to pass parameters, etc.
- `What`: What functions does this method achieve
- `Note`: What should developers pay attention to when calling this method
2. Missing necessary class header description comments.
Add `What`, `Note`, etc. like mentioned in the `1`.
3. The method declaration in the interface must be annotated.
- If the semantics of the implementation and the annotation content at the interface declaration are inconsistent, the specific implementation method also needs to be rewritten with annotations.
- If the semantics of the method implementation are consistent with the annotation content at the interface declaration, it is not recommended to write annotations to avoid duplicate annotations.
4. The first word in the comment lines need to be capitalized, like `param` lines, `return` lines.
If a special reference as a subject does not need to be capitalized, special symbols such as quotation marks need to be noted.
### 3.8 Java Lambdas
1. Prefer `non-capturing` lambdas (lambdas that do not contain references to the outer scope).
Capturing lambdas need to create a new object instance for every call. `Non-capturing` lambdas can use the same instance for each invocation.
- Negative demo:
```java
map.computeIfAbsent(key, x -> key.toLowerCase())
```
- Positive demo:
```java
map.computeIfAbsent(key, k -> k.toLowerCase());
```
2. Consider method references instead of inline lambdas
- Negative demo:
```java
map.computeIfAbsent(key, k-> Loader.load(k));
```
- Positive demo:
```java
map.computeIfAbsent(key, Loader::load);
```
### 3.9 Java Streams
- Avoid Java Streams in any performance critical code.
- The main motivation to use Java Streams would be to improve code readability. As such, they can be a good match in parts of the code that are not data-intensive, but deal with coordination.
- Even in the latter case, try to limit the scope to a method, or a few private methods within an internal class.
### 3.10 Pre-Conditions Checking
1. Use a unified `Utils.requireXXX` to complete the validation of the prerequisite, and if possible, replace the `AlertXXException.throwIfXXX` by new pre-conditions checking.
### 3.11 StringUtils
1. Use `StringUtils.isBlank` instead of `StringUtils.isEmpty`
- Negative demo:
```java
if (StringUtils.isEmpty(name)) {
return;
}
```
- Positive demo:
```java
if (StringUtils.isBlank(name)) {
return;
}
```
2. Use `StringUtils.isNotBlank` instead of `StringUtils.isNotEmpty`
- Negative demo:
```java
if (StringUtils.isNotEmpty(name)) {
return;
}
```
- Positive demo:
```java
if (StringUtils.isNotBlank(name)) {
return;
}
```
3. Use `StringUtils.isAllBlank` instead of `StringUtils.isAllEmpty`
- Negative demo:
```java
if (StringUtils.isAllEmpty(name, age)) {
return;
}
```
- Positive demo:
```java
if (StringUtils.isAllBlank(name, age)) {
return;
}
```
### 3.12 `Enum` Class
1. Enumeration value comparison
- Negative demo:
```java
if (status.equals(JobStatus.RUNNING)) {
return;
}
```
- Positive demo:
```java
if (status == JobStatus.RUNNING) {
return;
}
```
2. Enumeration classes do not need to implement Serializable
- Negative demo:
```java
public enum JobStatus implements Serializable {
// ...
}
```
- Positive demo:
```java
public enum JobStatus {
// ...
}
```
3. Use `Enum.name()` instead of `Enum.toString()`
- Negative demo:
```java
System.out.println(JobStatus.RUNNING.toString());
```
- Positive demo:
```java
System.out.println(JobStatus.RUNNING.name());
```
4. Enumeration class names uniformly use the Enum suffix
- Negative demo:
```java
public enum JobStatus {
// ...
}
```
- Positive demo:
```java
public enum JobStatusEnum {
// ...
}
```
### 3.13 `Deprecated` Annotation
- Negative demo:
```java
@deprecated
public void process(String input) {
// ...
}
```
- Positive demo:
```java
@Deprecated
public void process(String input) {
// ...
}
```
## 4 Log
1. Use `placeholders` for log output:
- Negative demo
```java
log.info("Deploy cluster request " + deployRequest);
```
- Positive demo
```java
log.info("load plugin:{} to {}", file.getName(), appPlugins);
```
2. Pay attention to the selection of `log level` when printing logs
When printing the log content, if the actual parameters of the log placeholder are passed, it is necessary to avoid premature evaluation to avoid unnecessary evaluation caused by the log level.
- Negative demo:
Assuming the current log level is `INFO`:
```java
// ignored declaration lines.
List`<User>` userList = getUsersByBatch(1000);
LOG.debug("All users: {}", getAllUserIds(userList));
```
- Positive demo:
In this case, we should determine the log level in advance before making actual log calls as follows:
```java
// ignored declaration lines.
List`<User>` userList = getUsersByBatch(1000);
if (LOG.isDebugEnabled()) {
LOG.debug("All ids of users: {}", getAllIDsOfUsers(userList));
}
```
## 5 Testing
1. It's recommended to use `JUnit5` to develop test case preparation
2. The implemented interface needs to write the `e2e` test case script under the `e2e` module.
## References
- [https://site.mockito.org/](https://site.mockito.org/)
- [https://alibaba.github.io/p3c/](https://alibaba.github.io/p3c/)
- [https://junit.org/junit5/](https://junit.org/junit5/)
- [https://streampark.apache.org/](https://streampark.apache.org/)
+21
View File
@@ -0,0 +1,21 @@
---
id: contact
title: Join discussion
sidebar_label: Discussion
---
> If you need any help or want to exchange suggestions during the use process, you can discuss and exchange through ISSUE or Github Discussion.
[Join the Mailing Lists](https://lists.apache.org/list.html?dev@hertzbeat.apache.org) : Mail to `dev-subscribe@hertzbeat.apache.org` to subscribe mailing lists.
[Chat On Discord](https://discord.gg/Fb6M73htGr)
WeChat Group : Add friend `ahertzbeat` and invite to the group.
WeChat Official Account : Search ID `usthecom`.
[Github Discussion](https://github.com/apache/hertzbeat/discussions)
[Follow Us Twitter](https://x.com/hertzbeat1024)
[Subscribe YouTube](https://www.youtube.com/channel/UCri75zfWX0GHqJFPENEbLow)
+178
View File
@@ -0,0 +1,178 @@
---
id: 'contribution'
title: 'Contributor Guide'
sidebar_position: 0
---
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
> We are committed to maintaining a happy community that helps each other, welcome every contributor to join us!
## Kinds of Contributions
>
> In the HertzBeat community, there are many ways to contribute:
- 💻**Code**: Can help the community complete some tasks, write new features or fix some bugs;
- ⚠️**Test**: Can come to participate in the writing of test code, including unit testing, integration testing, e2e testing;
- 📖**Docs**: Can write or Documentation improved to help users better understand and use HertzBeat;
- 📝**Blog**: You can write articles about HertzBeat to help the community better promote;
- 🤔**Discussion**: You can participate in the discussion of new features of HertzBeat and integrate your ideas with HertzBeat;
- 💡**Preach**: Can help publicize or promote the HertzBeat community, speak in meetup or summit;
- 💬**Suggestion**: You can also make some suggestions to the project or community to promote the healthy development of the community;
More see [Contribution Types](https://allcontributors.org/en/reference/emoji-key/)
Even small corrections to typos are very welcome :)
### Getting HertzBeat up and running
> To get HertzBeat code running on your development tools, and able to debug with breakpoints.
> This is a front-end and back-end separation project. To start the local code, the back-end manager and the front-end web-app must be started separately.
#### Backend start
1. Requires `maven3+`, `java25` and `lombok` environments
2. (Optional) Modify the configuration file: `hertzbeat-startup/src/main/resources/application.yml`
3. Execute under the project root directory: `mvn clean install -DskipTests`
4. Add VM Options: `--add-opens=java.base/java.nio=org.apache.arrow.memory.core,ALL-UNNAMED`
5. Start `springboot startup` service: `hertzbeat-startup/src/main/java/org/apache/hertzbeat/startup/HertzBeatApplication.java`
#### Frontend start
1. Need `Node pnpm` Environment, Make sure `Node.js >= 18`
2. Cd to the `web-app` directory: `cd web-app`
3. Install pnpm if not existed `npm install -g pnpm`
4. Install Dependencies: `pnpm install` or `pnpm install --registry=https://registry.npmmirror.com` in `web-app`
5. After the local backend is started, start the local frontend in the web-app directory: `pnpm start`
6. Browser access to localhost:4200 to start, default account/password is *admin/hertzbeat*
### Find tasks
Find the issue you are interested in! On our GitHub repo issue list, we often publish some issues with the label good first issue or status: volunteer wanted.
These issues welcome the help of contributors. Among them, good first issues tend to have low thresholds and are suitable for novices.
Of course, if you have a good idea, you can also propose it directly on GitHub Discussion or contact with community.
### Submit Pull Request
1. First you need to fork your target [hertzbeat repository](https://github.com/apache/hertzbeat).
2. Then download the code locally with git command:
```shell
git clone git@github.com:`YOUR_USERNAME`/hertzbeat.git #Recommended
```
3. After the download is complete, please refer to the getting started guide or README file of the target repository to initialize the project.
4. Then, you can refer to the following command to submit the code:
```shell
git checkout -b a-feature-branch #Recommended
```
5. Submit the code as a commit, the commit message format specification required: [module name or type name]feature or bugfix or doc: custom message.
```shell
git add <modified file/path>
git commit -m '[docs]feature: necessary instructions' #Recommended
```
6. Push to the remote repository
```shell
git push origin a-feature-branch
```
7. Then you can initiate a new PR (Pull Request) on GitHub.
Please note that the title of the PR needs to conform to our spec, and write the necessary description in the PR to facilitate code review by Committers and other contributors.
### Wait for the code to be merged
After submitting the PR, the Committee or the community's friends will review the code you submitted (Code Review), and will propose some modification suggestions or conduct some discussions. Please pay attention to your PR in time.
If subsequent changes are required, there is no need to initiate a new PR. After submitting a commit on the original branch and pushing it to the remote repository, the PR will be automatically updated.
In addition, our project has a relatively standardized and strict CI inspection process. After submitting PR, CI will be triggered. Please pay attention to whether it passes the CI inspection.
Finally, the Committers can merge the PR into the master branch.
### After the code is merged
After the code has been merged, you can delete the development branch on both the local and remote repositories:
```shell
git branch -d a-dev-branch
git push origin --delete a-dev-branch
```
On the master/main branch, you can do the following to sync the upstream repository:
```shell
git remote add upstream https://github.com/apache/hertzbeat.git #Bind the remote warehouse, if it has been executed, it does not need to be executed again
git checkout master
git pull upstream master
```
### Get Contributor Certificate
After your pr is merged, you can send an email `dev@hertzbeat.apache.org` to request your Apache HertzBeat™ contributor electronic certificate.
```text
Title: [Contributor] Request for a Contributor Certificate: <Your Full Name>
Body:
Hello,
I would like to request a Contributor Certificate for my contributions to the Apache HertzBeat™ project.
- Full Name: <Your Full Name> # The Full Name will be printed on the certificate, any name you want.
- GitHub Username: <Your GitHub Username>
- Pull Request Links: <List the URLs of the pull requests you have submitted>
- Email Address: <Your Email Address>
Best regards,
<Your Name>
```
You will receive a reply with an electronic certificate within a few working days, and your name will also appear in the list of contributors.
Attention contributor certificates are electronic, and certificates for you to become a `Committer` or `PMC` are physical.
Certificate Sample:
![cert](/img/docs/hertzbeat-cert.png)
### HertzBeat Improvement Proposal (HIP)
If you have major new features(e.g., support metrics push gateway, support logs monitoring), you need to write a design document known as a HertzBeat Improvement Proposal (HIP). Before starting to write a HIP, make sure you follow the process [guide](https://github.com/apache/hertzbeat/tree/master/hip).
### How to become a Committer?
With the above steps, you are a contributor to HertzBeat. Repeat the previous steps to stay active in the community, keep at, you can become a Committer!
### Join Discussion
[Discussion](contact)
+72
View File
@@ -0,0 +1,72 @@
---
id: development
title: How to Run or Build HertzBeat?
sidebar_label: Development
---
## Getting HertzBeat code up and running
> To get HertzBeat code running on your development tools, and able to debug with breakpoints.
> This is a front-end and back-end separation project.
> To start the local code, the back-end [manager](https://github.com/apache/hertzbeat/tree/master/hertzbeat-manager) and the front-end [web-app](https://github.com/apache/hertzbeat/tree/master/web-app) must be started separately.
### Backend start
1. Requires `maven3+`, `java25` and `lombok` environments
2. (Optional) Modify the configuration file: `hertzbeat-startup/src/main/resources/application.yml`
3. Execute under the project root directory: `mvn clean install -DskipTests`
4. Add VM Options: `--add-opens=java.base/java.nio=org.apache.arrow.memory.core,ALL-UNNAMED`
5. Start `springboot startup` service: `hertzbeat-startup/src/main/java/org/apache/hertzbeat/startup/HertzBeatApplication.java`
### Frontend start
1. Need `Node pnpm` Environment, Make sure `Node.js >= 18`
2. Cd to the `web-app` directory: `cd web-app`
3. Install pnpm if not existed `npm install -g pnpm`
4. Install Dependencies: `pnpm install` or `pnpm install --registry=https://registry.npmmirror.com` in `web-app`
5. After the local backend is started, start the local frontend in the web-app directory: `pnpm start`
6. Browser access to localhost:4200 to start, default account/password is *admin/hertzbeat*
## Build HertzBeat binary package
> Requires `maven3+`, `java25`, `node` and `pnpm` environments.
### Frontend build
1. Need `Node pnpm` Environment, Make sure `Node.js >= 18`
2. Cd to the `web-app` directory: `cd web-app`
3. Install pnpm if not existed `npm install -g pnpm`
4. Install Dependencies: `pnpm install` or `pnpm install --registry=https://registry.npmmirror.com` in `web-app`
5. Build web-app: `pnpm package`
### Backend build
1. Requires `maven3+`, `java25` environments
2. Execute under the project root directory: `mvn clean package -Prelease`
The HertzBeat install package will be generated at `dist/apache-hertzbeat-{version}-bin.tar.gz`
### Collector build
1. Requires `maven3+`, `java25` environments
2. Execute under the project root directory: `mvn clean install`
3. Cd to the `hertzbeat-collector` directory: `cd hertzbeat-collector`
4. Build the JVM collector package under `hertzbeat-collector` directory: `mvn clean package -Pcluster`
5. Build the native collector package under `hertzbeat-collector` directory: `mvn clean package -pl hertzbeat-collector-collector -am -Pnative`
> Native collector packaging requires GraalVM for JDK 25 with the `native-image` tool available in `PATH`.
The HertzBeat collector packages will be generated at `dist/apache-hertzbeat-collector-{version}-bin.tar.gz` and a platform-specific native package such as `dist/apache-hertzbeat-collector-native-{version}-linux-amd64-bin.tar.gz`
+113
View File
@@ -0,0 +1,113 @@
---
id: 'document'
title: 'Documentation Notice'
sidebar_position: 1
---
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
Good documentation is critical for any type of software. Any contribution that can improve the HertzBeat documentation is welcome.
## Get the document project
Documentation for the HertzBeat project is maintained in [git repository home directory](https://github.com/apache/hertzbeat/tree/master/home).
First you need to fork the document project into your own github repository, and then clone the document to your local computer.
```shell
git clone git@github.com:<your-github-user-name>/hertzbeat.git
```
## Preview and generate static files
This website is compiled using node, using Docusaurus framework components
1. Download and install nodejs (version 18.8.0)
2. Clone the code to the local `git clone git@github.com:apache/hertzbeat.git`
3. In `home` directory run `pnpm install` to install the required dependent libraries.
4. In `home` directory run `pnpm start`, you can visit [http://localhost:3000](http://localhost:3000) to view the English mode preview of the site
5. In `home` directory run `pnpm start-zh-cn`, you can visit [http://localhost:3000](http://localhost:3000) to view the Chinese mode preview of the site
6. To generate static website resource files, run `pnpm build`. The static resources of the build are in the build directory.
## Document Format Inspection
In Apache HertzBeat, all MD articles have to pass MD's [CI](https://github.com/apache/hertzbeat/blob/master/.github/workflows/doc-build-test.yml) inspection before they can be merged. The purpose is to keep the website looking nice and the formatting of the articles consistent.
After you have written an MD article, you can execute the following command locally to check whether the content of the MD article meets the requirements, so as to reduce the workload of review and save your time:
```shell
cd home && pnpm install
pnpm md-lint
# If the documentation is wrong, you can use pnpm md-lint-fix to fix it.
pnpm md-lint-fix
```
For formatting rules for MD articles you can refer to: [Markdown-lint-rules](https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md)
MD format configuration file in the project: [.markdownlint-cli2.jsonc](https://github.com/apache/hertzbeat/blob/master/.markdownlint-cli2.jsonc)
## Directory structure
```html
|-- docs
|-- blog
|-- i18n
| `-- zh-CN // internationalized chinese
| |-- code.json
| |-- docusaurus-plugin-content-blog
| |-- docusaurus-plugin-content-docs
| `-- docusaurus-theme-classic
|-- resource // static resource file
|-- src
| |-- theme
| |-- css
| |-- js
| |-- pages
| | |-- components
| | |-- index.js
| |-- constants.js
|-- static // picture static resource
| |-- img //
| | |-- blog // blog picture
| | |-- docs // document picture
| | |-- home // product picture
| | |-- icons // icon
|-- docusaurus.config.js
|-- sidebars.js // document sidebar menu configuration
```
## Specification
### Naming convention of files
Consist entirely of lowercase letters, numbers, underscores, and dashes.
Positive example: `render-dom.js / signup.css / index.html / company-logo.png / hertz_beat.md`
Counter example: `renderDom.js / UserManagement.html`
### Resource Path
Image resources are unified under `static/img/{module name}`
css and other style files are placed in the `src/css` directory
### Page content modification
> All pages doc can be directly jumped to the corresponding github resource modification page through the 'Edit this page' button at the bottom
+537
View File
@@ -0,0 +1,537 @@
---
id: 'how_to_release'
title: How to Release
sidebar_position: 4
---
This tutorial describes in detail how to release Apache HertzBeat™, take the release of version 1.7.3 as an example.
## 1. Environmental requirements
This release process is operated in the UbuntuOS(Windows,Mac), and the following tools are required:
- JDK 25
- Node18 pnpm
- Apache Maven 3.x
- GnuPG 2.x
- Git
- SVN (apache uses svn to host project releases)
> Pay attention to setting environment variables `export GPG_TTY=$(tty)`
## 2. Preparing for release
> First summarize the account information to better understand the operation process, will be used many times later.
>
> - apache id: `muchunjin (APACHE LDAP UserName)`
> - apache passphrase: `APACHE LDAP Passphrase`
> - apache email: `muchunjin@apache.org`
> - gpg real name: `muchunjin (Any name can be used, here I set it to the same name as the apache id)`
> - gpg key passphrase: `The password set when creating the gpg key, you need to remember this password`
### 2.1 Key generation
```shell
$ gpg --full-gen-key
gpg (GnuPG) 2.2.27; Copyright (C) 2021 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Please select what kind of key you want:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
(14) Existing key from card
Your selection? 1 # Please enter 1
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (3072) 4096 # Please enter 4096 here
Requested keysize is 4096 bits
Please specify how long the key should be valid.
0 = key does not expire
`<n>` = key expires in n days
`<n>`w = key expires in n weeks
`<n>`m = key expires in n months
`<n>`y = key expires in n years
Key is valid for? (0) 0 # Please enter 0
Key does not expire at all
Is this correct? (y/N) y # Please enter y here
GnuPG needs to construct a user ID to identify your key.
Real name: muchunjin # Please enter 'gpg real name'
Email address: muchunjin@apache.org # Please enter your apache email address here
Comment: apache key # Please enter some comments here
You selected this USER-ID:
"muchunjin (apache key) [muchunjin@apache.org](mailto:muchunjin@apache.org)"
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O # Please enter O here
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
# At this time, a dialog box will pop up, asking you to enter the key for this gpg.
# you need to remember that it will be used in subsequent steps.
┌─────────────────────────────────────────────────────┐
│ Please enter this passphrase to │
│ protect your new key │
│ │
│ Passphrase: _______________________________________ │
│ │
`<OK>` `<Cancel>`
└─────────────────────────────────────────────────────┘
# Here you need to re-enter the password in the previous step.
┌─────────────────────────────────────────────────────┐
│ Please re-enter this passphrase │
│ │
│ Passphrase: _______________________________________ │
│ │
`<OK>` `<Cancel>`
└─────────────────────────────────────────────────────┘
gpg: key ACFB69E705016886 marked as ultimately trusted
gpg: revocation certificate stored as '/root/.gnupg/openpgp-revocs.d/DC12398CCC33A5349EB9663DF9D970AB18C9EDF6.rev'
public and secret key created and signed.
pub rsa4096 2023-05-01 [SC]
85778A4CE4DD04B7E07813ABACFB69E705016886
uid muchunjin (apache key) [muchunjin@apache.org](mailto:muchunjin@apache.org)
sub rsa4096 2023-05-01 [E]
```
Keys can be viewed through the `gpg --list-signatures` command
### 2.2 Upload the generated key to the public server
```shell
$ gpg --keyid-format SHORT --list-keys
/root/.gnupg/pubring.kbx
------------------------
pub rsa4096/05016886 2023-05-01 [SC]
85778A4CE4DD04B7E07813ABACFB69E705016886
uid [ultimate] muchunjin (apache key) [muchunjin@apache.org](mailto:muchunjin@apache.org)
sub rsa4096/0C5A4E1C 2023-05-01 [E]
# Send public key to keyserver via key id
$ gpg --keyserver keyserver.ubuntu.com --send-key 05016886
# Among them, keyserver.ubuntu.com is the selected keyserver, it is recommended to use this, because the Apache Nexus verification uses this keyserver
```
#### 2.3 Check if the key is created successfully
Verify whether it is synchronized to the public network, it will take about a minute to find out the answer, if not successful, you can upload and retry multiple times.
```shell
$ gpg --keyserver keyserver.ubuntu.com --recv-keys 05016886 # If the following content appears, it means success
gpg: key ACFB69E705016886: "muchunjin (apache key) [muchunjin@apache.org](mailto:muchunjin@apache.org)" not changed
gpg: Total number processed: 1
gpg: unchanged: 1
```
Or enter [https://keyserver.ubuntu.com/](https://keyserver.ubuntu.com/) address in the browser, enter the name of the key and click 'Search key' to search if existed.
#### 2.4 Add the gpg public key to the KEYS file of the Apache SVN project repo
- Apache HertzBeat™ Branch Dev [https://dist.apache.org/repos/dist/dev/hertzbeat](https://dist.apache.org/repos/dist/dev/hertzbeat)
- Apache HertzBeat™ Branch Release [https://dist.apache.org/repos/dist/release/hertzbeat](https://dist.apache.org/repos/dist/release/hertzbeat)
##### 2.4.1 Add public key to KEYS in dev branch
```shell
$ mkdir -p svn/dev
$ cd svn/dev
$ svn co https://dist.apache.org/repos/dist/dev/hertzbeat
$ cd svn/dev/hertzbeat
# Append the KEY you generated to the file KEYS, and check if it is added correctly
$ (gpg --list-sigs muchunjin@apache.org && gpg --export --armor muchunjin@apache.org) >> KEYS
$ svn ci -m "add gpg key for muchunjin"
```
##### 2.4.2 Add public key to KEYS in release branch
```shell
$ mkdir -p svn/release
$ cd svn/release
$ svn co https://dist.apache.org/repos/dist/release/hertzbeat
$ cd svn/release/hertzbeat
# Append the KEY you generated to the file KEYS, and check if it is added correctly
$ (gpg --list-sigs muchunjin@apache.org && gpg --export --armor muchunjin@apache.org) >> KEYS
$ svn ci -m "add gpg key for muchunjin"
```
## 3. Prepare material package & release
### Build Package
#### 3.1 Based on the master branch, create a release-`release_version`-rcx branch, such as release-1.7.3-rc1, And create a tag named v1.7.3-rc1 based on the release-1.7.3-rc1 branch, and set this tag as pre-release
```shell
git checkout master
git checkout -b release-1.7.3-rc1
```
#### 3.2 checkout release branch to local
```shell
git checkout release-1.7.3-rc1
```
#### 3.3 Compile the binary package
> Build HertzBeat server binary, run script in `web-app`
```shell
pnpm install
pnpm package
```
> run script in root
```shell
mvn clean package -Prelease
```
then
```shell
mvn clean install
```
> Build HertzBeat collector binary, run script in `collector`
```shell
mvn clean package -Pcluster
```
> Build the native collector binary for the current host with GraalVM JDK 25 and `native-image`
```shell
mvn clean package -pl hertzbeat-collector-collector -am -Pnative
```
> The repository workflow `.github/workflows/collector-native-build.yml` is a release helper, not a regular PR or push CI workflow.
>
> It is intentionally manual-only because multi-platform native builds are relatively slow and consume scarce Linux ARM, macOS, and Windows runners. During release preparation, open the Actions page, select `Collector Native Release`, run it from the release branch or tag, and then download the uploaded artifacts for signing and publishing.
The release package are here:
- `dist/apache-hertzbeat-{version}-bin.tar.gz`
- `dist/apache-hertzbeat-collector-{version}-bin.tar.gz`
- `dist/apache-hertzbeat-collector-native-{version}-linux-amd64-bin.tar.gz`
- `dist/apache-hertzbeat-collector-native-{version}-linux-arm64-bin.tar.gz`
- `dist/apache-hertzbeat-collector-native-{version}-macos-amd64-bin.tar.gz`
- `dist/apache-hertzbeat-collector-native-{version}-macos-arm64-bin.tar.gz`
- `dist/apache-hertzbeat-collector-native-{version}-windows-amd64-bin.zip`
- `dist/apache-hertzbeat-{version}-docker-compose.tar.gz`
#### 3.4 Package the source code
> Package the project source code
```shell
git archive \
--format=tar.gz \
--output="dist/apache-hertzbeat-1.7.3-src.tar.gz" \
--prefix=apache-hertzbeat-1.7.3-src/ \
release-1.7.3-rc1
```
The archive package is here `dist/apache-hertzbeat-1.7.3-src.tar.gz`
### Sign package
#### 3.5 Sign binary and source packages
> The `gpg -u 33545C76` `33545C76` is your gpg secret ID, see from `gpg --keyid-format SHORT --list-keys`
```shell
cd dist
# sign
for i in *.tar.gz; do echo $i; gpg -u 33545C76 --armor --output $i.asc --detach-sig $i ; done
# SHA512
for i in *.tar.gz; do echo $i; sha512sum $i > $i.sha512 ; done
# if macos sha512sum not found, you can install by brew install coreutils
```
> The final file list is as follows
```text
apache-hertzbeat-1.7.3-src.tar.gz
apache-hertzbeat-1.7.3-src.tar.gz.asc
apache-hertzbeat-1.7.3-src.tar.gz.sha512
apache-hertzbeat-1.7.3-bin.tar.gz
apache-hertzbeat-1.7.3-bin.tar.gz.asc
apache-hertzbeat-1.7.3-bin.tar.gz.sha512
apache-hertzbeat-1.7.3-docker-compose.tar.gz
apache-hertzbeat-1.7.3-docker-compose.tar.gz.asc
apache-hertzbeat-1.7.3-docker-compose.tar.gz.sha512
apache-hertzbeat-collector-1.7.3-bin.tar.gz
apache-hertzbeat-collector-1.7.3-bin.tar.gz.asc
apache-hertzbeat-collector-1.7.3-bin.tar.gz.sha512
```
#### 3.6 Verify signature
```shell
$ cd dist
# Verify signature
$ for i in *.tar.gz; do echo $i; gpg --verify $i.asc $i ; done
apache-hertzbeat-1.7.3-bin.tar.gz
gpg: Signature made Tue May 2 12:16:35 2023 CST
gpg: using RSA key 85778A4CE4DD04B7E07813ABACFB69E705016886
gpg: Good signature from "muchunjin (apache key) [muchunjin@apache.org](mailto:muchunjin@apache.org)" [ultimate]
apache-hertzbeat-1.7.3-docker-compose.tar.gz
gpg: Signature made Tue May 2 12:16:36 2023 CST
gpg: using RSA key 85778A4CE4DD04B7E07813ABACFB69E705016886
gpg: Good signature from "muchunjin (apache key) [muchunjin@apache.org](mailto:muchunjin@apache.org)" [ultimate]
apache-hertzbeat-1.7.3-src.tar.gz
gpg: Signature made Tue May 2 12:16:37 2023 CST
gpg: using RSA key 85778A4CE4DD04B7E07813ABACFB69E705016886
gpg: Good signature from "muchunjin (apache key) [muchunjin@apache.org](mailto:muchunjin@apache.org)" [ultimate]
apache-hertzbeat-collector-1.7.3-bin.tar.gz
gpg: Signature made Tue May 2 12:16:37 2023 CST
gpg: using RSA key 85778A4CE4DD04B7E07813ABACFB69E705016886
gpg: Good signature from "muchunjin (apache key) [muchunjin@apache.org](mailto:muchunjin@apache.org)" [ultimate]
# Verify SHA512
$ for i in *.tar.gz; do echo $i; sha512sum --check $i.sha512; done
apache-hertzbeat-1.7.3-src.tar.gz
apache-hertzbeat-1.7.3-src.tar.gz: OK
apache-hertzbeat-1.7.3-bin.tar.gz
apache-hertzbeat-1.7.3-bin.tar.gz: OK
apache-hertzbeat-1.7.3-docker-compose.tar.gz
apache-hertzbeat-1.7.3-docker-compose.tar.gz: OK
apache-hertzbeat-collector-1.7.3-bin.tar.gz
apache-hertzbeat-collector-1.7.3-bin.tar.gz: OK
```
#### 3.7 Publish the dev directory of the Apache SVN material package
- Clone the dev directory
```shell
# Check out the dev directory of the Apache SVN to the svn/dev directory under dist in the root directory of the Apache HertzBeat™ project
svn co https://dist.apache.org/repos/dist/dev/hertzbeat svn/dev
svn co --depth empty https://dist.apache.org/repos/dist/dev/hertzbeat
```
- Copy the material package to the dev directory
Create a version number directory and name it in the form of `release_version`-`RC_version`. RC_version starts from 1, that is, the candidate version starts from RC1. During the release process, there is a problem that causes the vote to fail.
If it needs to be corrected, it needs to iterate the RC version , the RC version number needs to be +1. For example: Vote for version 1.7.3-RC1. If the vote passes without any problems, the RC1 version material will be released as the final version material.
If there is a problem (when the hertzbeat/incubator community votes, the voters will strictly check various release requirements and compliance issues) and need to be corrected, then re-initiate the vote after the correction, and the candidate version for the next vote is 1.7.3- RC2.
```shell
mkdir -p svn/dev/1.7.3-RC1
cp -f dist/* svn/dev/1.7.3-RC1
```
- Commit to SVN
```shell
cd svn/dev
# 1.check svn status
svn status
# 2. add to svn
svn add 1.7.3-RC1
svn status
# 3. Submit to svn remote server
svn commit -m "release for HertzBeat 1.7.3"
```
- Check Apache SVN Commit Results
> Visit the address [https://dist.apache.org/repos/dist/dev/hertzbeat/](https://dist.apache.org/repos/dist/dev/hertzbeat/) in the browser, check if existed the new material package
## 4. Enter the community voting stage
### 4.1 Send a Community Vote Email
Send a voting email in the community requires at least three `+1` and no `-1`.
> `Send to`: [dev@hertzbeat.apache.org](mailto:dev@hertzbeat.apache.org) <br />
> `Title`: [VOTE] Release Apache HertzBeat™ 1.7.3 rc1 <br />
> `Body`:
```text
Hello HertzBeat Community:
This is a call for vote to release Apache HertzBeat™ version release-1.7.3-RC1.
Apache HertzBeat™ - A real-time observability system with agentless, performance cluster, prometheus-compatible, custom monitoring and status page building capabilities.
Release notes:
https://github.com/apache/hertzbeat/releases/tag/v1.7.3-rc1
The release candidates:
https://dist.apache.org/repos/dist/dev/hertzbeat/1.7.3-RC1/
Git tag for the release:
https://github.com/apache/hertzbeat/releases/tag/v1.7.3-rc1
The artifacts signed with PGP key [33545C76], corresponding to [muchunjin@apache.org], that can be found in keys file:
https://downloads.apache.org/hertzbeat/KEYS
The vote will be open for at least 72 hours or until the necessary number of votes are reached.
Please vote accordingly:
[ ] +1 approve
[ ] +0 no opinion
[ ] -1 disapprove with the reason
*Valid check is a requirement for a vote. *Checklist for reference:
[ ] Download HertzBeat are valid.
[ ] Checksums and PGP signatures are valid.
[ ] Source code distributions have correct names matching the current
release.
[ ] LICENSE and NOTICE files are correct for each HertzBeat repo.
[ ] All files have license headers if necessary.
[ ] No compiled archives bundled in source archive.
[ ] Can compile from source.
Steps to validate the releasePlease refer to:
https://hertzbeat.apache.org/docs/community/how_to_verify_release
How to Build:
https://hertzbeat.apache.org/docs/community/development/#build-hertzbeat-binary-package
Thanks!
```
After 72 hours, the voting results will be counted, and the voting result email will be sent, as follows.
> `Send to`: [dev@hertzbeat.apache.org](mailto:dev@hertzbeat.apache.org) <br />
> `Title`: [RESULT]\[VOTE\] Release Apache HertzBeat™ 1.7.3-rc1 <br />
> `Body`:
```text
Dear HertzBeat community,
Thanks for your review and vote for "Release Apache HertzBeat™ 1.7.3-rc1"
I'm happy to announce the vote has passed:
---
4 binding +1, from:
- cc
1 non-binding +1, from:
- Roc Marshal
---
no 0 or -1 votes.
Vote thread:
https://lists.apache.org/thread/t01b2lbtqzyt7j4dsbdp5qjc3gngjsdq
---
Thank you to everyone who helped us to verify and vote for this release. We will move to the ASF Incubator voting shortly.
---
Best,
ChunJin Mu
```
One item of the email content is `Vote thread`, and the link is obtained here: [https://lists.apache.org/list.html?dev@hertzbeat.apache.org](https://lists.apache.org/list.html?dev@hertzbeat.apache.org)
## 4. Complete the final publishing steps
### 4.1 Migrating source and binary packages
```shell
svn mv https://dist.apache.org/repos/dist/dev/hertzbeat/1.7.3-RC1 https://dist.apache.org/repos/dist/release/hertzbeat/1.7.3 -m "transfer packages for 1.7.3-RC1"
```
#### 4.2 Add the new version download address to the official website
[https://github.com/apache/hertzbeat/blob/master/home/docs/download.md](https://github.com/apache/hertzbeat/blob/master/home/docs/download.md)
[https://github.com/apache/hertzbeat/blob/master/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/download.md](https://github.com/apache/hertzbeat/blob/master/home/i18n/zh-cn/docusaurus-plugin-content-docs/current/download.md)
Open the official website address [https://hertzbeat.apache.org/docs/download/](https://hertzbeat.apache.org/docs/download/) to see if there is a new version of the download
> It should be noted that the download link may take effect after an hour, so please pay attention to it.
#### 4.3 Generate a release on github
Update pre-release to create a tag named v1.7.3 based on the release-1.7.3-rc1 branch, and set this tag to latest release.
:::tip
You can modify it on the original RC Release without creating a new Release.
:::
Then enter Release Title and Describe
- Release Title:
```text
v1.7.3
```
- Describe:
```text
xxx
release note: xxx
```
Then click the `Publish release` button.
The rename the release-1.7.3-rc1 branch to release-1.7.3.
#### 4.5 Send new version announcement email
> `Send to`: [announce@apache.org](mailto:announce@apache.org) <br />
> `cc`: [dev@hertzbeat.apache.org](mailto:dev@hertzbeat.apache.org) <br />
> `Title`: [ANNOUNCE] Apache HertzBeat™ 1.7.3 released <br />
> `Body`:
```text
Hi Community,
We are glad to announce the release of Apache HertzBeat™ 1.7.3.
Thanks again for your help.
Apache HertzBeat™ (https://hertzbeat.apache.org/) - A real-time observability system with agentless, performance cluster, prometheus-compatible, custom monitoring and status page building capabilities.
Download Link:
https://hertzbeat.apache.org/docs/download/
Release Note:
https://github.com/apache/hertzbeat/releases/tag/v1.7.3
Website:
https://hertzbeat.apache.org/
HertzBeat Resources:
- Issue: https://github.com/apache/hertzbeat/issues
- Mailing list: dev@hertzbeat.apache.org
---
Apache HertzBeat™ Team
---
Best,
ChunJin Mu
```
This version release is over.
---
This doc refer from [Apache StreamPark](https://streampark.apache.org/)
+185
View File
@@ -0,0 +1,185 @@
---
id: how_to_verify_release
title: How to Verify Release
sidebar_position: 4
---
## Verify the candidate version
For detailed check list, please refer to the official [check list](https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist)
Version content accessible in browser [https://dist.apache.org/repos/dist/dev/hertzbeat/](https://dist.apache.org/repos/dist/dev/hertzbeat/)
### 1. Download the candidate version
Download the candidate version to be released to the local environment Need to rely on gpg tool, if not, it is recommended to install `gpg2`.
:::caution
If the network is poor, downloading may be time-consuming. The download is completed normally in about 20 minutes, please wait patiently.
:::
```shell
#If there is svn locally, you can clone to the local
$ svn co https://dist.apache.org/repos/dist/dev/hertzbeat/`release_version`-`rc_version`/
#or download the material file directly
$ wget https://dist.apache.org/repos/dist/dev/hertzbeat/`release_version`-`rc_version`/xxx.xxx
```
### 2. Verify that the uploaded version is compliant
Start the verification process, which includes but is not limited to the following content and forms.
#### 2.1 Check whether the release package is complete
The package uploaded to dist must include the source code package, and the binary package is optional.
1. Whether to include the source code package
2. Whether to include the signature of the source code package
3. Whether to include the sha512 of the source code package
4. If the binary package is uploaded, also check the contents listed in (2)-(4)
#### 2.2 Check gpg signature
First import the publisher's public key. Import KEYS from the svn repository to the local environment. (The person who releases the version does not need to import it again, the person who helps to do the verification needs to import it, and the user name is enough for the person who issued the version)
##### 2.2.1 Import public key
```shell
-curl https://downloads.apache.org/hertzbeat/KEYS > KEYS # Download KEYS
gpg --import KEYS # Import KEYS to local
```
##### 2.2.2 Trust the public key
Trust the KEY used in this version:
```shell
$ gpg --edit-key xxxxxxxxxx #KEY user used in this version
gpg (GnuPG) 2.2.21; Copyright (C) 2020 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Secret key is available.
gpg> trust #trust
Please decide how far you trust this user to correctly verify other users' keys
(by looking at passports, checking fingerprints from different sources, etc.)
1 = I don't know or won't say
2 = I do NOT trust
3 = I trust marginally
4 = I trust fully
5 = I trust ultimately
m = back to the main menu
Your decision? 5 #choose 5
Do you really want to set this key to ultimate trust? (y/N) y #choose y
gpg>
```
##### 2.2.3 Check the gpg signature
```shell
for i in *.tar.gz; do echo $i; gpg --verify $i.asc $i; done
```
check result
> If something like the following appears, it means the signature is correct. Keyword: **`Good signature`**
```shell
apache-hertzbeat-${release_version}-src.tar.gz
gpg: Signature made XXXX
gpg: using RSA key XXXXX
gpg: Good signature from "XXX <xxx@apache.org>"
```
#### 2.3 Check sha512 hash
```shell
for i in *.tar.gz; do echo $i; sha512sum --check $i.sha512; done
```
#### 2.4 Check the binary package
unzip `apache-hertzbeat-${release.version}-bin.tar.gz`
```shell
tar -xzvf apache-hertzbeat-${release.version}-bin.tar.gz
```
check as follows:
- [ ] Check whether the source package contains unnecessary files, which makes the tar package too large
- [ ] There are `LICENSE` and `NOTICE` files
- [ ] The year in the `NOTICE` file is correct
- [ ] Only text files exist, not binary files
- [ ] All files have ASF license at the beginning
- [ ] Able to compile correctly
- [ ] .....
#### 2.5 Check the source package
> If the binary/web-binary package is uploaded, check the binary package.
Unzip `apache-hertzbeat-${release_version}-src.tar.gz`
```shell
cd apache-hertzbeat-${release_version}-src
```
compile the source code: [Build HertzBeat Binary Package](https://hertzbeat.apache.org/docs/community/development/#build-hertzbeat-binary-package)
and check as follows:
- [ ] There are `LICENSE` and `NOTICE` files
- [ ] The year in the `NOTICE` file is correct
- [ ] All text files have ASF license at the beginning
- [ ] Check the third-party dependent license:
- [ ] Compatible with third-party dependent licenses
- [ ] All third-party dependent licenses are named in the `LICENSE` file
- [ ] If you are relying on the Apache license and there is a `NOTICE` file, then these `NOTICE` files also need to be added to the version of the `NOTICE` file
- [ ] .....
You can refer to this article: [ASF Third Party License Policy](https://apache.org/legal/resolved.html)
### 3. Email reply
If you initiate a posting vote, you can refer to this response example to reply to the email after verification
:::caution Attention
When replying to the email, you must bring the information that you have checked by yourself. Simply replying to `+1 approve` is invalid.
When new PMC votes in the [dev@hertzbeat.apache.org](mailto:dev@hertzbeat.apache.org) hertzbeat community, Please bring the binding suffix to indicate that it has a binding vote for the vote in the hertzbeat community, and it is convenient to count the voting results.
:::
Non-PMC member:
```text
+1 (non-binding)
I checked:
1. All download links are valid
2. Checksum and signature are OK
3. LICENSE and NOTICE are exist
4. Build successfully on macOS(Big Sur)
5.
```
PMC member:
```text
+1 (binding)
I checked:
1. All download links are valid
2. Checksum and signature are OK
3. LICENSE and NOTICE are exist
4. Build successfully on macOS(Big Sur)
5.
```
---
This doc refer from [Apache StreamPark](https://streampark.apache.org/)
+61
View File
@@ -0,0 +1,61 @@
---
id: 'mailing_lists'
title: 'Mailing Lists'
sidebar_position: 1
---
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
The [Developer Mailing List](https://lists.apache.org/list.html?dev@hertzbeat.apache.org) is the community-recommended way to communicate and obtain the latest information.
Before you post anything to the mailing lists, be sure that you already **subscribe** to them.
## Usages
### Developer List
- Use this list for your HertzBeat questions
- Used by HertzBeat contributors to discuss development of HertzBeat
| List Name | Address | Subscribe | Unsubscribe | Archive |
|--------------------|--------------------------|--------------------------------------------------------|------------------------------------------------------------|------------------------------------------------------------------------|
| **Developer List** | [dev@hertzbeat.apache.org](mailto:dev@hertzbeat.apache.org) | [subscribe](mailto:dev-subscribe@hertzbeat.apache.org) | [unsubscribe](mailto:dev-unsubscribe@hertzbeat.apache.org) | [archive](https://lists.apache.org/list.html?dev@hertzbeat.apache.org) |
### Notification List
- Notifications on changes to the HertzBeat codebase
| List Name | Address | Subscribe | Unsubscribe | Archive |
|-----------------------|------------------------------------|------------------------------------------------------------------|----------------------------------------------------------------------|----------------------------------------------------------------------------------|
| **Notification List** | [notifications@hertzbeat.apache.org](mailto:notifications@hertzbeat.apache.org) | [subscribe](mailto:notifications-subscribe@hertzbeat.apache.org) | [unsubscribe](mailto:notifications-unsubscribe@hertzbeat.apache.org) | [archive](https://lists.apache.org/list.html?notifications@hertzbeat.apache.org) |
## Steps for Subscription
Sending a subscription email is also very simple. The steps are as follows:
- 1、**Subscribe**: Click the **subscribe** button in the above table, and it redirects to your mail client. The subject and content are arbitrary.
After that, you will receive a confirmation email from [dev-help@hertzbeat.apache.org](mailto:dev-help@hertzbeat.apache.org) (if not received, please confirm whether the email is automatically classified as SPAM, promotion email, subscription email, etc.).
- 2、**Confirm**: Reply directly to the confirmation email, or click on the link in the email to reply quickly. The subject and content are arbitrary.
- 3、**Welcome**: After completing the above steps, you will receive a welcome email with the subject WELCOME to [dev@hertzbeat.apache.org](mailto:dev@hertzbeat.apache.org), and you have successfully subscribed to the Apache HertzBeat mailing list.
## Post Plain Text Mails
When posting to the mailing lists, please use plain text emails.
**Do not use HTML emails**.
HTML emails are more likely to be targeted as spam mails and rejected.
It may get malformed through different mail clients and not easily readable by others.
+92
View File
@@ -0,0 +1,92 @@
---
id: maturity
title: Maturity
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.
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
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.
### 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). |
| **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 |
| **LC40** | Committers are bound by an Individual Contributor Agreement (the "Apache iCLA") that defines which code they may commit and how they need to identify code that is not their own. | **YES** All committers have iCLAs. |
| **LC50** | The project clearly defines and documents the copyright ownership of everything that the project produces. | **YES** And all source files are with APLv2 header, checked by GitHub Action. |
### 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 [dev@hertzbeat.apache.org](mailto:dev@hertzbeat.apache.org) and [general@incubator.apache.org](mailto:general@incubator.apache.org), 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/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. |
### 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) |
| **QU40** | The project puts a high priority on backwards compatibility and aims to document any incompatible changes and provide tools and documentation to help users transition to new features. | **Yes** We follow semantic versions. As long as it's within one major version, it's backward compatible. And when any breaking changes added, we provide corresponding upgrade guides. |
| **QU50** | The project strives to respond to documented bug reports in a timely manner. | **YES** The project has resolved 743+ issues and 2348+ pull requests so far, with very prompt response. |
### 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. |
| **CO40** | The community strives to be meritocratic and gives more rights and responsibilities to contributors who, over time, add value to the project. | **YES** The community has elected 3 new PMC members and 13 new committers so far. |
| **CO50** | The project documents how contributors can earn more rights such as commit access or decision power, and applies these principles consistently. | **YES** The community has clear docs on nominating committers and PPMC members |
| **CO60** | The community operates based on consensus of its members (see CS10) who have decision power. Dictators, benevolent or not, are not welcome in Apache projects. | **YES** All decisions are made after vote by community members. |
| **CO70** | The project strives to answer user questions in a timely manner. | **YES** We use [dev@hertzbeat.apache.org](mailto:dev@hertzbeat.apache.org), [GitHub issue](https://github.com/apache/hertzbeat/issues) and [GitHub discussion](https://github.com/apache/hertzbeat/discussions) to do this in a timely manner. |
### 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. |
| **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 [dev@hertzbeat.apache.org](mailto:dev@hertzbeat.apache.org), 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. |
### 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. |
@@ -0,0 +1,287 @@
---
id: 'new_committer_process'
title: 'New Committer Process'
sidebar_position: 4
---
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
[Apache New Committer Guideline](https://community.apache.org/newcommitter.html#new-committer-process)
## The process of new Committer
- Call a vote in mailing `private@hertzbeat.apache.org`
see **Committer Vote Template**
- Close the vote
see **Close Vote Template**
- If the result is positive, invite the new committer
see **Committer Invite Template**
- If accepted, then: Accept the committer
see **Committer Accept Template**
- New Committer sign CLA and wait for CLA is recorded
- Request creation of the committer account
see **Committer Account Creation**
- Wait until root says it is done
- [Roster](https://whimsy.apache.org/roster/ppmc/hertzbeat) add the new committer
- Announce the new committer
see **Announce New Committer Template**
## Template
Note that, there are three placeholder in template should be replaced before using
- NEW_COMMITTER_NAME This Must Be Public Name, Not Github Name Or Id.
- NEW_COMMITTER_EMAIL
- NEW_COMMITTER_APACHE_NAME
### Committer Vote Template
:::note
NEW_COMMITTER_NAME This Must Be Public Name, Not Github Name Or Id.
:::
```text
To: private@hertzbeat.apache.org
Subject: [VOTE] New committer: `NEW_COMMITTER_NAME`
```
```text
Hi HertzBeat PMC,
This is a formal vote about inviting `NEW_COMMITTER_NAME` as our community new committer.
Work list: https://github.com/apache/hertzbeat/commits?author=xxx
Here is the list of `NEW_COMMITTER_NAME`'s contributions in HertzBeat Community:
> [27 commits](https://github.com/apache/hertzbeat/commits?author=xxx)
>
> 7,495 ++ 627 --
Submitted PR (27 commits)
- [ISSUE #4534] [feature] add new feature in hertzbeat #3445
- xxx
Submitted Issues (18 commits)
- [bug] find some bugs in hertzbeat nodes #6565
- xxx
Please vote:
+1: I support this proposal and will welcome `NEW_COMMITTER_NAME` as a committer.
+0: I don't care.
-1: I object to this proposal and here are my reasons.
This vote will be open for at least 7 days.
See voting guidelines at
https://community.apache.org/newcommitter.html
Best Wishes,
ttt
```
Note that, Voting ends one week from today, i.e.
[midnight UTC on YYYY-MM-DD](https://www.timeanddate.com/counters/customcounter.html?year=YYYY&month=MM&day=DD)
[Apache Voting Guidelines](https://community.apache.org/newcommitter.html)
### Close Vote Template
```text
To: private@hertzbeat.apache.org
Subject: [RESULT] [VOTE] New committer: `NEW_COMMITTER_NAME`
```
```text
Hi HertzBeat PMC,
The vote has now closed. The results are:
Binding Votes:
+1 [TOTAL BINDING +1 VOTES]
0 [TOTAL BINDING +0/-0 VOTES]
-1 [TOTAL BINDING -1 VOTES]
The vote is ***successful/not successful***
```
### Committer Invite Template
```text
To: NewCommiter@domain.com
Cc: private@hertzbeat.apache.org
Subject: Invitation to become HertzBeat committer: [Candidate Name]
```
```text
Hello [Candidate Name],
The HertzBeat Project Management Committee (PMC)
hereby offers you committer privileges to the project
These privileges are offered on the understanding that you'll use them
reasonably and with common sense. We like to work on trust
rather than unnecessary constraints.
Being a committer enables you to more easily make
changes without needing to go through the patch
submission process.
Being a committer does not require you to
participate any more than you already do. It does
tend to make one even more committed. You will
probably find that you spend more time here.
Of course, you can decline and instead remain as a
contributor, participating as you do now.
This personal invitation is a chance for you to accept or decline in private.
Please let us know in reply to this message whether you accept or decline.
Also, please refrain from sharing that you were invited before the official
announcement by the PMC.
If you accept, you will need an Apache account (id) with privileges.
Please follow these instructions.
A. If you already have an ICLA on file:
1. If you already have an Apache account, let us know your id and we
will grant you privileges on the project repositories.
2. If you have previously sent an ICLA, let us know the email address
and public name used on the ICLA and your preferred Apache id, and
we will request your account.
3. If the email address on the previously submitted ICLA is no longer
valid, let us know the email address and public name used on the new ICLA,
and your preferred Apache id. Continue to step B below and file your new ICLA.
Look to see if your preferred ID is already taken at
https://people.apache.org/committer-index.html
B. If there is not already an ICLA on file, you need to submit an ICLA:
1. Details of the ICLA and the forms are found
through this link: https://www.apache.org/licenses/#clas
2. Instructions for its completion and return to
the Secretary of the ASF are found at
https://www.apache.org/licenses/contributor-agreements.html#submitting
Do not copy the project or any other individual on your message
to Secretary, as the form contains Personally Identifiable Information
that should be kept private.
3. When you complete the ICLA form, be sure to include in the form
the Apache HertzBeat project and choose a
unique Apache ID. Look to see if your preferred
ID is already taken at
https://people.apache.org/committer-index.html
This will allow the Secretary to notify the PMC
when your ICLA has been recorded.
When recording of your ICLA is noted, you will
receive a follow-up message with the next steps for
establishing you as a committer.
```
### Committer Accept Template
```text
To: `NEW_COMMITTER_EMAIL`
Cc: private@hertzbeat.apache.org
Subject: Re: invitation to become HertzBeat committer
```
```text
Welcome. Here are the next steps in becoming a project committer. After that
we will make an announcement to the dev@hertzbeat.apache.org list.
You need to send a Contributor License Agreement to the ASF.
Normally you would send an Individual CLA. If you also make
contributions done in work time or using work resources,
see the Corporate CLA. Ask us if you have any issues.
https://www.apache.org/licenses/#clas.
You need to choose a preferred ASF user name and alternatives.
In order to ensure it is available you can view a list of taken IDs at
https://people.apache.org/committer-index.html
Please notify us when you have submitted the CLA and by what means
you did so. This will enable us to monitor its progress.
We will arrange for your Apache user account when the CLA has
been recorded.
After that is done, please make followup replies to the dev@hertzbeat.apache.org list.
We generally discuss everything there and keep the
private@hertzbeat.apache.org list for occasional matters which must be private.
The developer section of the website describes roles within the ASF and provides other
resources:
https://www.apache.org/foundation/how-it-works.html
https://www.apache.org/dev/
The incubator also has some useful information for new committers
in incubating projects:
https://incubator.apache.org/guides/committer.html
https://incubator.apache.org/guides/ppmc.html
Just as before you became a committer, participation in any ASF community
requires adherence to the ASF Code of Conduct:
https://www.apache.org/foundation/policies/conduct.html
Yours,
The Apache HertzBeat new PMC
```
### Announce New Committer Template
```text
To: dev@hertzbeat.apache.org, `NEW_COMMITTER_EMAIL`
Subject: [ANNOUNCE] New committer: `NEW_COMMITTER_NAME`
```
```text
Hello Community,
The Podling Project Management Committee (new PMC) for Apache HertzBeat
has invited `NEW_COMMITTER_NAME` to become a committer and we are pleased to
announce that he has accepted.
`NEW_COMMITTER_NAME` is active in the Apache HertzBeat community, hope to see your
further interactions with the community!
Thanks for your contributions.
Best Wishes!
```
@@ -0,0 +1,308 @@
---
id: 'new_pmc_ember_process'
title: 'new PMC Member Process'
sidebar_position: 5
---
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
[Apache New Committer Guideline](https://community.apache.org/newcommitter.html#new-committer-process)
## The process of new PMC member
- Call a vote in mailing `private@hertzbeat.apache.org`
see **PMC Member Vote Template**
- Close the vote
see **Close Vote Template**
- Board Approval of new PMC member
see **Board Approval of new PMC member**
- If the result is positive, invite the new PMC member
see **PMC member Invite Template**
- If accept, then: Accept the PMC member
see **PMC Member Accept Template**
- Notify the PMC member of completion
see **PMC Member Done Template**
- Announce the new PMC member
see **PMC Member Announce Template**
## Template
Note that, there are three placeholder in template should be replaced before using
- NEW_PMC_NAME
- NEW_PMC_EMAIL
- NEW_PMC_APACHE_NAME
### PMC member Vote Template
```text
To: private@hertzbeat.apache.org
Subject: [VOTE] new PMC member candidate: `NEW_PMC_NAME`
```
```text
Hi HertzBeat PMC,
This is a formal vote about inviting `NEW_PMC_NAME` as our new PMC member.
${Work list}[1]
[1] https://github.com/apache/hertzbeat/commits?author=`NEW_PMC_NAME`
```
Note that, Voting ends one week from today, i.e. [midnight UTC on YYYY-MM-DD](https://www.timeanddate.com/counters/customcounter.html?year=YYYY&month=MM&day=DD)
[Apache Voting Guidelines](https://community.apache.org/newcommitter.html)
### Close Vote Template
```text
To: private@hertzbeat.apache.org
Subject: [RESULT] [VOTE] new PMC member: `NEW_PMC_NAME`
```
```text
Hi HertzBeat PMC,
The vote has now closed. The results are:
Binding Votes:
+1 [TOTAL BINDING +1 VOTES]
0 [TOTAL BINDING +0/-0 VOTES]
-1 [TOTAL BINDING -1 VOTES]
The vote is ***successful/not successful***
```
### Board Approval of new PMC member Template
```text
To: board@apache.org
Cc: private@`<project>`.apache.org
Subject: [NOTICE] `NEW_PMC_NAME` for HertzBeat PMC member
```
```text
HertzBeat proposes to invite `NEW_PMC_NAME` to join the PMC.
The vote result is available here: https://lists.apache.org/...
```
[Apache New Pmc Guide](https://www.apache.org/dev/pmc.html#newpmc)
### PMC member Invite Template
```text
To: `NEW_PMC_EMAIL`
Cc: private@hertzbeat.apache.org
Subject: Invitation to become HertzBeat PMC member: `NEW_PMC_NAME`
```
```text
Hello [Candidate Name],
The HertzBeat Project Management Committee (PMC)
hereby offers you PMC members privileges to the project
These privileges are offered on the understanding that you'll use them
reasonably and with common sense. We like to work on trust
rather than unnecessary constraints.
Being a PMC member enables you
to guide the direction of the project.
Being a committer does not require you to
participate any more than you already do. It does
tend to make one even more committed. You will
probably find that you spend more time here.
Of course, you can decline and instead remain as a
contributor, participating as you do now.
This personal invitation is a chance for you to accept or decline in private.
Please let us know in reply to this message whether you accept or decline.
Also, please refrain from sharing that you were invited before the official
announcement by the PMC.
If you accept, you will need an Apache account (id) with privileges.
Please follow these instructions.
A. If you already have an ICLA on file:
1. If you already have an Apache account, let us know your id and we
will grant you privileges on the project repositories.
2. If you have previously sent an ICLA, let us know the email address
and public name used on the ICLA and your preferred Apache id, and
we will request your account.
3. If the email address on the previously submitted ICLA is no longer
valid, let us know the email address and public name used on the new ICLA,
and your preferred Apache id. Continue to step B below and file your new ICLA.
Look to see if your preferred ID is already taken at
https://people.apache.org/committer-index.html
B. If there is not already an ICLA on file, you need to submit an ICLA:
1. Details of the ICLA and the forms are found
through this link: https://www.apache.org/licenses/#clas
2. Instructions for its completion and return to
the Secretary of the ASF are found at
https://www.apache.org/licenses/contributor-agreements.html#submitting
Do not copy the project or any other individual on your message
to Secretary, as the form contains Personally Identifiable Information
that should be kept private.
3. When you complete the ICLA form, be sure to include in the form
the Apache HertzBeat project and choose a
unique Apache ID. Look to see if your preferred
ID is already taken at
https://people.apache.org/committer-index.html
This will allow the Secretary to notify the PMC
when your ICLA has been recorded.
When recording of your ICLA is noted, you will
receive a follow-up message with the next steps for
establishing you as a PMC.
```
### PMC member Accept Template
```text
To: `NEW_PMC_EMAIL`
Cc: private@hertzbeat.apache.org
Subject: Re: invitation to become HertzBeat PMC member
```
```text
Welcome. Here are the next steps in becoming a project PMC. After that
we will make an announcement to the dev@hertzbeat.apache.org list.
You need to send a Contributor License Agreement to the ASF.
Normally you would send an Individual CLA. If you also make
contributions done in work time or using work resources,
see the Corporate CLA. Ask us if you have any issues.
https://www.apache.org/licenses/#clas.
You need to choose a preferred ASF user name and alternatives.
In order to ensure it is available you can view a list of taken IDs at
https://people.apache.org/committer-index.html
Please notify us when you have submitted the CLA and by what means
you did so. This will enable us to monitor its progress.
We will arrange for your Apache user account when the CLA has
been recorded.
After that is done, please make followup replies to the dev@hertzbeat.apache.org list.
We generally discuss everything there and keep the
private@hertzbeat.apache.org list for occasional matters which must be private.
The developer section of the website describes roles within the ASF and provides other
resources:
https://www.apache.org/foundation/how-it-works.html
https://www.apache.org/dev/
The incubator also has some useful information for new PMC
in incubating projects:
https://incubator.apache.org/guides/committer.html
https://incubator.apache.org/guides/ppmc.html
Just as before you became a PMC member, participation in any ASF community
requires adherence to the ASF Code of Conduct:
https://www.apache.org/foundation/policies/conduct.html
Yours,
The Apache HertzBeat PMC
```
### PMC member Done Template
```text
To: private@hertzbeat.apache.org, `NEW_PMC_EMAIL`
Subject: account request: `NEW_PMC_NAME`
```
```text
`NEW_PMC_EMAIL`, as you know, the ASF Infrastructure has set up your
committer account with the username '`NEW_PMC_APACHE_NAME`'.
Please follow the instructions to set up your SSH,
svn password, svn configuration, email forwarding, etc.
https://www.apache.org/dev/#committers
You have commit access to specific sections of the
ASF repository, as follows:
The general "committers" at:
https://svn.apache.org/repos/private/committers
If you have any questions during this phase, then please
see the following resources:
Apache developer's pages: https://www.apache.org/dev/
Incubator committer guide: https://incubator.apache.org/guides/committer.html
Naturally, if you don't understand anything be sure to ask us on the dev@hertzbeat.apache.org mailing list.
Documentation is maintained by volunteers and hence can be out-of-date and incomplete - of course
you can now help fix that.
A PMC member will announce your election to the dev list soon.
```
### PMC member Announce Template
```text
To: dev@hertzbeat.apache.org
[ANNOUNCE] new PMC member: `NEW_PMC_NAME`
```
```text
Hi HertzBeat Community,
The Podling Project Management Committee (PMC) for Apache HertzBeat
has invited `NEW_PMC_NAME` to become our PMC member and
we are pleased to announce that he has accepted.
### add specific details here ###
Please join me in congratulating `NEW_PMC_NAME`!
Being a committer enables easier contribution to the
project since there is no need to go via the patch
submission process. This should enable better productivity.
A PMC member helps manage and guide the direction of the project.
Thanks,
On behalf of the Apache HertzBeat PMC
```
+72
View File
@@ -0,0 +1,72 @@
---
id: 'submit_code'
title: 'Submit Code'
sidebar_position: 2
---
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
* First from the remote repository [https://github.com/apache/hertzbeat.git](https://github.com/apache/hertzbeat.git) fork a copy of the code into your own repository
* The remote dev and merge branch is `master`.
* Clone your repository to your local
```shell
git clone git@github.com:<Your Github ID>/hertzbeat.git
```
* Add remote repository address, named upstream
```shell
git remote add upstream git@github.com:apache/hertzbeat.git
```
* View repository
```shell
git remote -v
```
> At this time, there will be two repositories: origin (your own repository) and upstream (remote repository)
* Get/Update remote repository code
```shell
git fetch upstream
```
* Synchronize remote repository code to local repository
```shell
git checkout origin/dev
git merge --no-ff upstream/dev
```
* **⚠️Note that you must create a new branch to develop features `git checkout -b feature-xxx`. It is not recommended to use the master branch for direct development**
* After modifying the code locally, submit it to your own repository:
**Note that the submission information does not contain special characters**
```shell
git commit -m 'commit content'
git push
```
* Submit changes to the remote repository, you can see a green button "Compare & pull request" on your repository page, click it.
* Select the modified local branch and the branch you want to merge with the past, you need input the message carefully, describe doc is important as code, click "Create pull request".
* Then the community Committers will do CodeReview, and then he will discuss some details (design, implementation, performance, etc.) with you, afterward you can directly update the code in this branch according to the suggestions (no need to create a new PR). When this pr is approved, the commit will be merged into the master branch
* Finally, congratulations, you have become an official contributor to HertzBeat ! You will be added to the contributor wall, you can contact the community to obtain a contributor certificate.
+131
View File
@@ -0,0 +1,131 @@
---
id: download
title: Download Apache HertzBeat - Latest Release
sidebar_label: Download
description: Download Apache HertzBeat monitoring system - server, collector, source code, and Docker Compose packages with signatures and checksums.
---
## How to Download HertzBeat?
Download the latest Apache HertzBeat™ release (v1.8.0) as server binary, collector binary, source code, or Docker Compose package. All releases include GPG signatures and SHA512 checksums for verification.
**Latest Version:** v1.8.0 (Released: February 5, 2026)
**Quick Download:**
- [Server Binary](https://www.apache.org/dyn/closer.lua/hertzbeat/1.8.0/apache-hertzbeat-1.8.0-bin.tar.gz)
- [Collector Binary](https://www.apache.org/dyn/closer.lua/hertzbeat/1.8.0/apache-hertzbeat-collector-1.8.0-bin.tar.gz)
- [Source Code](https://www.apache.org/dyn/closer.lua/hertzbeat/1.8.0/apache-hertzbeat-1.8.0-src.tar.gz)
## Download Package Types
| Package Type | Size | Purpose | Platform |
|-------------|------|---------|----------|
| **Server Binary** | ~200MB | Main monitoring server | Linux, macOS, Windows |
| **Collector Binary** | ~50MB | Distributed collectors | Linux, macOS, Windows |
| **Source Code** | ~30MB | Build from source | Any with Java 25+ |
| **Docker Compose** | ~5MB | Full stack deployment | Docker environments |
:::tip Native Collector Recommendation
If you do not need external JDBC drivers from `ext-lib`, you can choose the native collector package for faster startup and lower memory usage. MySQL, MariaDB, and OceanBase are included in this native-friendly path when `mysql-connector-j` is not provided. TiDB follows the same rule for its SQL query metric set.
Trade-offs: native packages are platform-specific and do not support runtime `ext-lib` JDBC loading. See [Native Collector Guide](start/native-collector).
:::
:::tip Security Verification
Verify downloads using GPG signatures and SHA512 checksums. See [Apache Verification Guide](https://www.apache.org/dyn/closer.cgi#verify) and [HertzBeat KEYS](https://downloads.apache.org/hertzbeat/KEYS).
:::
## Latest Release (Recommended)
:::tip Security Notice
Previous releases may contain security vulnerabilities. Always use the latest version.
:::
| Version | Date | Download | Release |
|---------|------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------|
| v1.8.0 | 2026.02.05 | [apache-hertzbeat-1.8.0-bin.tar.gz](https://www.apache.org/dyn/closer.lua/hertzbeat/1.8.0/apache-hertzbeat-1.8.0-bin.tar.gz) (Server) ( [signature](https://downloads.apache.org/hertzbeat/1.8.0/apache-hertzbeat-1.8.0-bin.tar.gz.asc) , [sha512](https://downloads.apache.org/hertzbeat/1.8.0/apache-hertzbeat-1.8.0-bin.tar.gz.sha512) ) <br/> [apache-hertzbeat-collector-1.8.0-bin.tar.gz](https://www.apache.org/dyn/closer.lua/hertzbeat/1.8.0/apache-hertzbeat-collector-1.8.0-bin.tar.gz) (Collector) ( [signature](https://downloads.apache.org/hertzbeat/1.8.0/apache-hertzbeat-collector-1.8.0-bin.tar.gz.asc) , [sha512](https://downloads.apache.org/hertzbeat/1.8.0/apache-hertzbeat-collector-1.8.0-bin.tar.gz.sha512) ) <br/> [apache-hertzbeat-1.8.0-src.tar.gz](https://www.apache.org/dyn/closer.lua/hertzbeat/1.8.0/apache-hertzbeat-1.8.0-src.tar.gz) (Source Code) ( [signature](https://downloads.apache.org/hertzbeat/1.8.0/apache-hertzbeat-1.8.0-src.tar.gz.asc) , [sha512](https://downloads.apache.org/hertzbeat/1.8.0/apache-hertzbeat-1.8.0-src.tar.gz.sha512) ) <br/> [apache-hertzbeat-1.8.0-docker-compose.tar.gz](https://github.com/apache/hertzbeat/releases/download/1.8.0/apache-hertzbeat-1.8.0-docker-compose.tar.gz) (Docker Compose) ( [signature](https://downloads.apache.org/hertzbeat/1.8.0/apache-hertzbeat-1.8.0-docker-compose.tar.gz.asc) , [sha512](https://downloads.apache.org/hertzbeat/1.8.0/apache-hertzbeat-1.8.0-docker-compose.tar.gz.sha512) ) | [note](https://github.com/apache/hertzbeat/releases/tag/1.8.0) |
## Release Docker Image
> Apache HertzBeat™ provides a docker image for each release. You can pull the image from the [Docker Hub](https://hub.docker.com/r/apache/hertzbeat).
- HertzBeat [https://hub.docker.com/r/apache/hertzbeat](https://hub.docker.com/r/apache/hertzbeat)
- HertzBeat Collector [https://hub.docker.com/r/apache/hertzbeat-collector](https://hub.docker.com/r/apache/hertzbeat-collector)
## All Archived Releases
For older releases, please check the [archive](https://archive.apache.org/dist/incubator/hertzbeat/).
## Download FAQ
### Which package should I download?
**Server Binary** - For most users. Includes the main HertzBeat monitoring server with web UI.
**Collector Binary** - For distributed deployments. Deploy collectors in remote networks to report to the main server.
Native collector downloads are platform-specific, for example `apache-hertzbeat-collector-native-{version}-linux-amd64-bin.tar.gz` or `apache-hertzbeat-collector-native-{version}-windows-amd64-bin.zip`.
If you are deciding between JVM and native collector packages, start with [Native Collector Guide](start/native-collector).
**Source Code** - For developers who want to build, modify, or contribute to HertzBeat.
**Docker Compose** - For quick all-in-one deployment with database and time-series storage.
### How do I verify the download?
1. Download the GPG signature (.asc) and checksum (.sha512) files
2. Verify signature: `gpg --verify apache-hertzbeat-*.tar.gz.asc apache-hertzbeat-*.tar.gz`
3. Verify checksum: `sha512sum -c apache-hertzbeat-*.tar.gz.sha512`
Import Apache HertzBeat KEYS first: `wget https://downloads.apache.org/hertzbeat/KEYS && gpg --import KEYS`
### What are the system requirements?
**Server Binary Requirements:**
- Java 25 or higher
- 4GB RAM minimum (8GB recommended)
- 2 CPU cores minimum
- 20GB disk space
**Collector Binary Requirements:**
- Java 25 or higher
- 2GB RAM minimum
- 1 CPU core minimum
- 5GB disk space
Native collector packages are published per target platform, while the JVM collector package remains cross-platform.
### Can I use Docker instead of binary packages?
Yes. Docker is the recommended installation method:
```bash
docker run -d -p 1157:1157 -p 1158:1158 --name hertzbeat apache/hertzbeat
```
### How do I extract and run the binary?
```bash
tar -xzf apache-hertzbeat-1.8.0-bin.tar.gz
cd apache-hertzbeat-1.8.0
./bin/startup.sh
```
Access web UI at `http://localhost:1157` with credentials admin/hertzbeat
### What's the difference between releases?
Each release includes bug fixes, security patches, and new features. The release notes link in the download table details specific changes.
**Always use the latest release** for security and stability.
### Where can I find old versions?
Previous versions are archived at [https://archive.apache.org/dist/incubator/hertzbeat/](https://archive.apache.org/dist/incubator/hertzbeat/)
### How often are new versions released?
HertzBeat follows a regular release schedule with new versions approximately every 2-3 months. Security patches may be released more frequently.
+106
View File
@@ -0,0 +1,106 @@
---
id: redis_sentinel
title: Monitoring Redis Sentinel
sidebar_label: Redis Sentinel
keywords: [open-source monitoring system, open-source database monitoring, Redis Sentinel monitoring]
---
> Collect and monitor Redis Sentinel instances for key performance metrics.
## Pre-monitoring Requirements
> Before adding the Redis Sentinel monitor, please ensure the following:
1. The Redis Sentinel service is running and the sentinel port (default **26379**) is accessible from the HertzBeat server.
2. If authentication is configured on the Sentinel instance, prepare the username and password.
3. No firewall rules are blocking the sentinel port between HertzBeat and the target host.
## Configuration Parameters
| Parameter | Parameter Help Description |
| --------- | -------------------------- |
| Target Host | The IPv4, IPv6 address or domain name of the host being monitored. Note: do not include protocol headers, e.g. `192.168.0.1`. |
| Port | The listening port of the Redis Sentinel instance. Default: **26379**. |
| Timeout | Timeout value for the connection, in milliseconds. Default: `3000`. |
| Username | The username used to authenticate with the Redis Sentinel instance. Optional. |
| Password | The password used to authenticate with the Redis Sentinel instance. Optional. |
| Collection Interval | How often HertzBeat polls this monitor, in seconds. Minimum value: 30s. |
| Description/Remarks | Additional notes and descriptions for this monitor. |
## Collection Metrics
### Metric Set: sentinel
> Sentinel overview metrics collected via `INFO sentinel`.
| Metric Name | Metric Unit | Metric Help Description |
| ----------- | ----------- | ----------------------- |
| sentinel_masters | None | Total number of Redis master nodes monitored by this Sentinel instance. |
| sentinel_tilt | None | Whether the Sentinel is currently in TILT mode (time-skew safety mode). `1` means TILT is active, `0` means normal. |
| sentinel_running_scripts | None | Number of Lua scripts currently being executed by the Sentinel. |
| sentinel_timedout_scripts | None | Number of scripts that have timed out. |
| sentinel_scripts_queue_length | None | Number of scripts currently waiting in the execution queue. |
| sentinel_simulate_failure_flags | None | Bitmask flags used for failure simulation testing (via `SENTINEL SIMULATE-FAILURE`). |
### Metric Set: master_status
> Status information for each monitored Redis master node.
| Metric Name | Metric Unit | Metric Help Description |
| ----------- | ----------- | ----------------------- |
| master0 | None | Status string for the first monitored master, e.g. `name=mymaster,status=ok,address=127.0.0.1:6379,slaves=1,sentinels=3`. |
| master1 | None | Status string for the second monitored master (if present). |
| master2 | None | Status string for the third monitored master (if present). |
### Metric Set: server
> Server-level information for the Sentinel process, collected via `INFO server`.
| Metric Name | Metric Unit | Metric Help Description |
| ----------- | ----------- | ----------------------- |
| redis_version | None | Version string of the Redis (Sentinel) binary. |
| os | None | Operating system on which the Sentinel is running. |
| arch_bits | None | CPU architecture (32 or 64 bits). |
| process_id | None | PID of the Sentinel server process. |
| tcp_port | None | The TCP port on which the Sentinel is listening. |
| uptime_in_seconds | s | Number of seconds since the Sentinel process started. |
| uptime_in_days | d | Number of days since the Sentinel process started. |
| hz | None | Frequency of the server's background event loop (calls per second). |
| executable | None | Absolute path to the server executable. |
| config_file | None | Absolute path to the sentinel configuration file. |
### Metric Set: clients
> Client connection statistics, collected via `INFO clients`.
| Metric Name | Metric Unit | Metric Help Description |
| ----------- | ----------- | ----------------------- |
| connected_clients | None | Number of client connections currently open (excluding connections from replicas). |
| blocked_clients | None | Number of clients blocked waiting on a blocking command (e.g. BLPOP, WAIT). |
| maxclients | None | The configured maximum number of client connections allowed. |
| client_recent_max_input_buffer | None | Largest input buffer size (in bytes) seen across all current client connections. |
| client_recent_max_output_buffer | None | Largest output buffer size (in bytes) seen across all current client connections. |
### Metric Set: stats
> General statistics, collected via `INFO stats`.
| Metric Name | Metric Unit | Metric Help Description |
| ----------- | ----------- | ----------------------- |
| total_connections_received | None | Total number of connections accepted by the server since startup. |
| total_commands_processed | None | Total number of commands processed by the server since startup. |
| instantaneous_ops_per_sec | None | Number of commands processed per second (real-time snapshot). |
| rejected_connections | None | Number of connections rejected because the `maxclients` limit was reached. |
| total_net_input_bytes | None | Total bytes of data received from clients since startup. |
| total_net_output_bytes | None | Total bytes of data sent to clients since startup. |
### Metric Set: cpu
> CPU consumption statistics, collected via `INFO cpu`.
| Metric Name | Metric Unit | Metric Help Description |
| ----------- | ----------- | ----------------------- |
| used_cpu_sys | None | System CPU time consumed by the Sentinel server process (kernel mode). |
| used_cpu_user | None | User CPU time consumed by the Sentinel server process (user mode). |
| used_cpu_sys_children | None | System CPU time consumed by the background child processes (kernel mode). |
| used_cpu_user_children | None | User CPU time consumed by the background child processes (user mode). |
+145
View File
@@ -0,0 +1,145 @@
---
id: activemq
title: Monitoring Apache ActiveMQ
sidebar_label: Apache ActiveMQ
keywords: [open source monitoring tool, monitoring Apache ActiveMQ metrics]
---
> Monitoring the running status of Apache ActiveMQ message middleware, nodes, topics and other related metrics.
**Use Protocol: JMX**
## Pre-monitoring Operations
>
> You need to enable the `JMX` service on ActiveMQ, HertzBeat uses the JMX protocol to collect metrics from ActiveMQ.
1. Modify the `conf/activemq.xml` file in the installation directory to enable JMX
> Add `userJmx="true"` attribute in `broker` tag
```xml
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}" useJmx="true">
<!-- others -->
</broker>
```
2. Modify the `bin/env` file in the installation directory, configure the JMX port IP, etc.
The original configuration information will be as follows
```text
# ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.port=11099"
# ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.password.file=`ACTIVEMQ_CONF`/jmx.password"
# ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.access.file=`ACTIVEMQ_CONF`/jmx.access"
# ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.ssl=false"
ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote"
```
Update to the following configuration, ⚠️ pay attention to modify `local external IP`
```text
# ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.password.file=`ACTIVEMQ_CONF`/jmx.password"
# ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.access.file=`ACTIVEMQ_CONF`/jmx.access"
ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.port=11099"
ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.ssl=false"
ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.authenticate=false"
ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Djava.rmi.server.hostname=本机对外IP"
ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote"
```
3. Restart the ACTIVEMQ service, and add the corresponding ActiveMQ monitoring in HertzBeat. The parameters use the IP port configured by JMX.
### Configuration parameters
| Parameter name | Parameter help description |
|----------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Monitoring Host | The peer IPV4, IPV6 or domain name to be monitored. Note ⚠️Without protocol header (eg: https://, http://). |
| Monitoring name | The name that identifies this monitoring, and the name needs to be unique. |
| JMX port | The HTTP port provided by JMX, the default is 11099. |
| JMX URL | Optional, customize the JMX URL connection |
| Username | Username used for authentication |
| password | password used for authentication |
| Acquisition Interval | Interval time for monitoring periodic data collection, in seconds, the minimum interval that can be set is 30 seconds |
| Whether to detect | Whether to detect and check the availability of monitoring before adding monitoring, and the operation of adding and modifying will continue after the detection is successful |
| Description Remarks | More remark information to identify and describe this monitoring, users can remark information here |
### Collect Metrics
#### metrics: broker
| Metric Name | Unit | Description |
|-------------------------|------|-----------------------------------------------------------------------|
| BrokerName | None | The name of the broker. |
| BrokerVersion | None | The version of the broker. |
| Uptime | None | Uptime of the broker. |
| UptimeMillis | ms | Uptime of the broker in milliseconds. |
| Persistent | None | Messages are synchronized to disk. |
| MemoryPercentUsage | % | Percent of memory limit used. |
| StorePercentUsage | % | Percent of store limit used. |
| TempPercentUsage | % | Percent of temp limit used. |
| CurrentConnectionsCount | None | Attribute exposed for management |
| TotalConnectionsCount | None | Attribute exposed for management |
| TotalEnqueueCount | None | Number of messages that have been sent to the broker. |
| TotalDequeueCount | None | Number of messages that have been acknowledged on the broker. |
| TotalConsumerCount | None | Number of message consumers subscribed to destinations on the broker. |
| TotalProducerCount | None | Number of message producers active on destinations on the broker. |
| TotalMessageCount | None | Number of unacknowledged messages on the broker. |
| AverageMessageSize | None | Average message size on this broker |
| MaxMessageSize | None | Max message size on this broker |
| MinMessageSize | None | Min message size on this broker |
#### metrics: topic
| Metric Name | Unit | Description |
|--------------------|------|-------------------------------------------------------------------------------------------|
| Name | None | Name of this destination. |
| MemoryLimit | MB | Memory limit, in bytes, used by undelivered messages before paging to temporary storage. |
| MemoryPercentUsage | None | The percentage of the memory limit used |
| ProducerCount | None | Number of producers attached to this destination |
| ConsumerCount | None | Number of consumers subscribed to this destination. |
| EnqueueCount | None | Number of messages that have been sent to the destination. |
| DequeueCount | None | Number of messages that has been acknowledged (and removed) from the destination. |
| ForwardCount | None | Number of messages that have been forwarded (to a networked broker) from the destination. |
| InFlightCount | None | Number of messages that have been dispatched to, but not acknowledged by, consumers. |
| DispatchCount | None | Number of messages that has been delivered to consumers, including those not acknowledged |
| ExpiredCount | None | Number of messages that have been expired. |
| StoreMessageSize | B | The memory size of all messages in this destination's store. |
| AverageEnqueueTime | ms | Average time a message was held on this destination. |
| MaxEnqueueTime | ms | The longest time a message was held on this destination |
| MinEnqueueTime | ms | The shortest time a message was held on this destination |
| TotalBlockedTime | ms | Total time (ms) messages have been blocked by flow control |
| AverageMessageSize | B | Average message size on this destination |
| MaxMessageSize | B | Max message size on this destination |
| MinMessageSize | B | Min message size on this destination |
#### metrics: memory_pool
| Metric Name | Unit | Description |
|-------------|------|--------------|
| name | | metrics name |
| committed | kb | total size |
| init | kb | init size |
| max | kb | max size |
| used | kb | used size |
#### metrics: class_loading
| Metric Name | Unit | Description |
|-----------------------|------|--------------------------|
| LoadedClassCount | | Loaded Class Count |
| TotalLoadedClassCount | | Total Loaded Class Count |
| UnloadedClassCount | | Unloaded Class Count |
#### metrics: thread
| Metric Name | Unit | Description |
|-------------------------|------|----------------------------|
| TotalStartedThreadCount | | Total Started Thread Count |
| ThreadCount | | Thread Count |
| PeakThreadCount | | Peak Thread Count |
| DaemonThreadCount | | Daemon Thread Count |
| CurrentThreadUserTime | ms | Current Thread User Time |
| CurrentThreadCpuTime | ms | Current Thread Cpu Time |
+360
View File
@@ -0,0 +1,360 @@
---
id: ai_agent
title: HertzBeat AI Agent User Guide
sidebar_label: HertzBeat AI
keywords: [AI, Chat, Agent, Monitoring, AI Agent, OpenAI]
---
> HertzBeat AI Agent is an intelligent monitoring AI Agent that helps you manage monitors, configure alerts, and optimize your infrastructure monitoring through natural language conversation.
## Overview
The HertzBeat AI Agent feature provides an interactive chat interface where you can:
**Monitor Management:**
- 🔍 Query and filter existing monitors by status, type, host, and labels
- Add new monitors for websites, APIs, databases, and services
- 📊 Get detailed information about available monitor types and their parameters
- ⚡ Check monitor status and troubleshoot monitoring issues
**Alert Management:**
- 🚨 Query active alerts with comprehensive filtering (type, status, search)
- 📈 Get alert summary statistics and distribution
- 🔔 View both single and grouped alerts
- 📋 Analyze alert patterns and trends
**Metrics Analysis:**
- 📊 Retrieve real-time metrics data for any monitor
- 📈 Access historical metrics with customizable time ranges
- 💾 Check warehouse storage system status
- 🔍 Query specific metric fields and labels
**Alert Rule Management:**
- ⚙️ Configure alert rules and thresholds
- 📝 Manage alert definitions for different monitor types
- 🎯 Set up custom alerting criteria
## Prerequisites
Before using the AI Agent, ensure:
1 **OpenAI Configuration**: Valid OpenAI API key must be configured. Optionally, you can change the model in `application.yml` under `spring.ai.openai.chat.options.model` (default is `gpt-4.1-nano`).
2 **Database Connection**: HertzBeat database must be accessible for monitor operations
## Configuration
### OpenAI API Key Setup
The AI Agent uses OpenAI's GPT models. You need to configure an OpenAI API key in this ways:
#### Database Configuration via UI
1. Navigate to the AI Agent interface
2. If no API key is configured, you'll see a configuration dialog
3. Enter your OpenAI API key
4. Click **Save Configuration**
### Configuration Priority
- **Database configuration** takes priority over YAML configuration
- Configuration changes are applied immediately without restart
- Invalid API keys are automatically validated before saving
## Using the AI Agent
### Accessing the Chat Interface
1. Navigate to the **AI Agent** section in HertzBeat web interface
2. You'll see the HertzBeat Monitoring AI Agent welcome screen
3. Start typing your questions in the chat input field
### Sample Conversations
#### Adding a New Monitor
```text
You: Add a new HTTP monitor for my website https://example.com
AI Agent: I'll help you add an HTTP monitor for https://example.com.
Let me create that monitor with the following configuration:
- Name: example.com Website Monitor
- Type: HTTP
- Host: example.com
- Port: 443 (HTTPS)
- Path: /
- Interval: 60 seconds
Monitor created successfully with ID: 12345
```
#### Listing Existing Monitors
```text
You: Show me all my current monitors
AI Agent: Here are your current monitors:
1. **Linux Server** (ID: 1001)
- Status: ✅ Online
- Host: 192.168.1.100
- Last Check: 2 minutes ago
2. **MySQL Database** (ID: 1002)
- Status: ⚠️ Warning
- Host: db.example.com
- Last Check: 30 seconds ago
3. **Website Monitor** (ID: 1003)
- Status: ✅ Online
- Host: https://example.com
- Last Check: 1 minute ago
Would you like details on any specific monitor?
```
#### Getting Monitor Type Information
```text
You: What parameters do I need to monitor a PostgreSQL database?
AI Agent: To monitor a PostgreSQL database, you'll need these parameters:
**Required Parameters:**
- **Host**: Database server IP/hostname
- **Port**: PostgreSQL port (default: 5432)
- **Database**: Database name to connect to
- **Username**: Database username
- **Password**: Database password
**Optional Parameters:**
- **Timeout**: Connection timeout (default: 6000ms)
- **Query Timeout**: SQL query timeout (default: 3000ms)
- **SSL**: Enable SSL connection (default: false)
Would you like me to help you add a PostgreSQL monitor?
```
#### Alert Management
```text
You: Show me all critical alerts from the last 24 hours
AI Agent: Here are the critical alerts from the last 24 hours:
🚨 **Active Alerts (3 firing)**
1. **High CPU Usage** - Linux Server (ID: 1001)
- Status: 🔥 Firing
- Triggered: 2 hours ago
- Severity: Critical
- Message: CPU usage 95% > threshold 90%
2. **Database Connection Failed** - MySQL Database (ID: 1002)
- Status: 🔥 Firing
- Triggered: 45 minutes ago
- Severity: Critical
- Message: Connection timeout after 10 seconds
3. **Website Response Time** - Website Monitor (ID: 1003)
- Status: ⚠️ Warning
- Triggered: 15 minutes ago
- Severity: Warning
- Message: Response time 5.2s > threshold 3s
**Alert Summary:**
- Total alerts: 12
- Firing: 3 (2 critical, 1 warning)
- Resolved: 9
Would you like me to help you investigate any specific alert?
```
#### Metrics Analysis
```text
You: Show me the CPU usage for my Linux server over the last 6 hours
AI Agent: Here's the CPU usage data for your Linux server (Monitor ID: 1001) over the last 6 hours:
📊 **CPU Usage Metrics - Last 6 Hours**
```
Time | Usage (%) | Load Avg | Processes
14:00-15:00 | 45.2% | 1.2 | 156
15:00-16:00 | 67.8% | 2.1 | 178
16:00-17:00 | 89.4% | 3.8 | 195
17:00-18:00 | 92.1% | 4.2 | 203
18:00-19:00 | 94.7% | 4.8 | 210
19:00-20:00 | 88.3% | 3.5 | 188
``` text
**Analysis:**
- Peak usage: 94.7% at 19:00
- Average usage: 79.6%
- Trend: High usage sustained for 3+ hours
- Current status: Decreasing (88.3%)
**Real-time metrics:**
- Current CPU: 76.2%
- Memory usage: 82.1%
- Disk I/O: Normal
Would you like me to check historical data for comparison or investigate the high usage cause?
```
#### Alert Rule Configuration
```text
You: Set up an alert rule for when my website response time exceeds 5 seconds
AI Agent: I'll help you create an alert rule for website response time monitoring.
**Alert Rule Configuration:**
- **Monitor Type**: HTTP/Website
- **Metric**: Response Time
- **Condition**: Greater than 5 seconds
- **Severity**: Warning
- **Evaluation**: Check every 60 seconds
- **Notification**: Email + Dashboard
**Proposed Rule:**
```yaml
name: "Website Response Time Alert"
condition: "response_time > 5000ms"
severity: "warning"
description: "Alert when website response time exceeds 5 seconds"
evaluation_interval: 60s
for: 2m # Alert after condition persists for 2 minutes
```
This rule will:
1. Monitor response time every minute
2. Trigger alert if response time > 5s for 2+ minutes
3. Send notifications via configured channels
4. Show in dashboard with warning status
Would you like me to apply this configuration or modify any settings?
``` text
### Chat Features
#### Message History
- All conversations are automatically saved
- Access previous conversations from the sidebar
- Search through conversation history
- Export conversation logs
#### Real-time Responses
- Streaming responses for immediate feedback
- Typing indicators show when the assistant is processing
- Cancel ongoing requests if needed
#### Conversation Management
- Create new conversations for different topics
- Rename conversations for better organization
- Delete old conversations to keep things clean
Note: Conversations are not saved in the database
## Troubleshooting
### Common Issues
#### Chat Interface Not Loading
**Symptoms**: Chat interface shows loading spinner indefinitely
**Solutions**:
1. Check browser console for JavaScript errors
2. Ensure network connectivity to HertzBeat server
#### "Service Unavailable" Message
**Symptoms**: Chat shows "HertzBeat AI monitoring service unavailable"
**Solutions**:
1.Verify OpenAI API key configuration
2.Check application logs for errors
3.Ensure database connectivity
#### Invalid API Key Error
**Symptoms**: Configuration dialog shows "Invalid API key" error
**Solutions**:
1. Verify your OpenAI API key starts with `sk-`
2. Check API key has sufficient credits/quota
3. Test API key directly with OpenAI API
4. Ensure no extra spaces in the API key
#### Monitor Creation Failures
**Symptoms**: AI suggests monitor configuration but creation fails
**Solutions**:
1. Verify you have permissions to create monitors
2. Check if monitor with same name already exists
3. Ensure target host/service is accessible
4. Review monitor parameter validation errors
### Debug Mode
Enable debug logging by setting log level to DEBUG for:
```yaml
logging:
level:
org.apache.hertzbeat.ai.agent: DEBUG
```
## Best Practices
### Effective Chat Usage
1. **Be Specific**: "Add HTTP monitor for api.example.com port 8080" vs "add a monitor"
2. **Provide Context**: Mention if you want production vs test monitors
3. **Ask Follow-ups**: Request configuration details if needed
4. **Use Natural Language**: The AI understands conversational requests
### Monitor Management
1. **Naming Convention**: Use descriptive monitor names
2. **Documentation**: Ask the AI to document complex configurations
### Security Considerations
1. **API Key Security**: Store OpenAI API keys securely
2. **Access Control**: Limit AI chat access to authorized users
3. **Data Privacy**: Be mindful of sensitive information in chat logs
4. **Network Security**: Ensure secure connections to OpenAI API
## Advanced Features
### Bulk Operations
```text
You: Add HTTP monitors for all services in my staging environment:
- api-staging.example.com:8080
- web-staging.example.com:80
- admin-staging.example.com:3000
```
## Limitations
- Requires active internet connection for OpenAI API
- OpenAI API usage incurs costs based on token consumption
- Complex multi-step operations may require multiple interactions
- Some advanced configurations may need manual setup
- Rate limiting may apply based on OpenAI plan
## Support
For issues with AI Agent:
1. Check this documentation first
2. Review application logs for errors
3. Test OpenAI API connectivity independently
4. Contact HertzBeat support with specific error messages
---
+38
View File
@@ -0,0 +1,38 @@
---
id: airflow
title: Monitoring Apache Airflow
sidebar_label: Apache Airflow
keywords: [open source monitoring system, open source database monitoring, Apache Airflow monitoring]
---
> Collect and monitor general performance metrics for the Apache Airflow.
## Configuration Parameters
| Parameter Name | Parameter Description |
|---------------------|---------------------------------------------------------------------------------------------------------------------------------|
| Monitor Host | IP address, IPV4, IPV6, or domain name of the host being monitored. Note ⚠️ without protocol prefix (e.g., https://, http://). |
| Task Name | Name identifying this monitoring, ensuring uniqueness. |
| Port | Port number of the database exposed to the outside, default is 8080. |
| Query Timeout | Set timeout for unresponsive connections, in milliseconds (ms), default is 3000ms. |
| HTTPS | Whether to enable HTTPS. |
| Collection Interval | Interval for periodic data collection during monitoring, in seconds, with a minimum interval of 30 seconds. |
| Whether to detect | Whether to perform a probe check for monitoring availability before adding a new monitor; operations proceed if successful. |
| Description | Additional information to identify and describe this monitoring, where users can add remarks. |
### Collection Metrics
#### Metric Set: airflow_health
| Metric Name | Metric Unit | Metric Description |
|--------------|-------------|--------------------|
| metadatabase | N/A | Response time |
| scheduler | N/A | scheduler health |
| triggerer | N/A | triggerer health |
#### Metric Set: airflow_version
| Metric Name | Metric Unit | Metric Description |
|-------------|-------------|---------------------|
| value | N/A | Airflow version |
| git_version | N/A | Airflow git version |

Some files were not shown because too many files have changed in this diff Show More