Prometheus+JmxExporter 监控告警最佳实践

本文介绍了如何利用Prometheus与JMXExporter监控Java应用,包括Prometheus的系统架构、工作原理以及JMXExporter的使用。通过配置JMXExporter在Java应用内部暴露JVM指标,Prometheus定期抓取并存储数据。同时,展示了如何设置Grafana进行数据可视化和告警配置,以及Alertmanager的部署和邮件告警的设定。整个流程覆盖了从监控数据采集到告警通知的完整链路。
该文章已生成可运行项目,

概述

当你的 Java 应用运行起来之后,如果对其进行监控呢?Prometheus 社区开发了 JMX Exporter 来导出 JVM 的监控指标和自定义指标(自定义MBean),以便使用 Prometheus 来采集监控数据。本文将介绍如何利用 Prometheus 与 JMX Exporter 来监控你 Java 应用,并使用Grafana和Alertmanager对指标进行监控和告警。

动手之前,容我先简单介绍一下Prometheus和JmxExporter

Prometheus简介

Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。

prometheus
Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。2016年由Google发起Linux基金会旗下的原生云基金会(Cloud Native Computing Foundation)将Prometheus纳入其下第二大开源项目。Prometheus目前在开源社区相当活跃。Prometheus和Heapster(Heapster是K8S的一个子项目,用于获取集群的性能数据。)相比功能更完善、更全面。Prometheus性能也足够支撑上万台规模的集群。

系统架构图

架构


从上图可以看出,Prometheus的主要模块包括:Prometheus server,Pushgateway,exporters,PromQL,Alertmanager以及图形界面。

  • Prometheus Server 主要负责数据采集和存储,提供PromQL查询语言的支持。
  • Alertmanager 警告管理器,用来进行报警。
  • Push Gateway 支持临时性Job主动推送指标的中间网关。
  • Exporters 输出被监控组件信息的HTTP接口。
  • Grafana 监控数据展示Web UI。

基本原理

Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。这样做非常适合做虚拟化环境监控系统,比如VM、Docker、Kubernetes等。输出被监控组件信息的HTTP接口被叫做exporter 。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux系统信息(包括磁盘、内存、CPU、网络等等)。其大概的工作流程是:

  • Prometheus server 定期从配置好的 jobs 或者 exporters 中拉 metrics,或者接收来自Pushgateway 发过来的 metrics,或者从其他的 Prometheus server 中拉 metrics。
  • Prometheus server 在本地存储收集到的 metrics,并运行已定义好的 alert.rules,记录新的时间序列或者向 Alertmanager 推送警报。
  • Alertmanager 根据配置文件,对接收到的警报进行处理,发出告警。
  • 在Grafana图形界面中,可视化查看采集数据。

JmxExporter介绍

什么是JmxExporter?

JMX Exporter 利用 Java 的 JMX 机制来读取 JVM 运行时的一些监控数据,然后将其转换为 Prometheus 所认知的 metrics 格式,以便让 Prometheus 对其进行监控采集。

如何使用JmxExporter暴露监控指标?

下面介绍如何通过 JMX Exporter 来暴露 Java 应用的 JVM 监控指标。JMX-Exporter 提供了两种用法:

  1. 启动独立进程。JVM 启动时指定参数,暴露 JMX 的 RMI 接口,JMX-Exporter 调用 RMI 获取 JVM 运行时状态数据,转换为 Prometheus metrics 格式,并暴露端口让 Prometheus 采集。
  2. JVM 进程内启动。JVM 启动时指定参数,通过 -javaagent 的形式运行 JMXExporter 的 jar 包,进程内读取 JVM 运行时状态数据,转换为 Prometheus metrics 格式,并暴露端口让 Prometheus 采集。

官方不推荐使用第一种方式,一方面配置复杂,另一方面因为它需要一个单独的进程,而这个进程本身的监控又成了新的问题,所以本文使用第二种用法暴露监控指标。

部署配置

Prometheus

本文使用docker的方式部署Prometheus,直接使用官方镜像运行。

提前在/Users/zero/Endless/ZhoujPractice/spring-boot-prometheus/config路径下创建Prometheus配置文件prometheus.yml和Prometheus规则文件prometheus_rules.yml,然后通过如下命令挂载到官方镜像中运行:

docker run \
    -p 9090:9090 \
    --name=prometheus \
    -v /Users/zero/Endless/ZhoujPractice/spring-boot-prometheus/config:/etc/prometheus/ \
    prom/prometheus

prometheus.yml配置文件

global:
  scrape_interval: 10s
  evaluation_interval: 10s
##告警组件配置
alerting:
  alertmanagers:
    - static_configs:
        - targets: [ '192.168.164.xx:9093' ]
rule_files:
  - "prometheus_rules.yml"

##数据采集Job配置
scrape_configs:
  ###以下内容为prometheus自身配置
  - job_name: 'prometheus'
    static_configs
本文章已经生成可运行项目
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值