27、构建监控系统:Prometheus和Grafana监控SimpleBank

构建监控系统:Prometheus和Grafana监控SimpleBank

在当今的软件开发和运维中,监控系统起着至关重要的作用。它可以帮助我们实时了解服务和基础设施的运行状况,及时发现并解决潜在的问题。本文将介绍如何使用Prometheus和Grafana构建一个监控系统,对SimpleBank进行监控。

1. 直方图的使用

直方图是一种用于对观测值进行采样,并根据类型、时间等可配置的区间进行分类的工具。以下是一些可以用直方图表示的指标示例:
- 请求延迟
- I/O延迟
- 每个响应的字节数

2. 监控指标的推荐实践
  • 数据收集 :尽可能多地对服务和基础设施进行检测,以收集更多的数据。因为数据一旦错过就无法再回溯收集,但可以利用之前收集的数据。
  • 数据展示 :在展示数据、创建仪表盘和设置警报时,要循序渐进,避免一次性展示过多信息,导致难以分析。可以为每个服务创建多个详细的仪表盘,但保留一个包含最重要信息的顶级仪表盘,以便快速判断服务是否正常运行。
  • 关注关键指标 :在表示指标时,应关注最重要的指标,如响应时间、错误率和流量。这些指标是可观测性能力的基础。同时,要根据不同的用例关注合适的百分位数,如99%、95%、75%等,具体取决于业务需求。
  • 使用标签 :尽可能使用标签为指标提供上下文信息,例如环境(生产、预发布、QA)和用户ID。通过对指标进行标签化,可以对其进行分组,从而获得更多的洞察。
  • 指标命名规范 :在命名指标时,要遵循一定的标准,保持跨服务的命名方案一致。一种可行的命名方式是使用服务名称、方法和要收集的指标类型,例如:
  • orders_service.sell_shares.count
  • orders_service.sell_shares.success
  • fees_service.charge_fee.failure
  • account_transactions_service.request_reservation.max
  • gateway.sell_shares.avg
  • market_service.place_order.95percentile
3. 使用Prometheus和Grafana监控SimpleBank

为了对SimpleBank进行监控,我们需要将从服务和基础设施收集的指标发送到一个能够聚合和展示这些指标的系统中,并利用这些指标提供警报功能。这里我们将使用Prometheus进行指标收集,使用Grafana进行指标展示。
- Prometheus :是一个开源的系统监控和警报工具包,最初由SoundCloud开发,现在是一个独立的开源项目,不依赖于任何公司进行维护。
- Grafana :是一个可以在多个指标数据源(如Graphite、InfluxDB和Prometheus)之上构建仪表盘的工具。

我们将使用Docker进行所有的设置。之前已经为服务添加了通过StatsD发出指标的能力,现在我们将保持这些服务不变,添加一些组件将StatsD格式的指标转换为Prometheus使用的格式,并添加一个已经配置好向Prometheus发送指标的RabbitMQ容器。

以下是构建监控系统所需的容器:

graph LR
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    A(Service):::process -->|Metrics| B(StatsD server):::process
    B -->|Metrics| C(StatsD exporter):::process
    C -->|Metrics| D(Prometheus):::process
    D -->|Metrics| E(Grafana):::process
    F(RabbitMQ):::process -->|Metrics| D
4. 搭建指标收集基础设施
4.1 添加组件到Docker Compose文件

以下是 docker-compose.yml 文件的部分内容,其中包含了与监控相关的容器配置:

rabbitmq: 
    container_name: simplebank-rabbitmq
    image: deadtrickster/rabbitmq_prometheus
    ports:
      - "5673:5672"
      - "15673:15672"
  redis:
    container_name: simplebank-redis
    image: redis
    ports:
      - "6380:6379"
  statsd_exporter: 
    image: prom/statsd-exporter
    command: "-statsd.mapping-config=/tmp/statsd_mapping.conf" 
    ports:
      - "9102:9102"
      - "9125:9125/udp"
    volumes:
      - "./metrics/statsd_mapping.conf:/tmp/statsd_mapping.conf"
  prometheus: 
    image: prom/prometheus
    command: "--config.file=/tmp/prometheus.yml --web.listen-address '0.0.0.0:9090'" 
    ports:
      - "9090:9090"
    volumes:
      - "./metrics/prometheus.yml:/tmp/prometheus.yml"
  statsd: 
    image: dockerana/statsd
    ports:
      - "8125:8125/udp"
      - "8126:8126"
    volumes:
      - "./metrics/statsd_config.js:/src/statsd/config.js" 
  grafana: 
    image: grafana/grafana
    ports:
      - "3900:3000"
  • RabbitMQ :作为事件队列,使用的镜像已经以Prometheus格式发出指标,可以直接连接。
  • StatsD Exporter :获取发送到StatsD服务器的指标,并将其转换为Prometheus格式,以便Prometheus后续获取。
  • Prometheus :使用官方镜像,通过自定义配置文件进行启动。
  • StatsD :设置StatsD服务器,收集服务发送的指标。
  • Grafana :使用官方镜像,提供收集指标的UI界面。
