apache/hertzbeat

Sponsored OSS

By The Apache Software Foundation

Updated about 11 hours ago

Apache Hertzbeat Server Docker Image

Image
4

100K+

apache/hertzbeat repository overview

Apache HertzBeat

A real-time monitoring system with agentless, performance cluster, prometheus-compatible, custom monitoring and status page building capabilities.

Discord Reddit Twitter OpenSSF Best Practices Docker Pulls Artifact Hub YouTube Channel Subscribers

Home: hertzbeat.apache.org.
GitHub: https://github.com/apache/hertzbeat

🎡 Introduction

Apache HertzBeat is an easy-to-use, open source, real-time monitoring system with agentless, high performance cluster, prometheus-compatible, offers powerful custom monitoring and status page building capabilities.

Features
  • Combines monitoring, alarm, and notification features into one platform, and supports monitoring for web service, program, database, cache, os, webserver, middleware, bigdata, cloud-native, network, custom and more.
  • Easy to use and agentless, web-based and with one-click monitoring and alerting, zero learning curve.
  • Makes protocols such as Http, Jmx, Ssh, Snmp, Jdbc, Prometheus configurable, allowing you to collect any metrics by simply configuring the template YML file online. Imagine being able to quickly adapt to a new monitoring type like K8s or Docker simply by configuring online with HertzBeat.
  • Compatible with the Prometheus ecosystem and more, can monitoring what Prometheus can monitoring with few clicks on webui.
  • High performance, supports horizontal expansion of multi-collector clusters, multi-isolated network monitoring and cloud-edge collaboration.
  • Provides flexible alarm threshold rules and timely notifications delivered via Discord Slack Telegram Email Dingtalk WeChat FeiShu Webhook SMS ServerChan.
  • Provides powerful status page building capabilities, easily communicate the real-time status of your service to users.

HertzBeat's powerful customization, multi-type support, high performance, easy expansion, and low coupling, aims to help users quickly build their own monitoring system.


🐕 Quick Start
  • If you wish to deploy HertzBeat locally, please refer to the following Deployment Documentation for instructions.
🍞 Install HertzBeat

HertzBeat supports installation through source code, docker or package, cpu support X86/ARM64.

Install quickly via docker
  1. Just one command to get started: docker run -d -p 1157:1157 -p 1158:1158 --name hertzbeat apache/hertzbeat

  2. Access localhost:1157 to start, default account: admin/hertzbeat

More HertzBeat Config
$ docker run -d -p 1157:1157 -p 1158:1158 \
    -e LANG=en_US.UTF-8 \
    -e TZ=Asia/Shanghai \
    -v $(pwd)/data:/opt/hertzbeat/data \
    -v $(pwd)/logs:/opt/hertzbeat/logs \
    -v $(pwd)/application.yml:/opt/hertzbeat/config/application.yml \
    -v $(pwd)/sureness.yml:/opt/hertzbeat/config/sureness.yml \
    --name hertzbeat apache/hertzbeat

