给我的 IM 系统加上监控两件套:【Prometheus + Grafana】

监控是一个系统必不可少的组成部分,实时,准确的监控,将会大大有助于我们排查问题。而当今微服务系统的话有一个监控组合很火那就是 Prometheus + Grafana,嘿你别说 这俩兄弟配合的相当完美,Prometheus负责数据采集,Grafana负责可视化展示,各就其位,各司其职一起来完成 监控 这个活儿。

紧接着我们简单对这两工具做个介绍~

1、Prometheus 与 Grafana 简介

Prometheus

作用

  • 数据收集: Prometheus 是一个开源的系统监控和报警工具,主要用于收集、存储和查询时间序列数据。它通过 HTTP 抓取(scrape)方式从被监控的目标获取数据。
  • 数据存储:Prometheus 使用时间序列数据库来存储所有收集到的指标数据。时间序列数据包括指标名称和标签,标签用于唯一标识时间序列。
  • 数据查询:Prometheus 提供了一种强大的查询语言 PromQL,可以用来查询和分析收集到的数据(虽然语法强大, 但是还是不如可视化 。哈哈,所以要和grafana配合起来)。
  • 告警: Prometheus 内置告警管理器(Alertmanager),可以根据预定义的规则触发告警,并将告警发送到各种通知渠道(如邮件、Slack、PagerDuty 等)。

特点

  • 开源免费:Prometheus 是开源的,拥有活跃的社区和丰富的文档。
  • 自带存储:Prometheus 自带时间序列数据库(TSDB),无需外部依赖。
  • 多种数据源:支持从多种数据源采集指标数据,如 Kubernetes、MySQL、Linux 系统等。
  • 可扩展性强:可以通过自定义导出器(exporter)扩展数据采集能力。

Grafana

作用

  • 数据可视化:Grafana 是一个开源的平台,用于数据可视化和分析。它能够连接到多种数据源,并将数据以各种形式(图表、表格、仪表盘等)展示出来。
  • 仪表盘:Grafana 提供丰富的仪表盘功能,可以用来创建和共享实时的动态仪表盘。用户可以通过拖拽组件轻松构建仪表盘。
  • 多数据源支持:Grafana 支持多种数据源,包括 Prometheus、Graphite、InfluxDB、Elasticsearch、MySQL、PostgreSQL 等。
  • 告警:Grafana 也支持告警功能,用户可以在图表上设置告警规则,并通过通知渠道(如邮件、Slack、PagerDuty 等)接收告警。

特点

  • 开源免费:Grafana 也是开源的,拥有广泛的用户群体和丰富的插件。
  • 多数据源支持:Grafana 能够同时从多个数据源获取数据,并在同一个仪表盘中展示。
  • 灵活的可视化:提供丰富的图表类型和可定制的可视化选项,能够满足各种数据展示需求。
  • 仪表盘共享:可以轻松分享仪表盘,并支持权限控制和团队协作。

Prometheus 与 Grafana 之间是如何协作的 ?

  • 数据采集与存储:Prometheus 负责从各个监控目标收集指标数据,并存储在其时间序列数据库中。
  • 数据查询与分析:Prometheus 提供了强大的查询语言 PromQL,可以用来查询和分析数据。
  • 数据可视化:Grafana 连接到 Prometheus 作为数据源,使用 PromQL 查询数据,并将结果以图表的形式展示在仪表盘上。
  • 告警:Prometheus 可以管理和触发告警,而 Grafana 可以基于可视化图表设置告警规则。

示例场景

  1. 监控应用性能:使用 Prometheus 采集应用程序的性能指标(如 CPU 使用率、内存使用率、请求延迟等),并在 Grafana 中创建仪表盘实时展示这些指标。
  2. 告警管理:在 Prometheus 中定义告警规则,如 CPU 使用率超过阈值时触发告警,并通过 Alertmanager 发送通知。也可以在 Grafana 中基于图表设置告警规则。
  3. 系统健康检查:使用 Prometheus 监控系统的健康状况,收集系统级指标(如磁盘使用率、网络流量等),并在 Grafana 中创建健康检查仪表盘。