4.2 配置StatsD Exporter

参与下单功能的服务会以StatsD格式发出指标,以下是这些服务及其发出的指标:
| 服务 | 指标 |
| — | — |
| 账户交易 | request_reservation |
| 费用 | charge_fee |
| 网关 | health, sell_shares |
| 市场 | request_reservation, place_order_stock_exchange |
| 订单 | sell_shares, request_reservation, place_order |

为了将StatsD指标映射到Prometheus,需要创建一个配置文件 statsd_mapping.conf ,示例如下:

simplebank-demo.account-transactions.request_reservation 
name="request_reservation" 
app="account-transactions" 
job="simplebank-demo" 
simplebank-demo.fees.charge_fee 
name="charge_fee"
app="fees"
job="simplebank-demo"
simplebank-demo.gateway.health 
name="health"
app="gateway"
job="simplebank-demo"
simplebank-demo.gateway.sell_shares
name="sell_shares"
app="gateway"
job="simplebank-demo" 
simplebank-demo.market.request_reservation 
name="request_reservation"
app="market"
job="simplebank-demo"
simplebank-demo.market.place_order_stock_exchange
name="place_order_stock_exchange"
app="market"
job="simplebank-demo" 
simplebank-demo.orders.sell_shares 
name="sell_shares"
app="orders"
job="simplebank-demo"
simplebank-demo.orders.request_reservation
name="request_reservation"
app="orders"
job="simplebank-demo"
simplebank-demo.orders.place_order
name="place_order"
app="orders"
job="simplebank-demo" 

如果不进行映射,指标仍然可以被收集,但收集方式会不太方便。

4.3 配置Prometheus

配置Prometheus以从StatsD Exporter和RabbitMQ获取数据,以下是 prometheus.yml 文件的示例:

global:
  scrape_interval:     5s 
  evaluation_interval: 10s
  external_labels:
      monitor: 'simplebank-demo'
alerting:
  alertmanagers:
  - static_configs:
    - targets:
scrape_configs: 
  - job_name: 'statsd_exporter' 
    static_configs:
      - targets: ['statsd-exporter:9102']
        labels:
          exporter: 'statsd'
    metrics_path: '/metrics'
  - job_name: 'rabbitmq'
    static_configs:
      - targets: ['rabbitmq:15672'] 
        labels:
          exporter: 'rabbitmq'
    metrics_path: '/api/metrics' 
4.4 设置Grafana

为了在Grafana中接收指标,需要设置一个数据源。首先,使用Docker Compose启动应用程序和基础设施:

chapter-11$ docker stop $(docker ps | grep simplebank | awk '{print $1}')
chapter-11$ docker rm $(docker ps -a | grep simplebank | awk '{print $1}')
chapter-11$ docker-compose up --build --remove-orphans  

