PHP开发使用 Prometheus 和 Grafana 实现应用监控和性能分析
段落一:环境准备和 Prometheus 安装
在开始之前,确保你的服务器上已经安装了 Docker 和 Docker Compose。接下来,我们需要编写一个 docker-compose.yml 文件,启动 Prometheus、Node Exporter 以及 Grafana。
version: '3' services: prometheus: image: prom/prometheus volumes: - "./prometheus:/etc/prometheus" command: "--config.file=/etc/prometheus/prometheus.yml" ports: - "9090:9090" networks: - app node-exporter: image: prom/node-exporter ports: - "9100:9100" networks: - app grafana: image: grafana/grafana ports: - "3000:3000" networks: - app networks: app:
在上面的文件中,我们定义了三个服务:prometheus、node-exporter 和 grafana。其中,prometheus 和 node-exporter 是 Prometheus 的一部分,grafana 则用于可视化监控数据。
段落二:代码编写--使用 Prometheus 监控 Laravel 应用程序
在这一部分中,我们将详细介绍如何使用 Prometheus 监控 Laravel 应用程序。
<?php // 在这里引入 Prometheus 客户端库 use Prometheus\CollectorRegistry; use Prometheus\RenderTextFormat; use Prometheus\Storage\Redis; Route::get('/metrics', function() { // 创建一个 Redis 存储适配器 $storageAdapter = new Redis([ 'host' => env('REDIS_HOST', '127.0.0.1'), 'port' => env('REDIS_PORT', 6379), ]); // 创建一个 Prometheus 收集器实例 $collectorRegistry = new CollectorRegistry($storageAdapter); // 在这里注册指标(metrics),比如下面的请求数量 $requestsTotal = $collectorRegistry->registerCounter('http_requests_total', 'The total number of HTTP requests', ['method', 'endpoint']); // 在这里增加当前请求数量 $requestsTotal->incBy(1); // 创建一个渲染器(renderer),用于在浏览器中显示指标(metrics) $renderer = new RenderTextFormat(); // 在这里将指标(metrics)渲染为 Prometheues 格式 return response($renderer->render($collectorRegistry->getMetricFamilySamples())); }); ?>
段落三:代码编写--使用 Grafana 可视化监控数据
在上一部分中,我们已经编写了一个简单的 Laravel 路由,并将指标(metrics)暴露出去。接下来,我们将介绍如何通过 Grafana 可视化这些指标(metrics)。
首先,我们需要在 Grafana 中创建一个数据源。点击左侧菜单栏中的「Configuration」=>「Data Sources」,然后点击右上角的「Add data source」按钮。在弹出的对话框中,选择「Prometheus」数据源,并填写 Prometheus 地址和端口,点击「Save & Test」按钮,测试数据源是否可用。
当数据源添加成功后,我们需要创建一个 Dashboard。点击左侧菜单栏的「+」符号,并选择「Dashboard」,然后在弹出的对话框中选择「Add Query」。在「Metrics」标签页中,我们可以输入 Prometheus 查询语句,在右侧预览区域中预览查询结果。
# 查询某个时间范围内 HTTP 请求的数量 http_requests_total{job="laravel", instance="localhost"}
在查询语句正确无误后,我们可以在左侧的「Visualization」选项卡中选择图表类型,并设置轴的标签。然后,我们就可以在 Dashboard 上看到实时的监控数据了。
段落四:代码编写--使用 Grafana 发送警报
在上一部分中,我们已经介绍了如何使用 Grafana 可视化监控数据。接下来,我们将介绍如何使用 Grafana 发送警报。
首先,我们需要在 Grafana 中创建一个警报规则。点击左侧菜单栏中的「Alerting」=>「Alerts」,然后点击右上角的「New alert rule」按钮。在弹出的对话框中,选择数据源和指标(metrics),设置阈值和条件,然后设置警报通知方式(支持邮件、Slack、Webhook 等)。
# 每分钟请求总量比上一分钟大 50% 以上,发出警报 abs(increase(http_requests_total{job="laravel", instance="localhost"}[1m])) / abs(increase(http_requests_total{job="laravel", instance="localhost"} offset 1m)[1m]) > 1.5
在设置警报规则后,当监控数据达到警报条件时,Grafana 会自动发送警报通知。