监控不仅仅是关于漂亮的图表(尽管它们确实很酷)。它是你的预警系统、水晶球和性能监控的结合体。由于 Quarkus 针对 JVM 和本地编译进行了优化,了解其性能指标变得尤为重要。
“如果你无法衡量它,你就无法改进它。” - 彼得·德鲁克(可能是在调试分布式系统时说的)
Prometheus 和 Grafana:监控的动态二人组
让我们欢迎 Prometheus 和 Grafana——监控世界的蝙蝠侠和罗宾(可惜没有斗篷)。
- Prometheus:收集和存储你的指标的时间序列数据库。它就像一个数据吸尘器,定期从你的 Quarkus 应用中吸取数据。
- Grafana:操作的美丽面孔。它将 Prometheus 的数据转化为美丽的仪表板,让你想把它们裱起来挂在墙上。
它们共同形成了一个比火车头更强大的监控解决方案,能够一跃而过高高的栈。(好吧,我不再用超级英雄的比喻了。)
设置 Quarkus 进行指标导出
首先,让我们让 Quarkus 透露其内部运作。我们需要在 Quarkus 项目中添加 MicroProfile Metrics 扩展。
在你的 pom.xml
中添加以下内容:
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-smallrye-metrics</artifactId>
</dependency>
或者,如果你是 Gradle 爱好者:
implementation 'io.quarkus:quarkus-smallrye-metrics'
这样,Quarkus 将自动在 /q/metrics
端点公开指标。就像给你的应用一个扩音器,让它向世界(或至少是 Prometheus)大声喊出它的统计数据。
Prometheus:你的指标吸尘器
现在 Quarkus 已经开始谈论它的指标,让我们设置 Prometheus 来监听。以下是快速启动 Prometheus 的指南:
- 从官方网站下载 Prometheus。
- 创建一个
prometheus.yml
配置文件:
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'quarkus'
metrics_path: '/q/metrics'
static_configs:
- targets: ['localhost:8080']
这告诉 Prometheus 每 15 秒从你的 Quarkus 应用中抓取指标。如果你的应用运行在不同的主机或端口上,请调整 localhost:8080
。
- 启动 Prometheus:
./prometheus --config.file=prometheus.yml
Voilà!Prometheus 现在正在收集指标,比松鼠为冬天囤积坚果还快。
Grafana:让你的指标值得上 Instagram
随着 Prometheus 收集数据,是时候让它看起来漂亮了。欢迎 Grafana:
- 从官方网站下载并安装 Grafana。
- 启动 Grafana 并导航到
http://localhost:3000
(默认凭据是 admin/admin)。 - 添加 Prometheus 作为数据源:
- 转到配置 > 数据源
- 点击“添加数据源”并选择 Prometheus
- 将 URL 设置为
http://localhost:9090
(Prometheus 的默认端口) - 点击“保存 & 测试”
现在你可以创建让同事羡慕不已的仪表板了。
在 Grafana 中制作 Quarkus 仪表板
是时候发挥你的创造力,构建一个仪表板了。以下是你可能想要包含的一些面板的入门包:
- CPU 使用率
- 内存使用率
- HTTP 请求率
- 响应时间百分位数
- 错误率
以下是 HTTP 请求率的示例查询:
rate(http_server_requests_seconds_count{application="your-app-name"}[1m])
专业提示:从几个关键指标开始,并不断迭代。你的仪表板应该随着你的应用和监控需求的发展而演变。
需要关注的重要 Quarkus 指标
虽然 Quarkus 提供了大量的指标,但以下是一些你绝对需要关注的:
- JVM 指标:内存使用情况,垃圾回收统计
- HTTP 指标:请求计数,响应时间,错误率
- 数据库连接池:活动连接,等待时间
- 自定义业务指标:特定于你的应用逻辑
记住,目标是洞察,而不是信息过载。选择能够讲述你的应用健康状况和性能的指标。
警报:因为你不能 24/7 盯着仪表板
除非你已经掌握了不眨眼的艺术(如果是这样,我们需要谈谈),否则你会想要设置警报,以防事情出错。Grafana 让这变得简单:
- 在你的仪表板中,点击面板标题并选择“编辑”。
- 转到“警报”选项卡。
- 定义触发警报的条件。
- 设置通知渠道(电子邮件、Slack、PagerDuty 等)。
例如,你可能希望在以下情况下收到警报:
- 错误率超过 1% 持续 5 分钟
- P95 响应时间超过 500 毫秒持续 10 分钟
- CPU 使用率超过 80% 持续 15 分钟
测试你的监控设置
在自我表扬并结束一天的工作之前,让我们确保这确实有效:
- 在你的 Quarkus 应用上生成一些负载(Apache JMeter 或简单的循环 curl 脚本可以做到)。
- 观察你的 Grafana 仪表板活跃起来。
- 故意触发一些错误或高 CPU 使用率。
- 验证你的警报是否按预期触发。
如果一切顺利,你应该看到你的仪表板像圣诞树一样亮起来,并被警报轰炸(希望只是这一次)。
总结:像专业人士一样监控 Quarkus
恭喜!你刚刚提升了你的 Quarkus 监控技能。通过 Prometheus 收集指标和 Grafana 可视化它们,你现在可以:
- 比说“反应式”更快地发现性能瓶颈
- 用你的主动监控技能给你的运维团队留下深刻印象
- 晚上睡得更好,因为你知道如果事情出错,你会收到警报
记住,良好的监控是一个迭代的过程。随着你对应用在生产中的行为了解的加深,不断完善你的仪表板和警报。
专业提示:不要忘记对你的 Grafana 仪表板进行版本控制。你可以将它们导出为 JSON 并与应用代码一起存储。
现在去监控吧!你的 Quarkus 应用会感谢你,你的未来自我也会感谢你,因为你不必在周末调试神秘的生产问题。
有任何酷炫的 Quarkus 监控技巧或战斗故事吗?在下面的评论中分享。祝你监控愉快,愿你的响应时间始终较低,正常运行时间始终较高!