启动后,可以通过端口3900访问Grafana的登录界面,使用默认的用户名和密码(均为admin)登录。登录后,选择“Add Data Source”,选择Prometheus作为类型,并插入运行中的Prometheus实例的URL(如 http://prometheus:9090 ),点击“Save & Test”按钮测试数据源状态。

通过以上步骤,我们就完成了使用Prometheus和Grafana对SimpleBank进行监控的基础设施搭建。后续我们将进一步介绍如何收集RabbitMQ的基础设施指标以及对SimpleBank下单功能相关服务的指标进行监控。

构建监控系统:Prometheus和Grafana监控SimpleBank

5. 收集基础设施指标 —— RabbitMQ

为了设置监控RabbitMQ的仪表盘,我们可以使用一个JSON配置文件,这是一种方便且易于共享仪表盘的方式。在源代码仓库的 grafana 文件夹中,有一个 RabbitMQ Metrics.json 文件,其中包含了仪表盘布局和要收集的指标的配置。

以下是在Grafana中导入该仪表盘的步骤:
1. 启动Grafana后,点击Grafana的logo,会弹出一个菜单。
2. 将鼠标悬停在“Dashboards”上,会出现“Import”选项,点击该选项。
3. 此时会弹出一个对话框,你可以选择在文本框中粘贴JSON内容,或者上传 RabbitMQ Metrics.json 文件。
4. 在使用导入的仪表盘之前,需要配置为其提供数据的数据源。这里我们使用之前配置好的SimpleBank数据源。

导入并配置好数据源后,RabbitMQ仪表盘就可以正常运行了。该仪表盘会显示服务器状态的监控信息,表明服务器是处于运行还是停止状态,同时还会展示交换机、通道、消费者、连接、队列、每个主机的消息数以及每个队列的消息数等相关图表。你可以将鼠标悬停在任何图表上,查看某个时间点的指标详细信息。点击图表的标题,会弹出一个上下文菜单,你可以通过该菜单对图表进行编辑、查看、复制或删除等操作。

6. 对SimpleBank下单功能进行指标监测

现在服务和监控基础设施(Prometheus和Grafana)都已正常运行,接下来我们要收集表1中描述的指标。

服务 指标
账户交易 request_reservation
费用 charge_fee
网关 health, sell_shares
市场 request_reservation, place_order_stock_exchange
订单 sell_shares, request_reservation, place_order

我们可以通过加载一个以JSON格式导出的仪表盘来实现,该文件可以在源代码目录的 grafana 文件夹中找到( Place Order.json )。加载步骤与之前导入RabbitMQ仪表盘的步骤相同。

加载后的仪表盘会收集时间指标,并显示每个指标的0.5、0.9和0.99分位数。在仪表盘的右上角,有手动刷新按钮以及显示指标的时间段选择区域。点击“Last 5 Minutes”标签,你可以选择其他时间段来显示指标,你可以从预设的快速范围值中选择,也可以自定义时间段,从而在任何你需要的范围内显示存储的指标。

下面我们以“Market | Place Order Stock Exchange”面板为例,详细介绍如何配置特定指标的显示:
1. 点击面板标题,然后选择“Edit”选项,会打开编辑界面。
2. 编辑界面有一组标签页,其中高亮显示的是“Metrics”标签页,你可以在该标签页中添加和编辑要显示的指标。在这个例子中,我们只收集了一个指标 place_order_stock_exchange_timer ,该指标表示市场服务向证券交易所下单所花费的时间。
3. 指标的默认显示包含应用名称、导出作业和分位数等元数据。为了改变图例的显示方式,你可以设置“Legend Format”。例如,你可以设置名称并使用 {{quantile}} 块,这样在图表图例和垂直红线旁边的悬浮窗口中都会显示分位数(当你将鼠标在收集的指标上移动时,红线就像一个光标)。
4. 在你的仪表盘中,会显示每个分位数的最小值、最大值、平均值和当前值。

graph LR
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    A(Load Place Order.json):::process --> B(Configure Data Source):::process
    B --> C(Display Metrics):::process
    C --> D(Edit Panel):::process
    D --> E(Set Legend Format):::process
    D --> F(Show Min, Max, Avg, Current):::process

通过以上步骤,我们可以全面地监控SimpleBank的下单功能,及时发现潜在问题并进行处理。利用Prometheus和Grafana构建的监控系统,能够为我们提供详细的指标信息,帮助我们更好地管理和优化SimpleBank的服务和基础设施。

【2025年10月最新优化算法】混沌增强领导者黏菌算法(Matlab代码实现)内容概要:本文档介绍了2025年10月最新提出的混沌增强领导者黏菌算法(Matlab代码实现),属于智能优化算法领域的一项前沿研究。该算法结合混沌机制与黏菌优化算法,通过引入领导者策略提升搜索效率全局寻优能力,适用于复杂工程优化问题的求解。文档不仅提供完整的Matlab实现代码,还涵盖了算法原理、性能验证及与其他优化算法的对比分析,体现了较强的科研复现性应用拓展性。此外,文中列举了大量相关科研方向技术应用场景,展示其在微电网调度、路径规划、图像处理、信号分析、电力系统优化等多个领域的广泛应用潜力。; 适合人群:具备一定编程基础优化理论知识,从事科研工作的研究生、博士生及高校教师,尤其是关注智能优化算法及其在工程领域应用的研发人员;熟悉Matlab编程环境者更佳。; 使用场景及目标:①用于解决复杂的连续空间优化问题,如函数优化、参数辨识、工程设计等;②作为新型元启发式算法的学习与教学案例;③支持高水平论文复现与算法改进创新,推动在微电网、无人机路径规划、电力系统等实际系统中的集成应用; 其他说明:资源包含完整Matlab代码复现指导,建议结合具体应用场景进行调试与拓展,鼓励在此基础上开展算法融合与性能优化研究。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值