目录

    phoenix云监控平台使用文档


    phoenix云监控平台使用文档

    源码仓库地址

    Gitee仓库 GitHub仓库

    JavaDoc

    JavaDoc

    演示地址

    演示地址

    账号:guest
    密码:guest123
    注意:1.演示项目只提供非管理员账号,只有查看权限!
       2.演示项目访问比较慢是因为服务器网络带宽太小!

    1 介绍

    “phoenix” 是一个灵活可配置的开源监控平台,主要用于监控应用程序、服务器、docker、数据库、网络、tcp 端口和 http 接口,通过实时收集、汇聚和分析监控信息,实现在发现异常时立刻推送告警信息,并且提供了可视化系统进行配置、管理、查看。

    1.1 应用程序

    默认支持 Java 应用程序,监控内容包括:在线状态、JVM(内存、线程、类、GC 等)、埋点监控(业务告警、异常日志)。其它应用程序需要自己开发客户端,来调用接口与服务端或者代理端通信(心跳接口、服务器信息接口、下线接口、告警接口);

    1.2 服务器

    支持主流服务器,如 Linux、Windows、macOS、Unix 等;
    监控内容包括:在线状态、操作系统、CPU、平均负载、进程、磁盘、内存、网卡、电池、传感器;

    1.3 Docker

    监控内容包括:服务、容器、镜像、事件、资源;

    1.4 数据库

    支持 MySQL、Oracle、Redis、Mongo;
    监控内容:
      MySQL:会话;
      Oracle:会话、表空间;
      Redis:Redis信息全集;
      Mongo:Mongo信息全集;

    1.5 网络

    支持监控网络状态;

    1.6 TCP

    支持监控 TCP 服务状态;

    1.7 HTTP

    支持监控 HTTP 服务状态;

    1.8 告警

    默认支持电子邮件,收费版支持钉钉、企业微信。

    2 特点

    1)分布式;
    2)跨平台;
    3)支持 docker 部署;
    4)实时监测告警;
    5)数据加密传输;
    6)灵活可配置;
    7)用户界面支持 PC 端、移动端;
    8)基于 http 接口,支持拓展监控其它编程语言编写的程序。

    3 设计

    3.1 功能架构

    红旗标注部分为收费功能,需向作者购买(500¥,给源码,不开发票)。

    功能架构图

    3.2 系统架构

    系统架构图

    3.3 运行环境

    1)Maven3+
    2)Jdk >=1.8,若使用 Sigar 监控服务器,则 Jdk 版本要用 1.8(1.8.0_131到1.8.0_241)
    3)Lombok
    4)Mysql5.7+

    3.4 技术选型

    1)核心框架:SpringBoot
    2)安全框架:SpringSecurity、SpringSession
    3)任务调度:JUC、SpringTask、Quartz
    4)持久层框架:MyBatis-Plus
    5)数据库连接池:Alibaba druid
    6)日志管理:SLF4J、Logback
    7)前端框架:Layui、ECharts 、jtopo、xterm
    8)监控框架:Sigar、oshi、Alibaba arthas、docker-java

    3.5 模块结构

    平台使用 Java + Layui + ECharts 开发,数据库采用 MySQL。

    phoenix(监控平台父工程)
    ├── phoenix-common(监控公共模块父工程)
    │ ├── phoenix-common-core(监控核心公共模块)
    │ └── phoenix-common-web(监控WEB公共模块)
    ├── phoenix-client(监控客户端父工程)
    │ ├── phoenix-client-core(监控客户端)
    │ ├── phoenix-client-spring-boot-starter(监控客户端与springboot集成的starter)
    │ └── phoenix-client-spring-mvc-integrator(监控客户端与springmvc集成的integrator)
    ├── phoenix-agent(监控代理端)
    ├── phoenix-server(监控服务端)
    ├── phoenix-ui(监控UI端)
    ├── doc(文档)
    └── script(Maven打包脚本)

    phoenix:监控平台父工程,管理平台的依赖、构建、插件等;
    phoenix-common:监控公共模块,提供平台所有的公共代码,包含一个监控核心公共模块(phoenix-common-core)和一个监控WEB公共模块(phoenix-common-web);
    phoenix-client:监控客户端,用于集成到Java应用程序中实现业务埋点和Java应用程序监控信息收集,包含一个通用模块(phoenix-client-core)和与springboot集成的starter(phoenix-client-spring-boot-starter)、与springmvc集成的integrator(phoenix-client-spring-mvc-integrator)两个拓展模块;
    phoenix-agent:监控代理端,用于收集服务器信息、Docker信息,汇聚、转发来自监控客户端的信息,若部署在跳板机上可打通网络壁垒;
    phoenix-server:监控服务端,是监控平台的核心模块,用于汇聚、分析监控信息,在发现异常时实时推送告警信息;
    phoenix-ui:监控可视化系统,用于平台配置、用户管理、监控信息查看、图表展示等;
    doc:包含平台的设计文档、服务启停脚本、数据库脚本等;
    script:包含平台的Maven打包脚本。

    4 配置

    4.1 初始化“监控数据库”

    下载项目源码并解压,进入目录:/phoenix/doc/数据库设计/sql/mysql/,找到 SQL 脚本,用 Navicat 或者其它 MySQL 数据库管理工具连上数据库并执行此文件即可。

    phoenix.sql
    

    4.2 编译源码

    解压源码,按照 maven 项目格式将源码导入 IDE,使用 maven 进行编译即可。

    4.3 监控配置

    ● 监控配置文件为: monitoring.properties 或者 monitoring-{profile}.properties ,UI 端、服务端、代理端、客户端都需要监控配置。
    ● 监控配置文件放置位置及优先级:指定的filepath > 当前工作目录/config/ > 当前工作目录/ > 指定的classpath > classpath:/config/ > classpath:/ 。例如下图方式放置配置文件,会被自动加载:

    配置文件夹位置

    监控配置文件位置

    监控配置项

    配置项 含义 必须项 默认值 收费版本
    monitoring.comm.comm-framework-type 与服务端(或者代理端)通信的通信框架类型 apacheHttpComponents
    monitoring.comm.http.url 监控服务端(或者代理端)url 如果通信框架是apacheHttpComponents,则必须配置,否则不用配置
    monitoring.comm.http.connect-timeout 连接超时时间(毫秒) 15000
    monitoring.comm.http.socket-timeout 等待数据超时时间(毫秒) 15000
    monitoring.comm.http.connection-request-timeout 从连接池获取连接的等待超时时间(毫秒) 15000
    monitoring.own.instance.order 实例次序(整数),用于在集群中区分应用实例,配置“1”就代表集群中的第一个应用实例 1
    monitoring.own.instance.endpoint 实例端点类型(server、agent、client、ui) client
    monitoring.own.instance.name 实例名称,一般为项目名
    monitoring.own.instance.desc 实例描述
    monitoring.own.instance.language 程序语言 Java
    monitoring.heartbeat.rate 与服务端(或者代理端)发心跳包的频率(秒),最小不能小于30秒 30
    monitoring.server-info.enable 是否采集服务器信息 false
    monitoring.server-info.rate 与服务端(或者代理端)发服务器信息包的频率(秒),最小不能小于30秒 60
    monitoring.server-info.ip 被监控服务器本机ip地址 否(自动获取)
    monitoring.server-info.user-sigar-enable 是否使用Sigar采集服务器信息,Sigar要求Jdk1.8(1.8.0_131到1.8.0_241) false
    monitoring.jvm-info.enable 是否采集Java虚拟机信息 false
    monitoring.jvm-info.rate 与服务端(或者代理端)发送Java虚拟机信息的频率(秒),最小不能小于30秒 60
    monitoring.docker-info.enable 是否采集docker信息 false
    monitoring.docker-info.rate 与服务端(或者代理端)发送docker信息的频率(秒),最小不能小于30秒 60
    monitoring.docker-info.host 被监控的docker主机 tcp://localhost:2375
    monitoring.docker-info.tls-verify 启用/禁用TLS验证 false
    monitoring.docker-info.cert-path 验证所需证书的路径
    monitoring.docker-info.config 其他docker配置文件的路径
    monitoring.docker-info.api-version API版本
    monitoring.docker-info.registry-url 注册地址
    monitoring.docker-info.registry-username 注册用户名
    monitoring.docker-info.registry-password 注册密码
    monitoring.docker-info.registry-email 注册电子邮箱
    monitoring.arthas.enable 是否开启arthas
    monitoring.arthas.tunnel-server-url arthas服务端url地址

    1)监控 UI 端
    monitoring-{profile}.properties 文件配置监控属性。
    2)监控服务端
    monitoring-{profile}.properties 文件配置监控属性。
    3)监控代理端
    monitoring-{profile}.properties 文件配置监控属性。
    4)监控客户端
    添加监控配置文件 monitoring.properties 或者 monitoring-{profile}.properties ,并且正确配置它。

    注意:
    1){profile} 代表环境,源码中有 dev(开发环境)和 prod(生产环境)。
    2)springboot 客户端可以把监控配置写在 application.yml(或者 application-{profile}.yml)文件中,不再需要单独的监控配置文件,如果仍然使用单独的监控配置文件,需要注解 @EnableMonitoring(usingMonitoringConfigFile = true) 。

    application.yml 示例

    ##############################phoenix监控配置##############################
    phoenix:
      monitoring:
        comm:
          comm-framework-type: apache_http_components
          http:
            url: http://127.0.0.1:16000/phoenix-server
            connect-timeout: 15000
            socket-timeout: 60000
            connection-request-timeout: 15000
        instance:
          name: 
          desc: 
        jvm-info:
          enable: true
        arthas:
          enable: true
          tunnel-server-url: wss://127.0.0.1:8081/phoenix-ui
    

    4.4 加解密配置

    ● 除了监控配置文件外,可以加入 monitoring-secure.properties 加解密配置文件,用来配置监控平台的加解密方式。注意各监控端加解密配置参数必须相同,否则无法进行正确解密。这个配置不是必须的,没有此配置文件将使用默认加解密配置,加入此配置文件则必须正确配置配置项。
    ● 监控加解密配置文件放置位置及优先级:当前工作目录/config/ > 当前工作目录/ > classpath:/config/ > classpath:/

    加解密配置项说明

    配置项 含义 必须项 默认值
    secret.type 加解密类型,值只能是 des、aes、sm4 之一 否,为空则不进行加解密
    secret.key.des DES密钥 否,secret.type=des时,需要配置
    secret.key.aes AES密钥 否,secret.type=aes时,需要配置
    secret.key.sm4 国密SM4密钥 否,secret.type=ms4时,需要配置

    秘钥可通过 com.gitee.pifeng.monitoring.common.util.secure.SecureUtilsTest#testGenerateKey() 方法生成,然后填入配置文件。

    4.5 许可证配置

    UI 端、服务端、代理端都需要许可证文件(license.txt),此文件放在源码根目录下。UI 端、服务端、代理端打包部署后,此许可证文件要放在 Jar 包同级目录。

    4.6 UI端自定义配置

    监控UI端自定义了一些配置项,只需在 application.yml(或者application-{profile}.yml) 配置文件中配置即可。

    #监控UI端自定义配置
    phoenix:
      #认证
      auth:
        #认证类型(self、thrid,默认值:self)
        type: self
        #本平台认证
        self-auth:
          #登录验证码
          login-captcha:
            #是否启用验证码
            enable: false
        #第三方认证
        third-auth:
          #第三方认证类型(cas)
          type: cas
          #CAS
          cas:
            #秘钥(默认值:phoenix)
            key: phoenix
            #cas服务端地址
            server-url-prefix: https://cas.example.org:8443/cas
            #cas登录地址
            server-login-url: ${phoenix.auth.third-auth.cas.server-url-prefix}/login
            #cas登出地址
            server-logout-url: ${phoenix.auth.third-auth.cas.server-url-prefix}/logout?service=${phoenix.auth.third-auth.cas.client-host-url}/index
            #cas客户端地址
            client-host-url: http://127.0.0.1:${server.port}${server.servlet.context-path}
            #CAS协议验证类型(cas、cas3,默认值:cas3)
            validation-type: cas3
    

    4.7 邮箱配置

    使用邮箱告警时,监控服务端需要进行邮箱配置,以 QQ 邮箱为例。

    4.7.1 QQ邮箱生成授权码

    1)在浏览器打开并登录 QQ 邮箱

    打开并登录QQ邮箱

    2)点击“设置”,打开邮箱设置

    打开邮箱设置

    3)点击“账户”,进入“账户”选项界面

    进入“账户”选项界面

    4)找到“POP3/SMTP服务”旁边的“开启”按钮,开启POP3/SMTP服务

    开启POP3/SMTP服务

    5)用邮箱绑定的手机号码发送短信到指定号码,发送后点击“我已发送”

    发送验证短信

    6)获取授权码

    获取授权码

    4.7.2 监控服务端配置邮箱

    在监控服务端的 application-{profile}.yml 文件中,配置邮箱,如下图所示:

    监控服务端配置邮箱

    4.8 数据源配置

    ###############################################数据源配置##################################################
    spring:
      datasource:
        druid:
          #数据源配置
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://127.0.0.1:3306/phoenix?useSSL=false&serverTimezone=GMT%2b8&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&failOverReadOnly=false&rewriteBatchedStatements=true
          username: xxx
          password: xxx
    

    1)监控UI端
    application-{profile}.yml 文件配置数据源。
    2)监控服务端
    application-{profile}.yml 文件配置数据源。

    4.9 客户端启用监控

    客户端启用监控分为三步,首先加入监控 jar 包,然后加入监控配置文件,最后开启监控。

    4.9.1 普通Java程序

    在程序中加入监控 jar 包,例如 Maven 项目,则在 pom.xml 文件中增加如下依赖:

    <!-- https://mvnrepository.com/artifact/com.gitee.pifeng/phoenix-client-core -->
    <dependency>
      <groupId>com.gitee.pifeng</groupId>
      <artifactId>phoenix-client-core</artifactId>
      <version>${匹配源代码版本}</version>
    </dependency>
    

    在 main 方法中,调用方法 Monitor.start() 来开启监控功能,或者调用重载的方法 Monitor.start(configPath, configName) 指定监控配置文件的路径和名字来开启监控功能,如果未指定配置文件路径和名字,则配置文件需要放在 classpath:/ 下,名字必须为 monitoring.properties 。示例配置代码如下:

    public class Main {
        public static void main(String[] args) {
            // 开启监控
            Monitor.start();
            // 其它业务代码
        }
    }
    

    4.9.2 Spring boot程序

    在程序中加入监控 jar 包,例如 Maven 项目,则在 pom.xml 文件中增加如下依赖:

    <!-- https://mvnrepository.com/artifact/com.gitee.pifeng/phoenix-client-spring-boot-starter -->
    <dependency>
      <groupId>com.gitee.pifeng</groupId>
      <artifactId>phoenix-client-spring-boot-starter</artifactId>
      <version>${匹配源代码版本}</version>
    </dependency>
    

    在启动类上加上注解 @EnableMonitoring 来开启监控功能,或者通过注解的两个参数(configFilePath、configFileName)来指定配置文件的路径和名字,如果未指定配置文件路径和名字,则配置文件需要放在 classpath:/ 下,名字必须为 monitoring.properties

    1)不分环境配置,示例配置代码如下:

    @EnableMonitoring
    @SpringBootApplication
    public class Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    
    }
    

    2)分环境配置,示例配置代码如下:

    /**
    * 开发环境监控配置
    */
    @Configuration
    @Profile("dev")
    @EnableMonitoring(configFileName = "monitoring-dev.properties")
    public class MonitoringUiDevConfig {
    }
    
    /**
    * 生产环境监控配置
    */
    @Configuration
    @Profile("prod")
    @EnableMonitoring(configFileName = "monitoring-prod.properties")
    public class MonitoringUiProdConfig {
    }
    

    4.9.3 Spring mvc程序

    在程序中加入监控 jar 包,例如 Maven 项目,则在 pom.xml 文件中增加如下依赖:

    <!-- https://mvnrepository.com/artifact/com.gitee.pifeng/phoenix-client-spring-mvc-integrator -->
    <dependency>
      <groupId>com.gitee.pifeng</groupId>
      <artifactId>phoenix-client-spring-mvc-integrator</artifactId>
      <version>${匹配源代码版本}</version>
    </dependency>
    

    在 web.xml 文件中配置一个监听器,来开启监控功能:

    <!-- 开启监控功能 -->
    <web-app>
    <context-param>
        <param-name>configLocation</param-name>
        <param-value>classpath:monitoring.properties</param-value>
    </context-param>
    <listener>
        <listener-class>
           com.gitee.pifeng.monitoring.integrator.listener.MonitoringPlugInitializeListener
        </listener-class>
    </listener>
    </web-app>
    

    4.10 时钟同步

    部署监控程序(监控UI端、监控服务端、监控代理端、监控客户端)的服务器集群需要进行时钟同步(NTP),保证时间的一致性!

    5 部署

    5.1 Jar包部署

    1)打包
    监控 UI 端、监控服务端、监控代理端 直接打成可执行 jar。

    mvn -Dmaven.test.skip=true clean package
    

    2)上传 jar、脚本
    i.jar在源码中的路径:
      phoenix/target/phoenix-ui.jar
      phoenix/target/phoenix-server.jar
      phoenix/target/phoenix-agent.jar
    ii.脚本在源码中的路径:
      phoenix/doc/脚本/UI端/phoenix_ui.sh
      phoenix/doc/脚本/服务端/phoenix_server.sh
      phoenix/doc/脚本/代理端/phoenix_agent.sh
      phoenix/doc/脚本/UI端/startup_ui.bat
      phoenix/doc/脚本/服务端/startup_server.bat
      phoenix/doc/脚本/代理端/startup_agent.bat
    3)运行
    i.Linux 系统

    程序 脚本 命令 含义
    监控UI端 phoenix_ui.sh ./phoenix_ui.sh start 启动
    监控UI端 phoenix_ui.sh ./phoenix_ui.sh stop 停止
    监控UI端 phoenix_ui.sh ./phoenix_ui.sh restart 重启
    监控UI端 phoenix_ui.sh ./phoenix_ui.sh status 检查状态
    监控服务端 phoenix_server.sh ./phoenix_server.sh start 启动
    监控服务端 phoenix_server.sh ./phoenix_server.sh stop 停止
    监控服务端 phoenix_server.sh ./phoenix_server.sh restart 重启
    监控服务端 phoenix_server.sh ./phoenix_server.sh status 检查状态
    监控代理端 phoenix_agent.sh ./phoenix_agent.sh start 启动
    监控代理端 phoenix_agent.sh ./phoenix_agent.sh stop 停止
    监控代理端 phoenix_agent.sh ./phoenix_agent.sh restart 重启
    监控代理端 phoenix_agent.sh ./phoenix_agent.sh status 检查状态

    ii.Windows 系统

    程序 脚本 含义
    监控UI端 startup_ui.bat 启动
    监控服务端 startup_server.bat 启动
    监控代理端 startup_agent.bat 启动

    5.2 安装成Windows服务

    1)打包
    监控 UI 端、监控服务端、监控代理端 直接打成 zip 包。

    mvn -Dmaven.test.skip=true clean package
    

    2)上传 zip 包
    zip包在源码中的路径:
      phoenix/target/phoenix-ui-windows.zip
      phoenix/target/phoenix-server-windows.zip
      phoenix/target/phoenix-agent-windows.zip
    3)解压 zip 包
    4)运行

    脚本 含义
    service_install.cmd 安装
    service_restart.cmd 重启
    service_start.cmd 启动
    service_status.cmd 查看状态
    service_stop.cmd 停止
    service_uninstall.cmd 卸载

    5.3 安装成Linux服务

    参考文章《phoenix UI端程序在 Linux 服务器上设置开机自启动》《phoenix代理端程序在 Linux 服务器上设置开机自启动》《phoenix服务端程序在 Linux 服务器上设置开机自启动》

    5.4 Docker部署

    5.4.1 方式一:Maven打包远程部署

    1)有一台已经安装好 docker 环境的服务器,并且允许远程连接(以 centos7 下的 yum 方式安装的 docker,且使用 service 方式运行为例,开启远程连接):

    vi /usr/lib/systemd/system/docker.service
    #确保:ExecStart 的后面有: -H tcp://0.0.0.0:2375
    #修改完成后保存退出,刷新并重启docker服务
    systemctl daemon-reload
    systemctl restart docker
    

    2)在系统环境变量中添 DOCKER_HOST,如下图所示:

    系统环境变量中添DOCKER_HOST

    3)编译项目打包项目并构建镜像

    mvn -Dmaven.test.skip=true clean package docker:build
    

    4)运行
    ● 监控UI端:

    docker run -itd -v /tmp:/tmp -v /liblog4phoenix:/liblog4phoenix -v /etc/localtime:/etc/localtime:ro -p 443:443 --pid host --net host --name phoenix-ui phoenix/phoenix-ui /bin/bash
    

    ● 监控服务端:

    docker run -itd -v /tmp:/tmp -v /liblog4phoenix:/liblog4phoenix -v /etc/localtime:/etc/localtime:ro -p 16000:16000 --pid host --net host --name phoenix-server phoenix/phoenix-server /bin/bash
    

    ● 监控代理端:

    docker run -itd -v /tmp:/tmp -v /liblog4phoenix:/liblog4phoenix -v /etc/localtime:/etc/localtime:ro -p 12000:12000 --pid host --net host --name phoenix-agent phoenix/phoenix-agent /bin/bash
    

    5.4.2 方式二:服务器本地构建docker镜像

    1)打包
    监控 UI 端、监控服务端、监控代理端 直接打成可执行 jar。

    mvn -Dmaven.test.skip=true clean package
    

    2)上传 jar、Dockerfile
    i.jar在源码中的路径:phoenix/target/
    ii.Dockerfile在源代码中的路径:
      phoenix/phoenix-ui/src/main/docker/Dockerfile、
      phoenix/phoenix-agent/src/main/docker/Dockerfile、
      phoenix/phoenix-server/src/main/docker/Dockerfile,
      Dockerfile 要与对应的jar包放在同一目录下;
    3)构建 docker 镜像
    ● 监控 UI 端:

    docker build -t phoenix/phoenix-ui .
    

    ● 监控服务端:

    docker build -t phoenix/phoenix-server .
    

    ● 监控代理端:

    docker build -t phoenix/phoenix-agent .
    

    4)运行
    ● 监控 UI 端:

    docker run -itd -v /tmp:/tmp -v /liblog4phoenix:/liblog4phoenix -v /etc/localtime:/etc/localtime:ro -p 443:443 --pid host --net host --name phoenix-ui phoenix/phoenix-ui /bin/bash
    

    ● 监控服务端:

    docker run -itd -v /tmp:/tmp -v /liblog4phoenix:/liblog4phoenix -v /etc/localtime:/etc/localtime:ro -p 16000:16000 --pid host --net host --name phoenix-server phoenix/phoenix-server /bin/bash
    

    ● 监控代理端:

    docker run -itd -v /tmp:/tmp -v /liblog4phoenix:/liblog4phoenix -v /etc/localtime:/etc/localtime:ro -p 12000:12000 --pid host --net host --name phoenix-agent phoenix/phoenix-agent /bin/bash
    

    5.5 集群部署

    监控服务端、监控 UI 端 支持集群部署,提升系统的容灾和可用性。
    集群部署时的几点要求和建议:
    1)DB 配置保持一致;
    2)集群机器时钟保持一致(单机集群忽视);
    3)建议:推荐通过 nginx 为集群做负载均衡。监控服务端、监控 UI 端均通过 nginx 进行访问。

    集群部署架构图

    6 访问

    监控 UI 端 访问 URL:http(s)://localhost/phoenix-ui/index ,开发环境(dev)使用 http,生产环境(prod)使用 https,初始账号/密码:admin/admin123guest/guest123

    7 使用

    7.1 配置管理

    7.1.1 环境管理

    环境管理是为了给监控平台中监控的服务项(服务器、应用程序、数据库、网络、TCP 服务、HTTP 服务、Docker 服务)添加环境,从而方便根据这些服务的实际使用环境进行管理,如:筛选、导出。

    环境管理

    设置被监控的服务器环境

    根据环境查询服务器列表

    7.1.2 分组管理

    分组管理与环境管理类似,但它是从另一个维度去管理监控平台中监控的服务项。

    7.1.3 监控配置

    7.1.3.1 阈值

    阈值一共分为 10 个等级,从 1 到 10,值越小监控越灵敏。例如 monitoring.properties 配置文件中配置的 monitoring.heartbeat.rate=30(心跳频率是 30 秒),而监控配置界面中配置的阈值是 2,则 30×2=60秒 内没收到心跳包,判别应用程序离线,反之应用程序在线;若监控配置界面中配置的阈值是3,则 30×3=90秒 内没收到心跳包,判别应用程序离线,反之应用程序在线。

    告警阈值

    7.1.3.2 告警

    7.1.3.2.1 是否告警

    “是否告警”配置项是告警总开关,若此处关闭,则整个监控平台不发送任何告警信息。

    告警开关

    7.1.3.2.2 告警静默

    “告警静默”配置项若打开,则在静默时间段产生的告警,只会产生告警记录,而不会通过配置的告警方式进行通知。

    告警静默

    7.1.3.2.3 级别

    告警分为 4 个级别:INFO、WARN、ERROR、FATAL。
    FATAL > ERROR > WARN > INFO,只有具体告警项配置的告警级别大于等于此处配置的级别时,才会在异常时发送告警,反之不发送告警。例如:服务器 CPU 的告警级别是 INFO,而此处配置的告警级别是 WARN,则服务器 CPU 过载也不会发送告警。

    告警级别

    7.1.3.2.4 方式

    告警方式有邮箱、短信、钉钉、企业微信。是一个多选开关,可以同时配置多种告警方式发送告警。其中短信告警需要自己二次开发去对接自己公司的短信服务接口。

    告警方式

    7.1.3.2.4.1 邮箱

    可以配置多个收件人邮箱号。

    邮箱告警

    7.1.3.2.4.2 短信

    ① 可以配置多个收信人手机号;
    ② 接口地址填自己公司的短信服务地址,并且在监控平台的 phoenix-server 模块做二次开发以支持短信告警。

    短信告警

    7.1.3.2.4.3 钉钉(收费版)

    (1) 创建群机器人
    ① 在 PC 端钉钉选择需要添加机器人的群聊,然后依次单击【群设置 -> 智能群助手 -> 机器人管理】

    创建群机器人

    创建群机器人

    创建群机器人

    创建群机器人

    ② 在机器人管理页面选择自定义机器人,输入机器人名字并选择要发送消息的群,同时可以为机器人设置机器人头像

    创建群机器人

    ③ 完成必要的安全设置,勾选我已阅读并同意《自定义机器人服务及免责条款》,然后单击完成

    创建群机器人

    (2) 配置钉钉告警

    配置钉钉告警

    7.1.3.2.4.4 企业微信(收费版)

    (1) 创建群机器人
    ① 群机器人添加入口
    【PC内部群聊 -> 右上方三个点 -> 添加群机器人】,可以新建机器人或选择已发布到公司的机器人

    端添加群机器人

    【手机端内部群聊 -> 右上角三个点 -> 添加群机器人】:

    手机端添加群机器人

    ② 获取群机器人Webhook地址

    群机器人的创建人,可在查看机器人信息时,获取对应机器人的 Webhook URL。
    手机端【进入群聊 -> 右上角三个点 -> 群机器人 -> 点击对应机器人 -> Webhook地址】

    手机端获取群机器人Webhook地址

    电脑端【进入群聊 -> 群成员列表 -> 右键对应机器人 -> 查看资料-> Webhook地址】

    端获取群机器人Webhook地址

    (2) 配置企业微信告警

    配置企业微信告警

    7.1.3.3 网络

    网络有一个是否监控的总开关,打开则监控网络,关闭则不监控网络。网络状态是否监控、是否告警也可以单独设置。

    网络监控配置

    7.1.3.4 TCP服务

    TCP 服务有一个是否监控的开关,打开则监控 TCP 服务,关闭则不监控 TCP 服务。TCP 服务状态是否监控、是否告警也可以单独设置。

    TCP服务监控配置

    7.1.3.5 HTTP服务

    HTTP 服务有一个是否监控的开关,打开则监控 HTTP 服务,关闭则不监控 HTTP 服务。HTTP 服务状态是否监控、是否告警也可以单独设置。

    HTTP服务监控配置

    7.1.3.6 数据库

    数据库有一个是否监控的开关,打开则监控数据库,关闭则不监控数据库。数据库状态是否监控、是否告警也可以单独设置。

    数据库监控配置

    7.1.3.6.1 表空间(Oracle)

    Oracle 数据库支持表空间监控,可以设置表空间是否监控、是否告警,以及告警阈值和告警级别,满足条件则进行告警。

    Oracle表空间监控配置

    7.1.3.7 应用程序

    应用程序有一个是否监控的总开关,打开则监控应用程序,关闭则不监控应用程序。应用程序状态是否监控、是否告警也可以单独设置。

    应用程序监控配置

    7.1.3.8 服务器

    服务器有一个是否监控的开关,打开则监控服务器,关闭则不监控服务器。服务器状态是否监控、是否告警也可以单独设置。

    服务器监控配置

    7.1.3.8.1 CPU

    可以设置 CPU 监控的告警阈值和告警级别,满足条件则进行告警。

    CPU监控

    7.1.3.8.2 15分钟负载

    平均负载,是衡量一个系统整体负载情况的关键指标,指是处于可运行状态和不可中断状态的进程的平均数量。即单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数。它和 CPU 使用率并没有直接关系。平均负载值越低越好,负载过高会导致机器无法处理其他请求及操作,甚至导致死机。系统的负载高,主要是由于 CPU 使用、内存使用、IO 消耗三部分构成。任意一项使用过多,都将导致负载的急剧攀升。
    在平均负载的指标中,有三个值:1分钟平均负载、5分钟平均负载,15分钟平均负载。我们在排查问题的时候也是可以参考这三个值。一般情况下,1分钟平均负载表示的是最近的暂时现象,15分钟平均负载表示的是持续现象,并非暂时问题。如果15分钟平均负载较高,而1分钟平均负载较低,可以认为情况有所好转。反之,情况可能在恶化。
    监控平台可以设置15分钟平均负载监控的告警阈值和告警级别,满足条件则进行告警。

    15分钟负载监控

    7.1.3.8.3 内存

    可以设置内存监控的告警阈值和告警级别,满足条件则进行告警。

    内存监控

    7.1.3.8.4 磁盘

    可以设置磁盘监控的告警阈值和告警级别,满足条件则进行告警。

    磁盘监控

    7.1.3.9 Docker

    Docker 有一个是否监控的开关,打开则监控 Docker,关闭则不监控 Docker。Docker 状态是否监控、是否告警也可以单独设置。

    docker监控监控

    7.1.4 告警定义

    告警定义用于自定义业务埋点监控,在此处添加自定义告警,然后就可以在埋点监控的时候使用。

    添加告警定义

    在埋点监控的时候,使用“添加告警定义”中生成的告警编码,则在满足告警条件的时候就会以告警定义中定义的内容发送告警。

    // 业务埋点监控
    ScheduledExecutorService service = Monitor.buryingPoint(() -> {
      // 假如发现了业务异常,用下面的代码发送告警
      Alarm alarm = new Alarm();
      alarm.setCode("bb5dd07988ecac50");
      alarm.setMonitorType(MonitorTypeEnums.CUSTOM);
      Result result = Monitor.sendAlarm(alarm);
      System.out.println("发送业务告警结果:" + result.toJsonString());
    }, 0, 1, TimeUnit.HOURS, ThreadTypeEnums.IO_INTENSIVE_THREAD);
    

    7.2 业务埋点监控

    Java应用程序只要集成了监控客户端,就具有业务埋点监控的能力。

    7.2.1 业务告警

    在需要业务监控的业务代码位置,通过 Monitor.buryingPoint(Runnable command, long initialDelay, long period, TimeUnit unit, ThreadTypeEnums threadTypeEnum) 方法定时监控业务运行情况,通过 Monitor.sendAlarm(Alarm alarm) 发送告警。可以参考以下示例代码(不局限于此,可以自己灵活使用):

    // 业务埋点监控
    ScheduledExecutorService service = Monitor.buryingPoint(() -> {
      // 假如发现了业务异常,用下面的代码发送告警
      Alarm alarm = new Alarm();
      alarm.setAlarmLevel(AlarmLevelEnums.ERROR);
      alarm.setTitle("业务埋点监控");
      alarm.setTest(false);
      alarm.setCharset(Charsets.UTF_8);
      alarm.setMsg("测试普通maven程序业务埋点监控!");
      // alarm.setCode("001");
      alarm.setMonitorType(MonitorTypeEnums.CUSTOM);
      Result result = Monitor.sendAlarm(alarm);
      System.out.println("发送业务告警结果:" + result.toJsonString());
    }, 0, 1, TimeUnit.HOURS, ThreadTypeEnums.IO_INTENSIVE_THREAD);
    

    7.2.2 异常日志(收费版)

    在需要收集异常日志的业务代码位置,通过 Monitor.collectException(ExceptionInfo exceptionInfo, boolean alarmEnable) 收集异常日志,此方法有两个入参,第一个入参为 异常日志信息,第二个入参为 是否开启异常日志信息告警。可以参考以下示例代码(不局限于此,可以自己灵活使用):

    @ExceptionHandler(Exception.class)
    public ModelAndView exceptionHandler(HttpServletRequest request, Exception e) throws Exception {
        log.error("Requst URL : {},Exception : {}", request.getRequestURL(), e.getMessage());
        String method = request.getMethod();
        String requestUri = request.getRequestURI();
        // 异常名称
        String excName = e.getClass().getSimpleName();
        // 转换请求参数
        Map<String, Object> reqParamMap = MapUtils.convertParamMap(request.getParameterMap());
        // 封装异常信息
        ExceptionInfo exceptionInfo = ExceptionInfo.builder()
                .excName(excName)
                .excMessage(ExceptionUtils.stackTraceToString(excName, e.getMessage(), e.getStackTrace()))
                .reqParam(reqParamMap.isEmpty() ? "" : JSON.toJSONString(reqParamMap))
                .reqUri(method + " " + requestUri)
                .reqIp(AccessObjectUtils.getClientAddress(request))
                .userId(SpringSecurityUtil.getCurrentUserRealm() == null ? null : SpringSecurityUtil.getCurrentUserRealm().getUserId())
                .username(SpringSecurityUtil.getCurrentUserRealm() == null ? null : SpringSecurityUtil.getCurrentUserRealm().getUsername())
                .build();
        // 收集异常信息
        Monitor.collectException(exceptionInfo, true);
        // 标识了状态码的时候就不拦截
        if (AnnotationUtils.findAnnotation(e.getClass(), ResponseStatus.class) != null) {
            throw e;
        }
        ModelAndView mv = new ModelAndView();
        mv.addObject("url", request.getRequestURL());
        mv.addObject("exception", e);
        mv.setViewName("error/error");
        return mv;
    }
    
    end
  1. 作者: 锋哥 (联系作者)
  2. 发表时间: 2025-01-14 20:43
  3. 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
  4. 转载声明:如果是转载博主转载的文章,请附上原文链接
  5. 公众号转载:请在文末添加作者公众号二维码(公众号二维码见右边,欢迎关注)
  6. 评论

    站长头像 知录

    你一句春不晚,我就到了真江南!

    文章0
    浏览0

    文章分类

    标签云