通过结合使用 Prometheus 和 Grafana,你可以实现强大且灵活的监控和可视化方案,帮助你更好地了解和管理应用程序和基础设施的性能和健康状况。

好了bb这么多 ~

下面我就开始对我的IM即时通讯系统做改造,让其也能被可视化,做到实时监控各项指标一目了然。

2、使用grafana + promethues 监控IM服务和中间件

因为我目前是使用docker-compose方式编排管理容器,所以也使用docker-compose安装promethues和grafana

grafana + promethues 使用示例

  1. 首先在docker-compose增加内容: 首先在我的docker-compose中定义 镜像,挂载,容器名称,端口,网络,依赖哪些容器启动 等配置,如下: ```java prometheus: image: prom/prometheus containername: prometheus volumes: # 数据挂载 防止容器重启/停止后 数据消失 - /usr/local/softhzz/docker/prometheus/conf/prometheus.yml:/etc/prometheus/prometheus.yml - /usr/local/softhzz/docker/prometheus/data/prometheusdata:/prometheus # 挂载数据到宿主机目录

    ports: - "9090:9090" networks: - defaultnetwork dependson: - im-connect - im-console - im-business - im-gateway - im-auth - nodeexporter - cadvisor grafana: image: grafana/grafana containername: grafana ports: - "3000:3000" environment: - GFSECURITYADMIN_PASSWORD=grafana123 # grafana 密码 # 挂载数据到宿主机目录 volumes:

    • /usr/local/softhzz/docker/grafana/grafanadata:/var/lib/grafana

      必须指定 网络,否则无法通过服务名 如:im-business 找到对应的ip

      networks:

      • defaultnetwork dependson:
      • im-connect
      • im-console
      • im-business
      • im-gateway
      • im-auth
      • prometheus ```
  2. 之后需要有一个prometheus.yml文件,用于定义prometheus抓取指标的策略,如下: image.png (注意上边这个prometheus.yml文件的路径一定要和docker-compose中的这个保持一致哦 image.png

这里我们不做运行了,因为这样运行的话没有意义,还需要给其配上一堆目标和一堆规则,下边我们就开搞。

监控IM服务和中间件

说明:

在配置和开干之前,我先根据我踩得坑,说明几个情况:

首先并不是所有的中间件或者服务都能直接让prometheus采集数据,因为有些压根就没暴露,面对这种情况,想要采集?要不就是人家写好的 各种 exporter ,要不就得自己根据 prometheus client采集 采集的话你也得收集指标并提供指标接口才行,我在采集的时候遇到了下边这几种情况。

情况1: 硬件指标
  • 硬件指标没啥说的,人家已经贴心给你搞好了,就是使用 node-exporter这个 exporter去采集就行了,如下image.png

    情况2: SpringBoot搭建的http服务的指标
  • 这种服务的指标很好采集,因为SpringBoot框架也已经贴心的给你搞好了就是(SpringBoot Actuator 这个东东),你只需要引入下Maven配置下暴露的端点(url)就可以让prometheus 痛快的采集。image.png配置一下:image.png

情况3: 中间件指标(我采集了Redis ,MySQL, RocketMQ )

(注意:目前只采集三个比较重要的中间件,因为采集越多越耗费资源其他中间件暂时不做监控我看了下基本这些中间件都得采用 exporter方式去搞)

  • 很多中间件比如这三个都是没有直接暴露监控指标的,也就是说prometheus无法直接向mysql或者redis或者rocketmq抓取指标数据,目前大多的方式都是搞了一个 exporter这么个中间人(其实也是个进程) ,让他去使用promethues客户端(client)来抓取指定的中间件的指标数据,然后再归并汇总为prometheus的格式,最终给到prometheus。
  • 这三个中间件使用的 exporter 介绍:

    • redis使用 redis-exporter 进行采集 镜像:oliver006/redis_exporter:latest
    • mysql使用 mysqld-exporter进行采集 镜像:prom/mysqld-exporter:latest
    • rocketMQ使用 rocketmq-exporter进行采集 注意:这个没有官方镜像,最好是下载代码自己打镜像这样靠谱些 仓库在这: rocketmq-exporter,但是按部就班按官方的步骤来我还是遇到点问题所以写了个脚本解决这个问题,具体见下边脚本内容:image.png
      情况4: 非http服务:无法暴露http接口给 prometheus
  • 在我的im项目中 im-connetc是一个比较特殊的服务,他使用Springboot框架搭建 但是服务器是netty ,也就是说他不是一个http服务而是一个长连接服务,他不提供http接口供prometheus采集(虽能在maven集成SpringBoot Actuator 但是你这不是http服务 Actuator的接口根本无法对外暴露出去),面对此情况,我一开始是准备搞个 jmx 但是这种方式比较麻烦而且采集的指标也有限,后来改用prometheus client我发现,我去 好像很爽 想采集什么你自己定 默认的gc 线程 内存 cpu(内存和cpu这些硬件指标需要结合dropwizard去采集) 都有 你也可以定义业务上的指标供 prometheus采集以及后续展示。

    情况5: 踩坑经历
  • 一开始 我想用 jmx_prometheus去采集我的im-connect服务的指标,他有两种方式一个是使用javaagent给目标程序插桩,一个是单独搞个jmx_prometheus进程去采集im-connect 但是折腾半天发现,不是采集不上就是连不上(但是可以通过访问5556端口(jmxprometheus的端口)拿到指标,但是很迷我就算压测im-connect指标也不见多少变化,我严重怀疑我采集的不是im-connect而是jmxprometheus进程本身,stackoverflow看到个人好像和我有类似的疑虑),后来干脆放弃了jmx_prometheus方式,反正条条大路通罗马,我换成 prometheus client方式采集长连接服务,效果也不错,还更灵活,挺香的~~~ (ps: 但是 prometheus client得自己写点代码,其实这点代码也可以将其封装为一个javaagent方式,不过时间原因先不搞agent了 先把最近的目标完成后边有时间再说正好我也可以再和javaagent叙叙旧)

    • 下边是代码片段,完整的在我的开源项目:xzll-im中image.pngimage.png

开干:

在有了上边的铺垫之后,接下来我们就开干!

docker-compose.yaml文件编写

ps:注意有很多我在文件中注释了这里就不详细解释了,直接上 docker-compose.yaml 文件 ```yaml version: '3.9' services: im-gateway: build: context: ./im-gateway dockerfile: Dockerfile image: im-gateway:latest

hostname: im-gateway
container_name: im-gateway
restart: always
ports:- "8081:8081"
networks:- default_network
volumes:- "/tmp/data/logs:/logs"
depends_on:- nacos- zookeeper- redis- rmq_broker- rmq_namesrv

im-auth: build: context: ./im-auth dockerfile: Dockerfile image: im-auth:latest

hostname: im-auth
container_name: im-auth
restart: always
ports:- "8082:8082"
networks:- default_network
volumes:- "/tmp/data/logs:/logs"
depends_on:- nacos- zookeeper- redis- rmq_broker- rmq_namesrv

im-business: # 可以根据Dockerfile构建镜像(但是,Docker Compose 会在检测到上下文变化时重新构建镜像。也就是说如果你不修改Dockerfile docker-compose应该不是每次都构建镜像 实测确实如此) build: context: ./im-business # 指定Dockerfile文件位置 dockerfile: Dockerfile # 指定名称 image: im-business:latest # 指定生成镜像的 名称

# 也可以直接指定镜像名 但是要确保镜像存在 (如果在docker仓库, 则不需要再本地存在镜像 会自动pull)
# image: im-business:0.0.2# 设置容器的主机名 即修改 : /etc/hosts 中的内容,注意 如果是在docker中 ,容器间相互访问的时使用的是 容器的hostname 那么必须配hostname
hostname: im-business
# 容器名称
container_name: im-business
# 重启策略, always 表示无论哪种状态退出,都会重启容器
restart: always
ports:# 设置主机与容器的端口映射- "8083:8083"
networks:# 使用默认网络即:docker0 桥接- default_network
volumes:# 将主机的 /tmp/data/logs 目录挂载到容器的 /logs 目录。这样可以实现数据的持久化,当容器重启时,数据不会丢失,注意 挂载文件需要给宿主机文件 添加最权限,chmod -R 777 目标文件夹- "/tmp/data/logs:/logs"
depends_on:- nacos- zookeeper- redis- rmq_broker- rmq_namesrv

im-connect: build: context: ./im-connect dockerfile: Dockerfile image: im-connect:latest hostname: im-connect containername: im-connect restart: always ports: - "10000:10000" # prometheus指标采集端口 http (注:不采用jmx方式采集) - "10001:10001" # netty端口 networks: - defaultnetwork volumes: - "/tmp/data/logs:/logs" dependson: - nacos - zookeeper - redis - rmqbroker - rmq_namesrv

im-console: build: context: ./im-console dockerfile: Dockerfile image: im-console:latest hostname: im-console containername: im-console restart: always ports: - "8084:8084" networks: - defaultnetwork volumes: - "/tmp/data/logs:/logs" dependson: - nacos - zookeeper - redis - rmqbroker - rmq_namesrv

# ######################################### 以下是此im项目 依赖的中间件 #########################################

# rocketMq nameServer rmqnamesrv: image: apache/rocketmq:4.8.0 containername: rmqnamesrv hostname: rmqnamesrv restart: always networks: - default_network ports: - "9876:9876"

- "1099:1099" # jmxremote暴露的端口

volumes:- /usr/local/soft_hzz/docker/rocketmq_namesrv/store:/root/store- /usr/local/soft_hzz/docker/rocketmq_namesrv/logs:/root/logs
environment:# 配置jmxremote 以便jmx监控- JAVA_OPTS=-Djava.rmi.server.hostname=rmq_namesrv -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
command: sh mqnamesrv

# rocketMq broker rmqbroker: image: apache/rocketmq:4.8.0 containername: rmqbroker restart: always hostname: rmqbroker networks: - default_network ports: - "10911:10911" # 外部通信端口。客户端(生产者和消费者)与 Broker 进行通信时使用此端口 - "10909:10909" # 内部通信端口。用于 Broker 间的同步、复制和其他内部通信

- "11099:11099" # jmxremote暴露的端口

volumes:- /usr/local/soft_hzz/docker/rocketmq_broker/store:/root/store- /usr/local/soft_hzz/docker/rocketmq_broker/logs:/root/logs- /usr/local/soft_hzz/docker/rocketmq_broker/conf/broker.conf:/opt/rocketmq-4.8.0/conf/broker.conf
environment:# 降低内存大小 防止启动失败 并配置 jmxremote 以便jmx监控- JAVA_OPT_EXT=-server -Xms512m -Xmx1g -Xmn256m#- JAVA_OPT_EXT=-server -Xms512m -Xmx1g -Xmn256m -Djava.rmi.server.hostname=rmq_broker -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=11099 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
command: sh mqbroker -c /opt/rocketmq-4.8.0/conf/broker.conf

rocketmqexporter: image: rocketmq-exporter:latest containername: rocketmq-exporter restart: always hostname: rocketmq-exporter networks: - defaultnetwork ports: - "5557:5557" environment: - JAVAOPTS=-Drocketmq.namesrv.addr=rmqnamesrv:9876 -Drocketmq.broker.addr=rmqbroker:10911 dependson: - rmqnamesrv - rmq_broker

rocketmq-console: image: styletang/rocketmq-console-ng containername: rocketmq-console restart: always ports: - "8080:8080" environment: JAVAOPTS: "-Drocketmq.namesrv.addr=${LOCALIP}:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" dependson: - rmqnamesrv - rmqbroker # nacos nacos: image: nacos/nacos-server:2.0.3 containername: nacos restart: always ports: - "8848:8848" volumes: - /usr/local/softhzz/docker/nacos/data:/home/nacos/data - /usr/local/softhzz/docker/nacos/logs:/home/nacos/logs environment: MODE: standalone #redis redis: image: redis containername: redis restart: always networks: - defaultnetwork ports: - "6379:6379" volumes: - /usr/local/softhzz/docker/redis/data:/data - /usr/local/softhzz/docker/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf command: redis-server /usr/local/etc/redis/redis.conf # zk zookeeper: image: zookeeper containername: zookeeper restart: always ports: - "2181:2181" volumes: - /usr/local/softhzz/docker/zk/data:/data - /usr/local/softhzz/docker/zk/datalog:/datalog - /usr/local/soft_hzz/docker/zk/conf/zoo.cfg:/conf/zoo.cfg

prometheus: image: prom/prometheus containername: prometheus volumes: # 数据挂载 防止容器重启/停止后 数据消失 - /usr/local/softhzz/docker/prometheus/conf/prometheus.yml:/etc/prometheus/prometheus.yml # prometheus配置文件,配置抓取的规则和抓取目标 - /usr/local/softhzz/docker/prometheus/data/prometheusdata:/prometheus # 挂载数据到宿主机目录

ports:- "9090:9090"
networks:- default_network
depends_on:- im-connect- im-console- im-business- im-gateway- im-auth- node_exporter- cadvisor

grafana: image: grafana/grafana containername: grafana ports: - "3000:3000" environment: - GFSECURITYADMINPASSWORD=grafana123 # grafana 密码 # 挂载数据到宿主机目录 volumes: - /usr/local/softhzz/docker/grafana/grafanadata:/var/lib/grafana

# 必须指定 网络,否则无法通过服务名 如:im-business 找到对应的ip
networks:- default_network
depends_on:- im-connect- im-console- im-business- im-gateway- im-auth- prometheus

# 用于监控linux系统的信息 nodeexporter: image: prom/node-exporter containername: node-exporter ports: - "9100:9100" networks: - defaultnetwork # 用于监控docker容器的信息 cadvisor: image: google/cadvisor:latest containername: cadvisor ports: - "9101:8080" # 8080已经被rocketMQ控制台占用 所以这里选择映射到主机的 9101端口 privileged: true

volumes:

#- /usr/local/soft_hzz/docker/cadvisor/run/docker.sock:/var/run/docker.sock#- /usr/local/soft_hzz/docker/cadvisor/sys:/sys# - /usr/local/soft_hzz/docker/cadvisor/lib/docker/:/var/lib/docker/
networks:- default_network

# 监控虚拟机上的mysql mysqld-exporter: image: prom/mysqld-exporter:latest containername: mysqld-exporter hostname: mysqld-exporter networks: - defaultnetwork environment: DATASOURCENAME: 'root:xzllaigH95..@tcp(${LOCAL_IP}:3306)/' ports: - "9104:9104"

# 监控redis redis-exporter: image: oliver006/redisexporter:latest containername: redis-exporter hostname: redis-exporter networks: - defaultnetwork environment: REDISADDR: 'redis:6379' REDISPASSWORD: '123456' # redis密码 ports: - "9121:9121" dependson: - redis

networks: default_network: # 桥接 driver: bridge ```

prometheus.yml 抓取规则配置文件

```yaml

prometheus 的配置文件,定义部分抓取规则以及 监控的目标实例

全局配置

global: scrape_interval: 15s # 抓取间隔:每 15 秒抓取一次所有配置的监控目标。

抓取规则:定义 Prometheus 要抓取的监控目标,以及抓取这些目标的相关配置

scrape_configs:

# # ----------------------------------------监控自己的几个服务----------------------------------------

  • job_name: 'im-gateway'

    static_configs:静态配置,定义了要抓取的目标地址和端口

    static_configs:

    • targets: [ 'im-gateway:8081' ]

      需要指定 否则的话 prometheus 默认找的路径是:ip:端口/metrics 而springboot2.7中是没有 /metrics 这个端点路径的

    metrics_path: /actuator/prometheus

  • jobname: 'im-auth' staticconfigs:

    • targets: [ 'im-auth:8082' ] metrics_path: /actuator/prometheus
  • jobname: 'im-business' staticconfigs:

    • targets: [ 'im-business:8083' ] metrics_path: /actuator/prometheus
  • jobname: 'im-console' staticconfigs:

    • targets: [ 'im-console:8084' ] metrics_path: /actuator/prometheus

    使用 prometheus 客户端采集netty服务的指标数据给 prometheus

  • jobname: 'im-connect' staticconfigs:

    md5-ddfe6145998a5d931151c8979b884716

    ----------------------------------------对硬件和中间件的监控----------------------------------------

    监控linux硬件系统和资源 grafana模板id: 1860 模板名称: Node Exporter Full

  • jobname: 'nodeexporter' static_configs:

    md5-35e0d4e81ba773d33aaf78fc38a4e6fd

    用于监控docker容器 grafana模板id: 893,名称: Docker and system monitoring

  • jobname: 'cadvisor' staticconfigs:

    md5-c713c6a83c68ba60e4a4c184180fae31

    监控 RocketMQ NameServer 和 RocketMQ Broker (此程序会有定时任务定时扫描rm指标 并归并上报给 prometheus,暂无docker镜像 需要手动下载并构建 详见)

    此监控也有grafana模板id : 10477 ,模板名称:Rocketmq_dashboard

  • jobname: 'rocketmqexporter' static_configs:

    md5-19b8ea741e1b3c34f63a3002e1835bbb

    监控虚拟机上的mysql(目前除了mysql 其余都是在docker部署) ,grfnada 模板id使用: 7362 模板名称: MySQL Overview

  • jobname: 'mysqld-exporter' staticconfigs:

    md5-807a23fb2de6d630db41ce82370be11d

    监控的reds ,grafana 模板id使用: 763,模板名称: Redis Dashboard for Prometheus Redis Exporter 1.x

  • jobname: 'redis-exporter' staticconfigs: md5-7ec1240a81fcbc786e1d92d4b84d31df
    本地上传到虚拟机并使用docker-compose部署
    我这里写个脚本,运行完后不用在虚拟机上执行命令了连上传带启动都有了,如下: ![image.png](https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/ad1daa22949948ceae904fad309da3c3~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=3256&h=1776&s=489363&e=png&b=2c2c2c) 执行完了: ![image.png](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/3cadd92bc6e34c7c8c56d7cc8f59ce5e~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=2884&h=1352&s=284166&e=png&b=2c2c2c)
    观察指标数据
    选几个看下是否正常暴露指标: 注意在部署成功后,是可以请求如下会返回一堆promethues格式的指标数据 ```bash

    查看硬件指标指标

    curl 192.168.1.103:9100/metrics

    查看mysql指标

    curl 192.168.1.103:9104/metrics

    查看redis指标

    curl 192.168.1.103:9121/metrics

    查看rocketmq指标

    curl 192.168.1.103:5557/metrics

    查看im-connect指标

    curl 192.168.1.103:10000/metrics

    查看im-gateway指标

    curl 192.168.1.103:8081/actuator/metrics

    查看其余web服务指标

    ... ``` 返回数据像这样: image.png

    看下prometheus是否正常采集: image.png

    在gaafana展示

    注意在grafana展示的话 需要先选取数据源,告诉grafana去哪里取数据

    添加: image.png 设置数据源地址: image.png

    导入已有模板

    对于大多数常用的指标,都有对应的开源模板人家已经编写好了(见:grafana官网),

    我使用的几个模板大概就这些 - 模板id: 1860 模板名称: Node Exporter Full ,用于展示硬件指标数据 - 模板id: 10477 ,模板名称:Rocketmq_dashboard 展示rocketmq指标数据 - 模板id: 7362 模板名称: MySQL Overview 展示mysql指标数据 - 模板id: 763,模板名称: Redis Dashboard for Prometheus Redis Exporter 1.x 展示redis指标数据 - 模板id: 10280,模板名称:Spring Boot 2.1 Statistics 展示Springboot web服务的数据 - 模板id: 4701,模板名称:JVM (Micrometer) 展示JVM的数据

    这里我们以jvm为例演示下,直接点击加号导入: image.png 比如:输入4701,点击load,选择数据源并起名后,点击import导入JVM (Micrometer) 监控面板: image.png image.png 查看: image.png image.png

    自己定义数据看板

    我的im-connect我发现指标不太一样,以现有模板展示的不尽人意所以我决定自己编写个模板:

    当然自己搞你得知道每个指标的含义,否则还怎么玩。

    创建一个面板: image.png 根据内存指标,设置内存使用情况的视图: image.png 根据线程状态指标设置线程状态视图: image.png 根据内存指标 设置内存视图: image.png

    当然你也可以使用模糊匹配,设置变量然后再需要的地方引用: image.png image.png 根据xx指标 设置xx视图等等:最后看下我自定义的im-connect的效果: image.png 最后切记:当你自定义好自己的视图后一定要保存,并且grafana的数据要挂载到宿主机,如果没挂载也没保存的话,那数据就丢失了。挂载是必须的,保存也是必须的。当然如果你不还是担心辛辛苦苦配的模板丢失(其实配模板挺辛苦的,尤其是配好看的齐全的模板 我花了很久时间研究这玩意你说说😄😂😂😂😂 哎 ),那么你可以在最终编辑完后,从这里copy一份json数据,下次如果找不到这个视图了,在导入模板id那个界面从新导入一份json数据就行啦:image.png

    看下最终效果:

    我目前搞了这些 暂时应该够用了: image.png

    Springboot应用监控效果:

    image.png

    jvm效果:

    image.png

    自定义模板监控 im-connect效果

    花了那么久也没人家开源的那些好看😂😂 , 😌 ! image.png

    MySQL效果:

    image.png

    Redis效果:

    image.png

    RocketMQ效果:

    有一说一 其实RocketMQ这个视图面板颜值也就那样。不过好在重要指标也都有了。 image.png

    硬件效果:

    这颜值,杠杠的 花里胡哨的,我喜欢 😍😍😍 哈哈! image.png

    好了本文到此结束现在凌晨1.26,赶紧睡觉呀。其实还差个告警,不过后期再加吧~~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/867050.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL系列】VARCHAR 类型详解及其使用策略

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

MySQL---事务管理

1.关于事务 理解和学习事务,不能只站在程序猿的角度来理解事务,而是要站在使用者(用户)的角度来理解事务。 比如支付宝转账,A转了B100块前,在程序猿的角度来看,是两条update操作,A …

浅谈反射机制

1. 何为反射? 反射(Reflection)机制指的是程序在运行的时候能够获取自身的信息。具体来说,反射允许程序在运行时获取关于自己代码的各种信息。如果知道一个类的名称或者它的一个实例对象, 就能把这个类的所有方法和变…

【贪心 堆 优先队列】502. IPO

本文涉及知识点 贪心 堆 优先队列 LeetCode502. IPO 假设 力扣(LeetCode)即将开始 IPO 。为了以更高的价格将股票卖给风险投资公司,力扣 希望在 IPO 之前开展一些项目以增加其资本。 由于资源有限,它只能在 IPO 之前完成最多 k…

ORB-SLAM3源码分析(案例分析)

一、ORB-SLAM3简介 ORB-SLAM3 (Oriented FAST and Rotated BRIEF SLAM 3) 是一种视觉SLAM(Simultaneous Localization and Mapping,同时定位与地图构建)系统,用于机器人和计算机视觉领域。它是ORB-SLAM系列的第三个版本&#xff…

非参数检测2——定义

定义:若研究二判定问题(即判断有无信号)的检测问题, 检测器的虚警概率可以由对输入数据统计特性提出微弱假设确定假设中不包含输入噪声的统计特性 则称该检测器为非参数检测器。 设计目标 在未知或时变环境下,有最…

【自动驾驶仿真在做什么——初学者总结(陆续补充)】

文章目录 基础概念自动驾驶级别再稍提一下ODD是什么? 自动驾驶仿真分类软件在环仿真硬件仿真 仿真究竟难在哪?关于lidar和radar区别一些名词解释 最近也是学习自动驾驶仿真相关知识,习惯去总结一下,方便自己回顾和总结&#xff0c…

【多媒体】富客户端应用程序GUI框架 JavaFX 2.0 简介

JavaFX 最初是由 Oracle 推出的一个用于开发富客户端应用程序的框架,它提供了丰富的用户界面控件、布局容器、3D图形绘制、媒体播放和动画等功能,旨在取代较旧的 Swing 框架。JavaFX 于 2007 年推出,2011 年 10 月发布了2.0 版本。JavaFX 2.0…

强强联合 | 人大金仓携手中国一汽引领国产数据库行业新浪潮

在国产化政策的推动下,人大金仓携手中国一汽联合开发更贴近汽车产业特定需求的数据库功能和组件。从2023年2月至今,人大金仓已累计部署690套数据库,适配应用系统170个,支撑中国一汽20多个核心系统和重要系统。目前,中国…

Okhttp hostnameVerifier详解

hostnameVerifier 方法简介核心原理参考资料 方法简介 本篇博文以Okhttp 4.6.0来解析hostnameVerfier的作用,顾名思义,该方法的主要作用就是鉴定hostnname的合法性。Okhttp在初始化的时候我们可以自己配置hostnameVerfier: new OkHttpClien…

计算机网络——数据链路层(以太网)

目录 局域网的数据链路层 局域网可按照网络拓扑分类 局域网与共享信道 以太网的两个主要标准 适配器与mac地址 适配器的组成与运作 MAC地址 MAC地址的详细介绍 局域网的mac地址格式 mac地址的发送顺序 单播、多播,广播mac地址 mac帧 如何取用…

YOLOX算法实现血细胞检测

原文:YOLOX算法实现血细胞检测 - 知乎 (zhihu.com) 目标检测一直是计算机视觉中比较热门的研究领域。本文将使用一个非常酷且有用的数据集来实现YOLOX算法,这些数据集具有潜在的真实应用场景。 问题陈述 数据来源于医疗相关数据集,目的是解决血细胞检测问题。任务是通过显微…

Linux基础指令及mysql(DQL)

[rootcentos ~]# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/export/server/jdk/bin:/root/binls在/usr/bin/路径下 [rootcentos ~]# which ls alias lsls --colorauto/usr/bin/lschmod ux,gx,o-r work.txt 可以对文件的权限进行修改。 sudo chown 修…

Python从入门到放弃——整数类型变量

变量 前言 上一篇文章中我们学习了Print函数,并且深入的理解了Print函数的各个参数。明确了应该如何利用各种参数来实现我们想输出的效果。那么现在让我们来学习一下变量这一个知识点。 什么是变量 变量,作为编程中的核心概念之一,其重要性…

STM32和DHT11使用显示温湿度度(代码理解)+单总线协议

基于STM32CT,利用DHT11采集温湿度数据,在OLED上显示。一定要阅读DHT11数据手册。 1、 DHT11温湿度传感器 引脚说明 1、VDD 供电3.3~5.5V DC 2、DATA 串行数据,单总线 3、NC 空脚 4、GND 接地,电源负极 硬件电路 微…

docker部署kafka(单节点) + Springboot集成kafka

环境: 操作系统:win10 Docker:Docker Desktop 4.21.1 (114176)、Docker Engine v24.0.2 SpringBoot:2.7.15 步骤1:创建网络: docker network create --subnet172.18.0.0/16 net-kafka 步骤2:安…

秋招突击——7/4——复习{}——新作{最长公共子序列、编辑距离、买股票最佳时机、跳跃游戏}

文章目录 引言复习新作1143-最长公共子序列个人实现 参考实现编辑距离个人实现参考实现 贪心——买股票的最佳时机个人实现参考实现 贪心——55-跳跃游戏个人实现参考做法 总结 引言 昨天主要是面试,然后剩下的时间都是用来对面试中不会的东西进行查漏补缺&#xff…

MySQL 9.0 创新版发布,大失所望。。

大家好,我是程序员鱼皮。2024 年 7 月 1 日,MySQL 发布了 9.0 创新版本。区别于我们大多数开发者常用的 LTS(Long-Term Support)长期支持版本,创新版本的发布会更频繁、会更快地推出新的特性和变更,可以理解…

python库(5):Psutil库实现系统和硬件监控工具

1 psutil简介 psutil(process and system utilities)是一个跨平台库,用于检索运行中进程和系统利用率(包括 CPU、内存、磁盘、网络等)的信息,可以提供丰富的系统监控功能。 2 psutil安装 pip install -i …

CSS中 实现四角边框效果

效果图 关键代码 border-radius:10rpx ;background: linear-gradient(#fff, #fff) left top,linear-gradient(#fff, #fff) left top,linear-gradient(#fff, #fff) right top,linear-gradient(#fff, #fff) right top,linear-gradient(#fff, #fff) left bottom,linear-gradient(…