This command starts a running HertzBeat Docker container, and the container port 1157-1158 is mapped to the host machine 1157-1158. If existing processes on the host use the port, please modify host mapped port.
- docker run -d : Run a container in the background via Docker

  • -p 1157:1157 -p 1158:1158 : Mapping container ports to the host, 1157 is web-ui port, 1158 is cluster port.
  • -e LANG=en_US.UTF-8 : Set the system language
  • -e TZ=Asia/Shanghai : Set the system timezone
  • -v $(pwd)/data:/opt/hertzbeat/data : (optional, data persistence) Important⚠️ Mount the H2 database file to the local host, to ensure that the data is not lost due creating or deleting container.
  • -v $(pwd)/logs:/opt/hertzbeat/logs : (optional, if you don't have a need, just delete it) Mount the log file to the local host, to ensure the log will not be lost due creating or deleting container.
  • -v $(pwd)/application.yml:/opt/hertzbeat/config/application.yml : (optional, if you don't have a need, just delete it) Mount the local configuration file into the container which has been modified in the previous step, namely using the local configuration file to cover container configuration file.
  • -v $(pwd)/sureness.yml:/opt/hertzbeat/config/sureness.yml : (optional, if you don't have a need, just delete it) Mount account configuration file modified in the previous step into the container. Delete this command parameters if no needs.
  • --name hertzbeat : Naming container name hertzbeat
  • apache/hertzbeat : Use the pulled latest HertzBeat official application mirror to start the container.
  1. Begin to explore HertzBeat

    Access http://ip:1157/ using browser. You can explore HertzBeat with default account admin/hertzbeat now!

  2. Deploy collector cluster (Optional)

$ docker run -d \
    -e IDENTITY=custom-collector-name \
    -e MANAGER_HOST=127.0.0.1 \
    -e MANAGER_PORT=1158 \
    -e MODE=public \
    --name hertzbeat-collector apache/hertzbeat-collector

This command starts a running HertzBeat-Collector container.

  • docker run -d : Run a container in the background via Docker
  • -e IDENTITY=custom-collector-name : (optional) Set the collector unique identity name. Attention the clusters collector name must unique.
  • -e MODE=public : set the running mode(public or private), public cluster or private cloud-edge.
  • -e MANAGER_HOST=127.0.0.1 : Important⚠️ Set the main hertzbeat server ip.
  • -e MANAGER_PORT=1158 : (optional) Set the main hertzbeat server port, default 1158.
  • -v $(pwd)/logs:/opt/hertzbeat-collector/logs : (optional) Mount the log file to the local host, to ensure the log will not be lost due creating or deleting container.
  • --name hertzbeat-collector : Naming container name hertzbeat-collector
  • apache/hertzbeat-collector : Use the pulled latest HertzBeat-Collector official application mirror to start the container.
  1. Access http://localhost:1157 and you will see the registered new collector in dashboard.


Configure HertzBeat's configuration file(optional)

Create application.yml in the host directory,eg:/opt/application.yml
The configuration file content refer to project repository/script/application.yml,modify service parameters, IP port account password in td-engine or iotdb
Note⚠️(If use email to alert, please replace the mail server parameter. If use MYSQL data source, replace the datasource parameters inside refer toH2 database switch to MYSQL
Specific replacement parameters is as follows:

   
warehouse:
  store:
    # store history metrics data, enable only one below
    # 存储历史数据方式, 下方只能enabled启用一种方式
    jpa:
      enabled: true
      # The maximum retention time for history records, after which records will be deleted
      expire-time: 1h
      # The maximum number of history records retained, if this number is exceeded, half of the data in this configuration item will be deleted
      # (please set this configuration reasonably as history records can affect performance when it is large)
      max-history-record-num: 6000
    victoria-metrics:
      enabled: false
      url: http://localhost:8428
      username: root
      password: root
    td-engine:
      enabled: false
      driver-class-name: com.taosdata.jdbc.rs.RestfulDriver
      url: jdbc:TAOS-RS://localhost:6041/hertzbeat
      username: root
      password: taosdata
    greptime:
      enabled: false
      endpoint: localhost:4001
    iot-db:
      enabled: false
      host: 127.0.0.1
      rpc-port: 6667
      username: root
      password: root
      # org.dromara.hertzbeat.warehouse.config.IotDbVersion: V_0_13 || V_1_0
      version: V_1_0
      query-timeout-in-ms: -1
      # data expire time, unit:ms, default '7776000000'(90 days, -1:never expire)
      expire-time: '7776000000'
    influxdb:
      enabled: false
      server-url: http://127.0.0.1:8086
      username: root
      password: root
      expire-time: '30d'
      replication: 1

    # store real-time metrics data, enable only one below
    # 存储实时数据方式, 下方只能enabled启用一种方式
    memory:
      enabled: true
      init-size: 16
    redis:
      enabled: false
      host: 127.0.0.1
      port: 6379
      password: 123456

Configure the user configuration file(optional, custom user password)

HertzBeat default built-in three user accounts, respectively admin/hertzbeat tom/hertzbeat guest/hertzbeat If you need add, delete or modify account or password, configure sureness.yml. Ignore this step without this demand.
Create sureness.yml in the host directory,eg:/opt/sureness.yml
The configuration file content refer to project repository/script/sureness.yml


# config the resource restful api that need auth protection, base rbac
# rule: api===method===role 
# eg: /api/v1/source1===get===[admin] means /api/v2/host===post support role[admin] access.
# eg: /api/v1/source2===get===[] means /api/v1/source2===get can not access by any role.
resourceRole:
  - /api/account/auth/refresh===post===[admin,user,guest]
  - /api/apps/**===get===[admin,user,guest]
  - /api/monitor/**===get===[admin,user,guest]
  - /api/monitor/**===post===[admin,user]
  - /api/monitor/**===put===[admin,user]
  - /api/monitor/**===delete==[admin]
  - /api/monitors/**===get===[admin,user,guest]
  - /api/monitors/**===post===[admin,user]
  - /api/monitors/**===put===[admin,user]
  - /api/monitors/**===delete===[admin]
  - /api/alert/**===get===[admin,user,guest]
  - /api/alert/**===post===[admin,user]
  - /api/alert/**===put===[admin,user]
  - /api/alert/**===delete===[admin]
  - /api/alerts/**===get===[admin,user,guest]
  - /api/alerts/**===post===[admin,user]
  - /api/alerts/**===put===[admin,user]
  - /api/alerts/**===delete===[admin]
  - /api/notice/**===get===[admin,user,guest]
  - /api/notice/**===post===[admin,user]
  - /api/notice/**===put===[admin,user]
  - /api/notice/**===delete===[admin]
  - /api/tag/**===get===[admin,user,guest]
  - /api/tag/**===post===[admin,user]
  - /api/tag/**===put===[admin,user]
  - /api/tag/**===delete===[admin]
  - /api/summary/**===get===[admin,user,guest]
  - /api/summary/**===post===[admin,user]
  - /api/summary/**===put===[admin,user]
  - /api/summary/**===delete===[admin]
  - /api/collector/**===get===[admin,user,guest]
  - /api/collector/**===post===[admin,user]
  - /api/collector/**===put===[admin,user]
  - /api/collector/**===delete===[admin]
  - /api/status/page/**===get===[admin,user,guest]
  - /api/status/page/**===post===[admin,user]
  - /api/status/page/**===put===[admin,user]
  - /api/status/page/**===delete===[admin]

# config the resource restful api that need bypass auth protection
# rule: api===method 
# eg: /api/v1/source3===get means /api/v1/source3===get can be access by anyone, no need auth.
excludedResource:
  - /api/alerts/report/**===*
  - /api/account/auth/**===*
  - /api/i18n/**===get
  - /api/apps/hierarchy===get
  - /api/push/**===*
  - /api/status/page/public/**===*
  # web ui resource
  - /===get
  - /dashboard/**===get
  - /monitors/**===get
  - /alert/**===get
  - /account/**===get
  - /setting/**===get
  - /passport/**===get
  - /status/**===get
  - /**/*.html===get
  - /**/*.js===get
  - /**/*.css===get
  - /**/*.ico===get
  - /**/*.ttf===get
  - /**/*.png===get
  - /**/*.gif===get
  - /**/*.jpg===get
  - /**/*.svg===get
  - /**/*.json===get
  - /**/*.woff===get
  - /**/*.eot===get
  # swagger ui resource
  - /swagger-resources/**===get
  - /v2/api-docs===get
  - /v3/api-docs===get
  # h2 database
  - /h2-console/**===*

# account info config
# eg: admin has role [admin,user], password is hertzbeat
# eg: tom has role [user], password is hertzbeat
# eg: lili has role [guest], plain password is lili, salt is 123, salted password is 1A676730B0C7F54654B0E09184448289
account:
  - appId: admin
    credential: hertzbeat
    role: [admin]
  - appId: tom
    credential: hertzbeat
    role: [user]
  - appId: guest
    credential: hertzbeat
    role: [guest]
  - appId: lili
    # credential = MD5(password + salt)
    # plain password: lili
    # attention: digest authentication does not support salted encrypted password accounts
    credential: 1A676730B0C7F54654B0E09184448289
    salt: 123
    role: [guest]

Modify the following part parameters in sureness.yml [Note⚠️Other default sureness configuration parameters should be retained]


# user account information
# Here is admin tom lili three accounts
# eg: admin includes[admin,user]roles, password is hertzbeat 
# eg: tom includes[user], password is hertzbeat
# eg: lili includes[guest], text password is lili, salt password is 1A676730B0C7F54654B0E09184448289
account:
   - appId: admin
     credential: hertzbeat
     role: [admin,user]
   - appId: tom
     credential: hertzbeat
     role: [user]
   - appId: guest
     credential: hertzbeat
     role: [guest]

HAVE FUN

Tag summary

Content type

Image

Digest

sha256:9d9bbc88c

Size

599.6 MB

Last updated

about 11 hours ago

docker pull apache/hertzbeat:nightly

This week's pulls

Pulls:

1,858

Last week