Spring Boot 集成 prometheus,Grafana 监控

    技术2022-07-11  120

    1 prometheus

    Prometheus是一个根据应用的metrics来进行监控的开源工具。具体可见官网

    2 Spring Boot 集成 prometheus

    2.1 构建 spring boot 应用

    pom 依赖

    <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> <version>${spring.boot.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>${spring.boot.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <version>${spring.boot.version}</version> <scope>test</scope> </dependency> <!-- prometheus --> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> <version>1.1.3</version> </dependency> </dependencies>

    配置

    spring.application.name=prometheus-metrics server.port=8080 management.endpoints.web.exposure.include=* # 配合 Grafana 的 Dashboard 设置 management.metrics.tags.application=${spring.application.name}

    MeterRegistryCustomizer 配置

    @Configuration public class MetricsConfig { @Value("${spring.application.name}") String applicationName; @Bean MeterRegistryCustomizer<MeterRegistry> meterRegistry() { return (registry) -> registry.config().commonTags("application", applicationName); } }

    PS: 配置类名千万别叫 PrometheusConfig,会报错,已经存在这样的 bean。

    SpringBoot 项目就搭建完成了,可以看到集成 Prometheus 是非常简单的。启动项目,访问http://localhost:8080/actuator/prometheus,如图所示,可以看到一些度量指标。

    2 Prometheus 搭建

    mac 下安装 prometheus

    $ brew install prometheus

    linux 安装

    # 1. 下载 wget https://github.com/prometheus/prometheus/releases/download/v2.10.0/prometheus-2.10.0.linux-amd64.tar.gz # 2. 解压 tar zxvf prometheus-2.10.0.linux-amd64.tar.gz # 3. 启动 cd prometheus-2.10.0.linux-amd64 ./prometheus --config.file=prometheus.yml

    2. 解压

    tar zxvf prometheus-2.10.0.linux-amd64.tar.gz

    3. 启动

    cd prometheus-2.10.0.linux-amd64 ./prometheus --config.file=prometheus.yml

    配置 prometheus

    global: scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute. evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute. scrape_configs: # spring boot 应用配置 - job_name: "prometheus-metrics" metrics_path: "/actuator/prometheus" # spring boot 监控访问路径 static_configs: - targets: ["localhost:8080"] # 域名 # prometheus 应用本身 - job_name: "prometheus" static_configs: - targets: ["localhost:9090"]

    PS: prometheus 默认配置文件位置:/usr/local/etc/prometheus.yml

    启动 prometheus,后台运行

    $ prometheus --config.file=/usr/local/etc/prometheus.yml &

    现在,可以通过浏览器访问 localhost:9090 就可以看到prometheus的监控页面。 当然,在 graph 菜单栏可以查看其他监控指标。

    3 grafana

    安装

    brew install grafana

    启动 grafana

    brew services start grafana

    现在就可以通过 http://localhost:3000/?orgId=1 访问 grafana 了。后面就可以通过添加 datasource,就可以定义监控和图形。比如导入 JVM 监控。

    4 实例

    4.1 监控系统信息

    安装 node_exporter

    下载

    tar -xvzf node_exporter-1.0.1.darwin-amd64.tar.gz cd node_exporter-1.0.1.darwin-amd64 ././node_exporter &

    配置 prometheus

    - job_name: "172.16.0.116" # 主机 ip 地址 metrics_path: "/metrics" # 可以不配,prometheus 默认从此接口获取信息 static_configs: - targets: ["localhost:9100"] # node_exporter 监听端口 9100

    grafana dashboard 配置

    官方查找 dashboard,然后导入 dashboard。

    4.2 监控告警

    4.2.1 告警系统宕机

    部署 Alertmanager

    下载 AlertManager

    1. 解压 tar -zxvf 2. 配置alertmanager.yml # 全局配置 global: resolve_timeout: 5m smtp_smarthost: 'xxxxxx' smtp_from: 'xxxx@xx.com' smtp_auth_username: 'xxxx@xx.com' smtp_auth_password: 'XXXXXX' # 路由配置 route: receiver: 'default-receiver' # 父节点 group_by: ['alertname'] # 分组规则 group_wait: 10s # 为了能够一次性收集和发送更多的相关信息时,可以通过 group_wait 参数设置等待时间 group_interval: 1m #定义相同的Group之间发送告警通知的时间间隔 repeat_interval: 1m routes: # 子路由,根据match路由 - receiver: 'rhf-mail-receiver' group_wait: 10s match: # 匹配自定义标签 team: rhf # 告警接收者配置 receivers: - name: 'default-receiver' email_configs: - to: 'xxxx@xx.com' - name: 'rhf-mail-receiver' email_configs: - to: 'xxxx@xx.com'

    目前官方内置的第三方通知集成包括:邮件、 即时通讯软件(如Slack、Hipchat)、移动应用消息推送(如Pushover)和自动化运维工具(例如:Pagerduty、Opsgenie、Victorops)。Alertmanager的通知方式中还可以支持Webhook,通过这种方式开发者可以实现更多个性化的扩展支持(钉钉、企业微信等)。

    启动 AlertManager Alermanager 会将数据保存到本地中,默认的存储路径为 data/。因此,在启动Alertmanager之前需要创建相应的目录:./alertmanager。用户也在启动 Alertmanager 时使用参数修改相关配置。–config.file 用于指定 alertmanager 配置文件路径,–storage.path 用于指定数据存储路径。

    设置告警规则

    在 Prometheus 目录下新建 alert-rule.yaml 来设置告警规则,内容如下:

    groups: - name: alert-rule rules: - alert: svc-down # 服务是否下线 expr: sum(up{job="springboot-actuator-prometheus-test"}) == 0 for: 1m labels: # 自定义标签 severity: critical team: rhf # 我们小组的名字,对应上面match 的标签匹配 annotations: summary: "服务已下线,请检查"

    配置 prometheus

    在 prometheus.yml 文件下,引用 alert-rule.yaml 告警规则配置,并开启 Alertmanager。

    alerting: alertmanagers: - static_configs: - targets: # alertmanage default start port 9093 - localhost:9093 rule_files: - /data/prometheus-stack/prometheus/rule/*.yml
    Processed: 0.011, SQL: 9