给我的 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抓取指标的策略,如下: 给我的 IM 系统加上监控两件套:【Prometheus + Grafana】_第1张图片 (注意上边这个prometheus.yml文件的路径一定要和docker-compose中的这个保持一致哦 给我的 IM 系统加上监控两件套:【Prometheus + Grafana】_第2张图片

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

监控IM服务和中间件

说明:

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

首先并不是所有的中间件或者服务都能直接让prometheus采集数据,因为有些压根就没暴露,面对这种情况,想要采集?要不就是人家写好的 各种 exporter ,要不就得自己根据 promet

你可能感兴趣的:(prometheus,grafana)