Compare commits

..
Author SHA1 Message Date
tomsun28 0db72b0f02 update 2025-05-04 11:43:51 +08:00
tomsun28 6c7cb62fd8 [refactor] update
Signed-off-by: tomsun28 <tomsun28@outlook.com>
2025-05-04 11:26:21 +08:00
tomsun28andCopilot a5b8a95991 Update hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/util/AlertTemplateUtil.java
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: tomsun28 <tomsun28@outlook.com>
2025-05-04 09:58:09 +08:00
tomsun28 e5693476f2 Merge branch 'master' into encoding-file-default 2025-05-04 00:07:41 +08:00
tomsun28 650d63d6eb [refactor] update
Signed-off-by: tomsun28 <tomsun28@outlook.com>
2025-05-02 16:30:53 +08:00
tomsun28 1f46260469 [refactor] update job
Signed-off-by: tomsun28 <tomsun28@outlook.com>
2025-05-02 16:27:20 +08:00
tomsun28 c73e47711e [refactor] update alert fingerprints column max length
Signed-off-by: tomsun28 <tomsun28@outlook.com>
2025-05-02 16:06:39 +08:00
tomsun28 826e7b1dd9 [refactor] update alert fingerprints column max length
Signed-off-by: tomsun28 <tomsun28@outlook.com>
2025-05-02 15:47:54 +08:00
tomsun28 ecb7f82321 [doc] update blog 2025-05-01 20:31:29 +08:00
tomsun28 5ac13827fb [refactor] set default encoding charset utf8
Signed-off-by: tomsun28 <tomsun28@outlook.com>
2025-05-01 20:23:58 +08:00
tomsun28 383ba7d976 [refactor] set default encoding charset utf8
Signed-off-by: tomsun28 <tomsun28@outlook.com>
2025-05-01 19:16:09 +08:00
127 changed files with 1195 additions and 4763 deletions
+1
View File
@@ -6,6 +6,7 @@ Thumbs.db
build/
out/
micronaut-cli.yml
.mvn/
*.log
package-lock.json
*.zip
-17
View File
@@ -1,17 +0,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
#
# 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.
wrapperVersion=3.3.2
distributionType=only-script
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.9/apache-maven-3.9.9-bin.zip
+4 -6
View File
@@ -4,10 +4,9 @@
</a>
</p>
<p align="center">
<b>Readme</b>:
<b><a href="README.md">English</a></b> | <a href="README_CN.md">中文</a> | <a href="README_JP.md">日本語</a>
</p>
<h4 align="center">
<a href="README.md">English Document</a> | <a href="README_CN.md">中文文档</a>
</h4>
> A real-time monitoring system with agentless, performance cluster, prometheus-compatible, custom monitoring and status page building capabilities.
@@ -20,7 +19,6 @@
[![Artifact Hub](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/hertzbeat)](https://artifacthub.io/packages/search?repo=hertzbeat)
[![YouTube Channel Subscribers](https://img.shields.io/youtube/channel/subscribers/UCri75zfWX0GHqJFPENEbLow?logo=youtube&label=YouTube%20Channel)](https://www.youtube.com/channel/UCri75zfWX0GHqJFPENEbLow)
[![Contribute with Gitpod](https://img.shields.io/badge/Contribute%20with-Gitpod-908a85?logo=gitpod&color=green)](https://gitpod.io/#https://github.com/apache/hertzbeat)
[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/apache/hertzbeat)
**Home: [hertzbeat.apache.org](https://hertzbeat.apache.org)**
**Email: <a href="mailto:dev-subscribe@hertzbeat.apache.org">Mail to `dev-subscribe@hertzbeat.apache.org`</a> to subscribe mailing lists**
@@ -544,7 +542,7 @@ WeChat Group : Add friend `ahertzbeat` and invite to the group.
WeChat Public : Search ID `usthecom`.
[QQ Group](https://qm.qq.com/q/xxqecSC2cw) : Group num `1035688434`
[QQ Group](https://jq.qq.com/?_wv=1027&k=Bud9OzdI) : Group num `630061200`
[Github Discussion](https://github.com/apache/hertzbeat/discussions)
+4 -5
View File
@@ -4,10 +4,9 @@
</a>
</p>
<p align="center">
<b>Readme</b>:
<a href="README.md">English</a> | <b><a href="README_CN.md">中文</a></b> | <a href="README_JP.md">日本語</a>
</p>
<h4 align="center">
<a href="README_CN.md">中文文档</a> | <a href="README.md">English Document</a>
</h4>
> 实时监控系统,无需 Agent,性能集群,兼容 Prometheus,自定义监控和状态页构建能力。
@@ -542,7 +541,7 @@ Thanks these wonderful people, welcome to join us:
微信公众号 : 搜索 ID `usthecom`.
[QQ交流群](https://qm.qq.com/q/xxqecSC2cw) : 群号 `1035688434`
[QQ交流群](https://jq.qq.com/?_wv=1027&k=Bud9OzdI) : 群号 `630061200`
[Github Discussion](https://github.com/apache/hertzbeat/discussions)
-578
View File
@@ -1,578 +0,0 @@
<p align="center">
<a href="https://hertzbeat.apache.org">
<img alt="hertzbeat" src="/home/static/img/hertzbeat-brand.svg" width="260">
</a>
</p>
<p align="center">
<b>Readme</b>:
<a href="README.md">English</a> | <a href="README_CN.md">中文</a> | <b><a href="README_JP.md">日本語</a></b>
</p>
> オープンソースのリアルタイム監視システム、エージェントレス、クラスタ対応、Prometheus互換、カスタムおよびステータスページ付き。
[![Discord](https://img.shields.io/badge/Chat-Discord-7289DA?logo=discord)](https://discord.gg/Fb6M73htGr)
[![Reddit](https://img.shields.io/badge/Reddit-Community-7289DA?logo=reddit)](https://www.reddit.com/r/hertzbeat/)
[![Twitter](https://img.shields.io/twitter/follow/hertzbeat1024?logo=twitter)](https://x.com/hertzbeat1024)
[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/8139/badge)](https://www.bestpractices.dev/projects/8139)
[![codecov](https://codecov.io/gh/apache/HertzBeat/branch/master/graph/badge.svg)](https://app.codecov.io/gh/apache/hertzbeat)
[![Docker Pulls](https://img.shields.io/docker/pulls/apache/hertzbeat?style=%20for-the-badge&logo=docker&label=DockerHub%20Download)](https://hub.docker.com/r/apache/hertzbeat)
[![Artifact Hub](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/hertzbeat)](https://artifacthub.io/packages/search?repo=hertzbeat)
[![YouTube Channel Subscribers](https://img.shields.io/youtube/channel/subscribers/UCri75zfWX0GHqJFPENEbLow?logo=youtube&label=YouTube%20Channel)](https://www.youtube.com/channel/UCri75zfWX0GHqJFPENEbLow)
[![Contribute with Gitpod](https://img.shields.io/badge/Contribute%20with-Gitpod-908a85?logo=gitpod&color=green)](https://gitpod.io/#https://github.com/apache/hertzbeat)
**公式サイト: [hertzbeat.apache.org](https://hertzbeat.apache.org)**
**メール:** メーリングリストに登録するために、<a href="mailto:dev-subscribe@hertzbeat.apache.org">dev-subscribe@hertzbeat.apache.org</a>にメールを送ってください。
## 🎡 <font color="green">紹介</font>
[Apache HertzBeat](https://github.com/apache/hertzbeat) incubating)はオープンソースのリアルタイム監視システム、エージェントレス、クラスタ対応、Prometheus互換、カスタムおよびステータスページ付き。
### 特性
- **モニター・アラーム・通知** を一体化し、Web、データベース、キャッシュ、OS、ミドルウェア、クラウドネイティブ、ネットワークなどをサポート。
- 使いやすさを重視し、マウスのクリックだけで完全なWebベースの操作が可能。
- `Http、Jmx、Ssh、Snmp、jdbc、Prometheus`などのプロトコルを設定可能にし、テンプレート`YML`ファイルをオンラインで設定するだけで、あらゆるメトリクスを収集できるようにします。HertzBeatでオンライン設定するだけで、`K8S``Docker`のような新しい監視タイプに素早く対応できることを想像してみてください。
- `Prometheus`のエコシステム互換、Prometheusが監視できるものを、全てオンライン設定によって監視することができます。
- 高性能で、コレクタークラスタ、マルチアイソレートネットワーク、クラウドエッジをサポート。
- 柔軟なアラーム閾値ルールで、メール、discord、slack、telegramなどを通じてタイムリーに通知。
- 強力なステータスページを簡単に構築し、リアルタイムのステータスをユーザーと共有。
> `HertzBeat`の強力なカスタマイズ、多種類のサポート、高性能および容易な拡張性は、ユーザーが迅速に独自の監視システムを構築するのを支援することを目的としています。
----
![hertzbeat](home/static/img/home/1.png)
![hertzbeat](home/static/img/home/status.png)
![hertzbeat](home/static/img/home/9.png)
----
## 🥐 モジュール
![hertzBeat](home/static/img/docs/hertzbeat-arch.png)
## ⛄ 利用可能
> `mysql`、`Java仮想マシン`、`k8s` などのすべての監視コレクション タイプを `YML` 監視テンプレートとして定義し、ユーザーがそれらをインポートして対応するタイプの監視をサポートできるようにしています。
> カスタマイズされた一般的なモニターのテンプレートを提供することを歓迎します。
- [Website](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-website.yml), [Port Telnet](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-port.yml),
[Http Api](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-api.yml), [Ping Connect](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-ping.yml),
[Jvm](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-jvm.yml), [SiteMap](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-fullsite.yml),
[Ssl Certificate](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-ssl_cert.yml), [SpringBoot2](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-springboot2.yml),
[FTP Server](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-ftp.yml), [SpringBoot3](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-springboot3.yml),
[Udp Port](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-udp_port.yml), [Dns](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-dns.yml),
[Pop3](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-pop3.yml), [Ntp](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-ntp.yml),
[Api Code](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-api_code.yml), [Smtp](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-smtp.yml),
[Nginx](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-nginx.yml)
- [Mysql](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-mysql.yml), [PostgreSQL](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-postgresql.yml),
[MariaDB](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-mariadb.yml), [Redis](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-redis.yml),
[ElasticSearch](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-elasticsearch.yml), [SqlServer](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-sqlserver.yml),
[Oracle](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-oracle.yml), [MongoDB](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-mongodb.yml),
[DM](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-dm.yml), [OpenGauss](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-opengauss.yml),
[ClickHouse](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-clickhouse.yml), [IoTDB](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-iotdb.yml),
[Redis Cluster](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-redis_cluster.yml), [Redis Sentinel](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-redis_sentinel.yml)
[Doris BE](https://github.com/apache/hertzbeat/blob/master/hertzbeat-manager/src/main/resources/define/app-doris_be.yml), [Doris FE](https://github.com/apache/hertzbeat/blob/master/hertzbeat-manager/src/main/resources/define/app-doris_fe.yml),
[Memcached](https://github.com/apache/hertzbeat/blob/master/hertzbeat-manager/src/main/resources/define/app-memcached.yml), [NebulaGraph](https://github.com/apache/hertzbeat/blob/master/hertzbeat-manager/src/main/resources/define/app-nebula_graph.yml)
- [Linux](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-linux.yml), [Ubuntu](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-ubuntu.yml),
[CentOS](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-centos.yml), [Windows](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-windows.yml),
[EulerOS](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-euleros.yml), [Fedora CoreOS](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-coreos.yml),
[OpenSUSE](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-opensuse.yml), [Rocky Linux](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-rockylinux.yml),
[Red Hat](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-redhat.yml), [FreeBSD](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-freebsd.yml),
[AlmaLinux](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-almalinux.yml), [Debian Linux](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-debian.yml)
- [Tomcat](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-tomcat.yml), [Nacos](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-nacos.yml),
[Zookeeper](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-zookeeper.yml), [RabbitMQ](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-rabbitmq.yml),
[Flink](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-flink.yml), [Kafka](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-kafka.yml),
[ShenYu](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-shenyu.yml), [DynamicTp](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-dynamic_tp.yml),
[Jetty](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-jetty.yml), [ActiveMQ](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-activemq.yml),
[Spring Gateway](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-spring_gateway.yml), [EMQX MQTT](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-emqx.yml),
[AirFlow](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-airflow.yml), [Hive](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-hive.yml),
[Spark](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-spark.yml), [Hadoop](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-hadoop.yml)
- [Kubernetes](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-kubernetes.yml), [Docker](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-docker.yml)
- [CiscoSwitch](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-cisco_switch.yml), [HpeSwitch](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-hpe_switch.yml),
[HuaweiSwitch](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-huawei_switch.yml), [TpLinkSwitch](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-tplink_switch.yml),
[H3cSwitch](https://raw.githubusercontent.com/apache/hertzbeat/master/hertzbeat-manager/src/main/resources/define/app-h3c_switch.yml)
- その他、カスタマイズされたモニターテンプレート。
- 通知利用可能 `Discord` `Slack` `Telegram` `Email` `Dingtalk` `WeChat` `FeiShu` `Webhook` `SMS` `ServerChan`
## 🐕 クイックスタート
- HertzBeat をローカルに展開する場合は、以下のデプロイメントドキュメントを参照してください。
### 🍞 HertzBeatのインストール
> HertzBeatは、ソースコードのインストールとブート、Dockerコンテナの実行とインストールパッケージによるインストールとデプロイをサポートし、CPUアーキテクチャはx86/arm64をサポートします。
##### 方式1:Docker
1. `docker` で以下の指令を実行します:
```shell
docker run -d -p 1157:1157 -p 1158:1158 --name hertzbeat apache/hertzbeat
```
2. スタート:`http://localhost:4200`にアクセスします。デフォルトのアカウントとパスワード:`admin/hertzbeat`。
3. コレクタークラスタのデプロイメント(オプション)
```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` :コレクターのユニーク ID。
- `-e MODE=public` :実行モード(パブリッククラスタまたはプライベートクラウドエッジ)。
- `-e MANAGER_HOST=127.0.0.1` :メインhertzbeatサーバーのIP。
- `-e MANAGER_PORT=1158` :メインhertzbeatサーバポート。
詳細ステップ [通过 Docker 方式安装 HertzBeat](https://hertzbeat.apache.org/docs/start/docker-deploy)
##### 方式2:インストールパッケージ
1. リリースパッケージをダウンロード `hertzbeat-xx.tar.gz` [Download](https://hertzbeat.apache.org/docs/download)
2. HertzBeatのymlファイルを設定 `hertzbeat/config/application.yml` (オプション)
3. コマンド`$ ./bin/startup.sh`または`bin/startup.bat`を実行
4. スタート:`http://localhost:4200`にアクセスします。デフォルトのアカウントとパスワード:`admin/hertzbeat`
5. コレクタークラスタのデプロイメント(オプション)
- コレクターパッケージを別のホストにダウンロード `hertzbeat-collector-xx.tar.gz` [Download](https://hertzbeat.apache.org/docs/download)
- コレクターのymlファイルを設定 `hertzbeat-collector/config/application.yml`
```yaml
collector:
dispatch:
entrance:
netty:
enabled: true
identity: ${IDENTITY:}
mode: ${MODE:public}
manager-host: ${MANAGER_HOST:127.0.0.1}
manager-port: ${MANAGER_PORT:1158}
```
- `identity: ${IDENTITY:}`:コレクターのユニークID。
- `mode: ${MODE:public}`:実行モード(パブリッククラスタまたはプライベートクラウドエッジ)。
- `manager-host: ${MANAGER_HOST:127.0.0.1}`:メインhertzbeatサーバーのIP。
- `manager-port: ${MANAGER_PORT:1158}`:メインhertzbeatサーバポート。
- コマンド`$ ./bin/startup.sh`または`bin/startup.bat`を実行。
- `http://localhost:1157`にアクセスし、登録された新しいコレクターを見ることがでます。
詳細ステップ [通过安装包安装HertzBeat](https://hertzbeat.apache.org/docs/start/package-deploy)
##### 方式3:ローカルの実行
1. ローカルの実行には、バックエンドのプロジェクト`manager`とフロントエンドのプロジェクト`web-app`を起動する必要があります。
2. バックエンド:`maven3+`、`java17`と`lombok`の環境は必要です。`YML` 設定を修正し、Java仮想マシンパラメータに`--add-opens=java.base/java.nio=org.apache.arrow.memory.core,ALL-UNNAMED` を追加し、`manager` を起動します。
3. フロントエンド:`nodejs npm angular-cli`の環境は必要です。ローカルのバックエンドが立ち上がったら、`web-app` ディレクトリで `ng serve --open` というコマンドを実行します。
4. スタート:`http://localhost:4200`にアクセスします。デフォルトのアカウントとパスワード:`admin/hertzbeat`。
詳細ステップ [貢献ガイド](CONTRIBUTING.md)
##### 方式4:Docker-Compose
[Docker-Compose 部署脚本](script/docker-compose)でpostgresql/mysqlデータベース、victoria-metrics、iotdb、またはtdengine時系列データベースとHertzbeat一括デプロイ。
詳細ステップ [通过 Docker-Compose 安装 HertzBeat](script/docker-compose/README.md)
##### 方式5:Kubernetes Helm Charts
Helm ChartでHertzBeatクラスタコンポーネントをKubernetesクラスタに一括デプロイ。
詳細ステップ [Artifact Hub](https://artifacthub.io/packages/helm/hertzbeat/hertzbeat)
**HAVE FUN**
## ✨ Contributors
Thanks these wonderful people, welcome to join us:
[貢献ガイド](CONTRIBUTING.md)
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<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> <a href="https://github.com/apache/hertzbeat/commits?author=Ceilzcx" title="Tests">⚠️</a> <a href="#blog-Ceilzcx" title="Blogposts">📝</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> <a href="https://github.com/apache/hertzbeat/commits?author=TJxiaobao" title="Tests">⚠️</a> <a href="#design-TJxiaobao" title="Design">🎨</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> <a href="#design-hudongdong129" title="Design">🎨</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> <a href="#blog-zqr10159" title="Blogposts">📝</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Azqr10159" title="Bug reports">🐛</a> <a href="https://github.com/apache/hertzbeat/commits?author=zqr10159" title="Tests">⚠️</a> <a href="#design-zqr10159" title="Design">🎨</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> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Al646505418" title="Bug reports">🐛</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> <a href="https://github.com/apache/hertzbeat/issues?q=author%3ACarpe-Wang" title="Bug reports">🐛</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> <a href="https://github.com/apache/hertzbeat/commits?author=a-little-fool" title="Documentation">📖</a> <a href="#blog-a-little-fool" title="Blogposts">📝</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Aa-little-fool" title="Bug reports">🐛</a> <a href="#design-a-little-fool" title="Design">🎨</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> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Aqyaaaa" title="Bug reports">🐛</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> <a href="https://github.com/apache/hertzbeat/issues?q=author%3AClownsw" title="Bug reports">🐛</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> <a href="https://github.com/apache/hertzbeat/issues?q=author%3ACalvin979" title="Bug reports">🐛</a> <a href="https://github.com/apache/hertzbeat/commits?author=Calvin979" title="Tests">⚠️</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> <a href="https://github.com/apache/hertzbeat/issues?q=author%3AZY945" title="Bug reports">🐛</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> <a href="https://github.com/apache/hertzbeat/commits?author=yqxxgh" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Ayqxxgh" title="Bug reports">🐛</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> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Astarmilkxin" title="Bug reports">🐛</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> <a href="https://github.com/apache/hertzbeat/commits?author=LiuTianyou" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3ALiuTianyou" title="Bug reports">🐛</a> <a href="https://github.com/apache/hertzbeat/commits?author=LiuTianyou" title="Tests">⚠️</a> <a href="#blog-LiuTianyou" title="Blogposts">📝</a> <a href="#design-LiuTianyou" title="Design">🎨</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> <a href="https://github.com/apache/hertzbeat/commits?author=alpha951" title="Documentation">📖</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="Tests">⚠️</a> <a href="https://github.com/apache/hertzbeat/commits?author=gjjjj0101" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=gjjjj0101" title="Documentation">📖</a> <a href="#design-gjjjj0101" title="Design">🎨</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Agjjjj0101" title="Bug reports">🐛</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://jangto.tistory.com/"><img src="https://avatars.githubusercontent.com/u/37864182?v=4?s=100" width="100px;" alt="Hyeon Sung"/><br /><sub><b>Hyeon Sung</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=dukbong" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=dukbong" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crossoverjie.top/"><img src="https://avatars.githubusercontent.com/u/15684156?v=4?s=100" width="100px;" alt="crossoverJie"/><br /><sub><b>crossoverJie</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=crossoverJie" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=crossoverJie" title="Documentation">📖</a> <a href="#blog-crossoverJie" title="Blogposts">📝</a> <a href="https://github.com/apache/hertzbeat/commits?author=crossoverJie" title="Tests">⚠️</a> <a href="#design-crossoverJie" title="Design">🎨</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/PeixyJ"><img src="https://avatars.githubusercontent.com/u/45998593?v=4?s=100" width="100px;" alt="PeixyJ"/><br /><sub><b>PeixyJ</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=PeixyJ" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Hi-Mr-Wind"><img src="https://avatars.githubusercontent.com/u/85803831?v=4?s=100" width="100px;" alt="风如歌"/><br /><sub><b>风如歌</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Hi-Mr-Wind" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/MananPoojara"><img src="https://avatars.githubusercontent.com/u/104253184?v=4?s=100" width="100px;" alt="Manan Pujara"/><br /><sub><b>Manan Pujara</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=MananPoojara" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/xuziyang"><img src="https://avatars.githubusercontent.com/u/8465969?v=4?s=100" width="100px;" alt="xuziyang"/><br /><sub><b>xuziyang</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=xuziyang" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=xuziyang" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Axuziyang" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/lwqzz"><img src="https://avatars.githubusercontent.com/u/62584513?v=4?s=100" width="100px;" alt="lwqzz"/><br /><sub><b>lwqzz</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=lwqzz" title="Code">💻</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/YxYL6125"><img src="https://avatars.githubusercontent.com/u/91076160?v=4?s=100" width="100px;" alt="YxYL"/><br /><sub><b>YxYL</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=YxYL6125" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/tomorrowshipyltm"><img src="https://avatars.githubusercontent.com/u/61336903?v=4?s=100" width="100px;" alt="tomorrowshipyltm"/><br /><sub><b>tomorrowshipyltm</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=tomorrowshipyltm" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/15613060203"><img src="https://avatars.githubusercontent.com/u/41351615?v=4?s=100" width="100px;" alt="栗磊"/><br /><sub><b>栗磊</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=15613060203" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Alanxtl"><img src="https://avatars.githubusercontent.com/u/25652981?v=4?s=100" width="100px;" alt="Alan"/><br /><sub><b>Alan</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Alanxtl" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="http://www.hadoop.wiki/"><img src="https://avatars.githubusercontent.com/u/29418975?v=4?s=100" width="100px;" alt="Jast"/><br /><sub><b>Jast</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=zhangshenghang" title="Code">💻</a> <a href="#ideas-zhangshenghang" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/apache/hertzbeat/commits?author=zhangshenghang" title="Documentation">📖</a> <a href="#blog-zhangshenghang" title="Blogposts">📝</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Azhangshenghang" title="Bug reports">🐛</a> <a href="https://github.com/apache/hertzbeat/commits?author=zhangshenghang" title="Tests">⚠️</a> <a href="#design-zhangshenghang" title="Design">🎨</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/zuobiao-zhou"><img src="https://avatars.githubusercontent.com/u/61108539?v=4?s=100" width="100px;" alt="Zhang Yuxuan"/><br /><sub><b>Zhang Yuxuan</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=zuobiao-zhou" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=zuobiao-zhou" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Azuobiao-zhou" title="Bug reports">🐛</a> <a href="#blog-zuobiao-zhou" title="Blogposts">📝</a> <a href="https://github.com/apache/hertzbeat/commits?author=zuobiao-zhou" title="Tests">⚠️</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Pzz-2021"><img src="https://avatars.githubusercontent.com/u/118056735?v=4?s=100" width="100px;" alt="P.P."/><br /><sub><b>P.P.</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Pzz-2021" title="Code">💻</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/LLP2333"><img src="https://avatars.githubusercontent.com/u/61670545?v=4?s=100" width="100px;" alt="llp2333"/><br /><sub><b>llp2333</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=LLP2333" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/HeartLinked"><img src="https://avatars.githubusercontent.com/u/78212101?v=4?s=100" width="100px;" alt="feiyang li"/><br /><sub><b>feiyang li</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=HeartLinked" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Aias00"><img src="https://avatars.githubusercontent.com/u/25810623?v=4?s=100" width="100px;" alt="aias00"/><br /><sub><b>aias00</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Aias00" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=Aias00" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3AAias00" title="Bug reports">🐛</a> <a href="#ideas-Aias00" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/apache/hertzbeat/commits?author=Aias00" title="Tests">⚠️</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/westboy"><img src="https://avatars.githubusercontent.com/u/6385565?v=4?s=100" width="100px;" alt="Jin"/><br /><sub><b>Jin</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=westboy" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://blog.csdn.net/qq_52397471"><img src="https://avatars.githubusercontent.com/u/77964041?v=4?s=100" width="100px;" alt="YuLuo"/><br /><sub><b>YuLuo</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=yuluo-yx" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Ayuluo-yx" title="Bug reports">🐛</a> <a href="https://github.com/apache/hertzbeat/commits?author=yuluo-yx" title="Tests">⚠️</a> <a href="#blog-yuluo-yx" title="Blogposts">📝</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Yanshuming1"><img src="https://avatars.githubusercontent.com/u/118667222?v=4?s=100" width="100px;" alt="linDong"/><br /><sub><b>linDong</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Yanshuming1" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=Yanshuming1" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3AYanshuming1" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/lwjxy"><img src="https://avatars.githubusercontent.com/u/52726400?v=4?s=100" width="100px;" alt="lwjxy"/><br /><sub><b>lwjxy</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=lwjxy" title="Code">💻</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://thespica.github.io/"><img src="https://avatars.githubusercontent.com/u/119573640?v=4?s=100" width="100px;" alt="John"/><br /><sub><b>John</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Thespica" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=Thespica" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/boatrainlsz"><img src="https://avatars.githubusercontent.com/u/18243785?v=4?s=100" width="100px;" alt="boatrainlsz"/><br /><sub><b>boatrainlsz</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=boatrainlsz" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://www.yitianyigexiangfa.com/"><img src="https://avatars.githubusercontent.com/u/3973419?v=4?s=100" width="100px;" alt="Bill Lau"/><br /><sub><b>Bill Lau</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=JavaProgrammerLB" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/lw-yang"><img src="https://avatars.githubusercontent.com/u/23456873?v=4?s=100" width="100px;" alt="lwyang"/><br /><sub><b>lwyang</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=lw-yang" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/xfl12345"><img src="https://avatars.githubusercontent.com/u/17960863?v=4?s=100" width="100px;" alt="xfl12345"/><br /><sub><b>xfl12345</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=xfl12345" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/yykaue"><img src="https://avatars.githubusercontent.com/u/22905143?v=4?s=100" width="100px;" alt="Limbo"/><br /><sub><b>Limbo</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=yykaue" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/irenhongyan"><img src="https://avatars.githubusercontent.com/u/53438321?v=4?s=100" width="100px;" alt="哈哈哈哈哈哈哈哈哈"/><br /><sub><b>哈哈哈哈哈哈哈哈哈</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=irenhongyan" title="Code">💻</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ileonli"><img src="https://avatars.githubusercontent.com/u/45332412?v=4?s=100" width="100px;" alt="Leon Li"/><br /><sub><b>Leon Li</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=ileonli" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="http://fnil.net/"><img src="https://avatars.githubusercontent.com/u/14142?v=4?s=100" width="100px;" alt="dennis zhuang"/><br /><sub><b>dennis zhuang</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=killme2008" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/kerwin612"><img src="https://avatars.githubusercontent.com/u/3371163?v=4?s=100" width="100px;" alt="Kerwin Bryant"/><br /><sub><b>Kerwin Bryant</b></sub></a><br /><a href="#design-kerwin612" title="Design">🎨</a> <a href="https://github.com/apache/hertzbeat/commits?author=kerwin612" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=kerwin612" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Akerwin612" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ShineDevelopment"><img src="https://avatars.githubusercontent.com/u/59306780?v=4?s=100" width="100px;" alt="daixianglong"/><br /><sub><b>daixianglong</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=ShineDevelopment" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/mchgood"><img src="https://avatars.githubusercontent.com/u/38482005?v=4?s=100" width="100px;" alt="mchgood"/><br /><sub><b>mchgood</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=mchgood" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/pwallk"><img src="https://avatars.githubusercontent.com/u/69385076?v=4?s=100" width="100px;" alt="kangli"/><br /><sub><b>kangli</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=pwallk" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=pwallk" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Apwallk" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/cdphantom"><img src="https://avatars.githubusercontent.com/u/12674795?v=4?s=100" width="100px;" alt="cdphantom"/><br /><sub><b>cdphantom</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=cdphantom" title="Code">💻</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/asd108908382"><img src="https://avatars.githubusercontent.com/u/77717999?v=4?s=100" width="100px;" alt="jiawei.guo"/><br /><sub><b>jiawei.guo</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=asd108908382" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/QBH-insist"><img src="https://avatars.githubusercontent.com/u/39401478?v=4?s=100" width="100px;" alt="QBH-insist"/><br /><sub><b>QBH-insist</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=QBH-insist" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jiangsh-ui"><img src="https://avatars.githubusercontent.com/u/86990361?v=4?s=100" width="100px;" alt="jiangsh"/><br /><sub><b>jiangsh</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=jiangsh-ui" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/keaifafafa"><img src="https://avatars.githubusercontent.com/u/83876361?v=4?s=100" width="100px;" alt="Keaifa"/><br /><sub><b>Keaifa</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=keaifafafa" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Akeaifafafa" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/loong95"><img src="https://avatars.githubusercontent.com/u/16333958?v=4?s=100" width="100px;" alt="Loong"/><br /><sub><b>Loong</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=loong95" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ceekay47"><img src="https://avatars.githubusercontent.com/u/104664857?v=4?s=100" width="100px;" alt="Chandrakant Vankayalapati"/><br /><sub><b>Chandrakant Vankayalapati</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=ceekay47" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/MRgenial"><img src="https://avatars.githubusercontent.com/u/49973336?v=4?s=100" width="100px;" alt="b_mountain"/><br /><sub><b>b_mountain</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=MRgenial" title="Code">💻</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/TemirlanBasitov"><img src="https://avatars.githubusercontent.com/u/57500808?v=4?s=100" width="100px;" alt="TemirlanBasitov"/><br /><sub><b>TemirlanBasitov</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=TemirlanBasitov" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/wyfvsfy"><img src="https://avatars.githubusercontent.com/u/11973517?v=4?s=100" width="100px;" alt="wyfvsfy"/><br /><sub><b>wyfvsfy</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=wyfvsfy" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/sherry-peng2333"><img src="https://avatars.githubusercontent.com/u/70619577?v=4?s=100" width="100px;" alt="sherry-peng2333"/><br /><sub><b>sherry-peng2333</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=sherry-peng2333" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/lixiaobaivv"><img src="https://avatars.githubusercontent.com/u/39290771?v=4?s=100" width="100px;" alt="Yzzz"/><br /><sub><b>Yzzz</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=lixiaobaivv" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="http://www.bckf.cn/"><img src="https://avatars.githubusercontent.com/u/13309008?v=4?s=100" width="100px;" alt="puruidong"/><br /><sub><b>puruidong</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=pruidong" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/shinestare"><img src="https://avatars.githubusercontent.com/u/13570619?v=4?s=100" width="100px;" alt="shinestare"/><br /><sub><b>shinestare</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=shinestare" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/po-168"><img src="https://avatars.githubusercontent.com/u/185745593?v=4?s=100" width="100px;" alt="po-168"/><br /><sub><b>po-168</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=po-168" title="Code">💻</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/All-The-Best-for"><img src="https://avatars.githubusercontent.com/u/76414672?v=4?s=100" width="100px;" alt="wbs99"/><br /><sub><b>wbs99</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=All-The-Best-for" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/starryCoder"><img src="https://avatars.githubusercontent.com/u/46510059?v=4?s=100" width="100px;" alt="starryCoder"/><br /><sub><b>starryCoder</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=starryCoder" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/hasimmollah"><img src="https://avatars.githubusercontent.com/u/32538599?v=4?s=100" width="100px;" alt="hasimmollah"/><br /><sub><b>hasimmollah</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=hasimmollah" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ayu-v0"><img src="https://avatars.githubusercontent.com/u/127600988?v=4?s=100" width="100px;" alt="Ayu"/><br /><sub><b>Ayu</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=ayu-v0" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Rancho-7"><img src="https://avatars.githubusercontent.com/u/59016860?v=4?s=100" width="100px;" alt="Nick Guo"/><br /><sub><b>Nick Guo</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Rancho-7" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/commits?author=Rancho-7" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3ARancho-7" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/doveLin0818"><img src="https://avatars.githubusercontent.com/u/190927907?v=4?s=100" width="100px;" alt="doveLin"/><br /><sub><b>doveLin</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=doveLin0818" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://zzrl.cc/"><img src="https://avatars.githubusercontent.com/u/91836599?v=4?s=100" width="100px;" alt="yunfan24"/><br /><sub><b>yunfan24</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=yunfan24" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=yunfan24" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Ayunfan24" title="Bug reports">🐛</a> <a href="https://github.com/apache/hertzbeat/commits?author=yunfan24" title="Tests">⚠️</a> <a href="#blog-yunfan24" title="Blogposts">📝</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/lctking"><img src="https://avatars.githubusercontent.com/u/168249998?v=4?s=100" width="100px;" alt="nullwli"/><br /><sub><b>nullwli</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=lctking" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://simonsigre.com/"><img src="https://avatars.githubusercontent.com/u/14932913?v=4?s=100" width="100px;" alt="Simon Sigré"/><br /><sub><b>Simon Sigré</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=simonsigre" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/commits?author=simonsigre" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="http://www.ponfee.cn/"><img src="https://avatars.githubusercontent.com/u/46117331?v=4?s=100" width="100px;" alt="ponfee"/><br /><sub><b>ponfee</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=ponfee" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Vedant7789"><img src="https://avatars.githubusercontent.com/u/147625492?v=4?s=100" width="100px;" alt="Vedant7789"/><br /><sub><b>Vedant7789</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Vedant7789" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Craaaaazy77"><img src="https://avatars.githubusercontent.com/u/23025522?v=4?s=100" width="100px;" alt="Craaaaazy77"/><br /><sub><b>Craaaaazy77</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Craaaaazy77" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Suvrat1629"><img src="https://avatars.githubusercontent.com/u/140749446?v=4?s=100" width="100px;" alt="Suvrat1629"/><br /><sub><b>Suvrat1629</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Suvrat1629" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="http://ghyghoo8.github.io/"><img src="https://avatars.githubusercontent.com/u/363129?v=4?s=100" width="100px;" alt="ghy"/><br /><sub><b>ghy</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=ghyghoo8" title="Code">💻</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/helei1030"><img src="https://avatars.githubusercontent.com/u/11839080?v=4?s=100" width="100px;" alt="helei1030"/><br /><sub><b>helei1030</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=helei1030" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://medium.com/@pjfanning"><img src="https://avatars.githubusercontent.com/u/11783444?v=4?s=100" width="100px;" alt="PJ Fanning"/><br /><sub><b>PJ Fanning</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=pjfanning" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Apjfanning" title="Bug reports">🐛</a> <a href="https://github.com/apache/hertzbeat/commits?author=pjfanning" title="Tests">⚠️</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/MonsterChenzhuo"><img src="https://avatars.githubusercontent.com/u/60029759?v=4?s=100" width="100px;" alt="monster"/><br /><sub><b>monster</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=MonsterChenzhuo" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/MasamiYui"><img src="https://avatars.githubusercontent.com/u/22274133?v=4?s=100" width="100px;" alt="Sherlock Yin"/><br /><sub><b>Sherlock Yin</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=MasamiYui" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=MasamiYui" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3AMasamiYui" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/wanhao23"><img src="https://avatars.githubusercontent.com/u/29560961?v=4?s=100" width="100px;" alt="wanhao"/><br /><sub><b>wanhao</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=wanhao23" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=wanhao23" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jonasHanhan"><img src="https://avatars.githubusercontent.com/u/130035609?v=4?s=100" width="100px;" alt="jonasHanhan"/><br /><sub><b>jonasHanhan</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=jonasHanhan" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/NikhilMurugesan"><img src="https://avatars.githubusercontent.com/u/49281792?v=4?s=100" width="100px;" alt="NikhilMurugesan"/><br /><sub><b>NikhilMurugesan</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=NikhilMurugesan" title="Code">💻</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/myangle1120"><img src="https://avatars.githubusercontent.com/u/19237013?v=4?s=100" width="100px;" alt="myangle1120"/><br /><sub><b>myangle1120</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=myangle1120" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/yasminvo"><img src="https://avatars.githubusercontent.com/u/107528848?v=4?s=100" width="100px;" alt="yasminvo"/><br /><sub><b>yasminvo</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=yasminvo" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/notbugggg"><img src="https://avatars.githubusercontent.com/u/147966331?v=4?s=100" width="100px;" alt="不关银渐层的事哦"/><br /><sub><b>不关银渐层的事哦</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=notbugggg" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Anotbugggg" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/yyahang"><img src="https://avatars.githubusercontent.com/u/90464876?v=4?s=100" width="100px;" alt="yyahang"/><br /><sub><b>yyahang</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=yyahang" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/JuJinPark"><img src="https://avatars.githubusercontent.com/u/44892459?v=4?s=100" width="100px;" alt="jujin"/><br /><sub><b>jujin</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=JuJinPark" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=JuJinPark" title="Documentation">📖</a> <a href="#ideas-JuJinPark" title="Ideas, Planning, & Feedback">🤔</a> <a href="#blog-JuJinPark" title="Blogposts">📝</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/LL-LIN"><img src="https://avatars.githubusercontent.com/u/43002118?v=4?s=100" width="100px;" alt="LL-LIN"/><br /><sub><b>LL-LIN</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=LL-LIN" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3ALL-LIN" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://bigcyy.github.io/"><img src="https://avatars.githubusercontent.com/u/73413979?v=4?s=100" width="100px;" alt="Yang Chen"/><br /><sub><b>Yang Chen</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=bigcyy" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=bigcyy" title="Documentation">📖</a> <a href="https://github.com/apache/hertzbeat/issues?q=author%3Abigcyy" title="Bug reports">🐛</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/sarthakeash"><img src="https://avatars.githubusercontent.com/u/74091160?v=4?s=100" width="100px;" alt="Sarthak Arora"/><br /><sub><b>Sarthak Arora</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=sarthakeash" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=sarthakeash" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/PengJingzhao"><img src="https://avatars.githubusercontent.com/u/97368949?v=4?s=100" width="100px;" alt="彭镜肇"/><br /><sub><b>彭镜肇</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=PengJingzhao" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/gagaradio"><img src="https://avatars.githubusercontent.com/u/18532370?v=4?s=100" width="100px;" alt="Walter Jia"/><br /><sub><b>Walter Jia</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=gagaradio" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/boyucjz"><img src="https://avatars.githubusercontent.com/u/18730041?v=4?s=100" width="100px;" alt="boyucjz"/><br /><sub><b>boyucjz</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=boyucjz" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Cyanty"><img src="https://avatars.githubusercontent.com/u/153884653?v=4?s=100" width="100px;" alt="Cyanty"/><br /><sub><b>Cyanty</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=Cyanty" title="Code">💻</a> <a href="https://github.com/apache/hertzbeat/commits?author=Cyanty" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/KevinLLF"><img src="https://avatars.githubusercontent.com/u/85452733?v=4?s=100" width="100px;" alt="Jay丿167"/><br /><sub><b>Jay丿167</b></sub></a><br /><a href="https://github.com/apache/hertzbeat/commits?author=KevinLLF" title="Code">💻</a></td>
</tr>
</tbody>
</table>
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->
## 💬 コミュニティ交流
##### チャネル
[メール](https://lists.apache.org/list.html?dev@hertzbeat.apache.org) : メーリングリストに登録するために、```dev-subscribe@hertzbeat.apache.org```にメールを送ってください。
[Chat On Discord](https://discord.gg/Fb6M73htGr)
WeChatグループ : `ahertzbeat` を検索.
WeChat公式アカウント : `usthecom`を検索.
[QQグループ](https://qm.qq.com/q/xxqecSC2cw) : グループ番号 `1035688434`
[Github Discussion](https://github.com/apache/hertzbeat/discussions)
[Reddit Community](https://www.reddit.com/r/hertzbeat/)
[Follow Us Twitter](https://x.com/hertzbeat1024)
[Subscribe YouTube](https://www.youtube.com/channel/UCri75zfWX0GHqJFPENEbLow)
##### Open-Source Project Build From Open-Source
HertzBeat is built on so many great open source projects, thanks to them!
- `Java Spring SpringBoot Jpa Maven Assembly Netty Lombok Sureness Protobuf HttpClient Guava SnakeYaml JsonPath ...`
- `TypeScript Angular NG-ZORRO NG-ALAIN NodeJs Npm Html Less Echarts Rxjs ZoneJs MonacoEditor SlickCarousel Docusaurus ...`
## Landscape
<p align="left">
<img src="./home/static/img/home/cncf-landscape-left-logo.svg" width="300">&nbsp;&nbsp;<img src="./home/static/img/home/cncf-right-logo.svg" width="345" />
<br /><br />
HertzBeat has been included in the <a href="https://landscape.cncf.io/guide?item=observability-and-analysis--monitoring--hertzbeat#observability-and-analysis--monitoring">
CNCF Observability And Analysis - Monitoring Landscape.</a>
</p>
## 🛡️ License
[`Apache License, Version 2.0`](https://www.apache.org/licenses/LICENSE-2.0.html)
@@ -220,11 +220,11 @@ public class RealTimeAlertCalculator {
fingerPrints.putAll(commonFingerPrints);
for (int index = 0; index < valueRow.getColumnsList().size(); index++) {
String valueStr = valueRow.getColumns(index);
final CollectRep.Field field = fields.get(index);
if (CommonConstants.NULL_VALUE.equals(valueStr)) {
fieldValueMap.put(field.getName(), null);
continue;
}
final CollectRep.Field field = fields.get(index);
final int fieldType = field.getType();
if (fieldType == CommonConstants.TYPE_NUMBER) {
@@ -42,14 +42,9 @@ import org.springframework.stereotype.Component;
final class TelegramBotAlertNotifyHandlerImpl extends AbstractAlertNotifyHandlerImpl {
@Override
public void send(NoticeReceiver receiver, NoticeTemplate noticeTemplate, GroupAlert alert)
throws AlertNoticeException {
public void send(NoticeReceiver receiver, NoticeTemplate noticeTemplate, GroupAlert alert) throws AlertNoticeException {
try {
String token = receiver.getTgBotToken();
if (!isValidTelegramToken(token)) {
throw new AlertNoticeException("Invalid Telegram Bot Token");
}
String url = String.format(alerterProperties.getTelegramWebhookUrl(), token);
String url = String.format(alerterProperties.getTelegramWebhookUrl(), receiver.getTgBotToken());
TelegramBotNotifyDTO notifyBody = TelegramBotNotifyDTO.builder()
.chatId(receiver.getTgUserId())
.text(renderContent(noticeTemplate, alert))
@@ -59,8 +54,7 @@ final class TelegramBotAlertNotifyHandlerImpl extends AbstractAlertNotifyHandler
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<TelegramBotNotifyDTO> telegramEntity = new HttpEntity<>(notifyBody, headers);
ResponseEntity<TelegramBotNotifyResponse> entity = restTemplate.postForEntity(url, telegramEntity,
TelegramBotNotifyResponse.class);
ResponseEntity<TelegramBotNotifyResponse> entity = restTemplate.postForEntity(url, telegramEntity, TelegramBotNotifyResponse.class);
if (entity.getStatusCode() == HttpStatus.OK && entity.getBody() != null) {
TelegramBotNotifyResponse body = entity.getBody();
if (body.ok) {
@@ -105,10 +99,4 @@ final class TelegramBotAlertNotifyHandlerImpl extends AbstractAlertNotifyHandler
private String description;
}
private boolean isValidTelegramToken(String token) {
// Adjusted pattern to match real Telegram Bot tokens like
// 110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw
String tokenPattern = "^[0-9]+:[a-zA-Z0-9_-]+$";
return token != null && token.matches(tokenPattern);
}
}
@@ -57,12 +57,7 @@ final class WeComRobotAlertNotifyHandlerImpl extends AbstractAlertNotifyHandlerI
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<WeWorkWebHookDto> httpEntity = new HttpEntity<>(weWorkWebHookDTO, headers);
String wechatId = receiver.getWechatId();
if (!isValidWechatId(wechatId)) {
log.warn("Invalid WeChat ID: {}", wechatId);
throw new AlertNoticeException("Invalid WeChat ID provided.");
}
String webHookUrl = alerterProperties.getWeWorkWebhookUrl() + wechatId;
String webHookUrl = alerterProperties.getWeWorkWebhookUrl() + receiver.getWechatId();
ResponseEntity<CommonRobotNotifyResp> entity = restTemplate.postForEntity(webHookUrl, httpEntity, CommonRobotNotifyResp.class);
if (entity.getStatusCode() == HttpStatus.OK) {
assert entity.getBody() != null;
@@ -175,15 +170,4 @@ final class WeComRobotAlertNotifyHandlerImpl extends AbstractAlertNotifyHandlerI
}
}
/**
* Validate the WeChat ID to ensure it meets the expected format.
*
* @param wechatId the WeChat ID to validate
* @return true if valid, false otherwise
*/
private boolean isValidWechatId(String wechatId) {
// Example validation: ensure the ID is alphanumeric and non-empty
return StringUtils.isNotBlank(wechatId) && wechatId.matches("^[a-zA-Z0-9_-]+$");
}
}
@@ -1,52 +0,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
*
* 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.alert.service.impl;
import lombok.extern.slf4j.Slf4j;
import org.apache.hertzbeat.alert.reduce.AlarmCommonReduce;
import org.apache.hertzbeat.alert.service.ExternAlertService;
import org.apache.hertzbeat.common.entity.alerter.SingleAlert;
import org.apache.hertzbeat.common.util.JsonUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* zabbix external alarm service impl
*/
@Slf4j
@Service
public class ZabbixExternAlertServiceImpl implements ExternAlertService {
@Autowired
private AlarmCommonReduce alarmCommonReduce;
@Override
public void addExternAlert(String content) {
SingleAlert alert = JsonUtil.fromJson(content, SingleAlert.class);
if (alert == null) {
log.warn("parse extern alert content failed! content: {}", content);
return;
}
alarmCommonReduce.reduceAndSendAlarm(alert);
}
@Override
public String supportSource() {
return "zabbix";
}
}
@@ -20,7 +20,6 @@ package org.apache.hertzbeat.alert.notice.impl;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.lenient;
import static org.mockito.Mockito.when;
import org.apache.hertzbeat.alert.AlerterProperties;
@@ -52,10 +51,10 @@ class TelegramBotAlertNotifyHandlerImplTest {
@Mock
private RestTemplate restTemplate;
@Mock
private AlerterProperties alerterProperties;
@Mock
private ResourceBundle bundle;
@@ -71,57 +70,58 @@ class TelegramBotAlertNotifyHandlerImplTest {
receiver = new NoticeReceiver();
receiver.setId(1L);
receiver.setName("test-receiver");
receiver.setTgBotToken("123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11");
receiver.setAccessToken("test-token");
receiver.setTgUserId("123456789"); // Telegram specific - chat ID
groupAlert = new GroupAlert();
SingleAlert singleAlert = new SingleAlert();
singleAlert.setLabels(new HashMap<>());
singleAlert.getLabels().put("severity", "critical");
singleAlert.getLabels().put("alertname", "Test Alert");
List<SingleAlert> alerts = new ArrayList<>();
alerts.add(singleAlert);
groupAlert.setAlerts(alerts);
template = new NoticeTemplate();
template.setId(1L);
template.setName("test-template");
template.setContent("test content");
lenient().when(alerterProperties.getTelegramWebhookUrl())
.thenReturn("https://api.telegram.org/bot%s/sendMessage");
lenient().when(bundle.getString("alerter.notify.title")).thenReturn("Alert Notification");
when(alerterProperties.getTelegramWebhookUrl()).thenReturn("https://api.telegram.org/bot%s/sendMessage");
when(bundle.getString("alerter.notify.title")).thenReturn("Alert Notification");
}
@Test
public void testNotifyAlertSuccess() {
TelegramBotAlertNotifyHandlerImpl.TelegramBotNotifyResponse successResp = new TelegramBotAlertNotifyHandlerImpl.TelegramBotNotifyResponse();
TelegramBotAlertNotifyHandlerImpl.TelegramBotNotifyResponse successResp =
new TelegramBotAlertNotifyHandlerImpl.TelegramBotNotifyResponse();
successResp.setOk(true);
successResp.setDescription("Test Success");
ResponseEntity<TelegramBotAlertNotifyHandlerImpl.TelegramBotNotifyResponse> responseEntity = new ResponseEntity<>(
successResp, HttpStatus.OK);
when(restTemplate.postForEntity(any(String.class), any(),
ResponseEntity<TelegramBotAlertNotifyHandlerImpl.TelegramBotNotifyResponse> responseEntity =
new ResponseEntity<>(successResp, HttpStatus.OK);
when(restTemplate.postForEntity(any(String.class), any(),
eq(TelegramBotAlertNotifyHandlerImpl.TelegramBotNotifyResponse.class))).thenReturn(responseEntity);
telegramBotAlertNotifyHandler.send(receiver, template, groupAlert);
}
@Test
public void testNotifyAlertFailure() {
TelegramBotAlertNotifyHandlerImpl.TelegramBotNotifyResponse failureResp = new TelegramBotAlertNotifyHandlerImpl.TelegramBotNotifyResponse();
failureResp.setOk(false);
failureResp.setDescription("Test failed");
TelegramBotAlertNotifyHandlerImpl.TelegramBotNotifyResponse successResp =
new TelegramBotAlertNotifyHandlerImpl.TelegramBotNotifyResponse();
successResp.setOk(false);
successResp.setDescription("Test failed");
ResponseEntity<TelegramBotAlertNotifyHandlerImpl.TelegramBotNotifyResponse> responseEntity = new ResponseEntity<>(
failureResp, HttpStatus.OK);
ResponseEntity<TelegramBotAlertNotifyHandlerImpl.TelegramBotNotifyResponse> responseEntity =
new ResponseEntity<>(successResp, HttpStatus.BAD_REQUEST);
when(restTemplate.postForEntity(any(String.class), any(),
eq(TelegramBotAlertNotifyHandlerImpl.TelegramBotNotifyResponse.class))).thenReturn(responseEntity);
assertThrows(AlertNoticeException.class,
assertThrows(AlertNoticeException.class,
() -> telegramBotAlertNotifyHandler.send(receiver, template, groupAlert));
}
}
@@ -48,7 +48,7 @@ import java.util.ResourceBundle;
*/
@ExtendWith(MockitoExtension.class)
class WeComRobotAlertNotifyHandlerImplTest {
@Mock
private RestTemplate restTemplate;
@@ -57,21 +57,20 @@ class WeComRobotAlertNotifyHandlerImplTest {
@Mock
private ResourceBundle bundle;
@InjectMocks
private WeComRobotAlertNotifyHandlerImpl weComRobotAlertNotifyHandler;
private NoticeReceiver receiver;
private GroupAlert groupAlert;
private NoticeTemplate template;
@BeforeEach
public void setUp() {
receiver = new NoticeReceiver();
receiver.setId(1L);
receiver.setName("test-receiver");
receiver.setAccessToken("test-token");
receiver.setWechatId("test-wechat-id");
groupAlert = new GroupAlert();
SingleAlert singleAlert = new SingleAlert();
@@ -96,29 +95,33 @@ class WeComRobotAlertNotifyHandlerImplTest {
public void testNotifyAlertSuccess() {
CommonRobotNotifyResp successResp = new CommonRobotNotifyResp();
successResp.setErrCode(0);
ResponseEntity<CommonRobotNotifyResp> responseEntity = new ResponseEntity<>(successResp, HttpStatus.OK);
ResponseEntity<CommonRobotNotifyResp> responseEntity =
new ResponseEntity<>(successResp, HttpStatus.OK);
when(restTemplate.postForEntity(
any(String.class),
any(),
eq(CommonRobotNotifyResp.class))).thenReturn(responseEntity);
eq(CommonRobotNotifyResp.class)
)).thenReturn(responseEntity);
weComRobotAlertNotifyHandler.send(receiver, template, groupAlert);
}
@Test
public void testNotifyAlertFailure() {
CommonRobotNotifyResp failResp = new CommonRobotNotifyResp();
failResp.setCode(1);
failResp.setErrMsg("Test Error");
ResponseEntity<CommonRobotNotifyResp> responseEntity = new ResponseEntity<>(failResp, HttpStatus.OK);
ResponseEntity<CommonRobotNotifyResp> responseEntity =
new ResponseEntity<>(failResp, HttpStatus.OK);
when(restTemplate.postForEntity(
any(String.class),
any(),
eq(CommonRobotNotifyResp.class))).thenReturn(responseEntity);
eq(CommonRobotNotifyResp.class)
)).thenReturn(responseEntity);
assertThrows(AlertNoticeException.class,
assertThrows(AlertNoticeException.class,
() -> weComRobotAlertNotifyHandler.send(receiver, template, groupAlert));
}
}
@@ -1,83 +0,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
*
* 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.sd;
import lombok.extern.slf4j.Slf4j;
import org.apache.hertzbeat.collector.collect.AbstractCollect;
import org.apache.hertzbeat.collector.collect.registry.constant.DiscoveryClientInstance;
import org.apache.hertzbeat.collector.collect.registry.discovery.DiscoveryClient;
import org.apache.hertzbeat.collector.collect.registry.discovery.DiscoveryClientManagement;
import org.apache.hertzbeat.collector.collect.registry.discovery.entity.ServiceInstance;
import org.apache.hertzbeat.collector.dispatch.DispatchConstants;
import org.apache.hertzbeat.common.entity.job.Metrics;
import org.apache.hertzbeat.common.entity.job.protocol.ConsulSdProtocol;
import org.apache.hertzbeat.common.entity.job.protocol.RegistryProtocol;
import org.apache.hertzbeat.common.entity.message.CollectRep;
import org.apache.hertzbeat.common.util.CommonUtil;
import org.springframework.util.CollectionUtils;
import java.util.List;
/**
* consul sd collector
*/
@Slf4j
public class ConsulSdCollectImpl extends AbstractCollect {
private static final DiscoveryClientManagement discoveryClientManagement = new DiscoveryClientManagement();
@Override
public void preCheck(Metrics metrics) throws IllegalArgumentException {
ConsulSdProtocol consulSd = metrics.getConsul_sd();
if (consulSd == null || consulSd.isInvalid()) {
throw new IllegalArgumentException("Consul Service Discovery params is required.");
}
}
@Override
public void collect(CollectRep.MetricsData.Builder builder, Metrics metrics) {
RegistryProtocol registryProtocol = RegistryProtocol.builder()
.host(metrics.getConsul_sd().getHost())
.port(metrics.getConsul_sd().getPort())
.discoveryClientTypeName(DiscoveryClientInstance.CONSUL.name())
.build();
try (DiscoveryClient client = discoveryClientManagement.getClient(registryProtocol)){
List<ServiceInstance> services = client.getServices();
if (CollectionUtils.isEmpty(services)) {
return;
}
services.forEach(instance -> {
CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder();
valueRowBuilder.addColumn(instance.getAddress());
valueRowBuilder.addColumn(String.valueOf(instance.getPort()));
builder.addValueRow(valueRowBuilder.build());
});
} catch (Exception e) {
String errorMsg = CommonUtil.getMessageFromThrowable(e);
log.warn("Failed to fetch consul sd... {}", errorMsg);
builder.setCode(CollectRep.Code.FAIL);
builder.setMsg(errorMsg);
}
}
@Override
public String supportProtocol() {
return DispatchConstants.PROTOCOL_CONSUL_SD;
}
}
@@ -1,181 +0,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
*
* 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.sd;
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.message.CollectRep;
import org.apache.hertzbeat.common.util.CommonUtil;
import org.xbill.DNS.AAAARecord;
import org.xbill.DNS.ARecord;
import org.xbill.DNS.Lookup;
import org.xbill.DNS.MXRecord;
import org.xbill.DNS.NSRecord;
import org.xbill.DNS.Record;
import org.xbill.DNS.SRVRecord;
import org.xbill.DNS.SimpleResolver;
import org.xbill.DNS.TextParseException;
import org.xbill.DNS.Type;
import java.time.Duration;
import java.util.Arrays;
/**
* DNS SD collector supporting multiple record types
*/
@Slf4j
public class DnsSdCollectImpl extends AbstractCollect {
private static final int DEFAULT_TIME_OUT = 3;
@Override
public void preCheck(Metrics metrics) throws IllegalArgumentException {
if (metrics.getDns_sd() == null) {
throw new IllegalArgumentException("DNS SD configuration cannot be null");
}
if (metrics.getDns_sd().getHost() == null || metrics.getDns_sd().getHost().isEmpty()) {
throw new IllegalArgumentException("DNS host cannot be null or empty");
}
if (metrics.getDns_sd().getPort() == null || metrics.getDns_sd().getPort().isEmpty()) {
throw new IllegalArgumentException("DNS port cannot be null or empty");
}
if (metrics.getDns_sd().getRecordType() == null || metrics.getDns_sd().getRecordType().isEmpty()) {
throw new IllegalArgumentException("DNS record type cannot be null or empty");
}
if (metrics.getDns_sd().getRecordName() == null || metrics.getDns_sd().getRecordName().isEmpty()) {
throw new IllegalArgumentException("DNS record name cannot be null or empty");
}
}
@Override
public void collect(CollectRep.MetricsData.Builder builder, Metrics metrics) {
String hostName = metrics.getDns_sd().getHost();
int type = Integer.parseInt(metrics.getDns_sd().getRecordType());
Type.check(type);
String recordName = metrics.getDns_sd().getRecordName();
try {
Lookup lookup = new Lookup(recordName, type);
SimpleResolver resolver = new SimpleResolver(metrics.getDns_sd().getHost());
resolver.setPort(Integer.parseInt(metrics.getDns_sd().getPort()));
resolver.setTimeout(Duration.ofMillis(DEFAULT_TIME_OUT));
lookup.setResolver(resolver);
lookup.setCache(null);
lookup.run();
if (lookup.getResult() != Lookup.SUCCESSFUL) {
String msg = String.format("DNS lookup failed for: %s, error: %s", recordName, lookup.getErrorString());
log.warn(msg);
builder.setCode(CollectRep.Code.FAIL);
builder.setMsg(msg);
return;
}
Record[] records = lookup.getAnswers();
if (records == null || records.length == 0) {
log.info("No record type: {} records found for host: {}", type, hostName);
builder.setCode(CollectRep.Code.SUCCESS);
return;
}
processRecords(builder, records, type);
} catch (TextParseException e) {
String errorMsg = CommonUtil.getMessageFromThrowable(e);
log.warn("Failed to parse dns query... {}", errorMsg);
builder.setCode(CollectRep.Code.FAIL);
builder.setMsg(errorMsg);
} catch (Exception e) {
String errorMsg = CommonUtil.getMessageFromThrowable(e);
log.error("Failed to fetch dns sd...{}", errorMsg);
builder.setCode(CollectRep.Code.FAIL);
builder.setMsg(errorMsg);
}
}
private void processRecords(CollectRep.MetricsData.Builder builder, Record[] records, int recordType) {
switch (recordType) {
case Type.A:
processARecords(builder, records);
break;
case Type.AAAA:
processAAAARecords(builder, records);
break;
case Type.SRV:
processSrvRecords(builder, records);
break;
case Type.MX:
processMxRecords(builder, records);
break;
case Type.NS:
processNsRecords(builder, records);
break;
default:
throw new IllegalStateException("Invalid record type: " + recordType);
}
}
@SuppressWarnings({"checkstyle:AbbreviationAsWordInName", "checkstyle:LambdaParameterName"})
private void processARecords(CollectRep.MetricsData.Builder builder, Record[] records) {
Arrays.stream(records).filter(ARecord.class::isInstance).map(ARecord.class::cast).forEach(aRecord -> {
CollectRep.ValueRow.Builder row = CollectRep.ValueRow.newBuilder();
row.addColumn(aRecord.getAddress().getHostAddress());
row.addColumn(""); //A record has no port
builder.addValueRow(row.build());
});
}
@SuppressWarnings("checkstyle:AbbreviationAsWordInName")
private void processAAAARecords(CollectRep.MetricsData.Builder builder, Record[] records) {
Arrays.stream(records).filter(AAAARecord.class::isInstance).map(AAAARecord.class::cast).forEach(aaaaRecord -> {
CollectRep.ValueRow.Builder row = CollectRep.ValueRow.newBuilder();
row.addColumn(aaaaRecord.getAddress().getHostAddress());
row.addColumn(""); //AAAA record has no port
builder.addValueRow(row.build());
});
}
private void processSrvRecords(CollectRep.MetricsData.Builder builder, Record[] records) {
Arrays.stream(records).filter(SRVRecord.class::isInstance).map(SRVRecord.class::cast).forEach(srvRecord -> {
CollectRep.ValueRow.Builder row = CollectRep.ValueRow.newBuilder();
row.addColumn(srvRecord.getTarget().toString(true));
row.addColumn(String.valueOf(srvRecord.getPort()));
builder.addValueRow(row.build());
});
}
private void processMxRecords(CollectRep.MetricsData.Builder builder, Record[] records) {
Arrays.stream(records).filter(MXRecord.class::isInstance).map(MXRecord.class::cast).forEach(mxRecord -> {
CollectRep.ValueRow.Builder row = CollectRep.ValueRow.newBuilder();
row.addColumn(mxRecord.getTarget().toString(true));
row.addColumn(""); //MX record has no port
builder.addValueRow(row.build());
});
}
private void processNsRecords(CollectRep.MetricsData.Builder builder, Record[] records) {
Arrays.stream(records).filter(NSRecord.class::isInstance).map(NSRecord.class::cast).forEach(nsRecord -> {
CollectRep.ValueRow.Builder row = CollectRep.ValueRow.newBuilder();
row.addColumn(nsRecord.getTarget().toString(true));
row.addColumn(""); //NS record has no port
builder.addValueRow(row.build());
});
}
@Override
public String supportProtocol() {
return DispatchConstants.PROTOCOL_DNS_SD;
}
}
@@ -1,111 +0,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
*
* 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.sd;
import com.google.common.collect.Lists;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.List;
import lombok.extern.slf4j.Slf4j;
import org.apache.hertzbeat.collector.collect.AbstractCollect;
import org.apache.hertzbeat.collector.collect.common.http.CommonHttpClient;
import org.apache.hertzbeat.collector.dispatch.DispatchConstants;
import org.apache.hertzbeat.common.entity.job.Metrics;
import org.apache.hertzbeat.common.entity.job.protocol.EurekaSdProtocol;
import org.apache.hertzbeat.common.entity.message.CollectRep;
import org.apache.hertzbeat.common.entity.sd.ConnectionConfig;
import org.apache.hertzbeat.common.entity.sd.EurekaDiscoveryResponseEntity;
import org.apache.hertzbeat.common.util.CommonUtil;
import org.apache.hertzbeat.common.util.XmlUtil;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.util.EntityUtils;
import org.springframework.util.CollectionUtils;
/**
* eureka service discovery collect impl
*/
@Slf4j
public class EurekaSdCollectImpl extends AbstractCollect {
private static final String APP_LIST_PATH = "/apps";
@Override
public void preCheck(Metrics metrics) throws IllegalArgumentException {
EurekaSdProtocol eurekaSd = metrics.getEureka_sd();
if (eurekaSd == null || eurekaSd.getUrl() == null) {
throw new IllegalArgumentException("Eureka Service Discovery url is required.");
}
}
@Override
public void collect(CollectRep.MetricsData.Builder builder, Metrics metrics) {
List<ConnectionConfig> configList = Lists.newArrayList();
HttpUriRequest request = RequestBuilder.get().setUri(metrics.getEureka_sd().getUrl() + APP_LIST_PATH).build();
try (CloseableHttpResponse response = CommonHttpClient.getHttpClient().execute(request)) {
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode != 200) {
log.warn("Failed to fetch eureka sd...");
builder.setMsg("StatusCode " + statusCode);
builder.setCode(CollectRep.Code.FAIL);
return;
}
String responseBody = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
EurekaDiscoveryResponseEntity responseEntity =
XmlUtil.fromXml(responseBody, EurekaDiscoveryResponseEntity.class);
if (responseEntity == null || CollectionUtils.isEmpty(responseEntity.getApplications())) {
return;
}
responseEntity.getApplications()
.stream()
.filter(application -> !CollectionUtils.isEmpty(application.getInstances()))
.forEach(application -> convertTarget(configList, application));
configList.forEach(config -> {
CollectRep.ValueRow.Builder valueRowBuilder = CollectRep.ValueRow.newBuilder();
valueRowBuilder.addColumn(config.getHost());
valueRowBuilder.addColumn(config.getPort());
builder.addValueRow(valueRowBuilder.build());
});
} catch (IOException e) {
String errorMsg = CommonUtil.getMessageFromThrowable(e);
log.warn("Failed to fetch eureka sd... {}", errorMsg);
builder.setCode(CollectRep.Code.FAIL);
builder.setMsg(errorMsg);
}
}
private void convertTarget(List<ConnectionConfig> configList,
EurekaDiscoveryResponseEntity.Application application) {
application.getInstances().forEach(instance -> {
String host = instance.getIpAddr();
int port = instance.getPort() == null ? 80 : instance.getPort();
configList.add(ConnectionConfig.builder()
.host(host)
.port(String.valueOf(port))
.build());
});
}
@Override
public String supportProtocol() {
return DispatchConstants.PROTOCOL_EUREKA_SD;
}
}
@@ -29,8 +29,5 @@ org.apache.hertzbeat.collector.collect.mqtt.MqttCollectImpl
org.apache.hertzbeat.collector.collect.ipmi2.IpmiCollectImpl
org.apache.hertzbeat.collector.collect.kafka.KafkaCollectImpl
org.apache.hertzbeat.collector.collect.sd.HttpSdCollectImpl
org.apache.hertzbeat.collector.collect.sd.DnsSdCollectImpl
org.apache.hertzbeat.collector.collect.sd.EurekaSdCollectImpl
org.apache.hertzbeat.collector.collect.sd.ConsulSdCollectImpl
org.apache.hertzbeat.collector.collect.modbus.ModbusCollectImpl
org.apache.hertzbeat.collector.collect.s7.S7CollectImpl
org.apache.hertzbeat.collector.collect.s7.S7CollectImpl
@@ -39,7 +39,7 @@ spring:
collector:
info:
version: ${COLLECTOR_VERSION:1.7.1}
version: ${COLLECTOR_VERSION:1.7.0}
ip: ${COLLECTOR_IP:}
dispatch:
entrance:
@@ -127,19 +127,6 @@ public interface DispatchConstants {
* protocol http sd
*/
String PROTOCOL_HTTP_SD = "http_sd";
/**
* protocol dns sd
*/
String PROTOCOL_DNS_SD = "dns_sd";
/**
* protocol eureka sd
*/
String PROTOCOL_EUREKA_SD = "eureka_sd";
/**
* protocol consul sd
*/
String PROTOCOL_CONSUL_SD = "consul_sd";
/**
* protocol redfish
*/
-4
View File
@@ -72,10 +72,6 @@
<artifactId>jackson-annotations</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
</dependency>
<!-- swagger -->
<dependency>
<groupId>org.springdoc</groupId>
@@ -30,11 +30,9 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.hertzbeat.common.entity.job.protocol.DnsProtocol;
import org.apache.hertzbeat.common.entity.job.protocol.DnsSdProtocol;
import org.apache.hertzbeat.common.entity.job.protocol.FtpProtocol;
import org.apache.hertzbeat.common.entity.job.protocol.HttpProtocol;
import org.apache.hertzbeat.common.entity.job.protocol.EurekaSdProtocol;
import org.apache.hertzbeat.common.entity.job.protocol.ConsulSdProtocol;
import org.apache.hertzbeat.common.entity.job.protocol.HttpSdProtocol;
import org.apache.hertzbeat.common.entity.job.protocol.ModbusProtocol;
import org.apache.hertzbeat.common.entity.job.protocol.PlcProtocol;
import org.apache.hertzbeat.common.entity.job.protocol.RegistryProtocol;
@@ -265,19 +263,7 @@ public class Metrics {
/**
* http sd protocol
*/
private HttpProtocol http_sd;
/**
* dns sd protocol
*/
private DnsSdProtocol dns_sd;
/**
* eureka sd protocol
*/
private EurekaSdProtocol eureka_sd;
/**
* consul sd protocol
*/
private ConsulSdProtocol consul_sd;
private HttpSdProtocol http_sd;
/**
* Monitoring configuration information using the public plc protocol
*/
@@ -1,42 +0,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
*
* 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.common.entity.job.protocol;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.StringUtils;
/**
* consul sd protocol
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class ConsulSdProtocol implements Protocol{
private String host;
private String port;
public boolean isInvalid() {
return StringUtils.isAnyBlank(host, port);
}
}
@@ -1,41 +0,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
*
* 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.common.entity.job.protocol;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* Dns protocol
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class DnsSdProtocol implements Protocol {
private String host;
private String port;
private String recordType;
private String recordName;
}
@@ -1,35 +0,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
*
* 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.common.entity.job.protocol;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* eureka sd protocol
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class EurekaSdProtocol implements Protocol{
private String url;
}
@@ -77,7 +77,7 @@ public class Monitor {
@Size(max = 100)
private String app;
@Schema(title = "Scrape type: static | http_sd | dns_sd", example = "static", accessMode = READ_WRITE)
@Schema(title = "Scrape type: static | http_sd", example = "static", accessMode = READ_WRITE)
@Size(max = 100)
private String scrape;
@@ -1,88 +0,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
*
* 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.common.entity.sd;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* eureka service discovery entity
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@JacksonXmlRootElement(localName = "applications")
public class EurekaDiscoveryResponseEntity {
@JacksonXmlProperty(localName = "versions__delta")
private int versionsDelta;
@JacksonXmlProperty(localName = "apps__hashcode")
private String appsHashcode;
@JacksonXmlElementWrapper(useWrapping = false)
@JacksonXmlProperty(localName = "application")
private List<Application> applications;
/**
* eureka application entity
*/
@Data
public static class Application {
@JacksonXmlProperty(localName = "name")
private String name;
@JacksonXmlElementWrapper(useWrapping = false)
@JacksonXmlProperty(localName = "instance")
private List<Instance> instances;
}
/**
* eureka instance entity
*/
@Data
public static class Instance {
@JacksonXmlProperty(localName = "instanceId")
private String instanceId;
@JacksonXmlProperty(localName = "hostName")
private String hostName;
@JacksonXmlProperty(localName = "app")
private String app;
@JacksonXmlProperty(localName = "ipAddr")
private String ipAddr;
@JacksonXmlProperty(localName = "status")
private String status;
@JacksonXmlProperty(localName = "port")
private Integer port;
}
}
@@ -1,78 +0,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
*
* 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.common.util;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;
/**
* xml util
*/
@Slf4j
public class XmlUtil {
private static final XmlMapper XML_MAPPER = new XmlMapper();
static {
XML_MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false)
.registerModule(new JavaTimeModule());
}
public String toXml(Object source) {
if (source == null) {
return null;
}
try {
return XML_MAPPER.writeValueAsString(source);
} catch (JsonProcessingException e) {
log.error(e.getMessage(), e);
return null;
}
}
public static <T> T fromXml(String xml, Class<T> clazz) {
if (!StringUtils.hasText(xml)) {
return null;
}
try {
return XML_MAPPER.readValue(xml, clazz);
} catch (Exception e) {
log.error(e.getMessage(), e);
return null;
}
}
public static <T> T fromXml(String xml, TypeReference<T> type) {
if (!StringUtils.hasText(xml)) {
return null;
}
try {
return XML_MAPPER.readValue(xml, type);
} catch (Exception e) {
log.error(e.getMessage(), e);
return null;
}
}
}
@@ -24,7 +24,7 @@
<version>2.0-SNAPSHOT</version>
</parent>
<artifactId>hertzbeat-otel</artifactId>
<artifactId>hertzbeat-log</artifactId>
<name>${project.artifactId}</name>
<properties>
<maven-jar-plugin.version>3.2.0</maven-jar-plugin.version>
@@ -44,13 +44,24 @@
</dependency>
<!-- OpenTelemetry -->
<dependency>
<groupId>io.opentelemetry.instrumentation</groupId>
<artifactId>opentelemetry-logback-appender-1.0</artifactId>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-api</artifactId>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-sdk</artifactId>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-sdk-logs</artifactId>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-exporter-otlp</artifactId>
</dependency>
<dependency>
<groupId>io.opentelemetry.instrumentation</groupId>
<artifactId>opentelemetry-spring-boot-starter</artifactId>
<artifactId>opentelemetry-logback-appender-1.0</artifactId>
</dependency>
</dependencies>
</project>
@@ -15,7 +15,7 @@
* limitations under the License.
*/
package org.apache.hertzbeat.otel.config;
package org.apache.hertzbeat.log.config;
import org.apache.hertzbeat.common.constants.ConfigConstants;
import org.apache.hertzbeat.common.constants.SignConstants;
@@ -0,0 +1,117 @@
/*
* 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.log.config;
import static io.opentelemetry.semconv.ServiceAttributes.SERVICE_NAME;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.exporter.otlp.http.logs.OtlpHttpLogRecordExporter;
import io.opentelemetry.instrumentation.logback.appender.v1_0.OpenTelemetryAppender;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.logs.SdkLoggerProvider;
import io.opentelemetry.sdk.logs.export.BatchLogRecordProcessor;
import io.opentelemetry.sdk.resources.Resource;
import jakarta.annotation.PostConstruct;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.hertzbeat.warehouse.store.history.greptime.GreptimeProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
/**
* OpenTelemetryConfig is responsible for initializing OpenTelemetry with the specified service name and GrepTimeDB endpoint.
* It ensures that the initialization is done in a thread-safe manner and includes authentication for GrepTimeDB.
*/
@Configuration
@Slf4j
public class OpenTelemetryConfig {
@Autowired
private GreptimeProperties greptimeProperties;
/**
* Initializes OpenTelemetry with the given service name and GrepTimeDB endpoint.
* Includes authentication if configured in GreptimeProperties.
*/
@PostConstruct
public void initializeOpenTelemetry() {
if (greptimeProperties == null || !greptimeProperties.enabled()) {
log.info("GrepTimeDB logging is disabled, skipping OpenTelemetry configuration.");
return;
}
try {
Resource resource = Resource.getDefault()
.merge(Resource.builder()
.put(SERVICE_NAME, "HertzBeat")
.build());
Map<String, String> headers = new HashMap<>();
headers.put("X-Greptime-DB-Name", "public");
headers.put("X-Greptime-Log-Table-Name", "hzb_log");
addAuthenticationHeaders(headers);
OtlpHttpLogRecordExporter logExporter = OtlpHttpLogRecordExporter.builder()
.setEndpoint(greptimeProperties.httpEndpoint() + "/v1/otlp/v1/logs")
.setHeaders(()-> headers)
.setTimeout(10, TimeUnit.SECONDS)
.build();
SdkLoggerProvider loggerProvider = SdkLoggerProvider.builder()
.setResource(resource)
.addLogRecordProcessor(
BatchLogRecordProcessor.builder(logExporter)
.setScheduleDelay(1000, TimeUnit.MILLISECONDS)
.setMaxExportBatchSize(512)
.build())
.build();
OpenTelemetry openTelemetry = OpenTelemetrySdk.builder()
.setLoggerProvider(loggerProvider)
.build();
OpenTelemetryAppender.install(openTelemetry);
log.info("OpenTelemetry successfully configured with GrepTimeDB exporter.");
} catch (Exception e) {
log.error("Failed to initialize OpenTelemetry with GrepTimeDB", e);
}
}
/**
* Adds authentication headers to the provided map if username and password are configured.
*
* @param headers the map to which authentication headers will be added
*/
private void addAuthenticationHeaders(Map<String, String> headers) {
if (StringUtils.isNotBlank(greptimeProperties.username())
&& StringUtils.isNotBlank(greptimeProperties.password())) {
String credentials = greptimeProperties.username() + ":" + greptimeProperties.password();
String encodedCredentials = Base64.getEncoder().encodeToString(credentials.getBytes());
headers.put("Authorization", "Basic " + encodedCredentials);
}
}
}
@@ -14,4 +14,4 @@
# limitations under the License.
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.apache.hertzbeat.otel.config.LogAutoConfiguration
org.apache.hertzbeat.log.config.LogAutoConfiguration
+3 -3
View File
@@ -47,7 +47,7 @@
<dependency>
<groupId>org.apache.hertzbeat</groupId>
<artifactId>hertzbeat-base</artifactId>
</dependency>
</dependency>
<!-- data warehouse -->
<dependency>
<groupId>org.apache.hertzbeat</groupId>
@@ -92,7 +92,7 @@
<!-- log -->
<dependency>
<groupId>org.apache.hertzbeat</groupId>
<artifactId>hertzbeat-otel</artifactId>
<artifactId>hertzbeat-log</artifactId>
</dependency>
<!-- spring -->
<dependency>
@@ -409,5 +409,5 @@
</build>
</profile>
</profiles>
</project>
@@ -49,7 +49,7 @@ import org.springframework.stereotype.Component;
@Slf4j
@Component
public class ServiceDiscoveryWorker implements InitializingBean {
private static final String FILED_HOST = "host";
private static final String FILED_PORT = "port";
private final MonitorService monitorService;
@@ -97,11 +97,6 @@ public class ServiceDiscoveryWorker implements InitializingBean {
.stream().collect(Collectors.toMap(MonitorBind::getKeyStr, item -> item));
RowWrapper rowWrapper = metricsData.readRow();
Map<String, String> fieldsValue = Maps.newHashMapWithExpectedSize(8);
String defaultPort = mainMonitorParams.stream()
.filter(param -> FILED_PORT.equals(param.getField()))
.findFirst()
.map(Param::getParamValue)
.orElse("");
while (rowWrapper.hasNextRow()) {
rowWrapper = rowWrapper.nextRow();
fieldsValue.clear();
@@ -110,7 +105,7 @@ public class ServiceDiscoveryWorker implements InitializingBean {
fieldsValue.put(cell.getField().getName(), value);
});
final String host = fieldsValue.get(FILED_HOST);
final String port = fieldsValue.getOrDefault(FILED_PORT, defaultPort);
final String port = fieldsValue.get(FILED_PORT);
final String keyStr = host + ":" + port;
if (subMonitorBindMap.containsKey(keyStr)) {
subMonitorBindMap.remove(keyStr);
@@ -150,7 +145,10 @@ public class ServiceDiscoveryWorker implements InitializingBean {
// Thus, all monitors still in hostMonitorMap need to be cancelled.
final Set<Long> needCancelMonitorIdSet = subMonitorBindMap.values().stream()
.map(MonitorBind::getMonitorId).collect(Collectors.toSet());
monitorService.deleteMonitors(needCancelMonitorIdSet);
monitorService.cancelManageMonitors(needCancelMonitorIdSet);
for (Long id : needCancelMonitorIdSet) {
monitorBindDao.deleteMonitorBindByBizIdAndMonitorId(monitorId, id);
}
} catch (Exception exception) {
log.error(exception.getMessage(), exception);
}
@@ -35,7 +35,7 @@ import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
public class JacksonConfig {
@Bean
public Jackson2ObjectMapperBuilderCustomizer jacksonCustomizer() {
public Jackson2ObjectMapperBuilderCustomizer customizer() {
return builder -> {
JavaTimeModule javaTimeModule = new JavaTimeModule();
final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX");
@@ -18,13 +18,10 @@
package org.apache.hertzbeat.manager.dao;
import java.util.List;
import java.util.Set;
import org.apache.hertzbeat.common.entity.manager.MonitorBind;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.transaction.annotation.Transactional;
/**
* MonitorBind database operation
@@ -33,15 +30,8 @@ public interface MonitorBindDao extends JpaRepository<MonitorBind, Long>, JpaSpe
List<MonitorBind> findMonitorBindsByBizId(Long bizId);
List<MonitorBind> findMonitorBindsByBizIdIn(Set<Long> bizIds);
void deleteByMonitorId(Long monitorId);
@Modifying
@Transactional
void deleteMonitorBindByBizIdAndMonitorId(Long bizId, Long monitorId);
@Modifying
void deleteMonitorBindByBizIdIn(Set<Long> bizIds);
}
@@ -18,10 +18,6 @@
package org.apache.hertzbeat.manager.service;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.hertzbeat.common.entity.manager.Label;
import org.springframework.data.domain.Page;
@@ -57,11 +53,4 @@ public interface LabelService {
* @param ids label id list
*/
void deleteLabels(HashSet<Long> ids);
/**
* Identifies new labels from the given entry that are not yet in the database
* @param originLabels k-v entry
* @return new labels
*/
List<Label> determineNewLabels(Set<Map.Entry<String, String>> originLabels);
}
@@ -22,11 +22,7 @@ import jakarta.persistence.criteria.Predicate;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
@@ -121,28 +117,4 @@ public class LabelServiceImpl implements LabelService {
}
labelDao.deleteLabelsByIdIn(ids);
}
public List<Label> determineNewLabels(Set<Map.Entry<String, String>> originLabels){
if (originLabels == null || originLabels.isEmpty()) return List.of();
// Get all labels from the database
Set<Map.Entry<String, String>> allLabels = labelDao.findAll().stream()
.map(label -> Map.entry(label.getName(), label.getTagValue()))
.collect(Collectors.toSet());
// If the bound label (key:value) does not exist, then add it
Set<Map.Entry<String, String>> addLabelsKv = originLabels.stream()
.filter(label -> !allLabels.contains(label))
.collect(Collectors.toCollection(HashSet::new));
return addLabelsKv.stream().map(kv -> {
Label label = new Label();
label.setId(null);
label.setName(kv.getKey());
label.setTagValue(kv.getValue());
label.setType((byte) 0);
return label;
}).toList();
}
}
@@ -35,9 +35,7 @@ import org.apache.hertzbeat.common.entity.job.Job;
import org.apache.hertzbeat.common.entity.job.Metrics;
import org.apache.hertzbeat.common.entity.manager.Collector;
import org.apache.hertzbeat.common.entity.manager.CollectorMonitorBind;
import org.apache.hertzbeat.common.entity.manager.Label;
import org.apache.hertzbeat.common.entity.manager.Monitor;
import org.apache.hertzbeat.common.entity.manager.MonitorBind;
import org.apache.hertzbeat.common.entity.manager.Param;
import org.apache.hertzbeat.common.entity.manager.ParamDefine;
import org.apache.hertzbeat.common.entity.message.CollectRep;
@@ -53,7 +51,6 @@ import org.apache.hertzbeat.grafana.service.DashboardService;
import org.apache.hertzbeat.manager.config.ManagerSseManager;
import org.apache.hertzbeat.manager.dao.CollectorDao;
import org.apache.hertzbeat.manager.dao.CollectorMonitorBindDao;
import org.apache.hertzbeat.manager.dao.LabelDao;
import org.apache.hertzbeat.manager.dao.MonitorBindDao;
import org.apache.hertzbeat.manager.dao.MonitorDao;
import org.apache.hertzbeat.manager.dao.ParamDao;
@@ -62,7 +59,6 @@ import org.apache.hertzbeat.manager.pojo.dto.MonitorDto;
import org.apache.hertzbeat.manager.scheduler.CollectJobScheduling;
import org.apache.hertzbeat.manager.service.AppService;
import org.apache.hertzbeat.manager.service.ImExportService;
import org.apache.hertzbeat.manager.service.LabelService;
import org.apache.hertzbeat.manager.service.MonitorService;
import org.apache.hertzbeat.manager.support.exception.MonitorDatabaseException;
import org.apache.hertzbeat.manager.support.exception.MonitorDetectException;
@@ -87,7 +83,6 @@ import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -133,10 +128,6 @@ public class MonitorServiceImpl implements MonitorService {
private DashboardService dashboardService;
@Autowired
private ManagerSseManager managerSseManager;
@Autowired
private LabelDao labelDao;
@Autowired
private LabelService labelService;
public MonitorServiceImpl(List<ImExportService> imExportServiceList) {
imExportServiceList.forEach(it -> imExportServiceMap.put(it.type(), it));
@@ -162,12 +153,6 @@ public class MonitorServiceImpl implements MonitorService {
labels = new HashMap<>(8);
monitor.setLabels(labels);
}
List<Label> addLabels = labelService.determineNewLabels(labels.entrySet());
if (!addLabels.isEmpty()) {
labelDao.saveAll(addLabels);
}
// Construct the collection task Job entity
boolean isStatic = CommonConstants.SCRAPE_STATIC.equals(monitor.getScrape()) || !StringUtils.hasText(monitor.getScrape());
String app = isStatic ? monitor.getApp() : monitor.getScrape();
@@ -445,13 +430,6 @@ public class MonitorServiceImpl implements MonitorService {
labels = new HashMap<>(8);
monitor.setLabels(labels);
}
List<Label> addLabels = labelService.determineNewLabels(labels.entrySet());
if (!addLabels.isEmpty()) {
labelDao.saveAll(addLabels);
}
boolean isStatic = CommonConstants.SCRAPE_STATIC.equals(monitor.getScrape()) || !StringUtils.hasText(monitor.getScrape());
if (preMonitor.getStatus() != CommonConstants.MONITOR_PAUSED_CODE) {
// Construct the collection task Job entity
@@ -531,16 +509,12 @@ public class MonitorServiceImpl implements MonitorService {
if (CollectionUtils.isEmpty(ids)) {
return;
}
Set<Long> subMonitorIds = monitorBindDao.findMonitorBindsByBizIdIn(ids).stream().map(MonitorBind::getMonitorId).collect(Collectors.toSet());
Set<Long> allMonitorIds = new HashSet<>(ids);
allMonitorIds.addAll(subMonitorIds);
List<Monitor> monitors = monitorDao.findMonitorsByIdIn(allMonitorIds);
List<Monitor> monitors = monitorDao.findMonitorsByIdIn(ids);
if (!monitors.isEmpty()) {
monitorDao.deleteAll(monitors);
paramDao.deleteParamsByMonitorIdIn(ids);
Set<Long> monitorIds = monitors.stream().map(Monitor::getId).collect(Collectors.toSet());
alertDefineBindDao.deleteAlertDefineMonitorBindsByMonitorIdIn(monitorIds);
monitorBindDao.deleteMonitorBindByBizIdIn(monitorIds);
for (Monitor monitor : monitors) {
monitorBindDao.deleteByMonitorId(monitor.getId());
collectorMonitorBindDao.deleteCollectorMonitorBindsByMonitorId(monitor.getId());
@@ -656,8 +630,6 @@ public class MonitorServiceImpl implements MonitorService {
}
// Update monitoring status Delete corresponding monitoring periodic task
// The jobId is not deleted, and the jobId is reused again after the management is started.
Set<Long> subMonitorIds = monitorBindDao.findMonitorBindsByBizIdIn(ids).stream().map(MonitorBind::getMonitorId).collect(Collectors.toSet());
ids.addAll(subMonitorIds);
List<Monitor> managedMonitors = monitorDao.findMonitorsByIdIn(ids)
.stream().filter(monitor ->
monitor.getStatus() != CommonConstants.MONITOR_PAUSED_CODE)
@@ -674,8 +646,6 @@ public class MonitorServiceImpl implements MonitorService {
@Override
public void enableManageMonitors(Set<Long> ids) {
// Update monitoring status Add corresponding monitoring periodic task
Set<Long> subMonitorIds = monitorBindDao.findMonitorBindsByBizIdIn(ids).stream().map(MonitorBind::getMonitorId).collect(Collectors.toSet());
ids.addAll(subMonitorIds);
List<Monitor> unManagedMonitors = monitorDao.findMonitorsByIdIn(ids)
.stream().filter(monitor ->
monitor.getStatus() == CommonConstants.MONITOR_PAUSED_CODE)
@@ -21,13 +21,11 @@ app: activemq
name:
zh-CN: ActiveMQ消息系统
en-US: ActiveMQ Message
ja-JP: ActiveMQメッセージングシステム
# The description and help of this monitoring type
help:
zh-CN: HertzBeat 使用 <a class='help_module_content' href='https://hertzbeat.apache.org/docs/advanced/extend-jmx'> JMX 协议</a> 对 Apache ActiveMQ 消息中间件的运行状态,节点,Topic等相关指标(broker、topic、memory pool、class loading、thread)进行监测。<br><span class='help_module_span'>⚠️注意:您需要在 ActiveMQ 开启 JMX 服务。<a class='help_module_content' href='https://hertzbeat.apache.org/zh-cn/docs/help/activemq'>点击查看开启步骤</a>。</span>
en-US: "HertzBeat uses <a class='help_module_content' href='https://hertzbeat.apache.org/docs/advanced/extend-jmx'> JMX protocol</a> to monitor the running status, nodes, topics, and other metrics of Apache ActiveMQ message-oriented middleware. <br><span class='help_module_span'>⚠️Note: You should enable the JMX service in ActiveMQ. <a class='help_module_content' href='https://hertzbeat.apache.org/docs/help/activemq'>Click here to view the specific steps.</a></span>"
zh-TW: HertzBeat使用 <a class='help_module_content' href='https://hertzbeat.apache.org/docs/advanced/extend-jmx'> JMX 協定</a> 對 Apache ActiveMQ 消息中介軟體的運行狀態,節點,Topic 等相關名額(broker、topic、memory pool、class loading、thread)進行監測。<br><span class='help_module_span'> ⚠️注意:您需要在 ActiveMQ 開啟 JMX 服務。<a class='help_module_content' href=' https://hertzbeat.apache.org/zh-cn/docs/help/activemq'>點擊查看開啟步驟</a>。</span>
ja-JP: HertzBeatは <a class='help_module_content' href='https://hertzbeat.apache.org/docs/advanced/extend-jmx'> JMXプロトコルを介して</a> Apache ActiveMQメッセージングシステムのランタイムステータス、ノード、トピック、その他の関連指標を監視します。<br><span class='help_module_span'> ⚠️注意:ActiveMQ で JMX サービスを有効にする必要があります。<a class='help_module_content' href=' https://hertzbeat.apache.org/zh-cn/docs/help/activemq'>クリックしてガイドを見ます</a>。</span>
helpLink:
zh-CN: https://hertzbeat.apache.org/zh-cn/docs/help/activemq
en-US: https://hertzbeat.apache.org/docs/help/activemq
@@ -39,7 +37,6 @@ params:
name:
zh-CN: 目标 Host
en-US: Target Host
ja-JP: 目標ホスト
# type-param field type(most mapping the html input type)
type: host
# required-true or false
@@ -50,7 +47,6 @@ params:
name:
zh-CN: JMX 端口
en-US: JMX Port
ja-JP: JMXポート
# type-param field type(most mapping the html input type)
type: number
# when type is number, range is required
@@ -65,7 +61,6 @@ params:
name:
zh-CN: JMX URL
en-US: JMX URL
ja-JP: JMX URL
# type-param field type(most mapping the html input type)
type: text
# required-true or false
@@ -80,7 +75,6 @@ params:
name:
zh-CN: 用户名
en-US: Username
ja-JP: ユーザー名
# type-param field type(most mapping the html input type)
type: text
# when type is text, use limit to limit string length
@@ -95,7 +89,6 @@ params:
name:
zh-CN: 密码
en-US: Password
ja-JP: パスワード
# type-param field type(most mapping the html input tag)
type: password
# required-true or false
@@ -110,7 +103,6 @@ metrics:
i18n:
zh-CN: 虚拟机基础信息
en-US: JVM Basic
ja-JP: Java仮想マシン基礎情報
# 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
@@ -122,26 +114,22 @@ metrics:
i18n:
zh-CN: 名称
en-US: Vm Name
ja-JP: 仮想マシン名
- field: VmVendor
type: 1
i18n:
zh-CN: 厂商
en-US: Vm Vendor
ja-JP: 仮想マシンベンダー
- field: VmVersion
type: 1
i18n:
zh-CN: 版本
en-US: Vm Version
ja-JP: 仮想マシンバージョン
- field: Uptime
type: 0
unit: ms
i18n:
zh-CN: 运行时长
en-US: Up time
ja-JP: アップタイム
# the protocol used for monitoring, eg: sql, ssh, http, telnet, wmi, snmp, sdk
protocol: jmx
# the config content when protocol is jmx
@@ -163,7 +151,6 @@ metrics:
i18n:
zh-CN: Broker 信息
en-US: Broker Info
ja-JP: ブローカー情報
priority: 1
fields:
- field: BrokerName
@@ -172,118 +159,99 @@ metrics:
i18n:
zh-CN: Broker 名称
en-US: Broker Name
ja-JP: ブローカー名
- field: BrokerVersion
i18n:
zh-CN: Broker 版本
en-US: Broker Version
ja-JP: ブローカーバージョン
type: 1
- field: Uptime
i18n:
zh-CN: 启动时长
en-US: Uptime
ja-JP: アップタイム
type: 1
- field: UptimeMillis
i18n:
zh-CN: 启动时长(毫秒)
en-US: Uptime Millis
ja-JP: アップタイム(ms)
type: 0
unit: ms
- field: Persistent
i18n:
zh-CN: 持久化
en-US: Persistence
ja-JP: 永続性
en-US: Persistent
type: 1
- field: DataDirectory
i18n:
zh-CN: 数据目录
en-US: Data Directory
ja-JP: データディレクトリ
type: 1
- field: MemoryPercentUsage
i18n:
zh-CN: 内存使用率
en-US: Memory Percent Usage
ja-JP: メモリ使用率
type: 0
unit: '%'
- field: StorePercentUsage
i18n:
zh-CN: 存储使用率
en-US: Store Percent Usage
ja-JP: ストレージ使用率
type: 0
unit: '%'
- field: TempPercentUsage
i18n:
zh-CN: 临时使用率
en-US: Temp Percent Usage
ja-JP: 一時使用率
type: 0
unit: '%'
- field: CurrentConnectionsCount
i18n:
zh-CN: 当前连接数
en-US: Current Connections Count
ja-JP: 現在接続数
type: 0
- field: TotalConnectionsCount
i18n:
zh-CN: 总连接数
en-US: Total Connections Count
ja-JP: 合計接続数
type: 0
- field: TotalEnqueueCount
i18n:
zh-CN: 总入队数
en-US: Total Enqueue Count
ja-JP: 合計エンキュー数
type: 0
- field: TotalDequeueCount
i18n:
zh-CN: 总出队数
en-US: Total Dequeue Count
ja-JP: 合計デキュー数
type: 0
- field: TotalConsumerCount
i18n:
zh-CN: 消费者总数
en-US: Total Consumer Count
ja-JP: 消費者総数
type: 0
- field: TotalProducerCount
i18n:
zh-CN: 生产者总数
en-US: Total Producer Count
ja-JP: 生産者総数
type: 0
- field: TotalMessageCount
i18n:
zh-CN: 总消息数
en-US: Total Message Count
ja-JP: メッセージ総数
type: 0
- field: AverageMessageSize
i18n:
zh-CN: 平均消息大小
en-US: Average Message Size
ja-JP: 平均メッセージサイズ
type: 0
- field: MaxMessageSize
i18n:
zh-CN: 最大消息大小
en-US: Max Message Size
ja-JP: 最大メッセージサイズ
type: 0
- field: MinMessageSize
i18n:
zh-CN: 最小消息大小
en-US: Min Message Size
ja-JP: 最小メッセージサイズ
type: 0
protocol: jmx
jmx:
@@ -303,125 +271,106 @@ metrics:
i18n:
zh-CN: Topic 名称
en-US: Topic Name
ja-JP: トピック名
- field: MemoryLimit
type: 0
unit: MB
i18n:
zh-CN: 内存限制
en-US: Memory Limit
ja-JP: メモリ制限
- field: MemoryPercentUsage
type: 0
unit: '%'
i18n:
zh-CN: 内存使用率
en-US: Memory Percent Usage
ja-JP: メモリ使用率
- field: ProducerCount
type: 0
i18n:
zh-CN: 生产者数量
en-US: Producer Count
ja-JP: 生産者数
- field: ConsumerCount
type: 0
i18n:
zh-CN: 消费者数量
en-US: Consumer Count
ja-JP: 消費者数
- field: EnqueueCount
type: 0
i18n:
zh-CN: 入队数量
en-US: Enqueue Count
ja-JP: エンキュー数
- field: DequeueCount
type: 0
i18n:
zh-CN: 出队数量
en-US: Dequeue Count
ja-JP: デキュー数
- field: ForwardCount
type: 0
i18n:
zh-CN: 转发数量
en-US: Forward Count
ja-JP: フォワード数
- field: InFlightCount
type: 0
i18n:
zh-CN: 进行中数量
en-US: In Flight Count
ja-JP: 処理数
- field: DispatchCount
type: 0
i18n:
zh-CN: 分发数量
en-US: Dispatch Count
ja-JP: ディスパッチ数
- field: ExpiredCount
type: 0
i18n:
zh-CN: 过期数量
en-US: Expired Count
ja-JP: 期限切れ数
- field: StoreMessageSize
type: 0
unit: B
i18n:
zh-CN: 存储消息大小
en-US: Store Message Size
ja-JP: ストレージメッセージサイズ
- field: AverageEnqueueTime
type: 0
unit: ms
i18n:
zh-CN: 平均入队时间
en-US: Average Enqueue Time
ja-JP: 平均エンキュー時間
- field: MaxEnqueueTime
type: 0
unit: ms
i18n:
zh-CN: 最大入队时间
en-US: Max Enqueue Time
ja-JP: 最大エンキュー時間
- field: MinEnqueueTime
type: 0
unit: ms
i18n:
zh-CN: 最小入队时间
en-US: Min Enqueue Time
ja-JP: 最小エンキュー時間
- field: TotalBlockedTime
type: 0
unit: ms
i18n:
zh-CN: 总阻塞时间
en-US: Total Blocked Time
ja-JP: 合計ブロック時間
- field: AverageMessageSize
type: 0
unit: B
i18n:
zh-CN: 平均消息大小
en-US: Average Message Size
ja-JP: 平均メッセージサイズ
- field: MaxMessageSize
type: 0
unit: B
i18n:
zh-CN: 最大消息大小
en-US: Max Message Size
ja-JP: 最大メッセージサイズ
- field: MinMessageSize
type: 0
unit: B
i18n:
zh-CN: 最小消息大小
en-US: Min Message Size
ja-JP: 最小メッセージサイズ
units:
- MemoryLimit=B->MB
protocol: jmx
@@ -437,7 +386,6 @@ metrics:
i18n:
zh-CN: 内存池
en-US: Memory Pool
ja-JP: メモリプール
priority: 2
fields:
- field: name
@@ -446,35 +394,30 @@ metrics:
i18n:
zh-CN: 指标名称
en-US: Name
ja-JP: 指標名
- field: committed
type: 0
unit: MB
i18n:
zh-CN: 已分配内存
en-US: Committed
ja-JP: コミットメモリー
- field: init
type: 0
unit: MB
i18n:
zh-CN: 初始化内存
en-US: Init
ja-JP: イニシャルメモリ
- field: max
type: 0
unit: MB
i18n:
zh-CN: 最大内存
en-US: Max
ja-JP: 最大メモリ
- field: used
type: 0
unit: MB
i18n:
zh-CN: 已使用内存
en-US: Used
ja-JP: 使用済みメモリ
units:
- committed=B->MB
- init=B->MB
@@ -505,7 +448,6 @@ metrics:
i18n:
zh-CN: 类加载信息
en-US: Class Loading
ja-JP: クラスローディング情報
priority: 2
fields:
- field: LoadedClassCount
@@ -513,19 +455,16 @@ metrics:
i18n:
zh-CN: 当前已加载类数量
en-US: Loaded Class Count
ja-JP: ロードされたクラス数
- field: TotalLoadedClassCount
type: 0
i18n:
zh-CN: 已加载类总数量
en-US: Total Loaded Class Count
ja-JP: ロードされたクラス総数
- field: UnloadedClassCount
type: 0
i18n:
zh-CN: 未加载类总数量
en-US: Unloaded Class Count
ja-JP: アンロードされたクラス総数
protocol: jmx
jmx:
host: ^_^host^_^
@@ -539,7 +478,6 @@ metrics:
i18n:
zh-CN: 线程信息
en-US: Thread
ja-JP: スレッド情報
priority: 2
fields:
- field: TotalStartedThreadCount
@@ -547,39 +485,33 @@ metrics:
i18n:
zh-CN: 已启动线程总数
en-US: Total Started Thread Count
ja-JP: スレッド総数
- field: ThreadCount
type: 0
i18n:
zh-CN: 活跃线程数
en-US: Thread Count
ja-JP: 活躍スレッド数
- field: PeakThreadCount
type: 0
i18n:
zh-CN: 最大峰值线程数
en-US: Peak Thread Count
ja-JP: 最大スレッド数
- field: DaemonThreadCount
type: 0
i18n:
zh-CN: 活跃守护线程数
en-US: Daemon Thread Count
ja-JP: デーモンスレッド数
- field: CurrentThreadUserTime
type: 0
unit: s
i18n:
zh-CN: 线程占用的CPU时间(用户态)
en-US: Current Thread User Time
ja-JP: 現在のスレッドユーザー時間
- field: CurrentThreadCpuTime
type: 0
unit: s
i18n:
zh-CN: 线程占用的CPU时间
en-US: Current Thread CPU Time
ja-JP: 現在のスレッドシステム時間
units:
- CurrentThreadUserTime=NS->S
- CurrentThreadCpuTime=NS->S
@@ -21,13 +21,11 @@ app: airflow
name:
zh-CN: Apache Airflow
en-US: Apache Airflow
ja-JP: Apache Airflow
# The description and help of this monitoring type
help:
zh-CN: Hertzbeat 对 Apache Airflow 通用性能指标(airflow health、airflow version)进行采集监控。<br>您可以点击“<i>新建 Apache Airflow </i>”并进行配置,或者选择“<i>更多操作</i>”,导入已有配置。
en-US: HertzBeat monitors Apache Airflow through general performance metrics such as airflow health and airflow version. You could click the "<i>New Apache Airflow</i>" button and proceed with the configuration or import an existing setup through the "<i>More Actions</i>" menu.
zh-TW: Hertzbeat對Apache Airflow通用性能指標(airflow health、airflow version)進行採集監控。<br>您可以點擊“<i>新建 Apache Airflow</i>”並進行配寘,或者選擇“<i>更多操作</i>”,導入已有配寘。
ja-JP: Hertzbeatは、Apache Airflowの一般的なパフォーマンス指標を監視します。 <br><i>新規Apache Airflow</i>をクリックして設定しましょう。
helpLink:
zh-CN: https://hertzbeat.apache.org/zh-cn/docs/help/airflow/
en-US: https://hertzbeat.apache.org/docs/help/airflow/
@@ -39,7 +37,6 @@ params:
name:
zh-CN: 服务器 Host
en-US: Target Host
ja-JP: 目標ホスト
# type-param field type(most mapping the html input type)
type: host
# required-true or false
@@ -50,7 +47,6 @@ params:
name:
zh-CN: 服务端口
en-US: Port
ja-JP: ポート
# type-param field type(most mapping the html input type)
type: number
# when type is number, range is required
@@ -64,7 +60,6 @@ params:
name:
zh-CN: 启用HTTPS
en-US: HTTPS
ja-JP: HTTPS
type: boolean
hide: true
required: true
@@ -73,7 +68,6 @@ params:
name:
zh-CN: 超时时间(ms)
en-US: Timeout(ms)
ja-JP: タイムアウト(ms)
type: number
hide: true
required: false
@@ -84,26 +78,22 @@ metrics:
i18n:
zh-CN: airflow 健康状态
en-US: airflow health status
ja-JP: airflow 健全状態
priority: 0
fields:
- field: metadatabase
i18n:
zh-CN: metadatabase 健康情况
en-US: metadatabase status
ja-JP: metadatabase 健全状態
type: 1
- field: scheduler
i18n:
zh-CN: scheduler 健康情况
en-US: scheduler status
ja-JP: scheduler 健全状態
type: 1
- field: triggerer
i18n:
zh-CN: triggerer 健康情况
en-US: triggerer status
ja-JP: triggerer 健全状態
type: 1
aliasFields:
- $.metadatabase.status
@@ -131,21 +121,18 @@ metrics:
- name: airflow_version
i18n:
zh-CN: Airflow 版本
en-US: Airflow version
ja-JP: Airflowバージョン
en-US: airflow version
priority: 1
fields:
- field: version
i18n:
zh-CN: Airflow 版本
en-US: Airflow version
ja-JP: Airflowバージョン
type: 1
- field: git_version
i18n:
zh-CN: git版本
zh-CN: Airflow git版本
en-US: git version
ja-JP: Gitバージョン
type: 1
protocol: http
http:
@@ -21,13 +21,11 @@ app: almalinux
name:
zh-CN: AlmaLinux
en-US: AlmaLinux
ja-JP: AlmaLinux
# The description and help of this monitoring type
help:
zh-CN: Hertzbeat 使用 <a class='help_module_content' href='https://hertzbeat.apache.org/docs/advanced/extend-ssh'> SSH 协议</a> 对 AlmaLinux 操作系统的通用性能指标 (系统信息、CPU、内存、磁盘、网卡、文件系统、TOP资源进程等) 进行采集监控。<br>您可以点击“<i>新建 AlmaLinux</i>”并配置HOST端口账户等相关参数进行添加,支持SSH账户密码或密钥认证。或者选择“<i>更多操作</i>”,导入已有配置。
en-US: HertzBeat uses <a class='help_module_content' href='https://hertzbeat.apache.org/docs/advanced/extend-ssh'> SSH protocol</a> to monitors AlmaLinux operating system's general performance metrics such as cpu, memory, disk, basic, interface, disk_free, top_process etc. <br>You can click the "<i>New AlmaLinux</i>" and config host port and other related params to add, auth support password or secretKey. Or import an existing setup through the "<i>More Actions</i>" menu.
zh-TW: Hertzbeat 使用 <a class='help_module_content' href='https://hertzbeat.apache.org/docs/advanced/extend-ssh'> SSH 协议</a> 對 AlmaLinux 操作系统的通用性能指標 (系統信息、CPU、內存、磁盤、網卡、文件系統、TOP資源進程等) 進行採集監控。<br>您可以點擊“<i>新建AlmaLinux</i>”並配置HOST端口賬戶等相關參數進行添加,支持SSH賬戶密碼或密鑰認證。或者選擇“<i>更多操作</i>”,導入已有配寘。
ja-JP: Hertzbeat は <a class='help_module_content' href='https://hertzbeat.apache.org/docs/advanced/extend-ssh'> SSHプロトコルを介して</a> AlmaLinux 操作系统的通用性能指标 (系统信息、CPU、内存、磁盘、网卡、文件系统、TOP资源进程等) 进行采集监控。<br>「<i>新規 AlmaLinux</i>」をクリックしてホストなどのパラメタを設定した後、新規することができます。SSHまたはキー認証をサポートします。
helpLink:
zh-CN: https://hertzbeat.apache.org/zh-cn/docs/help/almalinux
en-US: https://hertzbeat.apache.org/docs/help/almalinux
@@ -39,7 +37,6 @@ params:
name:
zh-CN: 目标 Host
en-US: Target Host
ja-JP: 目標ホスト
# type-param field type(most mapping the html input type)
type: host
# required-true or false
@@ -50,7 +47,6 @@ params:
name:
zh-CN: 端口
en-US: Port
ja-JP: ポート
# type-param field type(most mapping the html input type)
type: number
# when type is number, range is required
@@ -65,7 +61,6 @@ params:
name:
zh-CN: 超时时间(ms)
en-US: Timeout(ms)
ja-JP: タイムアウト(ms)
# type-param field type(most mapping the html input type)
type: number
# when type is number, range is required
@@ -80,7 +75,6 @@ params:
name:
zh-CN: 复用连接
en-US: Reuse Connection
ja-JP: コネクション再利用
# type-param field type(most mapping the html input type)
type: boolean
# required-true or false
@@ -92,7 +86,6 @@ params:
name:
zh-CN: 使用代理
en-US: Use Proxy Connection
ja-JP: プロキシ利用
# type-param field type(most mapping the html input type)
type: boolean
# required-true or false
@@ -104,7 +97,6 @@ params:
name:
zh-CN: 用户名
en-US: Username
ja-JP: ユーザー名
# type-param field type(most mapping the html input type)
type: text
# when type is text, use limit to limit string length
@@ -117,7 +109,6 @@ params:
name:
zh-CN: 密码
en-US: Password
ja-JP: パスワード
# type-param field type(most mapping the html input tag)
type: password
# required-true or false
@@ -127,8 +118,7 @@ params:
# name-param field display i18n name
name:
zh-CN: 私钥
en-US: Private Key
ja-JP: 秘密鍵
en-US: PrivateKey
# type-param field type(most mapping the html input type)
type: textarea
placeholder: -----BEGIN RSA PRIVATE KEY-----
@@ -142,7 +132,6 @@ params:
name:
zh-CN: 密钥短语
en-US: PrivateKey PassPhrase
ja-JP: 秘密鍵フレーズ
# type-param field type(most mapping the html input type)
type: password
# required-true or false
@@ -155,7 +144,6 @@ params:
name:
zh-CN: 代理主机
en-US: Proxy Host
ja-JP: プロキシホスト
# type-param field type(most mapping the html input type)
type: text
# required-true or false
@@ -167,7 +155,6 @@ params:
name:
zh-CN: 代理端口
en-US: Proxy Port
ja-JP: プロキシポート
# type-param field type(most mapping the html input type)
type: number
# when type is number, range is required
@@ -184,7 +171,6 @@ params:
name:
zh-CN: 代理用户名
en-US: Proxy Username
ja-JP: プロキシユーザー名
# type-param field type(most mapping the html input type)
type: text
# when type is text, use limit to limit string length
@@ -199,7 +185,6 @@ params:
name:
zh-CN: 代理密码
en-US: Proxy Password
ja-JP: プロキシパスワード
# type-param field type(most mapping the html input tag)
type: password
# required-true or false
@@ -212,7 +197,6 @@ params:
name:
zh-CN: 代理主机私钥
en-US: proxyPrivateKey
ja-JP: プロキシ秘密鍵
# type-param field type(most mapping the html input type)
type: textarea
placeholder: -----BEGIN RSA PRIVATE KEY-----
@@ -227,7 +211,6 @@ metrics:
i18n:
zh-CN: 系统基本信息
en-US: Basic Info
ja-JP: システム基礎情報
# 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
@@ -240,19 +223,16 @@ metrics:
i18n:
zh-CN: 主机名称
en-US: Host Name
ja-JP: ホスト名
- field: version
type: 1
i18n:
zh-CN: 操作系统版本
en-US: System Version
ja-JP: システムバージョン
- field: uptime
type: 1
i18n:
zh-CN: 启动时间
en-US: Uptime
ja-JP: アップタイム
# the protocol used for monitoring, eg: sql, ssh, http, telnet, wmi, snmp, sdk
protocol: ssh
# the config content when protocol is ssh
@@ -292,7 +272,6 @@ metrics:
i18n:
zh-CN: CPU 信息
en-US: CPU Info
ja-JP: CPU情報
priority: 1
fields:
- field: info
@@ -300,38 +279,32 @@ metrics:
i18n:
zh-CN: 型号
en-US: Info
ja-JP: バージョン
- field: cores
type: 1
i18n:
zh-CN: 核数
en-US: Cores
ja-JP: コア数
- field: interrupt
type: 0
i18n:
zh-CN: 中断数
en-US: Interrupt
ja-JP: 割り込み数
- field: load
type: 1
i18n:
zh-CN: 负载
en-US: Load
ja-JP: ロード
- field: context_switch
type: 0
i18n:
zh-CN: 上下文切换
en-US: Context Switch
ja-JP: コンテキストスイッチ
- field: usage
type: 0
unit: '%'
i18n:
zh-CN: 使用率
en-US: Usage
ja-JP: 使用率
# (optional)metrics field alias name, it is used as an alias field to map and convert the collected data and metrics field
aliasFields:
- info
@@ -378,7 +351,6 @@ metrics:
i18n:
zh-CN: 内存信息
en-US: Memory Info
ja-JP: メモリ情報
priority: 2
fields:
- field: total
@@ -387,42 +359,36 @@ metrics:
i18n:
zh-CN: 总内存容量
en-US: Total Memory
ja-JP: メモリ容量
- field: used
type: 0
unit: Mb
i18n:
zh-CN: 用户程序内存量
en-US: User Program Memory
ja-JP: ユーザープログラムメモリ
- field: free
type: 0
unit: Mb
i18n:
zh-CN: 空闲内存容量
en-US: Free Memory
ja-JP: 空きメモリ
- field: buff_cache
type: 0
unit: Mb
i18n:
zh-CN: 缓存占用内存
en-US: Buff Cache Memory
ja-JP: バッファメモリ
- field: available
type: 0
unit: Mb
i18n:
zh-CN: 剩余可用内存
en-US: Available Memory
ja-JP: 使用可能なメモリ
- field: usage
type: 0
unit: '%'
i18n:
zh-CN: 内存使用率
en-US: Memory Usage
ja-JP: メモリ使用率
aliasFields:
- total
- used
@@ -465,7 +431,6 @@ metrics:
i18n:
zh-CN: 磁盘信息
en-US: Disk Info
ja-JP: ディスク情報
priority: 3
fields:
- field: disk_num
@@ -473,32 +438,27 @@ metrics:
i18n:
zh-CN: 磁盘总数
en-US: Disk Num
ja-JP: ディスク番号
- field: partition_num
type: 1
i18n:
zh-CN: 分区总数
en-US: Partition Num
ja-JP: パーティション
- field: block_write
type: 0
i18n:
zh-CN: 写磁盘块数
en-US: Block Write
ja-JP: 書き込みディスクブロック数
- field: block_read
type: 0
i18n:
zh-CN: 读磁盘块数
en-US: Block Read
ja-JP: 読み取りブロック数
- field: write_rate
type: 0
unit: iops
i18n:
zh-CN: 磁盘写速率
en-US: Write Rate
ja-JP: ディスク書き込み速度
protocol: ssh
ssh:
host: ^_^host^_^
@@ -528,7 +488,6 @@ metrics:
i18n:
zh-CN: 网卡信息
en-US: Interface Info
ja-JP: ネットワークカード情報
priority: 4
fields:
- field: interface_name
@@ -537,21 +496,18 @@ metrics:
i18n:
zh-CN: 网卡名称
en-US: Interface Name
ja-JP: ネットワークカード名
- field: receive_bytes
type: 0
unit: Mb
i18n:
zh-CN: 入站数据流量
en-US: Receive Bytes
ja-JP: 受信バイト数
- field: transmit_bytes
type: 0
unit: Mb
i18n:
zh-CN: 出站数据流量
en-US: Transmit Bytes
ja-JP: 送信バイト数
units:
- receive_bytes=B->MB
- transmit_bytes=B->MB
@@ -584,7 +540,6 @@ metrics:
i18n:
zh-CN: 文件系统
en-US: Disk Free
ja-JP: ファイルシステム
priority: 5
fields:
- field: filesystem
@@ -592,35 +547,30 @@ metrics:
i18n:
zh-CN: 文件系统
en-US: Filesystem
ja-JP: ファイルシステム
- field: used
type: 0
unit: Mb
i18n:
zh-CN: 已使用量
en-US: Used
ja-JP: 使用済み
- field: available
type: 0
unit: Mb
i18n:
zh-CN: 可用量
en-US: Available
ja-JP: 使用可能
- field: usage
type: 0
unit: '%'
i18n:
zh-CN: 使用率
en-US: Usage
ja-JP: 使用率
- field: mounted
type: 1
label: true
i18n:
zh-CN: 挂载点
en-US: Mounted
ja-JP: マウント
protocol: ssh
ssh:
host: ^_^host^_^
@@ -650,7 +600,6 @@ metrics:
i18n:
zh-CN: Top10 CPU 进程
en-US: Top10 CPU Process
ja-JP: トップ10 CPUプロセス
priority: 6
fields:
- field: pid
@@ -659,27 +608,23 @@ metrics:
i18n:
zh-CN: 进程ID
en-US: PID
ja-JP: プロセスID
- field: cpu_usage
type: 0
unit: '%'
i18n:
zh-CN: CPU 占用率
en-US: CPU Usage
ja-JP: CPU使用率
- field: mem_usage
type: 0
unit: '%'
i18n:
zh-CN: 内存占用率
en-US: Memory Usage
ja-JP: メモリ使用率
- field: command
type: 1
i18n:
zh-CN: 执行命令
en-US: Command
ja-JP: 指令
protocol: ssh
ssh:
host: ^_^host^_^
@@ -709,7 +654,6 @@ metrics:
i18n:
zh-CN: Top10 内存进程
en-US: Top10 Memory Process
ja-JP: トップ10 メモリプロセス
priority: 7
fields:
- field: pid
@@ -718,27 +662,23 @@ metrics:
i18n:
zh-CN: 进程ID
en-US: PID
ja-JP: プロセスID
- field: mem_usage
type: 0
unit: '%'
i18n:
zh-CN: 内存占用率
en-US: Memory Usage
ja-JP: メモリ使用率
- field: cpu_usage
type: 0
unit: '%'
i18n:
zh-CN: CPU 占用率
en-US: CPU Usage
ja-JP: CPU使用率
- field: command
type: 1
i18n:
zh-CN: 执行命令
en-US: Command
ja-JP: 指令
protocol: ssh
ssh:
host: ^_^host^_^
@@ -21,13 +21,11 @@ app: api
name:
zh-CN: HTTP API
en-US: HTTP API
ja-JP: HTTP API
# The description and help of this monitoring type
help:
zh-CN: Hertzbeat 将调用 HTTP API 接口,查看接口是否可用,并以 ms 为指标单位对其响应时间等指标进行监测。您可以先点击“新增 HTTP API”按钮并进行配置,或在“更多操作”中导入已有配置。
en-US: The platform will invoke an HTTP API endpoint to verify its accessibility and monitor various metrics, including response time, measured in milliseconds (ms). <br>To set up this functionality, you could click the "Add HTTP API" button and proceed with the configuration or import an existing setup through the "More Actions" menu.
zh-TW: Hertzbeat將調用HTTP API介面,查看介面是否可用,並以ms為名額組織對其回應時間等名額進行監測。 您可以先點擊“新增HTTP API”按鈕並進行配寘,或在“更多操作”中導入已有配寘。
ja-JP: Hertzbeatは、HTTP APIを呼び出して利用可能かどうかを確認し、応答時間(ms)などのメトリクスを監視します。「新規HTTP API」をクリックして設定しましょう。
helpLink:
zh-CN: https://hertzbeat.apache.org/zh-cn/docs/help/api
en-US: https://hertzbeat.apache.org/docs/help/api
@@ -39,7 +37,6 @@ params:
name:
zh-CN: 目标Host
en-US: Target Host
ja-JP: 目標ホスト
# type-param field type(most mapping the html input type)
type: host
# required-true or false
@@ -50,7 +47,6 @@ params:
name:
zh-CN: 端口
en-US: Port
ja-JP: ポート
# type-param field type(most mapping the html input type)
type: number
# when type is number, range is required
@@ -65,7 +61,6 @@ params:
name:
zh-CN: 请求方式
en-US: Method
ja-JP: リクエストメソッド
# type-param field type(most mapping the html input type)
type: radio
# required-true or false
@@ -86,7 +81,6 @@ params:
name:
zh-CN: 相对路径
en-US: URI
ja-JP: URI
# type-param field type(most mapping the html input type)
type: text
# when type is text, use limit to limit string length
@@ -101,7 +95,6 @@ params:
name:
zh-CN: 启用HTTPS
en-US: HTTPS
ja-JP: HTTPS利用
# type-param field type(most mapping the html input type)
type: boolean
# required-true or false
@@ -112,7 +105,6 @@ params:
name:
zh-CN: 超时时间(ms)
en-US: Timeout(ms)
ja-JP: タイムアウト(ms)
# type-param field type(most mapping the html input type)
type: number
# required-true or false
@@ -125,7 +117,6 @@ params:
name:
zh-CN: 请求Headers
en-US: Headers
ja-JP: ヘッダ
# type-param field type(most mapping the html input type)
type: key-value
# required-true or false
@@ -140,7 +131,6 @@ params:
name:
zh-CN: 查询Params
en-US: Params
ja-JP: パラメータ
# type-param field type(most mapping the html input type)
type: key-value
# required-true or false
@@ -155,7 +145,6 @@ params:
name:
zh-CN: Content-Type
en-US: Content-Type
ja-JP: コンテンツタイプ
# type-param field type(most mapping the html input type)
type: text
# param field input placeholder
@@ -190,7 +179,6 @@ params:
name:
zh-CN: 认证方式
en-US: Auth Type
ja-JP: 認証方法
# type-param field type(most mapping the html input type)
type: radio
# required-true or false
@@ -209,7 +197,6 @@ params:
name:
zh-CN: 用户名
en-US: Username
ja-JP: ユーザー名
# type-param field type(most mapping the html input type)
type: text
# when type is text, use limit to limit string length
@@ -224,7 +211,6 @@ params:
name:
zh-CN: 密码
en-US: Password
ja-JP: パスワード
# type-param field type(most mapping the html input type)
type: password
# required-true or false
@@ -237,7 +223,6 @@ params:
name:
zh-CN: 计数关键字
en-US: Keyword
ja-JP: キーワード
# type-param field type(most mapping the html input type)
type: text
# param field input placeholder
@@ -252,7 +237,6 @@ params:
name:
zh-CN: 校验成功状态码
en-US: Verify Success Code
ja-JP: 成功ステータスコードの検証
# type-param field type(most mapping the html input type)
type: array
# param field input placeholder
@@ -268,7 +252,6 @@ params:
name:
zh-CN: 启用URL编码(UTF-8
en-US: Enable URL Encoding(UTF-8)
ja-JP: URL Encoding利用(UTF-8
# type-param field type(most mapping the html input type)
type: boolean
# required-true or false
@@ -284,7 +267,6 @@ metrics:
i18n:
zh-CN: 概要
en-US: Summary
ja-JP: 概要
# 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
@@ -297,13 +279,11 @@ metrics:
i18n:
zh-CN: 响应时间
en-US: Response Time
ja-JP: 応答時間
- field: keyword
type: 0
i18n:
zh-CN: 关键词数量
en-US: Keyword
ja-JP: キーワード
# the protocol used for monitoring, eg: sql, ssh, http, telnet, wmi, snmp, sdk
protocol: http
# the config content when protocol is http
@@ -349,7 +329,6 @@ metrics:
i18n:
zh-CN: 请求头
en-US: Header
ja-JP: ヘッダ
# 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: 1
@@ -361,13 +340,11 @@ metrics:
i18n:
zh-CN: Content Type
en-US: Content Type
ja-JP: コンテンツタイプ
- field: Content-Length
type: 1
i18n:
zh-CN: 响应内容长度
en-US: Content Length
ja-JP: コンテンツの長さ
# the protocol used for monitoring, eg: sql, ssh, http, telnet, wmi, snmp, sdk
protocol: http
# the config content when protocol is http
@@ -21,13 +21,11 @@ app: api_code
name:
zh-CN: API业务状态码
en-US: API Code
ja-JP: APIコード
# The description and help of this monitoring type
help:
zh-CN: 监控 HTTP API 接口,对 API 返回的业务自定义状态码(非 Http 状态码)进行监控。此需通过配置 JsonPath 来解析您 API 的业务状态码路径。<br>您可以点击 “<i>新建 API Code</i>” 并进行配置,或者选择“<i>更多操作</i>”,导入已有配置。
en-US: Monitor HTTP API to monitor business-defined status codes (non-HTTP status codes) returned by API. To do this, you need to configure JsonPath to resolve the business status code path of your API. <br>You could click the "<i>New API Codes</i>" button and proceed with the configuration or import an existing setup through the "<i>More Actions</i>" menu.
zh-TW: 監控 HTTP API 接口,對 API 返回的業務自定義狀態碼(非 Http 狀態碼)進行監控。此需通過配置 JsonPath 來解析您 API 的業務狀態碼路徑。<br>您可以點擊“<i>新建API Code</i>”並進行配寘,或者選擇“<i>更多操作</i>”,導入已有配寘。
ja-JP: 目標ホスト
helpLink:
zh-CN: https://hertzbeat.apache.org/zh-cn/docs/help/api_code
en-US: https://hertzbeat.apache.org/docs/help/api_code
@@ -39,7 +37,6 @@ params:
name:
zh-CN: 目标Host
en-US: Target Host
ja-JP: 目標ホスト
# type-param field type(most mapping the html input type)
type: host
# required-true or false
@@ -50,7 +47,6 @@ params:
name:
zh-CN: 端口
en-US: Port
ja-JP: ポート
# type-param field type(most mapping the html input type)
type: number
# when type is number, range is required
@@ -65,7 +61,6 @@ params:
name:
zh-CN: 请求方式
en-US: Method
ja-JP: リクエストメソッド
# type-param field type(most mapping the html input type)
type: radio
# required-true or false
@@ -86,7 +81,6 @@ params:
name:
zh-CN: 相对路径
en-US: URI
ja-JP: URI
# type-param field type(most mapping the html input type)
type: text
# when type is text, use limit to limit string length
@@ -101,7 +95,6 @@ params:
name:
zh-CN: 启用HTTPS
en-US: HTTPS
ja-JP: HTTPS利用
# type-param field type(most mapping the html input type)
type: boolean
# required-true or false
@@ -112,7 +105,6 @@ params:
name:
zh-CN: 超时时间(ms)
en-US: Timeout(ms)
ja-JP: タイムアウト(ms)
# type-param field type(most mapping the html input type)
type: number
# required-true or false
@@ -125,7 +117,6 @@ params:
name:
zh-CN: JsonPath解析状态码路径
en-US: JsonPath Parse Code
ja-JP: JsonPath 解析ステータスコード
# type-param field type(most mapping the html input type)
type: text
# required-true or false
@@ -140,7 +131,6 @@ params:
name:
zh-CN: 请求Headers
en-US: Headers
ja-JP: ヘッダ
# type-param field type(most mapping the html input type)
type: key-value
# required-true or false
@@ -156,7 +146,6 @@ params:
name:
zh-CN: 查询Params
en-US: Params
ja-JP: パラメータ
# type-param field type(most mapping the html input type)
type: key-value
# required-true or false
@@ -173,7 +162,6 @@ params:
name:
zh-CN: Content-Type
en-US: Content-Type
ja-JP: コンテンツタイプ
# type-param field type(most mapping the html input type)
type: text
# param field input placeholder
@@ -188,7 +176,6 @@ params:
name:
zh-CN: 请求BODY
en-US: BODY
ja-JP: ボディ
# type-param field type(most mapping the html input type)
type: textarea
# param field input placeholder
@@ -208,7 +195,6 @@ params:
name:
zh-CN: 认证方式
en-US: Auth Type
ja-JP: 認証方法
# type-param field type(most mapping the html input type)
type: radio
# required-true or false
@@ -229,7 +215,6 @@ params:
name:
zh-CN: 用户名
en-US: Username
ja-JP: ユーザー名
# type-param field type(most mapping the html input type)
type: text
# when type is text, use limit to limit string length
@@ -244,7 +229,6 @@ params:
name:
zh-CN: 密码
en-US: Password
ja-JP: パスワード
# type-param field type(most mapping the html input type)
type: password
# required-true or false
@@ -257,7 +241,6 @@ params:
name:
zh-CN: 认证Token
en-US: Access Token
ja-JP: アクセストークン
# type-param field type(most mapping the html input type)
type: text
# required-true or false
@@ -270,7 +253,6 @@ params:
name:
zh-CN: 计数关键字
en-US: Keyword
ja-JP: キーワード
# type-param field type(most mapping the html input type)
type: text
# param field input placeholder
@@ -286,7 +268,6 @@ metrics:
i18n:
zh-CN: 状态
en-US: Status
ja-JP: ステータス
# 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
@@ -298,13 +279,11 @@ metrics:
i18n:
zh-CN: 响应时间
en-US: Response Time
ja-JP: 応答時間
- field: code
type: 1
i18n:
zh-CN: 业务状态码
en-US: Status Code
ja-JP: ステータスコード
aliasFields:
- ^_^jsonPath^_^
- responseTime
@@ -1,70 +0,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
#
# 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 categoryservice-application service monitoring db-database monitoring custom-custom monitoring os-operating system monitoring
category: __system__
# Monitoring application type name (consistent with file name) eg: linux windows tomcat mysql aws...
app: consul_sd
# The app api i18n name
name:
zh-CN: Consul Service Discovery
en-US: Consul Service Discovery
# Input params define for app api(render web ui by the definition)
params:
# field-param field key
- field: __sd_host__
# name-param field display i18n name
name:
zh-CN: Consul Host
en-US: Consul Host
# type-param field type(most mapping the html input type)
type: text
# required-true or false
required: true
- field: __sd_port__
name:
zh-CN: Consul 端口
en-US: Consul Port
type: number
range: '[0,65535]'
required: true
metrics:
- name: target
i18n:
zh-CN: 监控目标
en-US: Monitor Target
# 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: host
type: 1
i18n:
zh-CN: Host
en-US: Host
- field: port
type: 1
i18n:
zh-CN: Port
en-US: Port
# the protocol used for monitoring, eg: sql, ssh, http, telnet, wmi, snmp, sdk
protocol: consul_sd
# the config content when protocol is http_sd
consul_sd:
host: ^_^__sd_host__^_^
port: ^_^__sd_port__^_^
@@ -1,106 +0,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
#
# 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 categoryservice-application service monitoring db-database monitoring custom-custom monitoring os-operating system monitoring
category: __system__
# Monitoring application type name (consistent with file name) eg: linux windows tomcat mysql aws...
app: dns_sd
# The app api i18n name
name:
zh-CN: Dns Service Discovery
en-US: Dns Service Discovery
# Input params define for app api(render web ui by the definition)
params:
# field-param field key
- field: __sd_host__
# name-param field display i18n name
name:
zh-CN: DNS地址
en-US: DNS Host
# type-param field type(most mapping the html input type)
type: text
# required-true or false
required: true
# field-param field key
- field: __sd_port__
# name-param field display i18n name
name:
zh-CN: DNS端口
en-US: DNS Port
# type-param field type(most mapping the html input type)
type: text
# required-true or false
required: true
# default value
defaultValue: 53
- field: __sd_record_type__
# name-param field display i18n name
name:
zh-CN: 记录类型
en-US: Record Type
# 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: SRV
value: 33
- label: A
value: 1
- label: AAAA
value: 28
- label: MX
value: 15
- label: NS
value: 2
- field: __sd_record_name__
# name-param field display i18n name
name:
zh-CN: 记录名
en-US: Record Name
# type-param field type(most mapping the html input type)
type: text
# required-true or false
required: true
metrics:
- name: target
i18n:
zh-CN: 监控目标
en-US: Monitor Target
# 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: host
type: 1
i18n:
zh-CN: Host
en-US: Host
- field: port
type: 1
i18n:
zh-CN: Port
en-US: Port
# the protocol used for monitoring, eg: sql, ssh, http, telnet, wmi, snmp, sdk
protocol: dns_sd
# the config content when protocol is dns_sd
dns_sd:
host: ^_^__sd_host__^_^
port: ^_^__sd_port__^_^
recordType: ^_^__sd_record_type__^_^
recordName: ^_^__sd_record_name__^_^
@@ -1,62 +0,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
#
# 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 categoryservice-application service monitoring db-database monitoring custom-custom monitoring os-operating system monitoring
category: __system__
# Monitoring application type name (consistent with file name) eg: linux windows tomcat mysql aws...
app: eureka_sd
# The app api i18n name
name:
zh-CN: Eureka Service Discovery
en-US: Eureka Service Discovery
# Input params define for app api(render web ui by the definition)
params:
# field-param field key
- field: __sd_url__
# name-param field display i18n name
name:
zh-CN: Eureka服务发现地址
en-US: Eureka Service Discovery Url
# type-param field type(most mapping the html input type)
type: text
# required-true or false
required: true
metrics:
- name: target
i18n:
zh-CN: 监控目标
en-US: Monitor Target
# 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: host
type: 1
i18n:
zh-CN: Host
en-US: Host
- field: port
type: 1
i18n:
zh-CN: Port
en-US: Port
# the protocol used for monitoring, eg: sql, ssh, http, telnet, wmi, snmp, sdk
protocol: eureka_sd
# the config content when protocol is http_sd
eureka_sd:
url: ^_^__sd_url__^_^
@@ -207,12 +207,12 @@ metrics:
# 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: content_type
- field: Content-Type
type: 1
i18n:
zh-CN: Content Type
en-US: Content Type
- field: content_length
- field: Content-Length
type: 1
i18n:
zh-CN: 响应内容长度
@@ -1,154 +0,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
*
* 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.otel.config;
import static io.opentelemetry.semconv.ServiceAttributes.SERVICE_NAME;
import static org.apache.http.HttpHeaders.CONTENT_TYPE;
import io.opentelemetry.exporter.otlp.http.logs.OtlpHttpLogRecordExporter;
import io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporter;
import io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporterBuilder;
import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider;
import io.opentelemetry.sdk.logs.export.BatchLogRecordProcessor;
import io.opentelemetry.sdk.resources.Resource;
import java.util.Base64;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.hertzbeat.warehouse.store.history.greptime.GreptimeProperties;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* OpenTelemetryConfig provides customizations for the auto-configured OpenTelemetry SDK,
* specifically for integrating with GrepTimeDB for logs and traces.
*/
@Configuration
@Slf4j
public class OpenTelemetryConfig {
private static final String HERTZBEAT_SERVICE_NAME = "HertzBeat";
private static final String DEFAULT_GREPTIME_DB_NAME = "public";
private static final String DEFAULT_LOGS_TABLE_NAME = "hzb_logs";
private static final String DEFAULT_TRACES_TABLE_NAME = "hzb_traces";
private static final String GREPTIME_DB_NAME_HEADER = "X-Greptime-DB-Name";
private static final String GREPTIME_LOG_TABLE_NAME_HEADER = "X-Greptime-Log-Table-Name";
private static final String GREPTIME_TRACE_TABLE_NAME_HEADER = "X-Greptime-Trace-Table-Name";
private static final String GREPTIME_PIPELINE_NAME_HEADER = "X-Greptime-Pipeline-Name";
/**
* Adds authentication headers if credentials are provided.
*/
private void addAuthenticationHeaders(Map<String, String> headers, GreptimeProperties greptimeProps) {
if (greptimeProps != null && StringUtils.isNotBlank(greptimeProps.username())
&& StringUtils.isNotBlank(greptimeProps.password())) {
String credentials = greptimeProps.username() + ":" + greptimeProps.password();
String encodedCredentials = Base64.getEncoder().encodeToString(credentials.getBytes());
headers.put("Authorization", "Basic " + encodedCredentials);
log.debug("Added Basic Authentication header for GreptimeDB.");
} else {
log.debug("GreptimeDB username/password not configured, skipping Authentication header.");
}
}
/**
* Builds HTTP Log headers for OTLP communication with GreptimeDB.
*/
private Map<String, String> buildGreptimeOtlpLogHeaders(GreptimeProperties greptimeProps) {
Map<String, String> headers = new HashMap<>();
headers.put(GREPTIME_DB_NAME_HEADER, DEFAULT_GREPTIME_DB_NAME);
headers.put(GREPTIME_LOG_TABLE_NAME_HEADER, DEFAULT_LOGS_TABLE_NAME);
addAuthenticationHeaders(headers, greptimeProps);
return Collections.unmodifiableMap(headers);
}
/**
* Builds HTTP Trace headers for OTLP communication with GreptimeDB.
*/
private Map<String, String> buildGreptimeOtlpTraceHeaders(GreptimeProperties greptimeProps) {
Map<String, String> headers = new HashMap<>();
headers.put(GREPTIME_DB_NAME_HEADER, DEFAULT_GREPTIME_DB_NAME);
headers.put(GREPTIME_TRACE_TABLE_NAME_HEADER, DEFAULT_TRACES_TABLE_NAME);
headers.put(CONTENT_TYPE, "application/x-protobuf");
headers.put(GREPTIME_PIPELINE_NAME_HEADER, "greptime_trace_v1");
addAuthenticationHeaders(headers, greptimeProps);
return Collections.unmodifiableMap(headers);
}
/**
* Provides an AutoConfigurationCustomizerProvider to tailor the auto-configured OpenTelemetry SDK.
* This includes setting up GrepTimeDB exporters for logs and traces, and customizing the resource.
* Active only if 'greptime.enabled' is true.
*
* @param greptimeProperties Configuration for GrepTimeDB.
* @return AutoConfigurationCustomizerProvider instance.
*/
@Bean
@ConditionalOnProperty(name = "warehouse.store.greptime.enabled", havingValue = "true")
public AutoConfigurationCustomizerProvider greptimeOtelCustomizer(GreptimeProperties greptimeProperties) {
log.info("GreptimeDB is enabled. Applying OpenTelemetry SDK customizations.");
return providerCustomizer -> providerCustomizer
.addPropertiesCustomizer(sdkConfigProperties -> {
Map<String, String> newProperties = new HashMap<>();
newProperties.put("otel.metrics.exporter", "none");
newProperties.put("otel.traces.exporter", "otlp");
newProperties.put("otel.logs.exporter", "none");
return newProperties;
})
.addResourceCustomizer((resource, configProperties) -> {
log.info("Customizing auto-configured OpenTelemetry Resource with service name: {}.", HERTZBEAT_SERVICE_NAME);
return resource.merge(Resource.builder().put(SERVICE_NAME, HERTZBEAT_SERVICE_NAME).build());
})
.addSpanExporterCustomizer((originalSpanExporter, configProperties) -> {
String traceEndpoint = greptimeProperties.httpEndpoint() + "/v1/otlp/v1/traces";
log.info("Programmatically configuring OtlpHttpSpanExporter for GreptimeDB traces. Endpoint: {}", traceEndpoint);
Map<String, String> traceHeaders = buildGreptimeOtlpTraceHeaders(greptimeProperties);
log.info("Trace Headers for GreptimeDB (programmatic HTTP config): {}", traceHeaders);
OtlpHttpSpanExporterBuilder httpExporterBuilder = OtlpHttpSpanExporter.builder()
.setEndpoint(traceEndpoint)
.setHeaders(() -> traceHeaders)
.setTimeout(10000, TimeUnit.MILLISECONDS);
return httpExporterBuilder.build();
})
.addLoggerProviderCustomizer((sdkLoggerProviderBuilder, configProperties) -> {
log.info("Customizing auto-configured SdkLoggerProviderBuilder for GrepTimeDB logs.");
OtlpHttpLogRecordExporter logExporter = OtlpHttpLogRecordExporter.builder()
.setEndpoint(greptimeProperties.httpEndpoint() + "/v1/otlp/v1/logs")
.setHeaders(() -> buildGreptimeOtlpLogHeaders(greptimeProperties))
.setTimeout(10000, TimeUnit.MILLISECONDS)
.build();
BatchLogRecordProcessor batchLogProcessor = BatchLogRecordProcessor.builder(logExporter)
.setScheduleDelay(1000, TimeUnit.MILLISECONDS)
.setMaxExportBatchSize(512)
.build();
return sdkLoggerProviderBuilder.addLogRecordProcessor(batchLogProcessor);
});
}
}
@@ -1,58 +0,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
*
* 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.otel.config;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.instrumentation.logback.appender.v1_0.OpenTelemetryAppender;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Component;
/**
* Installs the OpenTelemetryAppender for Logback once the auto-configured
* OpenTelemetry SDK is available and GrepTimeDB integration is enabled.
*/
@Component
@ConditionalOnProperty(name = "warehouse.store.greptime.enabled", havingValue = "true")
@Slf4j
public class OpenTelemetryLogbackAppenderInstaller implements InitializingBean {
private final OpenTelemetry openTelemetry;
@Autowired
public OpenTelemetryLogbackAppenderInstaller(OpenTelemetry openTelemetry) {
this.openTelemetry = openTelemetry;
}
@Override
public void afterPropertiesSet() {
if (this.openTelemetry instanceof OpenTelemetrySdk) {
log.info("Auto-configured OpenTelemetry SDK detected. Installing OpenTelemetryAppender for Logback.");
OpenTelemetryAppender.install(this.openTelemetry);
} else {
log.warn("OpenTelemetry SDK is not an instance of OpenTelemetrySdk (type: {}). "
+ "OpenTelemetryAppender for Logback will not be installed. "
+ "Ensure OpenTelemetry auto-configuration is active and correctly providing an SDK.",
this.openTelemetry != null ? this.openTelemetry.getClass().getName() : "null");
}
}
}
+1 -1
View File
@@ -14,7 +14,7 @@ WeChat Group : Add friend `ahertzbeat` and invite to the group.
WeChat Public : Search ID `usthecom`.
[QQ Group](https://qm.qq.com/q/xxqecSC2cw) : Group num `1035688434`
[QQ Group](https://jq.qq.com/?_wv=1027&k=Bud9OzdI) : Group num `630061200`
[Github Discussion](https://github.com/apache/hertzbeat/discussions)
+31 -36
View File
@@ -9,47 +9,40 @@ keywords: [open-source monitoring system, open-source operating system monitorin
### Configuration Parameters
| Parameter Name | Parameter Help Description |
|-----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Monitored Host | The IPV4, IPV6, or domain name of the host being monitored. Note ⚠️ No protocol header (e.g., https://, http://). |
| Task Name | The name that identifies this monitoring, which must be unique. |
| Port | The port provided by Linux SSH, default is 22. |
| Timeout | Sets the connection timeout in milliseconds, default is 6000 ms. |
| Connection Reuse | Sets whether SSH connections are reused, default is :false. If false, a new connection is created each time information is retrieved. |
| Use Proxy Connection | Sets Whether connect via proxy, default is false. |
| Username | SSH connection username, optional. |
| Password | SSH connection password, optional. |
| Collector | Configures which collector is used to schedule data collection for this monitoring. |
| Monitoring Period | The interval time for periodic data collection in seconds, with a minimum interval of 30 seconds. |
| Binding Tags | Used for categorized management of monitoring resources. |
| Description | Additional notes and descriptions for this monitoring, where users can make notes. |
| PrivateKey | The private key required to connect to the server. |
| PrivateKey PassPhrase | The password phrase used to encrypt the SSH private key. If the private key was generated with a passphrase, this field must be filled to decrypt and use the key for authentication. |
| Proxy Host | The address of the proxy server, supporting IPV4, IPV6, or domain name format. Required when using SSH jump host to access the target host. |
| Proxy Port | The port number of the proxy service, default is 22. |
| Proxy Username | The authentication username required to connect to the proxy server. |
| Proxy Username | The authentication password required to connect to the proxy server. |
| Proxy PrivateKey | The private key required to authenticate with the proxy server. |
| Parameter Name | Parameter Help Description |
|-------------------|---------------------------------------------------------------------------------------------------------------------------------------|
| Monitoring Host | The monitored peer's IPv4, IPv6, or domain name. Note ⚠️ No protocol header (e.g., https://, http://). |
| Task Name | A unique name to identify this monitoring task. |
| Port | The port provided by Linux SSH, default is 22. |
| Timeout | Set the connection timeout in milliseconds, default is 6000 ms. |
| Connection Reuse | Set whether to reuse SSH connections, default is false. If false, a new connection will be created for each retrieval of information. |
| Username | SSH connection username, optional. |
| Password | SSH connection password, optional. |
| Collector | Configure which collector to use for scheduling data collection for this monitoring. |
| Monitoring Period | The interval time for periodic data collection, in seconds, with a minimum interval of 30 seconds. |
| Binding Tags | Used for classifying and managing monitoring resources. |
| Description Note | Additional notes to identify and describe this monitoring, where users can make notes. |
| Key | The key required to connect to the server. |
### Data Collection Metrics
#### Metric Set: Basic System Information
| Metric Name | Metric Unit | Metric Help Description |
|-------------|-------------|-------------------------|
| hostname | None | Host name |
| version | None | System version |
| uptime | None | System Uptime |
| Metric Name | Metric Unit | Metric Help Description |
|----------------|-------------|--------------------------|
| Host Name | None | Host name |
| System Version | None | Operating system version |
| Uptime | None | Uptime |
#### Metric Set: CPU Information
| Metric Name | Metric Unit | Metric Help Description |
| Metric Name | Metric Unit | Metric Help Description |
|----------------|-------------|-----------------------------------|
| info | None | CPU model |
| cores | None | Number of CPU cores |
| interrupt | None | Number of CPU interrupts |
| cores | Cores | Number of CPU cores |
| interrupt | Count | Number of CPU interrupts |
| load | None | Average CPU load (1/5/15 minutes) |
| context_switch | None | Number of context switches |
| context_switch | Count | Number of context switches |
| usage | % | CPU usage |
#### Metric Set: Memory Information
@@ -65,13 +58,13 @@ keywords: [open-source monitoring system, open-source operating system monitorin
#### Metric Set: Disk Information
| Metric Name | Metric Unit | Metric Help Description |
| Metric Name | Metric Unit | Metric Help Description |
|---------------|-------------|----------------------------------------|
| disk_num | None | Total number of disks |
| partition_num | None | Total number of partitions |
| block_write | None | Total number of blocks written to disk |
| block_read | None | Total number of blocks read from disk |
| write_rate | iops | Disk block write rate per second |
| disk_num | Count | Total number of disks |
| partition_num | Count | Total number of partitions |
| block_write | Blocks | Total number of blocks written to disk |
| block_read | Blocks | Total number of blocks read from disk |
| write_rate | IOPS | Disk block write rate per second |
#### Metric Set: Network Card Information
@@ -112,3 +105,5 @@ Statistics for the top 10 processes using memory. Statistics include: process ID
| mem_usage | % | Memory usage |
| cpu_usage | % | CPU usage |
| command | None | Executed command |
---
+49 -82
View File
@@ -9,106 +9,73 @@ keywords: [open source monitoring tool, open source os monitoring tool, monitori
### Configuration parameter
| Parameter Name | Parameter Help Description |
|-----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Monitored Host | The IPV4, IPV6, or domain name of the host being monitored. Note ⚠️ No protocol header (e.g., https://, http://). |
| Task Name | The name that identifies this monitoring, which must be unique. |
| Port | The port provided by Linux SSH, default is 22. |
| Timeout | Sets the connection timeout in milliseconds, default is 6000 ms. |
| Connection Reuse | Sets whether SSH connections are reused, default is :false. If false, a new connection is created each time information is retrieved. |
| Use Proxy Connection | Sets Whether connect via proxy, default is false. |
| Username | SSH connection username, optional. |
| Password | SSH connection password, optional. |
| Collector | Configures which collector is used to schedule data collection for this monitoring. |
| Monitoring Period | The interval time for periodic data collection in seconds, with a minimum interval of 30 seconds. |
| Binding Tags | Used for categorized management of monitoring resources. |
| Description | Additional notes and descriptions for this monitoring, where users can make notes. |
| PrivateKey | The private key required to connect to the server. |
| PrivateKey PassPhrase | The password phrase used to encrypt the SSH private key. If the private key was generated with a passphrase, this field must be filled to decrypt and use the key for authentication. |
| Proxy Host | The address of the proxy server, supporting IPV4, IPV6, or domain name format. Required when using SSH jump host to access the target host. |
| Proxy Port | The port number of the proxy service, default is 22. |
| Proxy Username | The authentication username required to connect to the proxy server. |
| Proxy Username | The authentication password required to connect to the proxy server. |
| Proxy PrivateKey | The private key required to authenticate with the proxy server. |
| Parameter name | Parameter help description |
|---------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Monitoring Host | Monitored IPV4, IPV6 or domain name. Note⚠️Without protocol header (eg: https://, http://) |
| Monitoring name | Identify the name of this monitoring. The name needs to be unique |
| Port | Port provided by Linux SSH. The default is 22 |
| Username | SSH connection user name, optional |
| Password | SSH connection password, optional |
| Collection interval | Interval time of monitor periodic data collection, unit: second, and 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. Adding and modifying operations will continue only after the detection is successful |
| Description remarks | For more information about identifying and describing this monitoring, users can note information here |
### Data Collection Metrics
### Collection Metric
#### Metric Set: Basic System Information
#### Metric setbasic
| Metric Name | Metric Unit | Metric Help Description |
|-------------|-------------|-------------------------|
| hostname | None | Host name |
| version | None | System version |
| uptime | None | System Uptime |
| Metric name | Metric unit | Metric help description |
|-------------|-------------|--------------------------|
| hostname | none | Host name |
| version | none | Operating system version |
| uptime | none | System running time |
#### Metric Set: CPU Information
#### Metric setcpu
| Metric Name | Metric Unit | Metric Help Description |
|----------------|-------------|-----------------------------------|
| info | None | CPU model |
| cores | None | Number of CPU cores |
| interrupt | None | Number of CPU interrupts |
| load | None | Average CPU load (1/5/15 minutes) |
| context_switch | None | Number of context switches |
| usage | % | CPU usage |
| Metric name | Metric unit | Metric help description |
|----------------|-------------|------------------------------------------------|
| info | none | CPU model |
| cores | cores | Number of CPU cores |
| interrupt | number | Number of CPU interrupts |
| load | none | Average load of CPU in the last 1/5/15 minutes |
| context_switch | number | Number of current context switches |
| usage | % | CPU usage |
#### Metric Set: Memory Information
#### Metric setmemory
| Metric Name | Metric Unit | Metric Help Description |
| Metric name | Metric unit | Metric help description |
|-------------|-------------|-------------------------------------|
| total | Mb | Total memory capacity |
| used | Mb | Memory used by user programs |
| used | Mb | User program memory |
| free | Mb | Free memory capacity |
| buff_cache | Mb | Memory used for cache |
| buff_cache | Mb | Memory occupied by cache |
| available | Mb | Remaining available memory capacity |
| usage | % | Memory usage rate |
| usage | % | Memory usage |
#### Metric Set: Disk Information
#### Metric setdisk
| Metric Name | Metric Unit | Metric Help Description |
| Metric name | Metric unit | Metric help description |
|---------------|-------------|----------------------------------------|
| disk_num | None | Total number of disks |
| partition_num | None | Total number of partitions |
| block_write | None | Total number of blocks written to disk |
| block_read | None | Total number of blocks read from disk |
| write_rate | iops | Disk block write rate per second |
| disk_num | blocks | Total number of disks |
| partition_num | partitions | Total number of partitions |
| block_write | blocks | Total number of blocks written to disk |
| block_read | blocks | Number of blocks read from disk |
| write_rate | iops | Rate of writing disk blocks per second |
#### Metric Set: Network Card Information
#### Metric setinterface
| Metric Name | Metric Unit | Metric Help Description |
|----------------|-------------|-------------------------------|
| interface_name | None | Network card name |
| receive_bytes | Byte | Inbound data traffic (bytes) |
| transmit_bytes | Byte | Outbound data traffic (bytes) |
| Metric name | Metric unit | Metric help description |
|----------------|-------------|------------------------------|
| interface_name | none | Network card name |
| receive_bytes | byte | Inbound data traffic(bytes) |
| transmit_bytes | byte | Outbound data traffic(bytes) |
#### Metric Set: File System
#### Metric setdisk_free
| Metric Name | Metric Unit | Metric Help Description |
| Metric name | Metric unit | Metric help description |
|-------------|-------------|-------------------------|
| filesystem | None | Name of the file system |
| filesystem | none | File system name |
| used | Mb | Used disk size |
| available | Mb | Available disk size |
| usage | % | Usage rate |
| mounted | None | Mount point directory |
#### Metric Set: Top 10 CPU Processes
Statistics for the top 10 processes using the CPU. Statistics include: process ID, CPU usage, memory usage, and executed command.
| Metric Name | Metric Unit | Metric Help Description |
|-------------|-------------|-------------------------|
| pid | None | Process ID |
| cpu_usage | % | CPU usage |
| mem_usage | % | Memory usage |
| command | None | Executed command |
#### Metric Set: Top 10 Memory Processes
Statistics for the top 10 processes using memory. Statistics include: process ID, memory usage, CPU usage, and executed command.
| Metric Name | Metric Unit | Metric Help Description |
|-------------|-------------|-------------------------|
| pid | None | Process ID |
| mem_usage | % | Memory usage |
| cpu_usage | % | CPU usage |
| command | None | Executed command |
| usage | % | usage |
| mounted | none | Mount point directory |
+60 -77
View File
@@ -9,106 +9,89 @@ keywords: [Open Source Monitoring System, Operating System Monitoring, Debian Mo
## Configuration Parameters
| Parameter Name | Parameter Help Description |
|-----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Monitored Host | The IPV4, IPV6, or domain name of the host being monitored. Note ⚠️ No protocol header (e.g., https://, http://). |
| Task Name | The name that identifies this monitoring, which must be unique. |
| Port | The port provided by Linux SSH, default is 22. |
| Timeout | Sets the connection timeout in milliseconds, default is 6000 ms. |
| Connection Reuse | Sets whether SSH connections are reused, default is :false. If false, a new connection is created each time information is retrieved. |
| Use Proxy Connection | Sets Whether connect via proxy, default is false. |
| Username | SSH connection username, optional. |
| Password | SSH connection password, optional. |
| Collector | Configures which collector is used to schedule data collection for this monitoring. |
| Monitoring Period | The interval time for periodic data collection in seconds, with a minimum interval of 30 seconds. |
| Binding Tags | Used for categorized management of monitoring resources. |
| Description | Additional notes and descriptions for this monitoring, where users can make notes. |
| PrivateKey | The private key required to connect to the server. |
| PrivateKey PassPhrase | The password phrase used to encrypt the SSH private key. If the private key was generated with a passphrase, this field must be filled to decrypt and use the key for authentication. |
| Proxy Host | The address of the proxy server, supporting IPV4, IPV6, or domain name format. Required when using SSH jump host to access the target host. |
| Proxy Port | The port number of the proxy service, default is 22. |
| Proxy Username | The authentication username required to connect to the proxy server. |
| Proxy Username | The authentication password required to connect to the proxy server. |
| Proxy PrivateKey | The private key required to authenticate with the proxy server. |
| Parameter Name | Metric help description |
|-------------------------|-------------------------------------------------------------------------------------------------------------------|
| Target Host | The monitored destination IPV4, IPV6, or domain name. Note: no protocol header (e.g., https://, http://). |
| Task Name | A unique name to identify this monitoring task. |
| Port | SSH port of the Debian system, default: 22 |
| Timeout | Timeout for the connection, in milliseconds, default: 6000 milliseconds. |
| Connection Reuse | Whether to reuse the SSH connection, default: false. False means a new connection will be created for each query. |
| Username | Server username |
| Password | Server password |
| Collector | Configure which collector to use for scheduling this monitoring. |
| Monitoring Period | The interval for periodically collecting data, in seconds, with a minimum interval of 30 seconds. |
| Binding Tags | Used for categorizing and managing monitoring resources. |
| Metric help description | Additional notes and Metric help descriptions for this monitoring, users can add notes here. |
| Key | Key required to connect to the server. |
### Data Collection Metrics
### Monitoring Metrics
#### Metric Set: Basic System Information
| Metric Name | Metric Unit | Metric Help Description |
|-------------|-------------|-------------------------|
| hostname | None | Host name |
| version | None | System version |
| uptime | None | System Uptime |
| Metric Name | Metric Unit | Metric help description |
|----------------|-------------|--------------------------|
| Host Name | N/A | Host name |
| System Version | N/A | Operating system version |
| Uptime | N/A | Boot time |
#### Metric Set: CPU Information
| Metric Name | Metric Unit | Metric Help Description |
|----------------|-------------|-----------------------------------|
| info | None | CPU model |
| cores | None | Number of CPU cores |
| interrupt | None | Number of CPU interrupts |
| load | None | Average CPU load (1/5/15 minutes) |
| context_switch | None | Number of context switches |
| usage | % | CPU usage |
| Metric Name | Metric Unit | Metric help description |
|----------------|-------------|-------------------------|
| Info | N/A | Model |
| Cores | N/A | Number of cores |
| Interrupt | N/A | Number of interrupts |
| Load | N/A | Load |
| Context Switch | N/A | Context switches |
| Usage | % | Usage rate |
#### Metric Set: Memory Information
| Metric Name | Metric Unit | Metric Help Description |
|-------------|-------------|-------------------------------------|
| total | Mb | Total memory capacity |
| used | Mb | Memory used by user programs |
| free | Mb | Free memory capacity |
| buff_cache | Mb | Memory used for cache |
| available | Mb | Remaining available memory capacity |
| usage | % | Memory usage rate |
| Metric Name | Metric Unit | Metric help description |
|---------------------|-------------|------------------------------|
| Total Memory | Mb | Total memory capacity |
| User Program Memory | Mb | Memory used by user programs |
| Free Memory | Mb | Free memory capacity |
| Buff Cache Memory | Mb | Memory used by cache |
| Available Memory | Mb | Available memory |
| Memory Usage | % | Memory usage rate |
#### Metric Set: Disk Information
| Metric Name | Metric Unit | Metric Help Description |
|---------------|-------------|----------------------------------------|
| disk_num | None | Total number of disks |
| partition_num | None | Total number of partitions |
| block_write | None | Total number of blocks written to disk |
| block_read | None | Total number of blocks read from disk |
| write_rate | iops | Disk block write rate per second |
| Metric Name | Metric Unit | Metric help description |
|---------------|-------------|-------------------------------|
| Disk Num | N/A | Total number of disks |
| Partition Num | N/A | Total number of partitions |
| Block Write | N/A | Number of disk blocks written |
| Block Read | N/A | Number of disk blocks read |
| Write Rate | iops | Disk write rate |
#### Metric Set: Network Card Information
#### Metric Set: Network Interface Information
| Metric Name | Metric Unit | Metric Help Description |
|----------------|-------------|-------------------------------|
| interface_name | None | Network card name |
| receive_bytes | Byte | Inbound data traffic (bytes) |
| transmit_bytes | Byte | Outbound data traffic (bytes) |
Statistics for all network interface cards, including interface name, incoming data traffic, and outgoing data traffic.
Metric Unit: Mb
#### Metric Set: File System
| Metric Name | Metric Unit | Metric Help Description |
|-------------|-------------|-------------------------|
| filesystem | None | Name of the file system |
| used | Mb | Used disk size |
| available | Mb | Available disk size |
| usage | % | Usage rate |
| mounted | None | Mount point directory |
Statistics for all mounted file systems. Statistics include: file system, usage, available space, usage rate, mount point.
Metric Unit:
- Usage: Mb
- Available Space: Mb
- Usage Rate: %
#### Metric Set: Top 10 CPU Processes
Statistics for the top 10 processes using the CPU. Statistics include: process ID, CPU usage, memory usage, and executed command.
Statistics for the top 10 processes by CPU usage. Statistics include: process ID, CPU usage rate, memory usage rate, command being executed.
Metric Unit:
| Metric Name | Metric Unit | Metric Help Description |
|-------------|-------------|-------------------------|
| pid | None | Process ID |
| cpu_usage | % | CPU usage |
| mem_usage | % | Memory usage |
| command | None | Executed command |
- CPU Usage Rate: %
- Memory Usage Rate: %
#### Metric Set: Top 10 Memory Processes
Statistics for the top 10 processes using memory. Statistics include: process ID, memory usage, CPU usage, and executed command.
Statistics for the top 10 processes by memory usage. Statistics include: process ID, memory usage rate, CPU usage rate, command being executed.
Metric Unit:
| Metric Name | Metric Unit | Metric Help Description |
|-------------|-------------|-------------------------|
| pid | None | Process ID |
| mem_usage | % | Memory usage |
| cpu_usage | % | CPU usage |
| command | None | Executed command |
- Memory Usage Rate: %
- CPU Usage Rate: %
+67 -74
View File
@@ -9,104 +9,97 @@ keywords: [ Open Source Monitoring System, Open Source OS Monitoring, EulerOS Mo
### Configuration Parameters
| Parameter Name | Parameter Help Description |
|-----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Monitored Host | The IPV4, IPV6, or domain name of the host being monitored. Note ⚠️ No protocol header (e.g., https://, http://). |
| Task Name | The name that identifies this monitoring, which must be unique. |
| Port | The port provided by Linux SSH, default is 22. |
| Timeout | Sets the connection timeout in milliseconds, default is 6000 ms. |
| Connection Reuse | Sets whether SSH connections are reused, default is :false. If false, a new connection is created each time information is retrieved. |
| Use Proxy Connection | Sets Whether connect via proxy, default is false. |
| Username | SSH connection username, optional. |
| Password | SSH connection password, optional. |
| Collector | Configures which collector is used to schedule data collection for this monitoring. |
| Monitoring Period | The interval time for periodic data collection in seconds, with a minimum interval of 30 seconds. |
| Binding Tags | Used for categorized management of monitoring resources. |
| Description | Additional notes and descriptions for this monitoring, where users can make notes. |
| PrivateKey | The private key required to connect to the server. |
| PrivateKey PassPhrase | The password phrase used to encrypt the SSH private key. If the private key was generated with a passphrase, this field must be filled to decrypt and use the key for authentication. |
| Proxy Host | The address of the proxy server, supporting IPV4, IPV6, or domain name format. Required when using SSH jump host to access the target host. |
| Proxy Port | The port number of the proxy service, default is 22. |
| Proxy Username | The authentication username required to connect to the proxy server. |
| Proxy Username | The authentication password required to connect to the proxy server. |
| Proxy PrivateKey | The private key required to authenticate with the proxy server. |
| Parameter Name | Parameter help description |
|---------------------|----------------------------------------------------------------------------------------------------------------------------------|
| Monitoring Host | The IP, IPV6, or domain name of the monitored endpoint. Note ⚠️: Do not include protocol headers (eg: https://, http://). |
| Task Name | Identifies the name of this monitoring, ensuring uniqueness. |
| Port | Port provided by Linux SSH externally, defaults to 22. |
| Timeout | Sets the timeout for connection in milliseconds (ms), defaults to 6000 ms. |
| Connection Reuse | Sets whether the SSH connection is reused, defaults to: false. Creates a new connection for each information retrieval if false. |
| Username | SSH connection username, optional. |
| Password | SSH connection password, optional. |
| Collector | Specifies which collector schedules the collection for this monitoring. |
| Monitoring Interval | Interval for periodically collecting data, in seconds. Minimum interval is 30 seconds. |
| Binding Tags | Used for categorizing and managing monitored resources. |
| Description | Additional remarks and descriptions for this monitoring, for users' reference. |
| PrivateKey | Key required for connecting to the server. |
### Data Collection Metrics
### Collected Metrics
#### Metric Set: Basic System Information
#### Metric Set: Basic Info
| Metric Name | Metric Unit | Metric Help Description |
|-------------|-------------|-------------------------|
| hostname | None | Host name |
| version | None | System version |
| uptime | None | System Uptime |
| Metric Name | Metric Unit | Metric help description |
|----------------|-------------|---------------------------|
| Host Name | None | Host name. |
| System Version | None | Operating system version. |
| Uptime | None | System uptime. |
#### Metric Set: CPU Information
#### Metric Set: CPU Info
| Metric Name | Metric Unit | Metric Help Description |
|----------------|-------------|-----------------------------------|
| info | None | CPU model |
| cores | None | Number of CPU cores |
| interrupt | None | Number of CPU interrupts |
| load | None | Average CPU load (1/5/15 minutes) |
| context_switch | None | Number of context switches |
| usage | % | CPU usage |
| Metric Name | Metric Unit | Metric help description |
|----------------|-------------|-------------------------------------------|
| info | None | CPU model. |
| cores | None | Number of CPU cores. |
| interrupt | None | Number of CPU interrupts. |
| load | None | Average load for the last 1/5/15 minutes. |
| context_switch | None | Current context switches. |
| usage | % | CPU usage percentage. |
#### Metric Set: Memory Information
#### Metric Set: Memory Info
| Metric Name | Metric Unit | Metric Help Description |
|-------------|-------------|-------------------------------------|
| total | Mb | Total memory capacity |
| used | Mb | Memory used by user programs |
| free | Mb | Free memory capacity |
| buff_cache | Mb | Memory used for cache |
| available | Mb | Remaining available memory capacity |
| usage | % | Memory usage rate |
| Metric Name | Metric Unit | Metric help description |
|-------------|-------------|------------------------------------|
| total | Mb | Total memory capacity. |
| used | Mb | Used memory by user programs. |
| free | Mb | Free memory capacity. |
| buff_cache | Mb | Memory used for buffers and cache. |
| available | Mb | Available memory capacity. |
| usage | % | Memory usage percentage. |
#### Metric Set: Disk Information
#### Metric Set: Disk Info
| Metric Name | Metric Unit | Metric Help Description |
|---------------|-------------|----------------------------------------|
| disk_num | None | Total number of disks |
| partition_num | None | Total number of partitions |
| block_write | None | Total number of blocks written to disk |
| block_read | None | Total number of blocks read from disk |
| write_rate | iops | Disk block write rate per second |
| Metric Name | Metric Unit | Metric help description |
|---------------|-------------|------------------------------------|
| disk_num | None | Total number of disks. |
| partition_num | None | Total number of partitions. |
| block_write | None | Total blocks written to disk. |
| block_read | None | Total blocks read from disk. |
| write_rate | iops | Rate of blocks written per second. |
#### Metric Set: Network Card Information
#### Metric Set: Interface Info
| Metric Name | Metric Unit | Metric Help Description |
|----------------|-------------|-------------------------------|
| interface_name | None | Network card name |
| receive_bytes | Byte | Inbound data traffic (bytes) |
| transmit_bytes | Byte | Outbound data traffic (bytes) |
| Metric Name | Metric Unit | Metric help description |
|----------------|-------------|--------------------------------|
| interface_name | None | Name of the network interface. |
| receive_bytes | Mb | Inbound data traffic. |
| transmit_bytes | Mb | Outbound data traffic. |
#### Metric Set: File System
#### Metric Set: Disk Free
| Metric Name | Metric Unit | Metric Help Description |
|-------------|-------------|-------------------------|
| filesystem | None | Name of the file system |
| used | Mb | Used disk size |
| available | Mb | Available disk size |
| usage | % | Usage rate |
| mounted | None | Mount point directory |
| Metric Name | Metric Unit | Metric help description |
|-------------|-------------|--------------------------|
| filesystem | None | Name of the file system. |
| used | Mb | Used disk space. |
| available | Mb | Available disk space. |
| usage | % | Disk usage percentage. |
| mounted | None | Mount point directory. |
#### Metric Set: Top 10 CPU Processes
#### Metric Set: Top10 CPU Process
Statistics for the top 10 processes using the CPU. Statistics include: process ID, CPU usage, memory usage, and executed command.
Top 10 processes consuming CPU. Metrics include: Process ID, CPU usage, Memory usage, Command.
| Metric Name | Metric Unit | Metric Help Description |
| Metric Name | Metric Unit | Metric help description |
|-------------|-------------|-------------------------|
| pid | None | Process ID |
| cpu_usage | % | CPU usage |
| mem_usage | % | Memory usage |
| command | None | Executed command |
#### Metric Set: Top 10 Memory Processes
#### Metric Set: Top10 Memory Process
Statistics for the top 10 processes using memory. Statistics include: process ID, memory usage, CPU usage, and executed command.
Top 10 processes consuming memory. Metrics include: Process ID, Memory usage, CPU usage, Command.
| Metric Name | Metric Unit | Metric Help Description |
| Metric Name | Metric Unit | Metric help description |
|-------------|-------------|-------------------------|
| pid | None | Process ID |
| mem_usage | % | Memory usage |
-114
View File
@@ -1,114 +0,0 @@
---
id: fedora
title: Monitoring Fedora Operating System
sidebar_label: Fedora OS Operating System
keywords: [ Open Source Monitoring System, Open Source OS Monitoring, Fedora OS Monitoring ]
---
> Collect and monitor general performance metrics for Fedora operating systems (system information, CPU, memory, disk, network interface, file system, top resource processes, etc.).
### Configuration Parameters
| Parameter Name | Parameter Help Description |
|-----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Monitored Host | The IPV4, IPV6, or domain name of the host being monitored. Note ⚠️ No protocol header (e.g., https://, http://). |
| Task Name | The name that identifies this monitoring, which must be unique. |
| Port | The port provided by Linux SSH, default is 22. |
| Timeout | Sets the connection timeout in milliseconds, default is 6000 ms. |
| Connection Reuse | Sets whether SSH connections are reused, default is :false. If false, a new connection is created each time information is retrieved. |
| Use Proxy Connection | Sets Whether connect via proxy, default is false. |
| Username | SSH connection username, optional. |
| Password | SSH connection password, optional. |
| Collector | Configures which collector is used to schedule data collection for this monitoring. |
| Monitoring Period | The interval time for periodic data collection in seconds, with a minimum interval of 30 seconds. |
| Binding Tags | Used for categorized management of monitoring resources. |
| Description | Additional notes and descriptions for this monitoring, where users can make notes. |
| PrivateKey | The private key required to connect to the server. |
| PrivateKey PassPhrase | The password phrase used to encrypt the SSH private key. If the private key was generated with a passphrase, this field must be filled to decrypt and use the key for authentication. |
| Proxy Host | The address of the proxy server, supporting IPV4, IPV6, or domain name format. Required when using SSH jump host to access the target host. |
| Proxy Port | The port number of the proxy service, default is 22. |
| Proxy Username | The authentication username required to connect to the proxy server. |
| Proxy Username | The authentication password required to connect to the proxy server. |
| Proxy PrivateKey | The private key required to authenticate with the proxy server. |
### Data Collection Metrics
#### Metric Set: Basic System Information
| Metric Name | Metric Unit | Metric Help Description |
|-------------|-------------|-------------------------|
| hostname | None | Host name |
| version | None | System version |
| uptime | None | System Uptime |
#### Metric Set: CPU Information
| Metric Name | Metric Unit | Metric Help Description |
|----------------|-------------|-----------------------------------|
| info | None | CPU model |
| cores | None | Number of CPU cores |
| interrupt | None | Number of CPU interrupts |
| load | None | Average CPU load (1/5/15 minutes) |
| context_switch | None | Number of context switches |
| usage | % | CPU usage |
#### Metric Set: Memory Information
| Metric Name | Metric Unit | Metric Help Description |
|-------------|-------------|-------------------------------------|
| total | Mb | Total memory capacity |
| used | Mb | Memory used by user programs |
| free | Mb | Free memory capacity |
| buff_cache | Mb | Memory used for cache |
| available | Mb | Remaining available memory capacity |
| usage | % | Memory usage rate |
#### Metric Set: Disk Information
| Metric Name | Metric Unit | Metric Help Description |
|---------------|-------------|----------------------------------------|
| disk_num | None | Total number of disks |
| partition_num | None | Total number of partitions |
| block_write | None | Total number of blocks written to disk |
| block_read | None | Total number of blocks read from disk |
| write_rate | iops | Disk block write rate per second |
#### Metric Set: Network Card Information
| Metric Name | Metric Unit | Metric Help Description |
|----------------|-------------|-------------------------------|
| interface_name | None | Network card name |
| receive_bytes | Byte | Inbound data traffic (bytes) |
| transmit_bytes | Byte | Outbound data traffic (bytes) |
#### Metric Set: File System
| Metric Name | Metric Unit | Metric Help Description |
|-------------|-------------|-------------------------|
| filesystem | None | Name of the file system |
| used | Mb | Used disk size |
| available | Mb | Available disk size |
| usage | % | Usage rate |
| mounted | None | Mount point directory |
#### Metric Set: Top 10 CPU Processes
Statistics for the top 10 processes using the CPU. Statistics include: process ID, CPU usage, memory usage, and executed command.
| Metric Name | Metric Unit | Metric Help Description |
|-------------|-------------|-------------------------|
| pid | None | Process ID |
| cpu_usage | % | CPU usage |
| mem_usage | % | Memory usage |
| command | None | Executed command |
#### Metric Set: Top 10 Memory Processes
Statistics for the top 10 processes using memory. Statistics include: process ID, memory usage, CPU usage, and executed command.
| Metric Name | Metric Unit | Metric Help Description |
|-------------|-------------|-------------------------|
| pid | None | Process ID |
| mem_usage | % | Memory usage |
| cpu_usage | % | CPU usage |
| command | None | Executed command |
+22 -29
View File
@@ -9,47 +9,40 @@ keywords: [ Open Source Monitoring System, Open Source Operating System Monitori
### Configuration Parameters
| Parameter Name | Parameter Help Description |
|-----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Monitored Host | The IPV4, IPV6, or domain name of the host being monitored. Note ⚠️ No protocol header (e.g., https://, http://). |
| Task Name | The name that identifies this monitoring, which must be unique. |
| Port | The port provided by Linux SSH, default is 22. |
| Timeout | Sets the connection timeout in milliseconds, default is 6000 ms. |
| Connection Reuse | Sets whether SSH connections are reused, default is :false. If false, a new connection is created each time information is retrieved. |
| Use Proxy Connection | Sets Whether connect via proxy, default is false. |
| Username | SSH connection username, optional. |
| Password | SSH connection password, optional. |
| Collector | Configures which collector is used to schedule data collection for this monitoring. |
| Monitoring Period | The interval time for periodic data collection in seconds, with a minimum interval of 30 seconds. |
| Binding Tags | Used for categorized management of monitoring resources. |
| Description | Additional notes and descriptions for this monitoring, where users can make notes. |
| PrivateKey | The private key required to connect to the server. |
| PrivateKey PassPhrase | The password phrase used to encrypt the SSH private key. If the private key was generated with a passphrase, this field must be filled to decrypt and use the key for authentication. |
| Proxy Host | The address of the proxy server, supporting IPV4, IPV6, or domain name format. Required when using SSH jump host to access the target host. |
| Proxy Port | The port number of the proxy service, default is 22. |
| Proxy Username | The authentication username required to connect to the proxy server. |
| Proxy Username | The authentication password required to connect to the proxy server. |
| Proxy PrivateKey | The private key required to authenticate with the proxy server. |
| Parameter Name | Parameter help description |
|---------------------|------------------------------------------------------------------------------------------------------------------------------|
| Monitoring Host | The IPv4, IPv6, or domain name of the monitored peer. Note ⚠️ without the protocol header (eg: https://, http://). |
| Task Name | Identifies the name of this monitor, ensuring uniqueness of the name. |
| Port | The port where SSH for Linux is exposed, default is 22. |
| Timeout | Set the connection timeout, in milliseconds, default is 6000 milliseconds. |
| Reuse Connection | Set whether SSH connections are reused, default is: false. If false, a connection is created for each information retrieval. |
| Username | SSH connection username, optional. |
| Password | SSH connection password, optional. |
| Collector | Configure which collector to use for scheduling collection for this monitor. |
| Monitoring Interval | Interval for periodically collecting data, in seconds. The minimum interval that can be set is 30 seconds. |
| Bind Labels | Used to categorize and manage monitored resources. |
| Description | Additional information for identifying and describing this monitor. Users can add remarks here. |
| PrivateKey | Private key required to connect to the server. |
### Collection Metrics
#### Metric Set: Basic Info
| Metric Name | Metric Unit | Metric Help Description |
|-------------|-------------|-------------------------|
| hostname | None | Host name |
| version | None | System version |
| uptime | None | System Uptime |
| Metric Name | Metric Unit | Metric help description |
|----------------|-------------|--------------------------|
| Host Name | None | Host name |
| System Version | None | Operating system version |
| Uptime | None | System uptime |
#### Metric Set: CPU Info
| Metric Name | Metric Unit | Metric help description |
|----------------|-------------|----------------------------------------------|
| info | None | CPU model |
| cores | None | Number of CPU cores |
| interrupt | None | Number of CPU interrupts |
| cores | Number | Number of CPU cores |
| interrupt | Number | Number of CPU interrupts |
| load | None | Average CPU load for the last 1/5/15 minutes |
| context_switch | None | Current context switches |
| context_switch | Number | Current context switches |
| usage | % | CPU usage |
#### Metric Set: Memory Info
+49 -82
View File
@@ -9,106 +9,73 @@ keywords: [open source monitoring tool, open source linux monitoring tool, monit
### Configuration parameter
| Parameter Name | Parameter Help Description |
|-----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Monitored Host | The IPV4, IPV6, or domain name of the host being monitored. Note ⚠️ No protocol header (e.g., https://, http://). |
| Task Name | The name that identifies this monitoring, which must be unique. |
| Port | The port provided by Linux SSH, default is 22. |
| Timeout | Sets the connection timeout in milliseconds, default is 6000 ms. |
| Connection Reuse | Sets whether SSH connections are reused, default is :false. If false, a new connection is created each time information is retrieved. |
| Use Proxy Connection | Sets Whether connect via proxy, default is false. |
| Username | SSH connection username, optional. |
| Password | SSH connection password, optional. |
| Collector | Configures which collector is used to schedule data collection for this monitoring. |
| Monitoring Period | The interval time for periodic data collection in seconds, with a minimum interval of 30 seconds. |
| Binding Tags | Used for categorized management of monitoring resources. |
| Description | Additional notes and descriptions for this monitoring, where users can make notes. |
| PrivateKey | The private key required to connect to the server. |
| PrivateKey PassPhrase | The password phrase used to encrypt the SSH private key. If the private key was generated with a passphrase, this field must be filled to decrypt and use the key for authentication. |
| Proxy Host | The address of the proxy server, supporting IPV4, IPV6, or domain name format. Required when using SSH jump host to access the target host. |
| Proxy Port | The port number of the proxy service, default is 22. |
| Proxy Username | The authentication username required to connect to the proxy server. |
| Proxy Username | The authentication password required to connect to the proxy server. |
| Proxy PrivateKey | The private key required to authenticate with the proxy server. |
| Parameter name | Parameter help description |
|---------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Monitoring Host | Monitored IPV4, IPV6 or domain name. Note⚠️Without protocol header (eg: https://, http://) |
| Monitoring name | Identify the name of this monitoring. The name needs to be unique |
| Port | Port provided by Linux SSH. The default is 22 |
| Username | SSH connection user name, optional |
| Password | SSH connection password, optional |
| Collection interval | Interval time of monitor periodic data collection, unit: second, and 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. Adding and modifying operations will continue only after the detection is successful |
| Description remarks | For more information about identifying and describing this monitoring, users can note information here |
### Data Collection Metrics
### Collection Metric
#### Metric Set: Basic System Information
#### Metric setbasic
| Metric Name | Metric Unit | Metric Help Description |
|-------------|-------------|-------------------------|
| hostname | None | Host name |
| version | None | System version |
| uptime | None | System Uptime |
| Metric name | Metric unit | Metric help description |
|-------------|-------------|--------------------------|
| hostname | none | Host name |
| version | none | Operating system version |
| uptime | none | System running time |
#### Metric Set: CPU Information
#### Metric setcpu
| Metric Name | Metric Unit | Metric Help Description |
|----------------|-------------|-----------------------------------|
| info | None | CPU model |
| cores | None | Number of CPU cores |
| interrupt | None | Number of CPU interrupts |
| load | None | Average CPU load (1/5/15 minutes) |
| context_switch | None | Number of context switches |
| usage | % | CPU usage |
| Metric name | Metric unit | Metric help description |
|----------------|-------------|------------------------------------------------|
| info | none | CPU model |
| cores | cores | Number of CPU cores |
| interrupt | number | Number of CPU interrupts |
| load | none | Average load of CPU in the last 1/5/15 minutes |
| context_switch | number | Number of current context switches |
| usage | % | CPU usage |
#### Metric Set: Memory Information
#### Metric setmemory
| Metric Name | Metric Unit | Metric Help Description |
| Metric name | Metric unit | Metric help description |
|-------------|-------------|-------------------------------------|
| total | Mb | Total memory capacity |
| used | Mb | Memory used by user programs |
| used | Mb | User program memory |
| free | Mb | Free memory capacity |
| buff_cache | Mb | Memory used for cache |
| buff_cache | Mb | Memory occupied by cache |
| available | Mb | Remaining available memory capacity |
| usage | % | Memory usage rate |
| usage | % | Memory usage |
#### Metric Set: Disk Information
#### Metric setdisk
| Metric Name | Metric Unit | Metric Help Description |
| Metric name | Metric unit | Metric help description |
|---------------|-------------|----------------------------------------|
| disk_num | None | Total number of disks |
| partition_num | None | Total number of partitions |
| block_write | None | Total number of blocks written to disk |
| block_read | None | Total number of blocks read from disk |
| write_rate | iops | Disk block write rate per second |
| disk_num | blocks | Total number of disks |
| partition_num | partitions | Total number of partitions |
| block_write | blocks | Total number of blocks written to disk |
| block_read | blocks | Number of blocks read from disk |
| write_rate | iops | Rate of writing disk blocks per second |
#### Metric Set: Network Card Information
#### Metric setinterface
| Metric Name | Metric Unit | Metric Help Description |
|----------------|-------------|-------------------------------|
| interface_name | None | Network card name |
| receive_bytes | Byte | Inbound data traffic (bytes) |
| transmit_bytes | Byte | Outbound data traffic (bytes) |
| Metric name | Metric unit | Metric help description |
|----------------|-------------|------------------------------|
| interface_name | none | Network card name |
| receive_bytes | byte | Inbound data traffic(bytes) |
| transmit_bytes | byte | Outbound data traffic(bytes) |
#### Metric Set: File System
#### Metric setdisk_free
| Metric Name | Metric Unit | Metric Help Description |
| Metric name | Metric unit | Metric help description |
|-------------|-------------|-------------------------|
| filesystem | None | Name of the file system |
| filesystem | none | File system name |
| used | Mb | Used disk size |
| available | Mb | Available disk size |
| usage | % | Usage rate |
| mounted | None | Mount point directory |
#### Metric Set: Top 10 CPU Processes
Statistics for the top 10 processes using the CPU. Statistics include: process ID, CPU usage, memory usage, and executed command.
| Metric Name | Metric Unit | Metric Help Description |
|-------------|-------------|-------------------------|
| pid | None | Process ID |
| cpu_usage | % | CPU usage |
| mem_usage | % | Memory usage |
| command | None | Executed command |
#### Metric Set: Top 10 Memory Processes
Statistics for the top 10 processes using memory. Statistics include: process ID, memory usage, CPU usage, and executed command.
| Metric Name | Metric Unit | Metric Help Description |
|-------------|-------------|-------------------------|
| pid | None | Process ID |
| mem_usage | % | Memory usage |
| cpu_usage | % | CPU usage |
| command | None | Executed command |
| usage | % | usage |
| mounted | none | Mount point directory |
+70 -77
View File
@@ -9,106 +9,99 @@ keywords: [open source monitoring system, open source operating system monitorin
### Configuration Parameters
| Parameter Name | Parameter Help Description |
|-----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Monitored Host | The IPV4, IPV6, or domain name of the host being monitored. Note ⚠️ No protocol header (e.g., https://, http://). |
| Task Name | The name that identifies this monitoring, which must be unique. |
| Port | The port provided by Linux SSH, default is 22. |
| Timeout | Sets the connection timeout in milliseconds, default is 6000 ms. |
| Connection Reuse | Sets whether SSH connections are reused, default is :false. If false, a new connection is created each time information is retrieved. |
| Use Proxy Connection | Sets Whether connect via proxy, default is false. |
| Username | SSH connection username, optional. |
| Password | SSH connection password, optional. |
| Collector | Configures which collector is used to schedule data collection for this monitoring. |
| Monitoring Period | The interval time for periodic data collection in seconds, with a minimum interval of 30 seconds. |
| Binding Tags | Used for categorized management of monitoring resources. |
| Description | Additional notes and descriptions for this monitoring, where users can make notes. |
| PrivateKey | The private key required to connect to the server. |
| PrivateKey PassPhrase | The password phrase used to encrypt the SSH private key. If the private key was generated with a passphrase, this field must be filled to decrypt and use the key for authentication. |
| Proxy Host | The address of the proxy server, supporting IPV4, IPV6, or domain name format. Required when using SSH jump host to access the target host. |
| Proxy Port | The port number of the proxy service, default is 22. |
| Proxy Username | The authentication username required to connect to the proxy server. |
| Proxy Username | The authentication password required to connect to the proxy server. |
| Proxy PrivateKey | The private key required to authenticate with the proxy server. |
| Parameter Name | Parameter Help Description |
|-------------------|---------------------------------------------------------------------------------------------------------------------------------------|
| Monitored Host | The IPV4, IPV6, or domain name of the host being monitored. Note ⚠️ No protocol header (e.g., https://, http://). |
| Task Name | The name that identifies this monitoring, which must be unique. |
| Port | The port provided by Linux SSH, default is 22. |
| Timeout | Sets the connection timeout in milliseconds, default is 6000 ms. |
| Connection Reuse | Sets whether SSH connections are reused, default is :false. If false, a new connection is created each time information is retrieved. |
| Username | SSH connection username, optional. |
| Password | SSH connection password, optional. |
| Collector | Configures which collector is used to schedule data collection for this monitoring. |
| Monitoring Period | The interval time for periodic data collection in seconds, with a minimum interval of 30 seconds. |
| Binding Tags | Used for categorized management of monitoring resources. |
| Description | Additional notes and descriptions for this monitoring, where users can make notes. |
| Key | The key required to connect to the server. |
### Data Collection Metrics
### Collection Metrics
#### Metric Set: Basic System Information
#### Metric Set: System Basic Information
| Metric Name | Metric Unit | Metric Help Description |
|-------------|-------------|-------------------------|
| hostname | None | Host name |
| version | None | System version |
| uptime | None | System Uptime |
| Metric Name | Unit | Metric Help Description |
|----------------|------|--------------------------|
| Host Name | None | Host name |
| System Version | None | Operating system version |
| Uptime | None | Uptime |
#### Metric Set: CPU Information
| Metric Name | Metric Unit | Metric Help Description |
|----------------|-------------|-----------------------------------|
| info | None | CPU model |
| cores | None | Number of CPU cores |
| interrupt | None | Number of CPU interrupts |
| load | None | Average CPU load (1/5/15 minutes) |
| context_switch | None | Number of context switches |
| usage | % | CPU usage |
| Metric Name | Unit | Metric Help Description |
|----------------|-------|-----------------------------------------------|
| info | None | CPU model |
| cores | Cores | Number of CPU cores |
| interrupt | Count | Number of CPU interrupts |
| load | None | Average CPU load over the last 1/5/15 minutes |
| context_switch | Count | Number of context switches |
| usage | % | CPU usage rate |
#### Metric Set: Memory Information
| Metric Name | Metric Unit | Metric Help Description |
|-------------|-------------|-------------------------------------|
| total | Mb | Total memory capacity |
| used | Mb | Memory used by user programs |
| free | Mb | Free memory capacity |
| buff_cache | Mb | Memory used for cache |
| available | Mb | Remaining available memory capacity |
| usage | % | Memory usage rate |
| Metric Name | Unit | Metric Help Description |
|-------------|------|-------------------------------------|
| total | Mb | Total memory capacity |
| used | Mb | Memory used by user programs |
| free | Mb | Free memory capacity |
| buff_cache | Mb | Memory used for cache |
| available | Mb | Remaining available memory capacity |
| usage | % | Memory usage rate |
#### Metric Set: Disk Information
| Metric Name | Metric Unit | Metric Help Description |
|---------------|-------------|----------------------------------------|
| disk_num | None | Total number of disks |
| partition_num | None | Total number of partitions |
| block_write | None | Total number of blocks written to disk |
| block_read | None | Total number of blocks read from disk |
| write_rate | iops | Disk block write rate per second |
| Metric Name | Unit | Metric Help Description |
|---------------|-------|----------------------------------------|
| disk_num | Count | Total number of disks |
| partition_num | Count | Total number of partitions |
| block_write | Count | Total number of blocks written to disk |
| block_read | Count | Total number of blocks read from disk |
| write_rate | iops | Disk block write rate per second |
#### Metric Set: Network Card Information
| Metric Name | Metric Unit | Metric Help Description |
|----------------|-------------|-------------------------------|
| interface_name | None | Network card name |
| receive_bytes | Byte | Inbound data traffic (bytes) |
| transmit_bytes | Byte | Outbound data traffic (bytes) |
| Metric Name | Unit | Metric Help Description |
|----------------|------|-------------------------|
| interface_name | None | Network card name |
| receive_bytes | Mb | Inbound data traffic |
| transmit_bytes | Mb | Outbound data traffic |
#### Metric Set: File System
| Metric Name | Metric Unit | Metric Help Description |
|-------------|-------------|-------------------------|
| filesystem | None | Name of the file system |
| used | Mb | Used disk size |
| available | Mb | Available disk size |
| usage | % | Usage rate |
| mounted | None | Mount point directory |
| Metric Name | Unit | Metric Help Description |
|-------------|------|-------------------------|
| filesystem | None | Name of the file system |
| used | Mb | Used disk size |
| available | Mb | Available disk size |
| usage | % | Usage rate |
| mounted | None | Mount point directory |
#### Metric Set: Top 10 CPU Processes
Statistics for the top 10 processes using the CPU. Statistics include: process ID, CPU usage, memory usage, and executed command.
Statistics for the top 10 processes using the CPU. Statistics include: Process ID, CPU usage, memory usage, executed command.
| Metric Name | Metric Unit | Metric Help Description |
|-------------|-------------|-------------------------|
| pid | None | Process ID |
| cpu_usage | % | CPU usage |
| mem_usage | % | Memory usage |
| command | None | Executed command |
| Metric Name | Unit | Metric Help Description |
|-------------|------|-------------------------|
| pid | None | Process ID |
| cpu_usage | % | CPU usage rate |
| mem_usage | % | Memory usage rate |
| command | None | Executed command |
#### Metric Set: Top 10 Memory Processes
Statistics for the top 10 processes using memory. Statistics include: process ID, memory usage, CPU usage, and executed command.
Statistics for the top 10 processes using memory. Statistics include: Process ID, memory usage, CPU usage, executed command.
| Metric Name | Metric Unit | Metric Help Description |
|-------------|-------------|-------------------------|
| pid | None | Process ID |
| mem_usage | % | Memory usage |
| cpu_usage | % | CPU usage |
| command | None | Executed command |
| Metric Name | Unit | Metric Help Description |
|-------------|------|-------------------------|
| pid | None | Process ID |
| mem_usage | % | Memory usage rate |
| cpu_usage | % | CPU usage rate |
| command | None | Executed command |
+67 -74
View File
@@ -9,104 +9,97 @@ keywords: [ Open Source Monitoring System, Open Source OS Monitoring, RedHat OS
### Configuration Parameters
| Parameter Name | Parameter Help Description |
|-----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Monitored Host | The IPV4, IPV6, or domain name of the host being monitored. Note ⚠️ No protocol header (e.g., https://, http://). |
| Task Name | The name that identifies this monitoring, which must be unique. |
| Port | The port provided by Linux SSH, default is 22. |
| Timeout | Sets the connection timeout in milliseconds, default is 6000 ms. |
| Connection Reuse | Sets whether SSH connections are reused, default is :false. If false, a new connection is created each time information is retrieved. |
| Use Proxy Connection | Sets Whether connect via proxy, default is false. |
| Username | SSH connection username, optional. |
| Password | SSH connection password, optional. |
| Collector | Configures which collector is used to schedule data collection for this monitoring. |
| Monitoring Period | The interval time for periodic data collection in seconds, with a minimum interval of 30 seconds. |
| Binding Tags | Used for categorized management of monitoring resources. |
| Description | Additional notes and descriptions for this monitoring, where users can make notes. |
| PrivateKey | The private key required to connect to the server. |
| PrivateKey PassPhrase | The password phrase used to encrypt the SSH private key. If the private key was generated with a passphrase, this field must be filled to decrypt and use the key for authentication. |
| Proxy Host | The address of the proxy server, supporting IPV4, IPV6, or domain name format. Required when using SSH jump host to access the target host. |
| Proxy Port | The port number of the proxy service, default is 22. |
| Proxy Username | The authentication username required to connect to the proxy server. |
| Proxy Username | The authentication password required to connect to the proxy server. |
| Proxy PrivateKey | The private key required to authenticate with the proxy server. |
| Parameter Name | Parameter help description |
|---------------------|----------------------------------------------------------------------------------------------------------------------------------|
| Monitoring Host | The IP, IPV6, or domain name of the monitored endpoint. Note ⚠️: Do not include protocol headers (eg: https://, http://). |
| Task Name | Identifies the name of this monitoring, ensuring uniqueness. |
| Port | Port provided by Linux SSH externally, defaults to 22. |
| Timeout | Sets the timeout for connection in milliseconds (ms), defaults to 6000 ms. |
| Connection Reuse | Sets whether the SSH connection is reused, defaults to: false. Creates a new connection for each information retrieval if false. |
| Username | SSH connection username, optional. |
| Password | SSH connection password, optional. |
| Collector | Specifies which collector schedules the collection for this monitoring. |
| Monitoring Interval | Interval for periodically collecting data, in seconds. Minimum interval is 30 seconds. |
| Binding Tags | Used for categorizing and managing monitored resources. |
| Description | Additional remarks and descriptions for this monitoring, for users' reference. |
| PrivateKey | Key required for connecting to the server. |
### Data Collection Metrics
### Collected Metrics
#### Metric Set: Basic System Information
#### Metric Set: Basic Info
| Metric Name | Metric Unit | Metric Help Description |
|-------------|-------------|-------------------------|
| hostname | None | Host name |
| version | None | System version |
| uptime | None | System Uptime |
| Metric Name | Metric Unit | Metric help description |
|----------------|-------------|---------------------------|
| Host Name | None | Host name. |
| System Version | None | Operating system version. |
| Uptime | None | System uptime. |
#### Metric Set: CPU Information
#### Metric Set: CPU Info
| Metric Name | Metric Unit | Metric Help Description |
|----------------|-------------|-----------------------------------|
| info | None | CPU model |
| cores | None | Number of CPU cores |
| interrupt | None | Number of CPU interrupts |
| load | None | Average CPU load (1/5/15 minutes) |
| context_switch | None | Number of context switches |
| usage | % | CPU usage |
| Metric Name | Metric Unit | Metric help description |
|----------------|-------------|-------------------------------------------|
| info | None | CPU model. |
| cores | None | Number of CPU cores. |
| interrupt | None | Number of CPU interrupts. |
| load | None | Average load for the last 1/5/15 minutes. |
| context_switch | None | Current context switches. |
| usage | % | CPU usage percentage. |
#### Metric Set: Memory Information
#### Metric Set: Memory Info
| Metric Name | Metric Unit | Metric Help Description |
|-------------|-------------|-------------------------------------|
| total | Mb | Total memory capacity |
| used | Mb | Memory used by user programs |
| free | Mb | Free memory capacity |
| buff_cache | Mb | Memory used for cache |
| available | Mb | Remaining available memory capacity |
| usage | % | Memory usage rate |
| Metric Name | Metric Unit | Metric help description |
|-------------|-------------|------------------------------------|
| total | Mb | Total memory capacity. |
| used | Mb | Used memory by user programs. |
| free | Mb | Free memory capacity. |
| buff_cache | Mb | Memory used for buffers and cache. |
| available | Mb | Available memory capacity. |
| usage | % | Memory usage percentage. |
#### Metric Set: Disk Information
#### Metric Set: Disk Info
| Metric Name | Metric Unit | Metric Help Description |
|---------------|-------------|----------------------------------------|
| disk_num | None | Total number of disks |
| partition_num | None | Total number of partitions |
| block_write | None | Total number of blocks written to disk |
| block_read | None | Total number of blocks read from disk |
| write_rate | iops | Disk block write rate per second |
| Metric Name | Metric Unit | Metric help description |
|---------------|-------------|------------------------------------|
| disk_num | None | Total number of disks. |
| partition_num | None | Total number of partitions. |
| block_write | None | Total blocks written to disk. |
| block_read | None | Total blocks read from disk. |
| write_rate | iops | Rate of blocks written per second. |
#### Metric Set: Network Card Information
#### Metric Set: Interface Info
| Metric Name | Metric Unit | Metric Help Description |
|----------------|-------------|-------------------------------|
| interface_name | None | Network card name |
| receive_bytes | Byte | Inbound data traffic (bytes) |
| transmit_bytes | Byte | Outbound data traffic (bytes) |
| Metric Name | Metric Unit | Metric help description |
|----------------|-------------|--------------------------------|
| interface_name | None | Name of the network interface. |
| receive_bytes | Mb | Inbound data traffic. |
| transmit_bytes | Mb | Outbound data traffic. |
#### Metric Set: File System
#### Metric Set: Disk Free
| Metric Name | Metric Unit | Metric Help Description |
|-------------|-------------|-------------------------|
| filesystem | None | Name of the file system |
| used | Mb | Used disk size |
| available | Mb | Available disk size |
| usage | % | Usage rate |
| mounted | None | Mount point directory |
| Metric Name | Metric Unit | Metric help description |
|-------------|-------------|--------------------------|
| filesystem | None | Name of the file system. |
| used | Mb | Used disk space. |
| available | Mb | Available disk space. |
| usage | % | Disk usage percentage. |
| mounted | None | Mount point directory. |
#### Metric Set: Top 10 CPU Processes
#### Metric Set: Top10 CPU Process
Statistics for the top 10 processes using the CPU. Statistics include: process ID, CPU usage, memory usage, and executed command.
Top 10 processes consuming CPU. Metrics include: Process ID, CPU usage, Memory usage, Command.
| Metric Name | Metric Unit | Metric Help Description |
| Metric Name | Metric Unit | Metric help description |
|-------------|-------------|-------------------------|
| pid | None | Process ID |
| cpu_usage | % | CPU usage |
| mem_usage | % | Memory usage |
| command | None | Executed command |
#### Metric Set: Top 10 Memory Processes
#### Metric Set: Top10 Memory Process
Statistics for the top 10 processes using memory. Statistics include: process ID, memory usage, CPU usage, and executed command.
Top 10 processes consuming memory. Metrics include: Process ID, Memory usage, CPU usage, Command.
| Metric Name | Metric Unit | Metric Help Description |
| Metric Name | Metric Unit | Metric help description |
|-------------|-------------|-------------------------|
| pid | None | Process ID |
| mem_usage | % | Memory usage |
+67 -74
View File
@@ -9,104 +9,97 @@ keywords: [ Open Source Monitoring System, Open Source OS Monitoring, Rocky Linu
### Configuration Parameters
| Parameter Name | Parameter Help Description |
|-----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Monitored Host | The IPV4, IPV6, or domain name of the host being monitored. Note ⚠️ No protocol header (e.g., https://, http://). |
| Task Name | The name that identifies this monitoring, which must be unique. |
| Port | The port provided by Linux SSH, default is 22. |
| Timeout | Sets the connection timeout in milliseconds, default is 6000 ms. |
| Connection Reuse | Sets whether SSH connections are reused, default is :false. If false, a new connection is created each time information is retrieved. |
| Use Proxy Connection | Sets Whether connect via proxy, default is false. |
| Username | SSH connection username, optional. |
| Password | SSH connection password, optional. |
| Collector | Configures which collector is used to schedule data collection for this monitoring. |
| Monitoring Period | The interval time for periodic data collection in seconds, with a minimum interval of 30 seconds. |
| Binding Tags | Used for categorized management of monitoring resources. |
| Description | Additional notes and descriptions for this monitoring, where users can make notes. |
| PrivateKey | The private key required to connect to the server. |
| PrivateKey PassPhrase | The password phrase used to encrypt the SSH private key. If the private key was generated with a passphrase, this field must be filled to decrypt and use the key for authentication. |
| Proxy Host | The address of the proxy server, supporting IPV4, IPV6, or domain name format. Required when using SSH jump host to access the target host. |
| Proxy Port | The port number of the proxy service, default is 22. |
| Proxy Username | The authentication username required to connect to the proxy server. |
| Proxy Username | The authentication password required to connect to the proxy server. |
| Proxy PrivateKey | The private key required to authenticate with the proxy server. |
| Parameter Name | Parameter help description |
|---------------------|----------------------------------------------------------------------------------------------------------------------------------|
| Monitoring Host | The IP, IPV6, or domain name of the monitored endpoint. Note ⚠️: Do not include protocol headers (eg: https://, http://). |
| Task Name | Identifies the name of this monitoring, ensuring uniqueness. |
| Port | Port provided by Linux SSH externally, defaults to 22. |
| Timeout | Sets the timeout for connection in milliseconds (ms), defaults to 6000 ms. |
| Connection Reuse | Sets whether the SSH connection is reused, defaults to: false. Creates a new connection for each information retrieval if false. |
| Username | SSH connection username, optional. |
| Password | SSH connection password, optional. |
| Collector | Specifies which collector schedules the collection for this monitoring. |
| Monitoring Interval | Interval for periodically collecting data, in seconds. Minimum interval is 30 seconds. |
| Binding Tags | Used for categorizing and managing monitored resources. |
| Description | Additional remarks and descriptions for this monitoring, for users' reference. |
| PrivateKey | Key required for connecting to the server. |
### Data Collection Metrics
### Collected Metrics
#### Metric Set: Basic System Information
#### Metric Set: Basic Info
| Metric Name | Metric Unit | Metric Help Description |
|-------------|-------------|-------------------------|
| hostname | None | Host name |
| version | None | System version |
| uptime | None | System Uptime |
| Metric Name | Metric Unit | Metric help description |
|----------------|-------------|---------------------------|
| Host Name | None | Host name. |
| System Version | None | Operating system version. |
| Uptime | None | System uptime. |
#### Metric Set: CPU Information
#### Metric Set: CPU Info
| Metric Name | Metric Unit | Metric Help Description |
|----------------|-------------|-----------------------------------|
| info | None | CPU model |
| cores | None | Number of CPU cores |
| interrupt | None | Number of CPU interrupts |
| load | None | Average CPU load (1/5/15 minutes) |
| context_switch | None | Number of context switches |
| usage | % | CPU usage |
| Metric Name | Metric Unit | Metric help description |
|----------------|-------------|-------------------------------------------|
| info | None | CPU model. |
| cores | None | Number of CPU cores. |
| interrupt | None | Number of CPU interrupts. |
| load | None | Average load for the last 1/5/15 minutes. |
| context_switch | None | Current context switches. |
| usage | % | CPU usage percentage. |
#### Metric Set: Memory Information
#### Metric Set: Memory Info
| Metric Name | Metric Unit | Metric Help Description |
|-------------|-------------|-------------------------------------|
| total | Mb | Total memory capacity |
| used | Mb | Memory used by user programs |
| free | Mb | Free memory capacity |
| buff_cache | Mb | Memory used for cache |
| available | Mb | Remaining available memory capacity |
| usage | % | Memory usage rate |
| Metric Name | Metric Unit | Metric help description |
|-------------|-------------|------------------------------------|
| total | Mb | Total memory capacity. |
| used | Mb | Used memory by user programs. |
| free | Mb | Free memory capacity. |
| buff_cache | Mb | Memory used for buffers and cache. |
| available | Mb | Available memory capacity. |
| usage | % | Memory usage percentage. |
#### Metric Set: Disk Information
#### Metric Set: Disk Info
| Metric Name | Metric Unit | Metric Help Description |
|---------------|-------------|----------------------------------------|
| disk_num | None | Total number of disks |
| partition_num | None | Total number of partitions |
| block_write | None | Total number of blocks written to disk |
| block_read | None | Total number of blocks read from disk |
| write_rate | iops | Disk block write rate per second |
| Metric Name | Metric Unit | Metric help description |
|---------------|-------------|------------------------------------|
| disk_num | None | Total number of disks. |
| partition_num | None | Total number of partitions. |
| block_write | None | Total blocks written to disk. |
| block_read | None | Total blocks read from disk. |
| write_rate | iops | Rate of blocks written per second. |
#### Metric Set: Network Card Information
#### Metric Set: Interface Info
| Metric Name | Metric Unit | Metric Help Description |
|----------------|-------------|-------------------------------|
| interface_name | None | Network card name |
| receive_bytes | Byte | Inbound data traffic (bytes) |
| transmit_bytes | Byte | Outbound data traffic (bytes) |
| Metric Name | Metric Unit | Metric help description |
|----------------|-------------|--------------------------------|
| interface_name | None | Name of the network interface. |
| receive_bytes | Mb | Inbound data traffic. |
| transmit_bytes | Mb | Outbound data traffic. |
#### Metric Set: File System
#### Metric Set: Disk Free
| Metric Name | Metric Unit | Metric Help Description |
|-------------|-------------|-------------------------|
| filesystem | None | Name of the file system |
| used | Mb | Used disk size |
| available | Mb | Available disk size |
| usage | % | Usage rate |
| mounted | None | Mount point directory |
| Metric Name | Metric Unit | Metric help description |
|-------------|-------------|--------------------------|
| filesystem | None | Name of the file system. |
| used | Mb | Used disk space. |
| available | Mb | Available disk space. |
| usage | % | Disk usage percentage. |
| mounted | None | Mount point directory. |
#### Metric Set: Top 10 CPU Processes
#### Metric Set: Top10 CPU Process
Statistics for the top 10 processes using the CPU. Statistics include: process ID, CPU usage, memory usage, and executed command.
Top 10 processes consuming CPU. Metrics include: Process ID, CPU usage, Memory usage, Command.
| Metric Name | Metric Unit | Metric Help Description |
| Metric Name | Metric Unit | Metric help description |
|-------------|-------------|-------------------------|
| pid | None | Process ID |
| cpu_usage | % | CPU usage |
| mem_usage | % | Memory usage |
| command | None | Executed command |
#### Metric Set: Top 10 Memory Processes
#### Metric Set: Top10 Memory Process
Statistics for the top 10 processes using memory. Statistics include: process ID, memory usage, CPU usage, and executed command.
Top 10 processes consuming memory. Metrics include: Process ID, Memory usage, CPU usage, Command.
| Metric Name | Metric Unit | Metric Help Description |
| Metric Name | Metric Unit | Metric help description |
|-------------|-------------|-------------------------|
| pid | None | Process ID |
| mem_usage | % | Memory usage |
+49 -90
View File
@@ -9,114 +9,73 @@ keywords: [open source monitoring tool, open source linux ubuntu monitoring tool
### Configuration parameter
| Parameter Name | Parameter Help Description |
|-----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Monitored Host | The IPV4, IPV6, or domain name of the host being monitored. Note ⚠️ No protocol header (e.g., https://, http://). |
| Task Name | The name that identifies this monitoring, which must be unique. |
| Port | The port provided by Linux SSH, default is 22. |
| Timeout | Sets the connection timeout in milliseconds, default is 6000 ms. |
| Connection Reuse | Sets whether SSH connections are reused, default is :false. If false, a new connection is created each time information is retrieved. |
| Use Proxy Connection | Sets Whether connect via proxy, default is false. |
| Username | SSH connection username, optional. |
| Password | SSH connection password, optional. |
| Collector | Configures which collector is used to schedule data collection for this monitoring. |
| Monitoring Period | The interval time for periodic data collection in seconds, with a minimum interval of 30 seconds. |
| Binding Tags | Used for categorized management of monitoring resources. |
| Description | Additional notes and descriptions for this monitoring, where users can make notes. |
| PrivateKey | The private key required to connect to the server. |
| PrivateKey PassPhrase | The password phrase used to encrypt the SSH private key. If the private key was generated with a passphrase, this field must be filled to decrypt and use the key for authentication. |
| Proxy Host | The address of the proxy server, supporting IPV4, IPV6, or domain name format. Required when using SSH jump host to access the target host. |
| Proxy Port | The port number of the proxy service, default is 22. |
| Proxy Username | The authentication username required to connect to the proxy server. |
| Proxy Username | The authentication password required to connect to the proxy server. |
| Proxy PrivateKey | The private key required to authenticate with the proxy server. |
| Parameter name | Parameter help description |
|---------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Monitoring Host | Monitored IPV4, IPV6 or domain name. Note⚠️Without protocol header (eg: https://, http://) |
| Monitoring name | Identify the name of this monitoring. The name needs to be unique |
| Port | Port provided by Linux SSH. The default is 22 |
| Username | SSH connection user name, optional |
| Password | SSH connection password, optional |
| Collection interval | Interval time of monitor periodic data collection, unit: second, and 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. Adding and modifying operations will continue only after the detection is successful |
| Description remarks | For more information about identifying and describing this monitoring, users can note information here |
### Collected Metrics
### Collection Metric
### Data Collection Metrics
#### Metric setbasic
#### Metric Set: Basic System Information
| Metric name | Metric unit | Metric help description |
|-------------|-------------|--------------------------|
| hostname | none | Host name |
| version | none | Operating system version |
| uptime | none | System running time |
| Metric Name | Metric Unit | Metric Help Description |
|-------------|-------------|-------------------------|
| hostname | None | Host name |
| version | None | System version |
| uptime | None | System Uptime |
#### Metric setcpu
#### Metric Set: CPU Information
| Metric name | Metric unit | Metric help description |
|----------------|-------------|------------------------------------------------|
| info | none | CPU model |
| cores | cores | Number of CPU cores |
| interrupt | number | Number of CPU interrupts |
| load | none | Average load of CPU in the last 1/5/15 minutes |
| context_switch | number | Number of current context switches |
| usage | % | CPU usage |
| Metric Name | Metric Unit | Metric Help Description |
|----------------|-------------|-----------------------------------|
| info | None | CPU model |
| cores | None | Number of CPU cores |
| interrupt | None | Number of CPU interrupts |
| load | None | Average CPU load (1/5/15 minutes) |
| context_switch | None | Number of context switches |
| usage | % | CPU usage |
#### Metric setmemory
#### Metric Set: Memory Information
| Metric Name | Metric Unit | Metric Help Description |
| Metric name | Metric unit | Metric help description |
|-------------|-------------|-------------------------------------|
| total | Mb | Total memory capacity |
| used | Mb | Memory used by user programs |
| used | Mb | User program memory |
| free | Mb | Free memory capacity |
| buff_cache | Mb | Memory used for cache |
| buff_cache | Mb | Memory occupied by cache |
| available | Mb | Remaining available memory capacity |
| usage | % | Memory usage rate |
| usage | % | Memory usage |
#### Metric Set: Disk Information
#### Metric setdisk
| Metric Name | Metric Unit | Metric Help Description |
| Metric name | Metric unit | Metric help description |
|---------------|-------------|----------------------------------------|
| disk_num | None | Total number of disks |
| partition_num | None | Total number of partitions |
| block_write | None | Total number of blocks written to disk |
| block_read | None | Total number of blocks read from disk |
| write_rate | iops | Disk block write rate per second |
| disk_num | blocks | Total number of disks |
| partition_num | partitions | Total number of partitions |
| block_write | blocks | Total number of blocks written to disk |
| block_read | blocks | Number of blocks read from disk |
| write_rate | iops | Rate of writing disk blocks per second |
#### Metric Set: Network Card Information
#### Metric setinterface
| Metric Name | Metric Unit | Metric Help Description |
|----------------|-------------|-------------------------------|
| interface_name | None | Network card name |
| receive_bytes | Byte | Inbound data traffic (bytes) |
| transmit_bytes | Byte | Outbound data traffic (bytes) |
| Metric name | Metric unit | Metric help description |
|----------------|-------------|------------------------------|
| interface_name | none | Network card name |
| receive_bytes | byte | Inbound data traffic(bytes) |
| transmit_bytes | byte | Outbound data traffic(bytes) |
#### Metric Set: File System
#### Metric setdisk_free
| Metric Name | Metric Unit | Metric Help Description |
| Metric name | Metric unit | Metric help description |
|-------------|-------------|-------------------------|
| filesystem | None | Name of the file system |
| filesystem | none | File system name |
| used | Mb | Used disk size |
| available | Mb | Available disk size |
| usage | % | Usage rate |
| mounted | None | Mount point directory |
#### Metric Set: Top 10 CPU Processes
Statistics for the top 10 processes using the CPU. Statistics include: process ID, CPU usage, memory usage, and executed command.
| Metric Name | Metric Unit | Metric Help Description |
|-------------|-------------|-------------------------|
| pid | None | Process ID |
| cpu_usage | % | CPU usage |
| mem_usage | % | Memory usage |
| command | None | Executed command |
#### Metric Set: Top 10 Memory Processes
Statistics for the top 10 processes using memory. Statistics include: process ID, memory usage, CPU usage, and executed command.
| Metric Name | Metric Unit | Metric Help Description |
|-------------|-------------|-------------------------|
| pid | None | Process ID |
| mem_usage | % | Memory usage |
| cpu_usage | % | CPU usage |
| command | None | Executed command |
#### Metric Set: Average CPU Temperature Across All Cores
| Metric Name | Metric Unit | Metric help description |
|--------------|-------------|-------------------------|
| avg_cpu_temp | C | Average Temp All Cores |
| usage | % | usage |
| mounted | none | Mount point directory |
+8 -8
View File
@@ -1,20 +1,20 @@
---
id: greptime-init
title: Use Time Series Database Greptime to Store Metrics Data (Recommended)
sidebar_label: Metrics Store Greptime (Recommended)
title: Use Time Series Database GreptimeDB to Store Metrics Data (Optional)
sidebar_label: Metrics Store GreptimeDB
---
Apache HertzBeat (incubating)'s historical data storage relies on the time series database, you can choose one of them to install and initialize, or not to install (note ⚠️ but it is strongly recommended to configure in the production environment)
> It is recommended to use Greptime as metrics storage.
> It is recommended to use VictoriaMetrics as metrics storage.
[Greptime](https://github.com/GreptimeTeam/greptimedb) is an Open-source, cloud-native, unified observability database for metrics, logs and traces, supporting SQL/PromQL/Streaming.
[GreptimeDB](https://github.com/GreptimeTeam/greptimedb) is an open-source time-series database with a special focus on scalability, analytical capabilities and efficiency.
It's designed to work on infrastructure of the cloud era, and users benefit from its elasticity and commodity storage.
**⚠️ If you do not configure a time series database, only the last hour of historical data is retained.**
### Install GreptimeDvia Docker
### Install GreptimeDB via Docker
1. Download and install Docker environment
Docker tools download refer to [Docker official document](https://docs.docker.com/get-docker/).
@@ -25,7 +25,7 @@ After the installation you can check if the Docker version normally output at th
Docker version 20.10.12, build e91ed57
```
2. Install Greptime with Docker
2. Install GreptimeDB with Docker
```shell
$ docker run -d -p 127.0.0.1:4000-4003:4000-4003 \
@@ -38,7 +38,7 @@ After the installation you can check if the Docker version normally output at th
--postgres-addr 0.0.0.0:4003
```
`-v "$(pwd)/greptimedb:/tmp/greptimedb"` is local persistent mount of greptime data directory. `$(pwd)/greptimedb` should be replaced with the actual local directory, default is the `greptimedb` directory under the current directory.
`-v "$(pwd)/greptimedb:/tmp/greptimedb"` is local persistent mount of greptimedb data directory. `$(pwd)/greptimedb` should be replaced with the actual local directory, default is the `greptimedb` directory under the current directory.
use```$ docker ps``` to check if the database started successfully
### Configure the database connection in hertzbeat `application.yml` configuration file
@@ -69,6 +69,6 @@ use```$ docker ps``` to check if the database started successfully
### FAQ
1. Do both the time series databases need to be configured? Can they both be used?
1. Do both the time series databases Greptime, IoTDB or TDengine need to be configured? Can they both be used?
> You don't need to configure all of them, you can choose one of them. Use the enable parameter to control whether it is used or not. You can also install and configure neither, which only affects the historical chart data.
@@ -14,7 +14,7 @@ sidebar_label: 交流联系
微信公众号 : 搜索 ID `usthecom`.
[QQ交流群](https://qm.qq.com/q/xxqecSC2cw) : 群号 `1035688434`
[QQ交流群](https://jq.qq.com/?_wv=1027&k=Bud9OzdI) : 群号 `630061200`
[Github Discussion](https://github.com/apache/hertzbeat/discussions)
@@ -9,47 +9,40 @@ keywords: [开源监控系统, 开源操作系统监控, AlmaLinux操作系统
### 配置参数
| 参数名称 | 参数帮助描述 |
|--------|---------------------------------------------------------------------|
| 监控Host | 被监控的对端IPV4,IPV6或域名。注意⚠️不带协议头(eg: https://, http://)。 |
| 任务名称 | 标识此监控的名称,名称需要保证唯一性。 |
| 端口 | Linux SSH对外提供的端口,默认为22。 |
| 超时时间 | 设置连接的超时时间,单位ms毫秒,默认6000毫秒。 |
| 复用连接 | 设置SSH连接是否复用,默认为:false。为false每次获取信息都会创建一个连接 |
| 使用代理 | 设置是否通过代理连接,默认为false。 |
| 用户名 | SSH连接用户名,可选 |
| 密码 | SSH连接密码,可选 |
| 采集器 | 配置此监控使用哪台采集器调度采集 |
| 监控周期 | 监控周期性采集数据间隔时间,单位秒,可设置的最小间隔为30秒 |
| 绑定标签 | 用于对监控资源进行分类管理 |
| 描述备注 | 更多标识和描述此监控的备注信息,用户可以在这里备注信息 |
| 私钥 | 连接服务器所需的私钥 |
| 密钥短语 | 用于加密 SSH 私钥的密码短语(Passphrase)。如果私钥在生成时设置了密码短语,则必须填写此字段才能解密并使用私钥进行认证。 |
| 代理主机 | 代理服务器的地址,支持 IPV4、IPV6或域名。若使用 SSH 代理跳转访问目标主机,需填写代理服务器的地址。 |
| 代理端口 | 代理服务器的端口号。 |
| 代理用户名 | 连接代理服务器时所需的认证用户名。 |
| 代理密码 | 连接代理服务器时所需的认证密码。 |
| 代理主机私钥 | 连接代理服务器时所需的私钥。 |
| 参数名称 | 参数帮助描述 |
|--------|------------------------------------------------------|
| 监控Host | 被监控的对端IPV4,IPV6或域名。注意⚠️不带协议头(eg: https://, http://)。 |
| 任务名称 | 标识此监控的名称,名称需要保证唯一性。 |
| 端口 | Linux SSH对外提供的端口,默认为22。 |
| 超时时间 | 设置连接的超时时间,单位ms毫秒,默认6000毫秒。 |
| 复用连接 | 设置SSH连接是否复用,默认为:false。为false每次回去信息都会创建一个连接 |
| 用户名 | SSH连接用户名,可选 |
| 密码 | SSH连接密码,可选 |
| 采集器 | 配置此监控使用哪台采集器调度采集 |
| 监控周期 | 监控周期性采集数据间隔时间,单位秒,可设置的最小间隔为30秒 |
| 绑定标签 | 用于对监控资源进行分类管理 |
| 描述备注 | 更多标识和描述此监控的备注信息,用户可以在这里备注信息 |
| 密钥 | 连接服务器所需密钥 |
### 采集指标
#### 指标集合:系统基本信息
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------|------|--------|
| hostname | 无 | 主机名称 |
| version | 无 | 操作系统版本 |
| uptime | 无 | 启动时间 |
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------------|------|--------|
| Host Name | 无 | 主机名称 |
| System Version | 无 | 操作系统版本 |
| Uptime | 无 | 启动时间 |
#### 指标集合:CPU 信息
| 指标名称 | 指标单位 | 指标帮助描述 |
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------------|------|--------------------|
| info | 无 | CPU型号 |
| cores | | CPU内核数量 |
| interrupt | | CPU中断数量 |
| cores | 核数 | CPU内核数量 |
| interrupt | 个数 | CPU中断数量 |
| load | 无 | CPU最近1/5/15分钟的平均负载 |
| context_switch | | 当前上下文切换数量 |
| context_switch | 个数 | 当前上下文切换数量 |
| usage | % | CPU使用率 |
#### 指标集合:内存信息
@@ -67,10 +60,10 @@ keywords: [开源监控系统, 开源操作系统监控, AlmaLinux操作系统
| 指标名称 | 指标单位 | 指标帮助描述 |
|---------------|------|-----------|
| disk_num | | 磁盘总数 |
| partition_num | | 分区总数 |
| block_write | | 写入磁盘的总块数 |
| block_read | | 从磁盘读出的块数 |
| disk_num | 块数 | 磁盘总数 |
| partition_num | 分区数 | 分区总数 |
| block_write | 块数 | 写入磁盘的总块数 |
| block_read | 块数 | 从磁盘读出的块数 |
| write_rate | iops | 每秒写磁盘块的速率 |
#### 指标集合:网卡信息
@@ -78,8 +71,8 @@ keywords: [开源监控系统, 开源操作系统监控, AlmaLinux操作系统
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------------|------|---------------|
| interface_name | 无 | 网卡名称 |
| receive_bytes | Byte | 入站数据流量(bytes) |
| transmit_bytes | Byte | 出站数据流量(bytes) |
| receive_bytes | byte | 入站数据流量(bytes) |
| transmit_bytes | byte | 出站数据流量(bytes) |
#### 指标集合:文件系统
@@ -9,50 +9,39 @@ keywords: [开源监控系统, 开源操作系统监控, CentOS操作系统监
### 配置参数
| 参数名称 | 参数帮助描述 |
|--------|---------------------------------------------------------------------|
| 监控Host | 被监控的对端IPV4,IPV6或域名。注意⚠️不带协议头(eg: https://, http://)。 |
| 任务名称 | 标识此监控的名称,名称需要保证唯一性。 |
| 端口 | Linux SSH对外提供的端口,默认为22。 |
| 超时时间 | 设置连接的超时时间,单位ms毫秒,默认6000毫秒。 |
| 复用连接 | 设置SSH连接是否复用,默认为:false。为false每次获取信息都会创建一个连接 |
| 使用代理 | 设置是否通过代理连接,默认为false。 |
| 用户名 | SSH连接用户名,可选 |
| 密码 | SSH连接密码,可选 |
| 采集器 | 配置此监控使用哪台采集器调度采集 |
| 监控周期 | 监控周期性采集数据间隔时间,单位秒,可设置的最小间隔为30秒 |
| 绑定标签 | 用于对监控资源进行分类管理 |
| 描述备注 | 更多标识和描述此监控的备注信息,用户可以在这里备注信息 |
| 私钥 | 连接服务器所需的私钥 |
| 密钥短语 | 用于加密 SSH 私钥的密码短语(Passphrase)。如果私钥在生成时设置了密码短语,则必须填写此字段才能解密并使用私钥进行认证。 |
| 代理主机 | 代理服务器的地址,支持 IPV4、IPV6或域名。若使用 SSH 代理跳转访问目标主机,需填写代理服务器的地址。 |
| 代理端口 | 代理服务器的端口号,默认为22。 |
| 代理用户名 | 连接代理服务器时所需的认证用户名。 |
| 代理密码 | 连接代理服务器时所需的认证密码。 |
| 代理主机私钥 | 连接代理服务器时所需的私钥。 |
| 参数名称 | 参数帮助描述 |
|--------|------------------------------------------------------|
| 监控Host | 被监控的对端IPV4,IPV6或域名。注意⚠️不带协议头(eg: https://, http://)。 |
| 任务名称 | 标识此监控的名称,名称需要保证唯一性。 |
| 端口 | Linux SSH对外提供的端口,默认为22。 |
| 用户名 | SSH连接用户名,可选 |
| 密码 | SSH连接密码,可选 |
| 采集间隔 | 监控周期性采集数据间隔时间,单位秒,可设置的最小间隔为30秒 |
| 是否探测 | 新增监控前是否先探测检查监控可用性,探测成功才会继续新增修改操作 |
| 描述备注 | 更多标识和描述此监控的备注信息,用户可以在这里备注信息 |
### 采集指标
#### 指标集合:系统基本信息
#### 指标集合:basic
| 指标名称 | 指标单位 | 指标帮助描述 |
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------|------|--------|
| hostname | 无 | 主机名称 |
| version | 无 | 操作系统版本 |
| uptime | 无 | 启动时间 |
| uptime | 无 | 系统运行时间 |
#### 指标集合:CPU 信息
#### 指标集合:cpu
| 指标名称 | 指标单位 | 指标帮助描述 |
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------------|------|--------------------|
| info | 无 | CPU型号 |
| cores | | CPU内核数量 |
| interrupt | | CPU中断数量 |
| cores | 核数 | CPU内核数量 |
| interrupt | 个数 | CPU中断数量 |
| load | 无 | CPU最近1/5/15分钟的平均负载 |
| context_switch | | 当前上下文切换数量 |
| context_switch | 个数 | 当前上下文切换数量 |
| usage | % | CPU使用率 |
#### 指标集合:内存信息
#### 指标集合:memory
| 指标名称 | 指标单位 | 指标帮助描述 |
|------------|------|----------|
@@ -63,25 +52,25 @@ keywords: [开源监控系统, 开源操作系统监控, CentOS操作系统监
| available | Mb | 剩余可用内存容量 |
| usage | % | 内存使用率 |
#### 指标集合:磁盘信息
#### 指标集合:disk
| 指标名称 | 指标单位 | 指标帮助描述 |
|---------------|------|-----------|
| disk_num | | 磁盘总数 |
| partition_num | | 分区总数 |
| block_write | | 写入磁盘的总块数 |
| block_read | | 从磁盘读出的块数 |
| disk_num | 块数 | 磁盘总数 |
| partition_num | 分区数 | 分区总数 |
| block_write | 块数 | 写入磁盘的总块数 |
| block_read | 块数 | 从磁盘读出的块数 |
| write_rate | iops | 每秒写磁盘块的速率 |
#### 指标集合:网卡信息
#### 指标集合:interface
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------------|------|---------------|
| interface_name | 无 | 网卡名称 |
| receive_bytes | Byte | 入站数据流量(bytes) |
| transmit_bytes | Byte | 出站数据流量(bytes) |
| receive_bytes | byte | 入站数据流量(bytes) |
| transmit_bytes | byte | 出站数据流量(bytes) |
#### 指标集合:文件系统
#### 指标集合:disk_free
| 指标名称 | 指标单位 | 指标帮助描述 |
|------------|------|---------|
@@ -90,25 +79,3 @@ keywords: [开源监控系统, 开源操作系统监控, CentOS操作系统监
| available | Mb | 可用磁盘大小 |
| usage | % | 使用率 |
| mounted | 无 | 挂载点目录 |
#### 指标集合:Top10 CPU进程
统计进程使用CPU的Top10进程。统计信息包括:进程ID、CPU占用率、内存占用率、执行命令。
| 指标名称 | 指标单位 | 指标帮助描述 |
|-----------|------|--------|
| pid | 无 | 进程ID |
| cpu_usage | % | CPU占用率 |
| mem_usage | % | 内存占用率 |
| command | 无 | 执行命令 |
#### 指标集合:Top10 内存进程
统计进程使用内存的Top10进程。统计信息包括:进程ID、内存占用率、CPU占用率、执行命令。
| 指标名称 | 指标单位 | 指标帮助描述 |
|-----------|------|--------|
| pid | 无 | 进程ID |
| mem_usage | % | 内存占用率 |
| cpu_usage | % | CPU占用率 |
| command | 无 | 执行命令 |
@@ -1,6 +1,6 @@
---
id: debian
title: 监控:Debian 系统监控
title: 监控:debian 系统监控
sidebar_label: Debian 操作系统
keywords: [开源监控系统, 操作系统监控, Debian监控]
---
@@ -9,106 +9,93 @@ keywords: [开源监控系统, 操作系统监控, Debian监控]
## 配置参数
| 参数名称 | 参数帮助描述 |
|--------|---------------------------------------------------------------------|
| 监控Host | 被监控的对端IPV4,IPV6或域名。注意⚠️不带协议头(eg: https://, http://)。 |
| 任务名称 | 标识此监控的名称,名称需要保证唯一性。 |
| 端口 | Linux SSH对外提供的端口,默认为22。 |
| 超时时间 | 设置连接的超时时间,单位ms毫秒,默认6000毫秒。 |
| 复用连接 | 设置SSH连接是否复用,默认为:false。为false每次获取信息都会创建一个连接 |
| 使用代理 | 设置是否通过代理连接,默认为false。 |
| 用户名 | SSH连接用户名,可选 |
| 密码 | SSH连接密码,可选 |
| 采集器 | 配置此监控使用哪台采集器调度采集 |
| 监控周期 | 监控周期性采集数据间隔时间,单位秒,可设置的最小间隔为30秒 |
| 绑定标签 | 用于对监控资源进行分类管理 |
| 描述备注 | 更多标识和描述此监控的备注信息,用户可以在这里备注信息 |
| 私钥 | 连接服务器所需的私钥 |
| 密钥短语 | 用于加密 SSH 私钥的密码短语(Passphrase)。如果私钥在生成时设置了密码短语,则必须填写此字段才能解密并使用私钥进行认证。 |
| 代理主机 | 代理服务器的地址,支持 IPV4、IPV6或域名。若使用 SSH 代理跳转访问目标主机,需填写代理服务器的地址。 |
| 代理端口 | 代理服务器的端口号。 |
| 代理用户名 | 连接代理服务器时所需的认证用户名。 |
| 代理密码 | 连接代理服务器时所需的认证密码。 |
| 代理主机私钥 | 连接代理服务器时所需的私钥。 |
| 参数名称 | 参数帮助描述 |
|--------|------------------------------------------------------|
| 目标Host | 被监控的对端IPV4,IPV6或域名。注意⚠️不带协议头(eg: https://, http://)。 |
| 任务名称 | 标识此监控的名称,名称需要保证唯一性。 |
| 端口 | Debian系统的ssh端口,默认: 22 |
| 超时时间 | 设置连接的超时时间,单位ms毫秒,默认6000毫秒。 |
| 复用连接 | 设置SSH连接是否复用,默认为:false。为false每次回去信息都会创建一个连接 |
| 用户名 | 服务器用户名 |
| 密码 | 服务器密码 |
| 采集器 | 配置此监控使用哪台采集器调度采集 |
| 监控周期 | 监控周期性采集数据间隔时间,单位秒,可设置的最小间隔为30秒 |
| 绑定标签 | 用于对监控资源进行分类管理 |
| 描述备注 | 更多标识和描述此监控的备注信息,用户可以在这里备注信息 |
| 密钥 | 连接服务器所需密钥 |
### 采集指标
#### 指标集合:系统基本信息
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------|------|--------|
| hostname | 无 | 主机名称 |
| version | 无 | 操作系统版本 |
| uptime | 无 | 启动时间 |
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------------|------|--------|
| Host Name | 无 | 主机名称 |
| System Version | 无 | 操作系统版本 |
| Uptime | 无 | 启动时间 |
#### 指标集合:CPU 信息
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------------|------|--------------------|
| info | 无 | CPU型号 |
| cores | 无 | CPU内核数量 |
| interrupt | 无 | CPU中断数量 |
| load | 无 | CPU最近1/5/15分钟的平均负载 |
| context_switch | 无 | 当前上下文切换数量 |
| usage | % | CPU使用率 |
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------------|------|--------|
| Info | 无 | 型号 |
| Cores | 无 | 核数 |
| Interrupt | 无 | 中断数 |
| Load | 无 | 负载 |
| Context Switch | 无 | 上下文切换 |
| Usage | % | 使用率 |
#### 指标集合:内存信息
| 指标名称 | 指标单位 | 指标帮助描述 |
|------------|------|----------|
| total | Mb | 总内存容量 |
| used | Mb | 用户程序内存量 |
| free | Mb | 空闲内存容量 |
| buff_cache | Mb | 缓存占用内存 |
| available | Mb | 剩余可用内存容量 |
| usage | % | 内存使用率 |
| 指标名称 | 指标单位 | 指标帮助描述 |
|---------------------|------|---------|
| Total Memory | Mb | 总内存容量 |
| User Program Memory | Mb | 用户程序内存量 |
| Free Memory | Mb | 空闲内存容量 |
| Buff Cache Memory | Mb | 缓存占用内存 |
| Available Memory | Mb | 剩余可用内存 |
| Memory Usage | % | 内存使用率 |
#### 指标集合:磁盘信息
| 指标名称 | 指标单位 | 指标帮助描述 |
|---------------|------|-----------|
| disk_num | 无 | 磁盘总数 |
| partition_num | 无 | 分区总数 |
| block_write | 无 | 写磁盘的总块数 |
| block_read | 无 | 磁盘读出的块数 |
| write_rate | iops | 每秒写磁盘块的速率 |
| 指标名称 | 指标单位 | 指标帮助描述 |
|---------------|------|--------|
| Disk Num | 无 | 磁盘总数 |
| Partition Num | 无 | 分区总数 |
| Block Write | 无 | 写磁盘块数 |
| Block Read | 无 | 磁盘块数 |
| Write Rate | iops | 磁盘写速率 |
#### 指标集合:网卡信息
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------------|------|---------------|
| interface_name | 无 | 网卡名称 |
| receive_bytes | Byte | 入站数据流量(bytes) |
| transmit_bytes | Byte | 出站数据流量(bytes) |
统计所有网卡的网卡名称、入站数据流量、出站数据流量。
单位:Mb
#### 指标集合:文件系统
| 指标名称 | 指标单位 | 指标帮助描述 |
|------------|------|---------|
| filesystem | 无 | 文件系统的名称 |
| used | Mb | 已使用磁盘大小 |
| available | Mb | 可用磁盘大小 |
| usage | % | 使用率 |
| mounted | 无 | 挂载点目录 |
统计所有挂载的文件系统的使用情况。统计信息包括:文件系统、已使用量、可用量、使用率、挂载点。
单位:
- 已使用量:Mb
- 可用量:Mb
- 使用率:%
#### 指标集合:Top10 CPU进程
统计进程使用CPU的Top10进程。统计信息包括:进程ID、CPU占用率、内存占用率、执行命令。
| 指标名称 | 指标单位 | 指标帮助描述 |
|-----------|------|--------|
| pid | 无 | 进程ID |
| cpu_usage | % | CPU占用率 |
| mem_usage | % | 内存占用率 |
| command | 无 | 执行命令 |
单位:
- CPU占用率:%
- 内存占用率%
#### 指标集合:Top10 内存进程
统计进程使用内存的Top10进程。统计信息包括:进程ID、内存占用率、CPU占用率、执行命令。
| 指标名称 | 指标单位 | 指标帮助描述 |
|-----------|------|--------|
| pid | 无 | 进程ID |
| mem_usage | % | 内存占用率 |
| cpu_usage | % | CPU占用率 |
| command | 无 | 执行命令 |
单位:
- 内存占用率:%
- CPU占用率:%
@@ -9,41 +9,34 @@ keywords: [ 开源监控系统, 开源操作系统监控, EulerOS操作系统监
### 配置参数
| 参数名称 | 参数帮助描述 |
|--------|---------------------------------------------------------------------|
| 监控Host | 被监控的对端IPV4,IPV6或域名。注意⚠️不带协议头(eg: https://, http://)。 |
| 任务名称 | 标识此监控的名称,名称需要保证唯一性。 |
| 端口 | Linux SSH对外提供的端口,默认为22。 |
| 超时时间 | 设置连接的超时时间,单位ms毫秒,默认6000毫秒。 |
| 复用连接 | 设置SSH连接是否复用,默认为:false。为false每次获取信息都会创建一个连接 |
| 使用代理 | 设置是否通过代理连接,默认为false。 |
| 用户名 | SSH连接用户名,可选 |
| 密码 | SSH连接密码,可选 |
| 采集器 | 配置此监控使用哪台采集器调度采集 |
| 监控周期 | 监控周期性采集数据间隔时间,单位秒,可设置的最小间隔为30秒 |
| 绑定标签 | 用于对监控资源进行分类管理 |
| 描述备注 | 更多标识和描述此监控的备注信息,用户可以在这里备注信息 |
| 私钥 | 连接服务器所需的私钥 |
| 密钥短语 | 用于加密 SSH 私钥的密码短语(Passphrase)。如果私钥在生成时设置了密码短语,则必须填写此字段才能解密并使用私钥进行认证。 |
| 代理主机 | 代理服务器的地址,支持 IPV4、IPV6或域名。若使用 SSH 代理跳转访问目标主机,需填写代理服务器的地址。 |
| 代理端口 | 代理服务器的端口号。 |
| 代理用户名 | 连接代理服务器时所需的认证用户名。 |
| 代理密码 | 连接代理服务器时所需的认证密码。 |
| 代理主机私钥 | 连接代理服务器时所需的私钥。 |
| 参数名称 | 参数帮助描述 |
|--------|------------------------------------------------------|
| 监控Host | 被监控的对端IPV4,IPV6或域名。注意⚠️不带协议头(eg: https://, http://)。 |
| 任务名称 | 标识此监控的名称,名称需要保证唯一性。 |
| 端口 | Linux SSH对外提供的端口,默认为22。 |
| 超时时间 | 设置连接的超时时间,单位ms毫秒,默认6000毫秒。 |
| 复用连接 | 设置SSH连接是否复用,默认为:false。为false每次获取信息都会创建一个连接 |
| 用户名 | SSH连接用户名,可选。 |
| 密码 | SSH连接密码,可选。 |
| 采集器 | 配置此监控使用哪台采集器调度采集。 |
| 监控周期 | 监控周期性采集数据间隔时间,单位秒,可设置的最小间隔为30秒。 |
| 绑定标签 | 用于对监控资源进行分类管理。 |
| 描述备注 | 更多标识和描述此监控的备注信息,用户可以在这里备注信息。 |
| 密钥 | 连接服务器所需密钥。 |
### 采集指标
#### 指标集合:系统基本信息
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------|------|--------|
| hostname | 无 | 主机名称 |
| version | 无 | 操作系统版本 |
| uptime | 无 | 启动时间 |
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------------|------|--------|
| Host Name | 无 | 主机名称 |
| System Version | 无 | 操作系统版本 |
| Uptime | 无 | 启动时间 |
#### 指标集合:CPU 信息
| 指标名称 | 指标单位 | 指标帮助描述 |
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------------|------|--------------------|
| info | 无 | CPU型号 |
| cores | 无 | CPU内核数量 |
@@ -75,11 +68,11 @@ keywords: [ 开源监控系统, 开源操作系统监控, EulerOS操作系统监
#### 指标集合:网卡信息
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------------|------|---------------|
| interface_name | 无 | 网卡名称 |
| receive_bytes | Byte | 入站数据流量(bytes) |
| transmit_bytes | Byte | 出站数据流量(bytes) |
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------------|------|--------|
| interface_name | 无 | 网卡名称 |
| receive_bytes | Mb | 入站数据流量 |
| transmit_bytes | Mb | 出站数据流量 |
#### 指标集合:文件系统
@@ -1,114 +0,0 @@
---
id: fedora
title: 监控:Fedora操作系统监控
sidebar_label: Fedora 操作系统
keywords: [ 开源监控系统, 开源操作系统监控, Fedora操作系统监控 ]
---
> 对Fedora操作系统的通用性能指标 (系统信息、CPU、内存、磁盘、网卡、文件系统、TOP资源进程等) 进行采集监控。
### 配置参数
| 参数名称 | 参数帮助描述 |
|--------|---------------------------------------------------------------------|
| 监控Host | 被监控的对端IPV4,IPV6或域名。注意⚠️不带协议头(eg: https://, http://)。 |
| 任务名称 | 标识此监控的名称,名称需要保证唯一性。 |
| 端口 | Linux SSH对外提供的端口,默认为22。 |
| 超时时间 | 设置连接的超时时间,单位ms毫秒,默认6000毫秒。 |
| 复用连接 | 设置SSH连接是否复用,默认为:false。为false每次获取信息都会创建一个连接 |
| 使用代理 | 设置是否通过代理连接,默认为false。 |
| 用户名 | SSH连接用户名,可选 |
| 密码 | SSH连接密码,可选 |
| 采集器 | 配置此监控使用哪台采集器调度采集 |
| 监控周期 | 监控周期性采集数据间隔时间,单位秒,可设置的最小间隔为30秒 |
| 绑定标签 | 用于对监控资源进行分类管理 |
| 描述备注 | 更多标识和描述此监控的备注信息,用户可以在这里备注信息 |
| 私钥 | 连接服务器所需的私钥 |
| 密钥短语 | 用于加密 SSH 私钥的密码短语(Passphrase)。如果私钥在生成时设置了密码短语,则必须填写此字段才能解密并使用私钥进行认证。 |
| 代理主机 | 代理服务器的地址,支持 IPV4、IPV6或域名。若使用 SSH 代理跳转访问目标主机,需填写代理服务器的地址。 |
| 代理端口 | 代理服务器的端口号,默认为22。 |
| 代理用户名 | 连接代理服务器时所需的认证用户名。 |
| 代理密码 | 连接代理服务器时所需的认证密码。 |
| 代理主机私钥 | 连接代理服务器时所需的私钥。 |
### 采集指标
#### 指标集合:系统基本信息
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------|------|--------|
| hostname | 无 | 主机名称 |
| version | 无 | 操作系统版本 |
| uptime | 无 | 启动时间 |
#### 指标集合:CPU 信息
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------------|------|--------------------|
| info | 无 | CPU型号 |
| cores | 无 | CPU内核数量 |
| interrupt | 无 | CPU中断数量 |
| load | 无 | CPU最近1/5/15分钟的平均负载 |
| context_switch | 无 | 当前上下文切换数量 |
| usage | % | CPU使用率 |
#### 指标集合:内存信息
| 指标名称 | 指标单位 | 指标帮助描述 |
|------------|------|----------|
| total | Mb | 总内存容量 |
| used | Mb | 用户程序内存量 |
| free | Mb | 空闲内存容量 |
| buff_cache | Mb | 缓存占用内存 |
| available | Mb | 剩余可用内存容量 |
| usage | % | 内存使用率 |
#### 指标集合:磁盘信息
| 指标名称 | 指标单位 | 指标帮助描述 |
|---------------|------|-----------|
| disk_num | 无 | 磁盘总数 |
| partition_num | 无 | 分区总数 |
| block_write | 无 | 写入磁盘的总块数 |
| block_read | 无 | 从磁盘读出的块数 |
| write_rate | iops | 每秒写磁盘块的速率 |
#### 指标集合:网卡信息
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------------|------|---------------|
| interface_name | 无 | 网卡名称 |
| receive_bytes | Byte | 入站数据流量(bytes) |
| transmit_bytes | Byte | 出站数据流量(bytes) |
#### 指标集合:文件系统
| 指标名称 | 指标单位 | 指标帮助描述 |
|------------|------|---------|
| filesystem | 无 | 文件系统的名称 |
| used | Mb | 已使用磁盘大小 |
| available | Mb | 可用磁盘大小 |
| usage | % | 使用率 |
| mounted | 无 | 挂载点目录 |
#### 指标集合:Top10 CPU进程
统计进程使用CPU的Top10进程。统计信息包括:进程ID、CPU占用率、内存占用率、执行命令。
| 指标名称 | 指标单位 | 指标帮助描述 |
|-----------|------|--------|
| pid | 无 | 进程ID |
| cpu_usage | % | CPU占用率 |
| mem_usage | % | 内存占用率 |
| command | 无 | 执行命令 |
#### 指标集合:Top10 内存进程
统计进程使用内存的Top10进程。统计信息包括:进程ID、内存占用率、CPU占用率、执行命令。
| 指标名称 | 指标单位 | 指标帮助描述 |
|-----------|------|--------|
| pid | 无 | 进程ID |
| mem_usage | % | 内存占用率 |
| cpu_usage | % | CPU占用率 |
| command | 无 | 执行命令 |
@@ -9,59 +9,50 @@ keywords: [ 开源监控系统, 开源操作系统监控, FreeBSD操作系统监
### 配置参数
| 参数名称 | 参数帮助描述 |
|--------|---------------------------------------------------------------------|
| 监控Host | 被监控的对端IPV4,IPV6或域名。注意⚠️不带协议头(eg: https://, http://)。 |
| 任务名称 | 标识此监控的名称,名称需要保证唯一性。 |
| 端口 | Linux SSH对外提供的端口,默认为22。 |
| 超时时间 | 设置连接的超时时间,单位ms毫秒,默认6000毫秒。 |
| 复用连接 | 设置SSH连接是否复用,默认为:false。为false每次获取信息都会创建一个连接 |
| 使用代理 | 设置是否通过代理连接,默认为false。 |
| 用户名 | SSH连接用户名,可选 |
| 密码 | SSH连接密码,可选 |
| 采集器 | 配置此监控使用哪台采集器调度采集 |
| 监控周期 | 监控周期性采集数据间隔时间,单位秒,可设置的最小间隔为30秒 |
| 绑定标签 | 用于对监控资源进行分类管理 |
| 描述备注 | 更多标识和描述此监控的备注信息,用户可以在这里备注信息 |
| 私钥 | 连接服务器所需的私钥 |
| 密钥短语 | 用于加密 SSH 私钥的密码短语(Passphrase)。如果私钥在生成时设置了密码短语,则必须填写此字段才能解密并使用私钥进行认证。 |
| 代理主机 | 代理服务器的地址,支持 IPV4、IPV6或域名。若使用 SSH 代理跳转访问目标主机,需填写代理服务器的地址。 |
| 代理端口 | 代理服务器的端口号,默认为22。 |
| 代理用户名 | 连接代理服务器时所需的认证用户名。 |
| 代理密码 | 连接代理服务器时所需的认证密码。 |
| 代理主机私钥 | 连接代理服务器时所需的私钥。 |
| 参数名称 | 参数帮助描述 |
|--------|------------------------------------------------------|
| 监控Host | 被监控的对端IPV4,IPV6或域名。注意⚠️不带协议头(eg: https://, http://)。 |
| 任务名称 | 标识此监控的名称,名称需要保证唯一性。 |
| 端口 | Linux SSH对外提供的端口,默认为22。 |
| 超时时间 | 设置连接的超时时间,单位ms毫秒,默认6000毫秒。 |
| 复用连接 | 设置SSH连接是否复用,默认为:false。为false每次获取信息都会创建一个连接 |
| 用户名 | SSH连接用户名,可选。 |
| 密码 | SSH连接密码,可选。 |
| 采集器 | 配置此监控使用哪台采集器调度采集。 |
| 监控周期 | 监控周期性采集数据间隔时间,单位秒,可设置的最小间隔为30秒。 |
| 绑定标签 | 用于对监控资源进行分类管理。 |
| 描述备注 | 更多标识和描述此监控的备注信息,用户可以在这里备注信息。 |
| 密钥 | 连接服务器所需密钥。 |
### 采集指标
#### 指标集合:系统基本信息
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------|------|--------|
| hostname | 无 | 主机名称 |
| version | 无 | 操作系统版本 |
| uptime | 无 | 启动时间 |
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------------|------|--------|
| Host Name | 无 | 主机名称 |
| System Version | 无 | 操作系统版本 |
| Uptime | 无 | 启动时间 |
#### 指标集合:CPU 信息
| 指标名称 | 指标单位 | 指标帮助描述 |
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------------|------|--------------------|
| info | 无 | CPU型号 |
| cores | | CPU内核数量 |
| interrupt | | CPU中断数量 |
| cores | 核数 | CPU内核数量 |
| interrupt | 个数 | CPU中断数量 |
| load | 无 | CPU最近1/5/15分钟的平均负载 |
| context_switch | | 当前上下文切换数量 |
| context_switch | 个数 | 当前上下文切换数量 |
| usage | % | CPU使用率 |
#### 指标集合:内存信息
| 指标名称 | 指标单位 | 指标帮助描述 |
|------------|------|----------|
| total | Mb | 总内存容量 |
| used | Mb | 用户程序内存量 |
| free | Mb | 空闲内存容量 |
| buff_cache | Mb | 缓存占用内存 |
| available | Mb | 剩余可用内存容量 |
| usage | % | 内存使用率 |
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------|------|---------|
| physmem | Mb | 物理内存 |
| usermem | Mb | 用户程序内存量 |
| realmem | Mb | 实际内存 |
| availmem | Mb | 用内存 |
#### 指标集合:文件系统
@@ -9,50 +9,39 @@ keywords: [开源监控系统, 开源操作系统监控, Linux操作系统监控
### 配置参数
| 参数名称 | 参数帮助描述 |
|--------|---------------------------------------------------------------------|
| 监控Host | 被监控的对端IPV4,IPV6或域名。注意⚠️不带协议头(eg: https://, http://)。 |
| 任务名称 | 标识此监控的名称,名称需要保证唯一性。 |
| 端口 | Linux SSH对外提供的端口,默认为22。 |
| 超时时间 | 设置连接的超时时间,单位ms毫秒,默认6000毫秒。 |
| 复用连接 | 设置SSH连接是否复用,默认为:false。为false每次获取信息都会创建一个连接 |
| 使用代理 | 设置是否通过代理连接,默认为false。 |
| 用户名 | SSH连接用户名,可选 |
| 密码 | SSH连接密码,可选 |
| 采集器 | 配置此监控使用哪台采集器调度采集 |
| 监控周期 | 监控周期性采集数据间隔时间,单位秒,可设置的最小间隔为30秒 |
| 绑定标签 | 用于对监控资源进行分类管理 |
| 描述备注 | 更多标识和描述此监控的备注信息,用户可以在这里备注信息 |
| 私钥 | 连接服务器所需的私钥 |
| 密钥短语 | 用于加密 SSH 私钥的密码短语(Passphrase)。如果私钥在生成时设置了密码短语,则必须填写此字段才能解密并使用私钥进行认证。 |
| 代理主机 | 代理服务器的地址,支持 IPV4、IPV6或域名。若使用 SSH 代理跳转访问目标主机,需填写代理服务器的地址。 |
| 代理端口 | 代理服务器的端口号,默认为22。 |
| 代理用户名 | 连接代理服务器时所需的认证用户名。 |
| 代理密码 | 连接代理服务器时所需的认证密码。 |
| 代理主机私钥 | 连接代理服务器时所需的私钥。 |
| 参数名称 | 参数帮助描述 |
|--------|------------------------------------------------------|
| 监控Host | 被监控的对端IPV4,IPV6或域名。注意⚠️不带协议头(eg: https://, http://)。 |
| 任务名称 | 标识此监控的名称,名称需要保证唯一性。 |
| 端口 | Linux SSH对外提供的端口,默认为22。 |
| 用户名 | SSH连接用户名,可选 |
| 密码 | SSH连接密码,可选 |
| 采集间隔 | 监控周期性采集数据间隔时间,单位秒,可设置的最小间隔为30秒 |
| 是否探测 | 新增监控前是否先探测检查监控可用性,探测成功才会继续新增修改操作 |
| 描述备注 | 更多标识和描述此监控的备注信息,用户可以在这里备注信息 |
### 采集指标
#### 指标集合:系统基本信息
#### 指标集合:basic
| 指标名称 | 指标单位 | 指标帮助描述 |
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------|------|--------|
| hostname | 无 | 主机名称 |
| version | 无 | 操作系统版本 |
| uptime | 无 | 启动时间 |
| uptime | 无 | 系统运行时间 |
#### 指标集合:CPU 信息
#### 指标集合:cpu
| 指标名称 | 指标单位 | 指标帮助描述 |
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------------|------|--------------------|
| info | 无 | CPU型号 |
| cores | | CPU内核数量 |
| interrupt | | CPU中断数量 |
| cores | 核数 | CPU内核数量 |
| interrupt | 个数 | CPU中断数量 |
| load | 无 | CPU最近1/5/15分钟的平均负载 |
| context_switch | | 当前上下文切换数量 |
| context_switch | 个数 | 当前上下文切换数量 |
| usage | % | CPU使用率 |
#### 指标集合:内存信息
#### 指标集合:memory
| 指标名称 | 指标单位 | 指标帮助描述 |
|------------|------|----------|
@@ -63,25 +52,25 @@ keywords: [开源监控系统, 开源操作系统监控, Linux操作系统监控
| available | Mb | 剩余可用内存容量 |
| usage | % | 内存使用率 |
#### 指标集合:磁盘信息
#### 指标集合:disk
| 指标名称 | 指标单位 | 指标帮助描述 |
|---------------|------|-----------|
| disk_num | | 磁盘总数 |
| partition_num | | 分区总数 |
| block_write | | 写入磁盘的总块数 |
| block_read | | 从磁盘读出的块数 |
| disk_num | 块数 | 磁盘总数 |
| partition_num | 分区数 | 分区总数 |
| block_write | 块数 | 写入磁盘的总块数 |
| block_read | 块数 | 从磁盘读出的块数 |
| write_rate | iops | 每秒写磁盘块的速率 |
#### 指标集合:网卡信息
#### 指标集合:interface
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------------|------|---------------|
| interface_name | 无 | 网卡名称 |
| receive_bytes | Byte | 入站数据流量(bytes) |
| transmit_bytes | Byte | 出站数据流量(bytes) |
| receive_bytes | byte | 入站数据流量(bytes) |
| transmit_bytes | byte | 出站数据流量(bytes) |
#### 指标集合:文件系统
#### 指标集合:disk_free
| 指标名称 | 指标单位 | 指标帮助描述 |
|------------|------|---------|
@@ -90,25 +79,3 @@ keywords: [开源监控系统, 开源操作系统监控, Linux操作系统监控
| available | Mb | 可用磁盘大小 |
| usage | % | 使用率 |
| mounted | 无 | 挂载点目录 |
#### 指标集合:Top10 CPU进程
统计进程使用CPU的Top10进程。统计信息包括:进程ID、CPU占用率、内存占用率、执行命令。
| 指标名称 | 指标单位 | 指标帮助描述 |
|-----------|------|--------|
| pid | 无 | 进程ID |
| cpu_usage | % | CPU占用率 |
| mem_usage | % | 内存占用率 |
| command | 无 | 执行命令 |
#### 指标集合:Top10 内存进程
统计进程使用内存的Top10进程。统计信息包括:进程ID、内存占用率、CPU占用率、执行命令。
| 指标名称 | 指标单位 | 指标帮助描述 |
|-----------|------|--------|
| pid | 无 | 进程ID |
| mem_usage | % | 内存占用率 |
| cpu_usage | % | CPU占用率 |
| command | 无 | 执行命令 |
@@ -9,47 +9,40 @@ keywords: [开源监控系统, 开源操作系统监控, OpenSUSE操作系统监
### 配置参数
| 参数名称 | 参数帮助描述 |
|--------|---------------------------------------------------------------------|
| 监控Host | 被监控的对端IPV4,IPV6或域名。注意⚠️不带协议头(eg: https://, http://)。 |
| 任务名称 | 标识此监控的名称,名称需要保证唯一性。 |
| 端口 | Linux SSH对外提供的端口,默认为22。 |
| 超时时间 | 设置连接的超时时间,单位ms毫秒,默认6000毫秒。 |
| 复用连接 | 设置SSH连接是否复用,默认为:false。为false每次获取信息都会创建一个连接 |
| 使用代理 | 设置是否通过代理连接,默认为false。 |
| 用户名 | SSH连接用户名,可选 |
| 密码 | SSH连接密码,可选 |
| 采集器 | 配置此监控使用哪台采集器调度采集 |
| 监控周期 | 监控周期性采集数据间隔时间,单位秒,可设置的最小间隔为30秒 |
| 绑定标签 | 用于对监控资源进行分类管理 |
| 描述备注 | 更多标识和描述此监控的备注信息,用户可以在这里备注信息 |
| 私钥 | 连接服务器所需的私钥 |
| 密钥短语 | 用于加密 SSH 私钥的密码短语(Passphrase)。如果私钥在生成时设置了密码短语,则必须填写此字段才能解密并使用私钥进行认证。 |
| 代理主机 | 代理服务器的地址,支持 IPV4、IPV6或域名。若使用 SSH 代理跳转访问目标主机,需填写代理服务器的地址。 |
| 代理端口 | 代理服务器的端口号。 |
| 代理用户名 | 连接代理服务器时所需的认证用户名。 |
| 代理密码 | 连接代理服务器时所需的认证密码。 |
| 代理主机私钥 | 连接代理服务器时所需的私钥。 |
| 参数名称 | 参数帮助描述 |
|--------|------------------------------------------------------|
| 监控Host | 被监控的对端IPV4,IPV6或域名。注意⚠️不带协议头(eg: https://, http://)。 |
| 任务名称 | 标识此监控的名称,名称需要保证唯一性。 |
| 端口 | Linux SSH对外提供的端口,默认为22。 |
| 超时时间 | 设置连接的超时时间,单位ms毫秒,默认6000毫秒。 |
| 复用连接 | 设置SSH连接是否复用,默认为:false。为false每次获取信息都会创建一个连接 |
| 用户名 | SSH连接用户名,可选 |
| 密码 | SSH连接密码,可选 |
| 采集器 | 配置此监控使用哪台采集器调度采集 |
| 监控周期 | 监控周期性采集数据间隔时间,单位秒,可设置的最小间隔为30秒 |
| 绑定标签 | 用于对监控资源进行分类管理 |
| 描述备注 | 更多标识和描述此监控的备注信息,用户可以在这里备注信息 |
| 密钥 | 连接服务器所需密钥 |
### 采集指标
#### 指标集合:系统基本信息
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------|------|--------|
| hostname | 无 | 主机名称 |
| version | 无 | 操作系统版本 |
| uptime | 无 | 启动时间 |
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------------|------|--------|
| Host Name | 无 | 主机名称 |
| System Version | 无 | 操作系统版本 |
| Uptime | 无 | 启动时间 |
#### 指标集合:CPU 信息
| 指标名称 | 指标单位 | 指标帮助描述 |
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------------|------|--------------------|
| info | 无 | CPU型号 |
| cores | | CPU内核数量 |
| interrupt | | CPU中断数量 |
| cores | 核数 | CPU内核数量 |
| interrupt | 个数 | CPU中断数量 |
| load | 无 | CPU最近1/5/15分钟的平均负载 |
| context_switch | | 当前上下文切换数量 |
| context_switch | 个数 | 当前上下文切换数量 |
| usage | % | CPU使用率 |
#### 指标集合:内存信息
@@ -67,19 +60,19 @@ keywords: [开源监控系统, 开源操作系统监控, OpenSUSE操作系统监
| 指标名称 | 指标单位 | 指标帮助描述 |
|---------------|------|-----------|
| disk_num | | 磁盘总数 |
| partition_num | | 分区总数 |
| block_write | | 写入磁盘的总块数 |
| block_read | | 从磁盘读出的块数 |
| disk_num | 块数 | 磁盘总数 |
| partition_num | 分区数 | 分区总数 |
| block_write | 块数 | 写入磁盘的总块数 |
| block_read | 块数 | 从磁盘读出的块数 |
| write_rate | iops | 每秒写磁盘块的速率 |
#### 指标集合:网卡信息
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------------|------|---------------|
| interface_name | 无 | 网卡名称 |
| receive_bytes | Byte | 入站数据流量(bytes) |
| transmit_bytes | Byte | 出站数据流量(bytes) |
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------------|------|--------|
| interface_name | 无 | 网卡名称 |
| receive_bytes | Mb | 入站数据流量 |
| transmit_bytes | Mb | 出站数据流量 |
#### 指标集合:文件系统
@@ -9,41 +9,34 @@ keywords: [ 开源监控系统, 开源操作系统监控, RedHat操作系统监
### 配置参数
| 参数名称 | 参数帮助描述 |
|--------|---------------------------------------------------------------------|
| 监控Host | 被监控的对端IPV4,IPV6或域名。注意⚠️不带协议头(eg: https://, http://)。 |
| 任务名称 | 标识此监控的名称,名称需要保证唯一性。 |
| 端口 | Linux SSH对外提供的端口,默认为22。 |
| 超时时间 | 设置连接的超时时间,单位ms毫秒,默认6000毫秒。 |
| 复用连接 | 设置SSH连接是否复用,默认为:false。为false每次获取信息都会创建一个连接 |
| 使用代理 | 设置是否通过代理连接,默认为false。 |
| 用户名 | SSH连接用户名,可选 |
| 密码 | SSH连接密码,可选 |
| 采集器 | 配置此监控使用哪台采集器调度采集 |
| 监控周期 | 监控周期性采集数据间隔时间,单位秒,可设置的最小间隔为30秒 |
| 绑定标签 | 用于对监控资源进行分类管理 |
| 描述备注 | 更多标识和描述此监控的备注信息,用户可以在这里备注信息 |
| 私钥 | 连接服务器所需的私钥 |
| 密钥短语 | 用于加密 SSH 私钥的密码短语(Passphrase)。如果私钥在生成时设置了密码短语,则必须填写此字段才能解密并使用私钥进行认证。 |
| 代理主机 | 代理服务器的地址,支持 IPV4、IPV6或域名。若使用 SSH 代理跳转访问目标主机,需填写代理服务器的地址。 |
| 代理端口 | 代理服务器的端口号,默认为22。 |
| 代理用户名 | 连接代理服务器时所需的认证用户名。 |
| 代理密码 | 连接代理服务器时所需的认证密码。 |
| 代理主机私钥 | 连接代理服务器时所需的私钥。 |
| 参数名称 | 参数帮助描述 |
|--------|------------------------------------------------------|
| 监控Host | 被监控的对端IPV4,IPV6或域名。注意⚠️不带协议头(eg: https://, http://)。 |
| 任务名称 | 标识此监控的名称,名称需要保证唯一性。 |
| 端口 | Linux SSH对外提供的端口,默认为22。 |
| 超时时间 | 设置连接的超时时间,单位ms毫秒,默认6000毫秒。 |
| 复用连接 | 设置SSH连接是否复用,默认为:false。为false每次获取信息都会创建一个连接 |
| 用户名 | SSH连接用户名,可选。 |
| 密码 | SSH连接密码,可选。 |
| 采集器 | 配置此监控使用哪台采集器调度采集。 |
| 监控周期 | 监控周期性采集数据间隔时间,单位秒,可设置的最小间隔为30秒。 |
| 绑定标签 | 用于对监控资源进行分类管理。 |
| 描述备注 | 更多标识和描述此监控的备注信息,用户可以在这里备注信息。 |
| 密钥 | 连接服务器所需密钥。 |
### 采集指标
#### 指标集合:系统基本信息
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------|------|--------|
| hostname | 无 | 主机名称 |
| version | 无 | 操作系统版本 |
| uptime | 无 | 启动时间 |
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------------|------|--------|
| Host Name | 无 | 主机名称 |
| System Version | 无 | 操作系统版本 |
| Uptime | 无 | 启动时间 |
#### 指标集合:CPU 信息
| 指标名称 | 指标单位 | 指标帮助描述 |
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------------|------|--------------------|
| info | 无 | CPU型号 |
| cores | 无 | CPU内核数量 |
@@ -75,11 +68,11 @@ keywords: [ 开源监控系统, 开源操作系统监控, RedHat操作系统监
#### 指标集合:网卡信息
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------------|------|---------------|
| interface_name | 无 | 网卡名称 |
| receive_bytes | Byte | 入站数据流量(bytes) |
| transmit_bytes | Byte | 出站数据流量(bytes) |
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------------|------|--------|
| interface_name | 无 | 网卡名称 |
| receive_bytes | Mb | 入站数据流量 |
| transmit_bytes | Mb | 出站数据流量 |
#### 指标集合:文件系统
@@ -9,41 +9,34 @@ keywords: [ 开源监控系统, 开源操作系统监控, Rocky Linux操作系
### 配置参数
| 参数名称 | 参数帮助描述 |
|--------|---------------------------------------------------------------------|
| 监控Host | 被监控的对端IPV4,IPV6或域名。注意⚠️不带协议头(eg: https://, http://)。 |
| 任务名称 | 标识此监控的名称,名称需要保证唯一性。 |
| 端口 | Linux SSH对外提供的端口,默认为22。 |
| 超时时间 | 设置连接的超时时间,单位ms毫秒,默认6000毫秒。 |
| 复用连接 | 设置SSH连接是否复用,默认为:false。为false每次获取信息都会创建一个连接 |
| 使用代理 | 设置是否通过代理连接,默认为false。 |
| 用户名 | SSH连接用户名,可选 |
| 密码 | SSH连接密码,可选 |
| 采集器 | 配置此监控使用哪台采集器调度采集 |
| 监控周期 | 监控周期性采集数据间隔时间,单位秒,可设置的最小间隔为30秒 |
| 绑定标签 | 用于对监控资源进行分类管理 |
| 描述备注 | 更多标识和描述此监控的备注信息,用户可以在这里备注信息 |
| 私钥 | 连接服务器所需的私钥 |
| 密钥短语 | 用于加密 SSH 私钥的密码短语(Passphrase)。如果私钥在生成时设置了密码短语,则必须填写此字段才能解密并使用私钥进行认证。 |
| 代理主机 | 代理服务器的地址,支持 IPV4、IPV6或域名。若使用 SSH 代理跳转访问目标主机,需填写代理服务器的地址。 |
| 代理端口 | 代理服务器的端口号。 |
| 代理用户名 | 连接代理服务器时所需的认证用户名。 |
| 代理密码 | 连接代理服务器时所需的认证密码。 |
| 代理主机私钥 | 连接代理服务器时所需的私钥。 |
| 参数名称 | 参数帮助描述 |
|--------|------------------------------------------------------|
| 监控Host | 被监控的对端IPV4,IPV6或域名。注意⚠️不带协议头(eg: https://, http://)。 |
| 任务名称 | 标识此监控的名称,名称需要保证唯一性。 |
| 端口 | Linux SSH对外提供的端口,默认为22。 |
| 超时时间 | 设置连接的超时时间,单位ms毫秒,默认6000毫秒。 |
| 复用连接 | 设置SSH连接是否复用,默认为:false。为false每次获取信息都会创建一个连接 |
| 用户名 | SSH连接用户名,可选。 |
| 密码 | SSH连接密码,可选。 |
| 采集器 | 配置此监控使用哪台采集器调度采集。 |
| 监控周期 | 监控周期性采集数据间隔时间,单位秒,可设置的最小间隔为30秒。 |
| 绑定标签 | 用于对监控资源进行分类管理。 |
| 描述备注 | 更多标识和描述此监控的备注信息,用户可以在这里备注信息。 |
| 密钥 | 连接服务器所需密钥。 |
### 采集指标
#### 指标集合:系统基本信息
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------|------|--------|
| hostname | 无 | 主机名称 |
| version | 无 | 操作系统版本 |
| uptime | 无 | 启动时间 |
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------------|------|--------|
| Host Name | 无 | 主机名称 |
| System Version | 无 | 操作系统版本 |
| Uptime | 无 | 启动时间 |
#### 指标集合:CPU 信息
| 指标名称 | 指标单位 | 指标帮助描述 |
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------------|------|--------------------|
| info | 无 | CPU型号 |
| cores | 无 | CPU内核数量 |
@@ -75,11 +68,11 @@ keywords: [ 开源监控系统, 开源操作系统监控, Rocky Linux操作系
#### 指标集合:网卡信息
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------------|------|---------------|
| interface_name | 无 | 网卡名称 |
| receive_bytes | Byte | 入站数据流量(bytes) |
| transmit_bytes | Byte | 出站数据流量(bytes) |
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------------|------|--------|
| interface_name | 无 | 网卡名称 |
| receive_bytes | Mb | 入站数据流量 |
| transmit_bytes | Mb | 出站数据流量 |
#### 指标集合:文件系统
@@ -9,50 +9,39 @@ keywords: [开源监控系统, 开源操作系统监控, Ubuntu监控]
### 配置参数
| 参数名称 | 参数帮助描述 |
|--------|---------------------------------------------------------------------|
| 监控Host | 被监控的对端IPV4,IPV6或域名。注意⚠️不带协议头(eg: https://, http://)。 |
| 任务名称 | 标识此监控的名称,名称需要保证唯一性。 |
| 端口 | Linux SSH对外提供的端口,默认为22。 |
| 超时时间 | 设置连接的超时时间,单位ms毫秒,默认6000毫秒。 |
| 复用连接 | 设置SSH连接是否复用,默认为:false。为false每次获取信息都会创建一个连接 |
| 使用代理 | 设置是否通过代理连接,默认为false。 |
| 用户名 | SSH连接用户名,可选 |
| 密码 | SSH连接密码,可选 |
| 采集器 | 配置此监控使用哪台采集器调度采集 |
| 监控周期 | 监控周期性采集数据间隔时间,单位秒,可设置的最小间隔为30秒 |
| 绑定标签 | 用于对监控资源进行分类管理 |
| 描述备注 | 更多标识和描述此监控的备注信息,用户可以在这里备注信息 |
| 私钥 | 连接服务器所需的私钥 |
| 密钥短语 | 用于加密 SSH 私钥的密码短语(Passphrase)。如果私钥在生成时设置了密码短语,则必须填写此字段才能解密并使用私钥进行认证。 |
| 代理主机 | 代理服务器的地址,支持 IPV4、IPV6或域名。若使用 SSH 代理跳转访问目标主机,需填写代理服务器的地址。 |
| 代理端口 | 代理服务器的端口号。 |
| 代理用户名 | 连接代理服务器时所需的认证用户名。 |
| 代理密码 | 连接代理服务器时所需的认证密码。 |
| 代理主机私钥 | 连接代理服务器时所需的私钥。 |
| 参数名称 | 参数帮助描述 |
|--------|------------------------------------------------------|
| 监控Host | 被监控的对端IPV4,IPV6或域名。注意⚠️不带协议头(eg: https://, http://)。 |
| 任务名称 | 标识此监控的名称,名称需要保证唯一性。 |
| 端口 | Linux SSH对外提供的端口,默认为22。 |
| 用户名 | SSH连接用户名,可选 |
| 密码 | SSH连接密码,可选 |
| 采集间隔 | 监控周期性采集数据间隔时间,单位秒,可设置的最小间隔为30秒 |
| 是否探测 | 新增监控前是否先探测检查监控可用性,探测成功才会继续新增修改操作 |
| 描述备注 | 更多标识和描述此监控的备注信息,用户可以在这里备注信息 |
### 采集指标
#### 指标集合:系统基本信息
#### 指标集合:basic
| 指标名称 | 指标单位 | 指标帮助描述 |
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------|------|--------|
| hostname | 无 | 主机名称 |
| version | 无 | 操作系统版本 |
| uptime | 无 | 启动时间 |
| uptime | 无 | 系统运行时间 |
#### 指标集合:CPU 信息
#### 指标集合:cpu
| 指标名称 | 指标单位 | 指标帮助描述 |
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------------|------|--------------------|
| info | 无 | CPU型号 |
| cores | | CPU内核数量 |
| interrupt | | CPU中断数量 |
| cores | 核数 | CPU内核数量 |
| interrupt | 个数 | CPU中断数量 |
| load | 无 | CPU最近1/5/15分钟的平均负载 |
| context_switch | | 当前上下文切换数量 |
| context_switch | 个数 | 当前上下文切换数量 |
| usage | % | CPU使用率 |
#### 指标集合:内存信息
#### 指标集合:memory
| 指标名称 | 指标单位 | 指标帮助描述 |
|------------|------|----------|
@@ -63,25 +52,25 @@ keywords: [开源监控系统, 开源操作系统监控, Ubuntu监控]
| available | Mb | 剩余可用内存容量 |
| usage | % | 内存使用率 |
#### 指标集合:磁盘信息
#### 指标集合:disk
| 指标名称 | 指标单位 | 指标帮助描述 |
|---------------|------|-----------|
| disk_num | | 磁盘总数 |
| partition_num | | 分区总数 |
| block_write | | 写入磁盘的总块数 |
| block_read | | 从磁盘读出的块数 |
| disk_num | 块数 | 磁盘总数 |
| partition_num | 分区数 | 分区总数 |
| block_write | 块数 | 写入磁盘的总块数 |
| block_read | 块数 | 从磁盘读出的块数 |
| write_rate | iops | 每秒写磁盘块的速率 |
#### 指标集合:网卡信息
#### 指标集合:interface
| 指标名称 | 指标单位 | 指标帮助描述 |
|----------------|------|---------------|
| interface_name | 无 | 网卡名称 |
| receive_bytes | Byte | 入站数据流量(bytes) |
| transmit_bytes | Byte | 出站数据流量(bytes) |
| receive_bytes | byte | 入站数据流量(bytes) |
| transmit_bytes | byte | 出站数据流量(bytes) |
#### 指标集合:文件系统
#### 指标集合:disk_free
| 指标名称 | 指标单位 | 指标帮助描述 |
|------------|------|---------|
@@ -90,31 +79,3 @@ keywords: [开源监控系统, 开源操作系统监控, Ubuntu监控]
| available | Mb | 可用磁盘大小 |
| usage | % | 使用率 |
| mounted | 无 | 挂载点目录 |
#### 指标集合:Top10 CPU进程
统计进程使用CPU的Top10进程。统计信息包括:进程ID、CPU占用率、内存占用率、执行命令。
| 指标名称 | 指标单位 | 指标帮助描述 |
|-----------|------|--------|
| pid | 无 | 进程ID |
| cpu_usage | % | CPU占用率 |
| mem_usage | % | 内存占用率 |
| command | 无 | 执行命令 |
#### 指标集合:Top10 内存进程
统计进程使用内存的Top10进程。统计信息包括:进程ID、内存占用率、CPU占用率、执行命令。
| 指标名称 | 指标单位 | 指标帮助描述 |
|-----------|------|--------|
| pid | 无 | 进程ID |
| mem_usage | % | 内存占用率 |
| cpu_usage | % | CPU占用率 |
| command | 无 | 执行命令 |
#### 指标集合:所有核心的平均CPU温度
| 指标名称 | 指标单位 | 指标帮助描述 |
|--------------|------|-----------|
| avg_cpu_temp | C | 所有核心的平均温度 |
@@ -1,18 +1,19 @@
---
id: greptime-init
title: 依赖时序数据库服务 Greptime 安装初始化 (推荐)
sidebar_label: 指标数据存储 Greptime (推荐)
title: 依赖时序数据库服务 GreptimeDB 安装初始化(可选)
sidebar_label: 指标数据存储 GreptimeDB
---
Apache HertzBeat (incubating) 的历史数据存储依赖时序数据库,任选其一安装初始化即可,也可不安装(注意⚠️但强烈建议生产环境配置)
> 我们推荐使用并长期支持 Greptime 作为存储。
> 我们推荐使用并长期支持 VictoriaMetrics 作为存储。
[Greptime](https://github.com/GreptimeTeam/greptimedb) 是一个开源的云原生统一可观测性数据库,用于度量、日志和追踪,支持SQL/PromQL/流式处理。
[GreptimeDB](https://github.com/GreptimeTeam/greptimedb) is an open-source time-series database with a special focus on scalability, analytical capabilities and efficiency.
It's designed to work on infrastructure of the cloud era, and users benefit from its elasticity and commodity storage.
**⚠️ 若不配置时序数据库,则只会留最近一小时历史数据**
### 通过Docker方式安装Greptime
### 通过Docker方式安装GreptimeDB
1. 下载安装Docker环境
Docker 工具自身的下载请参考 [Docker官网文档](https://docs.docker.com/get-docker/)。
@@ -23,7 +24,7 @@ Docker 工具自身的下载请参考 [Docker官网文档](https://docs.docker.c
Docker version 20.10.12, build e91ed57
```
2. Docker安装Greptime
2. Docker安装GreptimeDB
```shell
$ docker run -d -p 127.0.0.1:4000-4003:4000-4003 \
@@ -69,6 +70,6 @@ Docker 工具自身的下载请参考 [Docker官网文档](https://docs.docker.c
### 常见问题
1. 时序数据库是否都需要配置,能不能都用
1. 时序数据库 GreptimeDB 或者 IoTDB 或者 TDengine 是否都需要配置,能不能都用
> 不需要都配置,任选其一即可,用enable参数控制其是否使用,也可都不安装配置,只影响历史图表数据。
@@ -14,7 +14,7 @@ sidebar_label: 交流联系
微信公众号 : 搜索 ID `usthecom`.
[QQ交流群](https://qm.qq.com/q/xxqecSC2cw) : 群号 `1035688434`
[QQ交流群](https://jq.qq.com/?_wv=1027&k=Bud9OzdI) : 群号 `630061200`
[Github Discussion](https://github.com/apache/hertzbeat/discussions)
@@ -13,7 +13,7 @@ slug: /
[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/8139/badge)](https://www.bestpractices.dev/projects/8139)
[![Docker Pulls](https://img.shields.io/docker/pulls/apache/hertzbeat?style=%20for-the-badge&logo=docker&label=DockerHub%20Download)](https://hub.docker.com/r/apache/hertzbeat)
[![Artifact Hub](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/hertzbeat)](https://artifacthub.io/packages/search?repo=hertzbeat)
[![QQ](https://img.shields.io/badge/QQ-1035688434-orange)](https://qm.qq.com/q/FltGGGIX2m)
[![QQ](https://img.shields.io/badge/QQ-630061200-orange)](https://qm.qq.com/q/FltGGGIX2m)
[![YouTube Channel Subscribers](https://img.shields.io/youtube/channel/subscribers/UCri75zfWX0GHqJFPENEbLow?logo=youtube&label=YouTube%20Channel)](https://www.youtube.com/channel/UCri75zfWX0GHqJFPENEbLow)
## 🎡 <font color="green">介绍</font>
-2
View File
@@ -41,7 +41,6 @@
"type": "category",
"label": "change-db",
"items": [
"start/greptime-init",
"start/victoria-metrics-init",
"start/iotdb-init",
"start/influxdb-init",
@@ -181,7 +180,6 @@
"help/redhat",
"help/rockylinux",
"help/euleros",
"help/fedora",
"help/linux_script",
"help/windows_script"
]
+5 -5
View File
@@ -81,11 +81,6 @@
"githubId": "29418975",
"gitUrl": "https://github.com/zhangshenghang",
"name": "Shenghang Zhang"
},
{
"githubId": "30208283",
"gitUrl": "https://github.com/LiuTianyou",
"name": "LiuTianyou"
}
],
"committer" : [
@@ -94,6 +89,11 @@
"gitUrl": "https://github.com/crossoverJie",
"name": "CrossoverJie"
},
{
"githubId": "30208283",
"gitUrl": "https://github.com/LiuTianyou",
"name": "LiuTianyou"
},
{
"githubId": "3371163",
"gitUrl": "https://github.com/kerwin612",
@@ -14,7 +14,7 @@ WeChat Group : Add friend `ahertzbeat` and invite to the group.
WeChat Public : Search ID `usthecom`.
[QQ Group](https://qm.qq.com/q/xxqecSC2cw) : Group num `1035688434`
[QQ Group](https://jq.qq.com/?_wv=1027&k=Bud9OzdI) : Group num `630061200`
[Github Discussion](https://github.com/apache/hertzbeat/discussions)
@@ -13,7 +13,7 @@ slug: /
[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/8139/badge)](https://www.bestpractices.dev/projects/8139)
[![Docker Pulls](https://img.shields.io/docker/pulls/apache/hertzbeat?style=%20for-the-badge&logo=docker&label=DockerHub%20Download)](https://hub.docker.com/r/apache/hertzbeat)
[![Artifact Hub](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/hertzbeat)](https://artifacthub.io/packages/search?repo=hertzbeat)
[![QQ](https://img.shields.io/badge/QQ-1035688434-orange)](https://qm.qq.com/q/FltGGGIX2m)
[![QQ](https://img.shields.io/badge/QQ-630061200-orange)](https://qm.qq.com/q/FltGGGIX2m)
[![YouTube Channel Subscribers](https://img.shields.io/youtube/channel/subscribers/UCri75zfWX0GHqJFPENEbLow?logo=youtube&label=YouTube%20Channel)](https://www.youtube.com/channel/UCri75zfWX0GHqJFPENEbLow)
**Home: [hertzbeat.apache.org](https://hertzbeat.apache.org)**
+4 -2
View File
@@ -358,7 +358,6 @@ The text of each license is the standard Apache 2.0 license.
https://mvnrepository.com/artifact/org.apache.xmlbeans/xmlbeans/3.1.0 Apache-2.0
https://mvnrepository.com/artifact/org.apache.plc4x/plc4j-api/0.12.0 Apache-2.0
https://mvnrepository.com/artifact/org.apache.plc4x/plc4j-driver-modbus/0.12.0 Apache-2.0
https://mvnrepository.com/artifact/org.apache.plc4x/plc4j-driver-s7/0.12.0 Apache-2.0
https://mvnrepository.com/artifact/org.attoparser/attoparser/2.0.7.RELEASE Apache-2.0
https://mvnrepository.com/artifact/org.freemarker/freemarker/2.3.32 Apache-2.0
https://mvnrepository.com/artifact/org.flywaydb/flyway-core/10.11.1
@@ -435,7 +434,10 @@ The text of each license is the standard Apache 2.0 license.
https://mvnrepository.com/artifact/org.webjars/swagger-ui/5.10.3 Apache-2.0
https://mvnrepository.com/artifact/com.google.flatbuffers/flatbuffers-java/1.12.0 Apache-2.0
https://mvnrepository.com/artifact/com.vesoft/client/3.6.0 Apache-2.0
https://mvnrepository.com/artifact/io.opentelemetry.instrumentation/opentelemetry-spring-boot-starter-2.15.0 Apache-2.0
https://mvnrepository.com/artifact/io.opentelemetry/opentelemetry-api/1.49.0 Apache-2.0
https://mvnrepository.com/artifact/io.opentelemetry/opentelemetry-sdk/1.49.0 Apache-2.0
https://mvnrepository.com/artifact/io.opentelemetry/opentelemetry-sdk-logs/1.49.0 Apache-2.0
https://mvnrepository.com/artifact/io.opentelemetry/opentelemetry-exporter-otlp/1.49.0 Apache-2.0
https://mvnrepository.com/artifact/io.opentelemetry.instrumentation/opentelemetry-logback-appender-1.0 Apache-2.0
========================================================================
-1
View File
@@ -358,7 +358,6 @@ The text of each license is the standard Apache 2.0 license.
https://mvnrepository.com/artifact/org.apache.xmlbeans/xmlbeans/3.1.0 Apache-2.0
https://mvnrepository.com/artifact/org.apache.plc4x/plc4j-api/0.12.0 Apache-2.0
https://mvnrepository.com/artifact/org.apache.plc4x/plc4j-driver-modbus/0.12.0 Apache-2.0
https://mvnrepository.com/artifact/org.apache.plc4x/plc4j-driver-s7/0.12.0 Apache-2.0
https://mvnrepository.com/artifact/org.attoparser/attoparser/2.0.7.RELEASE Apache-2.0
https://mvnrepository.com/artifact/org.freemarker/freemarker/2.3.32 Apache-2.0
https://mvnrepository.com/artifact/org.flywaydb/flyway-core/10.11.1
-1
View File
@@ -291,7 +291,6 @@ The text of each license is the standard Apache 2.0 license.
https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-websocket/10.1.19 Apache-2.0
https://mvnrepository.com/artifact/org.apache.plc4x/plc4j-api/0.12.0 Apache-2.0
https://mvnrepository.com/artifact/org.apache.plc4x/plc4j-driver-modbus/0.12.0 Apache-2.0
https://mvnrepository.com/artifact/org.apache.plc4x/plc4j-driver-s7/0.12.0 Apache-2.0
https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator/8.0.1.Final Apache-2.0
https://mvnrepository.com/artifact/org.lz4/lz4-java/1.8.0 Apache-2.0
https://mvnrepository.com/artifact/org.mongodb/mongodb-driver-core/4.6.1 Apache-2.0
+26 -11
View File
@@ -88,14 +88,14 @@
<module>hertzbeat-push</module>
<module>hertzbeat-plugin</module>
<module>hertzbeat-grafana</module>
<module>hertzbeat-otel</module>
<module>hertzbeat-log</module>
<module>hertzbeat-e2e</module>
<module>hertzbeat-base</module>
<module>hertzbeat-mcp</module>
</modules>
<properties>
<hzb.version>1.7.1</hzb.version>
<hzb.version>1.7.0</hzb.version>
<java.version>17</java.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
@@ -175,7 +175,7 @@
<arrow.version>18.1.0</arrow.version>
<snappy-java.version>1.1.10.7</snappy-java.version>
<sshd-sftp.version>2.13.1</sshd-sftp.version>
<opentelemetry-starter.version>2.15.0</opentelemetry-starter.version>
<opentelemetry-api.version>1.43.0</opentelemetry-api.version>
<opentelemetry-logback.version>2.14.0-alpha</opentelemetry-logback.version>
</properties>
@@ -238,7 +238,7 @@
<!-- log -->
<dependency>
<groupId>org.apache.hertzbeat</groupId>
<artifactId>hertzbeat-otel</artifactId>
<artifactId>hertzbeat-log</artifactId>
<version>${hertzbeat.version}</version>
</dependency>
<!-- collector-basic -->
@@ -478,16 +478,31 @@
</dependency>
<!-- OpenTelemetry -->
<dependency>
<groupId>io.opentelemetry.instrumentation</groupId>
<artifactId>opentelemetry-logback-appender-1.0</artifactId>
<version>${opentelemetry-logback.version}</version>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-api</artifactId>
<version>${opentelemetry-api.version}</version>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-sdk</artifactId>
<version>${opentelemetry-api.version}</version>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-sdk-logs</artifactId>
<version>${opentelemetry-api.version}</version>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-exporter-otlp</artifactId>
<version>${opentelemetry-api.version}</version>
</dependency>
<dependency>
<groupId>io.opentelemetry.instrumentation</groupId>
<artifactId>opentelemetry-instrumentation-bom</artifactId>
<version>${opentelemetry-starter.version}</version>
<type>pom</type>
<scope>import</scope>
<artifactId>opentelemetry-logback-appender-1.0</artifactId>
<version>${opentelemetry-logback.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
@@ -63,7 +63,7 @@ services:
- hertzbeat
hertzbeat:
image: apache/hertzbeat:1.7.1
image: apache/hertzbeat:1.7.0
container_name: compose-hertzbeat
hostname: hertzbeat
restart: always
@@ -62,7 +62,7 @@ services:
- hertzbeat
hertzbeat:
image: apache/hertzbeat:1.7.1
image: apache/hertzbeat:1.7.0
container_name: compose-hertzbeat
hostname: hertzbeat
restart: always
@@ -62,7 +62,7 @@ services:
- hertzbeat
hertzbeat:
image: apache/hertzbeat:1.7.1
image: apache/hertzbeat:1.7.0
container_name: compose-hertzbeat
hostname: hertzbeat
restart: always
@@ -65,7 +65,7 @@ services:
- hertzbeat
hertzbeat:
image: apache/hertzbeat:1.7.1
image: apache/hertzbeat:1.7.0
container_name: compose-hertzbeat
hostname: hertzbeat
restart: always
+1 -1
View File
@@ -17,7 +17,7 @@ $gpgKeyId = "********"
# ********************************************************
# Set version and release candidate number
$version = "1.7.1"
$version = "1.7.0"
$rcNumber = "rc1"
# ********************************************************
@@ -10,7 +10,7 @@
<div class="ai-chatbot-window" *ngIf="isChatbotOpen">
<div class="chatbot-header">
<div class="chatbot-title">{{ 'ai.bot.title' | i18n }}</div>
<div class="chatbot-title">AI 助手</div>
<div class="chatbot-close" (click)="toggleChatbot()">X</div>
</div>
<div class="chatbot-messages">
@@ -23,8 +23,8 @@
</div>
</div>
<div class="chatbot-input">
<input nz-input placeholder="{{ 'ai.bot.input.placeholder' | i18n }}" [(ngModel)]="currentMessage" (keyup.enter)="sendMessage()" />
<button nz-button nzType="primary" [disabled]="!currentMessage.trim()" (click)="sendMessage()"> {{ 'ai.bot.send' | i18n }} </button>
<input nz-input placeholder="请输入问题..." [(ngModel)]="currentMessage" (keyup.enter)="sendMessage()" />
<button nz-button nzType="primary" [disabled]="!currentMessage.trim()" (click)="sendMessage()"> 发送 </button>
</div>
</div>
</div>
@@ -107,7 +107,7 @@ import { AiBotService, ChatMessage } from '../../shared/services/ai-bot.service'
d="M12 2a2 2 0 0 1 2 2c0 .74-.4 1.39-1 1.73V7h1a7 7 0 0 1 7 7h1a1 1 0 0 1 1 1v3a1 1 0 0 1-1 1h-1v1a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-1H2a1 1 0 0 1-1-1v-3a1 1 0 0 1 1-1h1a7 7 0 0 1 7-7h1V5.73c-.6-.34-1-.99-1-1.73a2 2 0 0 1 2-2M7.5 13A2.5 2.5 0 0 0 5 15.5A2.5 2.5 0 0 0 7.5 18a2.5 2.5 0 0 0 2.5-2.5A2.5 2.5 0 0 0 7.5 13m9 0a2.5 2.5 0 0 0-2.5 2.5a2.5 2.5 0 0 0 2.5 2.5a2.5 2.5 0 0 0 2.5-2.5a2.5 2.5 0 0 0-2.5-2.5z"
/>
</svg>
{{ 'ai.bot.title' | i18n }}
AI
</div>
<div class="chatbot-controls">
<span class="control-item" (click)="toggleMaximize()" title="{{ isChatbotMaximized ? '还原' : '最大化' }}">
@@ -137,16 +137,8 @@ import { AiBotService, ChatMessage } from '../../shared/services/ai-bot.service'
</div>
</div>
<div class="chatbot-input">
<input
nz-input
placeholder="{{ 'ai.bot.input.placeholder' | i18n }}"
[(ngModel)]="currentMessage"
(keyup.enter)="sendMessage()"
[disabled]="isLoading"
/>
<button nz-button nzType="primary" [disabled]="!currentMessage.trim() || isLoading" (click)="sendMessage()">
{{ 'ai.bot.send' | i18n }}
</button>
<input nz-input placeholder="请输入问题..." [(ngModel)]="currentMessage" (keyup.enter)="sendMessage()" [disabled]="isLoading" />
<button nz-button nzType="primary" [disabled]="!currentMessage.trim() || isLoading" (click)="sendMessage()"> </button>
</div>
</div>
</div>
@@ -197,7 +189,7 @@ export class LayoutBasicComponent implements OnInit, OnDestroy {
ngOnInit(): void {
// Initialize welcome message
this.chatMessages.push({
content: this.i18nSvc.fanyi('ai.bot.greeting'),
content: '你好!我是AI助手,有什么可以帮助你的吗?',
isUser: false,
timestamp: new Date()
});
@@ -281,7 +273,7 @@ export class LayoutBasicComponent implements OnInit, OnDestroy {
console.error('AI response error:', error);
// Add error message
this.chatMessages.push({
content: this.i18nSvc.fanyi('ai.bot.connect-fail'),
content: '抱歉,连接AI助手时出现问题,请稍后再试。',
isUser: false,
timestamp: new Date()
});
@@ -68,20 +68,15 @@ export class AlertIntegrationComponent implements OnInit {
name: this.i18nSvc.fanyi('alert.integration.source.skywalking'),
icon: 'assets/img/integration/skywalking.svg'
},
{
id: 'uptime-kuma',
name: this.i18nSvc.fanyi('alert.integration.source.uptime-kuma'),
icon: 'assets/img/integration/uptime-kuma.svg'
},
{
id: 'zabbix',
name: this.i18nSvc.fanyi('alert.integration.source.zabbix'),
icon: 'assets/img/integration/zabbix.svg'
},
{
id: 'tencent',
name: this.i18nSvc.fanyi('alert.integration.source.tencent'),
icon: 'assets/img/integration/tencent.svg'
},
{
id: 'uptime-kuma',
name: this.i18nSvc.fanyi('alert.integration.source.uptime-kuma'),
icon: 'assets/img/integration/uptime-kuma.svg'
}
];
@@ -218,14 +218,8 @@
<nz-form-item>
<nz-form-label [nzSpan]="7" nzFor="dropdown" nzRequired="true">{{ 'bulletin.monitor.metrics' | i18n }}</nz-form-label>
<nz-form-control [nzSpan]="12" [nzErrorTip]="'validation.required' | i18n">
<nz-transfer
[nzDataSource]="hierarchies"
[nzRenderList]="[leftRenderList, null]"
(nzChange)="transferChange($event)"
(nzSelectChange)="onSelectChange($event)"
>
<ng-template #leftRenderList let-items let-onItemSelect="onItemSelect" let-stat="stat">
<div *ngIf="updateTransferStat(stat)"></div>
<nz-transfer [nzDataSource]="hierarchies" [nzRenderList]="[leftRenderList, null]" (nzChange)="transferChange($event)">
<ng-template #leftRenderList let-items let-onItemSelect="onItemSelect">
<nz-tree
[nzData]="treeNodes"
nzExpandAll
@@ -23,7 +23,7 @@ import { ALAIN_I18N_TOKEN } from '@delon/theme';
import { NzModalService } from 'ng-zorro-antd/modal';
import { NzNotificationService } from 'ng-zorro-antd/notification';
import { NzTableQueryParams } from 'ng-zorro-antd/table';
import { TransferChange, TransferSelectChange, TransferStat } from 'ng-zorro-antd/transfer';
import { TransferChange } from 'ng-zorro-antd/transfer';
import { NzFormatEmitEvent, NzTreeNode, NzTreeNodeOptions } from 'ng-zorro-antd/tree';
import { Subject } from 'rxjs';
import { finalize, debounceTime, distinctUntilChanged } from 'rxjs/operators';
@@ -76,7 +76,6 @@ export class BulletinComponent implements OnInit, OnDestroy {
filterLabels: Record<string, string> = {};
filteredMonitors: Monitor[] = [];
private filterSubject = new Subject<string>(); //filter logic debouncing
currentStat: TransferStat | null = null; //transfer component status
ngOnInit() {
this.loadTabs();
@@ -369,42 +368,6 @@ export class BulletinComponent implements OnInit, OnDestroy {
return tree;
}
updateTransferStat(stat: TransferStat): boolean {
this.currentStat = stat;
// stat.shownCount = 33;
return true;
}
private collectLeafNodes(nodes: NzTreeNodeOptions[], results: NzTreeNodeOptions[]): void {
nodes.forEach(node => {
if (node.isLeaf && !node.disabled) {
results.push(node);
}
if (node.children) {
this.collectLeafNodes(node.children, results);
}
});
}
onSelectChange(event: TransferSelectChange): void {
if (event.direction === 'left' && event.checked && this.currentStat?.checkAll) {
const allLeafNodes: NzTreeNodeOptions[] = [];
this.collectLeafNodes(this.treeNodes, allLeafNodes);
allLeafNodes.forEach(node => {
const existing = this.checkedNodeList.find(n => n.origin.id === node.id);
if (!existing) {
const treeNode = new NzTreeNode(node);
treeNode.isChecked = true;
this.checkedNodeList.push(treeNode);
}
});
}
if (event.direction === 'left' && !event.checked && this.currentStat?.checkAll === false) {
this.checkedNodeList = [];
}
}
treeCheckBoxChange(event: NzFormatEmitEvent, onItemSelect: (item: NzTreeNodeOptions) => void): void {
this.checkBoxChange(event.node!, onItemSelect);
}
@@ -39,8 +39,6 @@
[paramValueMap]="paramValueMap"
[collector]="collector"
[collectors]="collectors"
[labelKeys]="labelKeys"
[labelMap]="labelMap"
[sdParams]="sdParams"
[sdDefines]="sdDefines"
(scrapeChange)="onScrapeChange($event)"
@@ -35,7 +35,6 @@ import { Param } from '../../../pojo/Param';
import { ParamDefine } from '../../../pojo/ParamDefine';
import { AppDefineService } from '../../../service/app-define.service';
import { CollectorService } from '../../../service/collector.service';
import { LabelService } from '../../../service/label.service';
import { MonitorService } from '../../../service/monitor.service';
@Component({
@@ -52,7 +51,6 @@ export class MonitorEditComponent implements OnInit {
private titleSvc: TitleService,
private notifySvc: NzNotificationService,
private collectorSvc: CollectorService,
private labelSvc: LabelService,
@Inject(ALAIN_I18N_TOKEN) private i18nSvc: I18NService
) {}
@@ -70,8 +68,6 @@ export class MonitorEditComponent implements OnInit {
collector: string = '';
isSpinning: boolean = false;
spinningTip: string = 'Loading...';
labelKeys: string[] = [];
labelMap: { [key: string]: string[] } = {};
ngOnInit(): void {
this.route.paramMap
@@ -256,7 +252,6 @@ export class MonitorEditComponent implements OnInit {
this.isSpinning = false;
}
);
this.loadLabels();
}
onScrapeChange(scrapeValue: string) {
@@ -366,34 +361,4 @@ export class MonitorEditComponent implements OnInit {
onCancel() {
this.router.navigateByUrl(`/monitors`);
}
loadLabels() {
let labelsInit$ = this.labelSvc.loadLabels(undefined, undefined, 0, 9999).subscribe(
message => {
if (message.code === 0) {
let page = message.data;
this.labelKeys = [...new Set(page.content.map(label => label.name))];
this.labelMap = {};
page.content.forEach(label => {
if (!this.labelMap[label.name]) {
this.labelMap[label.name] = [];
}
if (label.tagValue && !this.labelMap[label.name].includes(label.tagValue)) {
this.labelMap[label.name].push(label.tagValue);
}
});
} else {
console.warn(message.msg);
}
labelsInit$.unsubscribe();
},
error => {
labelsInit$.unsubscribe();
console.error(error.msg);
}
);
}
}
@@ -31,9 +31,6 @@
>
<nz-option nzValue="static" [nzLabel]="'monitor.scrape.type.static' | i18n"></nz-option>
<nz-option nzValue="http_sd" [nzLabel]="'monitor.scrape.type.http_sd' | i18n"></nz-option>
<nz-option nzValue="dns_sd" [nzLabel]="'monitor.scrape.type.dns_sd' | i18n"></nz-option>
<nz-option nzValue="eureka_sd" [nzLabel]="'monitor.scrape.type.eureka_sd' | i18n"></nz-option>
<nz-option nzValue="consul_sd" [nzLabel]="'monitor.scrape.type.consul_sd' | i18n"></nz-option>
</nz-select>
</nz-form-control>
</nz-form-item>
@@ -178,11 +175,7 @@
<app-form-field
[item]="{
field: 'labels',
type: 'label-selector'
}"
[extra]="{
labelKeys: labelKeys,
labelMap: labelMap
type: 'labels'
}"
[name]="'labels'"
[(ngModel)]="monitor.labels"
@@ -48,8 +48,6 @@ export class MonitorFormComponent implements OnChanges {
@Input() paramValueMap!: Map<String, Param>;
@Input() sdDefines!: ParamDefine[];
@Input() sdParams!: Param[];
@Input() labelKeys!: string[];
@Input() labelMap!: { [key: string]: string[] };
@Output() readonly formSubmit = new EventEmitter<any>();
@Output() readonly formCancel = new EventEmitter<any>();
@@ -38,8 +38,6 @@
[advancedParamDefines]="advancedParamDefines"
[collector]="collector"
[collectors]="collectors"
[labelKeys]="labelKeys"
[labelMap]="labelMap"
[sdParams]="sdParams"
[sdDefines]="sdDefines"
(scrapeChange)="onScrapeChange($event)"
@@ -33,7 +33,6 @@ import { Param } from '../../../pojo/Param';
import { ParamDefine } from '../../../pojo/ParamDefine';
import { AppDefineService } from '../../../service/app-define.service';
import { CollectorService } from '../../../service/collector.service';
import { LabelService } from '../../../service/label.service';
import { MonitorService } from '../../../service/monitor.service';
import { generateReadableRandomString } from '../../../shared/utils/common-util';
@@ -57,8 +56,6 @@ export class MonitorNewComponent implements OnInit {
// whether it is loading
isSpinning: boolean = false;
spinningTip: string = 'Loading...';
labelKeys: string[] = [];
labelMap: { [key: string]: string[] } = {};
constructor(
private appDefineSvc: AppDefineService,
private monitorSvc: MonitorService,
@@ -67,8 +64,7 @@ export class MonitorNewComponent implements OnInit {
private notifySvc: NzNotificationService,
@Inject(ALAIN_I18N_TOKEN) private i18nSvc: I18NService,
private titleSvc: TitleService,
private collectorSvc: CollectorService,
private labelSvc: LabelService
private collectorSvc: CollectorService
) {
this.monitor = new Monitor();
this.grafanaDashboard = new GrafanaDashboard();
@@ -211,7 +207,6 @@ export class MonitorNewComponent implements OnInit {
this.isSpinning = false;
}
);
this.loadLabels();
}
onScrapeChange(scrapeValue: string) {
@@ -327,34 +322,4 @@ export class MonitorNewComponent implements OnInit {
onCancel() {
this.router.navigateByUrl(`/monitors`);
}
loadLabels() {
let labelsInit$ = this.labelSvc.loadLabels(undefined, undefined, 0, 9999).subscribe(
message => {
if (message.code === 0) {
let page = message.data;
this.labelKeys = [...new Set(page.content.map(label => label.name))];
this.labelMap = {};
page.content.forEach(label => {
if (!this.labelMap[label.name]) {
this.labelMap[label.name] = [];
}
if (label.tagValue && !this.labelMap[label.name].includes(label.tagValue)) {
this.labelMap[label.name].push(label.tagValue);
}
});
} else {
console.warn(message.msg);
}
labelsInit$.unsubscribe();
},
error => {
labelsInit$.unsubscribe();
console.error(error.msg);
}
);
}
}

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