给我的 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,赶紧睡觉呀。其实还差个告警,不过后期再加吧~~~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis入门程序详解

目录 一、MyBatis概述 二、编写MyBatis入门程序 三、配置SQL提示 四、传统jdbc的劣势 一、MyBatis概述 MyBatis是一个基于Java的持久层框架,它内部封装了JDBC操作,使得开发人员可以更专注于SQL语句本身而非繁琐的JDBC操作细节。在MyBatis中&#xff0…

LLM - 词向量 Word2vec

1. 词向量是一个词的低维表示,词向量可以反应语言的一些规律,词意相近的词向量之间近乎于平行。 2. 词向量的实现: (1)首先使用滑动窗口来构造数据,一个滑动窗口是指在一段文本中连续出现的几个单词&#x…

逻辑这回事(八)---- 时钟与复位

时钟设计总结 时钟和复位是FPGA设计的基础,本章总结了一些逻辑时钟复位设计、使用中出现的问题,给出了设计要点,避免后续问题重犯。时钟和复位,本文都先从板级谈起,再到FPGA芯片级,最后到模块级别。仅在此…

Java需要英语基础吗?

Java编程语言本身并不要求必须有很强的英语基础,因为Java的语法和逻辑是独立于任何特定语言的。我收集归类了一份嵌入式学习包,对于新手而言简直不要太棒,里面包括了新手各个时期的学习方向编程教学、问题视频讲解、毕设800套和语言类教学&am…

Nginx的安装与配置 —— Linux系统

一、Nginx 简介 1.1 什么是 Nginx Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务…

部署AI平台-Ollama

介绍 llama:LLaMA(Large Language Model Meta AI)是由 Meta(原Facebook公司)发布的一系列大型语言模型。这些模型旨在处理和生成自然语言文本,能够执行多种任务,如文本摘要、翻译、问答、文本生成等。LLaMA 模型因其高效的性能和较小的模型尺…

网络安全设备——蜜罐

网络安全设备蜜罐(Honeypot)是一种主动防御技术,它通过模拟真实网络环境中的易受攻击的目标,以吸引和监测攻击者的活动。具体来说,蜜罐是一种虚拟或实体的计算机系统,它模拟了一个真实的网络系统或应用程序…

【C语言】字符函数和字符串函数的介绍和模拟实现

介绍处理字符和字符串的库函数的使用和注意事项 求字符串长度 strlen 长度不受限制的字符串函数 strcpy strcat strcmp 长度受限制的字符串函数介绍 strncpy strncat strncmp 0. 前言 C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的&am…

数据分析:基于STAR+FeatureCounts的RNA-seq分析全流程流程

流程主要包含两部分组成: 第一部分:二代测序数据的Raw data的fastq文件转换成Gene Count或者Features Counts表(行是Features,列是样本名);第二部分:对counts 表进行统计分析,并对其…

使用 C# 和 CefSharp 构建的全功能且快速的 Web 浏览器

SharpBrowser项目介绍 使用 C# 和 CefSharp 构建的全功能且快速的 Web 浏览器:SharpBrowser。 SharpBrowser是一个基于高性能的CefSharp渲染器的开源C# Web浏览器,采用MIT许可证。相较于Google Chrome,它在渲染网页时略有提升速度。该项目选…

Open3D 在点云中构建八叉树

目录 一、概述 二、代码实现 2.1关键函数 2.2完整代码 三、实现效果 3.1原始点云 3.2构建后点云 一、概述 八叉树(Octree)是一种树状数据结构,用于递归地将3D空间分割成较小的立方体。八叉树特别适用于3D计算机图形学、点云处理和空间…

伯克利、斯坦福和CMU面向具身智能端到端操作联合发布开源通用机器人Policy,可支持多种机器人执行多种任务

不同于LLM或者MLLM那样用于上百亿甚至上千亿参数量的大模型,具身智能端到端大模型并不追求参数规模上的大,而是指其能吸收大量的数据,执行多种任务,并能具备一定的泛化能力,如笔者前博客里的RT1。目前该领域一个前沿工…

代理模式详解、RESTFul风格、Spring IOC

Day49 代理模式proxy 概念: 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式,即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能. 代理模式分为静态代理和动态代理…

西安石油大学 课程习题信息管理系统(数据库课设)

主要技术栈 Java Mysql SpringBoot Tomcat HTML CSS JavaScript 该课设必备环境配置教程:(参考给出的链接和给出的关键链接) JAVA课设必备环境配置 教程 JDK Tomcat配置 IDEA开发环境配置 项目部署参考视频 若依框架 链接数据库格式注…

部署LVS+keepalived做网站的高可用,高负载。

LVSkeepalived keepalived背景 针对LVS的辅助工具,主要提供故障切换与健康检查。 工作场景:作为调度器的双机热备,以及节点服务器的健康检查以及故障切换(删除条目)。 借鉴了VRRP协议来实现高可用。 keepalived部署…

鸿蒙开发设备管理:【@ohos.vibrator (振动)】

振动 说明: 开发前请熟悉鸿蒙开发指导文档:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 导入模块 imp…

【网工】学习笔记1

windows:ipconfig ens40:和别人通信的网卡 lo本地回环和自己通信的网卡 ifconfig down/up 进程:运行起来的程序 使用浏览器访问网站:http:电脑上的程序和网站上的程序之间的通信。 主要用于服务器和客户端之间上传和…

Vue-Router4.0 报“Cannot read property ‘forEach‘ of undefined”

Vue-Router4.0在创建路由时 报“Cannot read property ‘forEach‘ of undefined” 解决办法 将路由规则名称更改为routes,否则报错 import { createWebHashHistory, createRouter } from vue-router; // 创建路由规定 const routes [{path: /login,name: login,co…

51单片机基础11——蓝牙模块控制亮灭

串口初试——蓝牙模块 蓝牙模块的使用1. 软硬件条件2. 蓝牙模块3. 代码(分文件处理之后的代码) 蓝牙模块的使用 1. 软硬件条件 单片机型号:STC89C52RC开发环境:KEIL4烧录软件串口通信软件:stc-isp蓝牙模块:HC-04LED模块(高电平点…

【数智化人物展】天云数据CEO雷涛:大模型连接数据库 为数智化提供高价值数据...

雷涛 本文由天云数据CEO雷涛投递并参与由数据猿联合上海大数据联盟共同推出的《2024中国数智化转型升级先锋人物》榜单/奖项评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 这几天,奥特曼讲SQL数据库和大模型结合起来会产生什么样的化学变化引起行业关注。为…