相关内容原文地址:

CSDN:carson0408:使用prometheus和grafana监控springboot项目

CSDN:大老杨:SpringBoot使用prometheus监控

思否:泥瓦匠:Spring-Boot-应用可视化监控




Grafana模板:10280

一、Prometheus监控SpringBoot

1.1 pom.xml添加依赖

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

1.2 修改application.yml配置文件

server:
port: 8002 # 配置启动端口号
spring:
application:
name: mydemo
metrics:
servo:
enabled: false
management:
endpoints:
web:
exposure:
include: info, health, beans, env, metrics, mappings, scheduledtasks, sessions, threaddump, docs, logfile, jolokia,prometheus
base-path: /actuator #默认/actuator 不更改可不用配置
#CORS跨域支持
cors:
allowed-origins: http://example.com
allowed-methods: GET,PUT,POST,DELETE
prometheus:
id: springmetrics
endpoint:
beans:
cache:
time-to-live: 10s #端点缓存响应的时间量
health:
show-details: always #详细信息显示给所有用户
server:
port: 8001 #默认8080
address: 127.0.0.1 #配置此项表示不允许远程连接
#监测
metrics:
export:
datadog:
application-key: ${spring.application.name}
web:
server:
auto-time-requests: false

这里涉及两个port,一个是server port,一个是prometheus port,其中server port则是调用接口使用的端口,而prometheus port则与该服务在prometheus.yml中的port是一致的,不一致的话则会使该服务down。

1.3 设置启动类Application

@SpringBootApplication
public class Springboot2PrometheusApplication { public static void main(String[] args) {
SpringApplication.run(Springboot2PrometheusApplication.class, args);
}
@Bean
MeterRegistryCustomizer<MeterRegistry> configurer(
@Value("${spring.application.name}") String applicationName) {
return (registry) -> registry.config().commonTags("application", applicationName);
}
}

SpringBoot项目到这里就配置完成了,启动项目,访问http://localhost:8080/actuator/prometheus,如图所示,可以看到一些度量指标。

1.4 Prometheus配置

1.4.1 prometheus.yml

# 全局配置
global:
scrape_interval: 15s
evaluation_interval: 15s scrape_configs:
# 监控prometheus本身
- job_name: 'prometheus监控'
static_configs:
- targets: ['ip:9090']
# 通过node_exporter将监控数据传给prometheus,如果要监控多台服务器,只要在每个服务器上安装node_exporter,指定不同多ip地址就好了
- job_name: '服务器监控'
static_configs:
- targets: ['ip:9100']
- job_name: "redis集群监控"
static_configs:
- targets: ['ip:9121']
- job_name: 'docker监控'
# 静态添加
static_configs:
# 指定监控实例
- targets: ['ip:8081']
- job_name: 'Java项目监控'
metrics_path: '/actuator/prometheus'
file_sd_configs:
- refresh_interval: 1m
files:
- "/home/prometheus/java_springboot.yml"
alerting:
alertmanagers:
- static_configs:
- targets:
- ip:9093
rule_files:
- "/home/prometheus/rules/node_down.yml" # 实例存活报警规则文件
- "/home/prometheus/rules/memory_over.yml" # 内存报警规则文件
- "/home/prometheus/rules/cpu_over.yml" # cpu报警规则文件

1.4.2 java_springboot.yml

java_springboot.yml:

- targets:
- "ip.50:8085"
labels:
instance: 服务A
- targets:
- "ip0.50:8086"
labels:
instance: 服务B

1.4.3 node_down.yml

node_down.yml:

groups:
- name: 实例存活告警规则
rules:
- alert: 实例存活告警
expr: up == 0
for: 1m
labels:
user: prometheus
severity: warning
annotations:
description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minutes."

1.4.4 memory_over.yml

memory_over.yml:

groups:
- name: 内存报警规则
rules:
- alert: 内存使用率告警
expr: (node_memory_MemTotal_bytes - (node_memory_MemFree_bytes+node_memory_Buffers_bytes+node_memory_Cached_bytes )) / node_memory_MemTotal_bytes * 100 > 80
for: 1m
labels:
user: prometheus
severity: warning
annotations:
description: "服务器: 内存使用超过80%!(当前值: {{ $value }}%)"

1.4.5 cpu_over.yml

cpu_over.yml:

groups:
- name: CPU报警规则
rules:
- alert: CPU使用率告警
expr: 100 - (avg by (instance)(irate(node_cpu_seconds_total{mode="idle"}[1m]) )) * 100 > 90
for: 1m
labels:
user: prometheus
severity: warning
annotations:
description: "服务器: CPU使用超过90%!(当前值: {{ $value }}%)"

二、Rest接口的编写

编写了一个接口,接口是http rest风格的add接口,具体代码如下所示:

import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.PostConstruct;
@RestController
@RequestMapping("/api")
public class OperationController {
@Autowired
MeterRegistry registry;
private Counter counter;
private Counter failCounter;
@PostConstruct
private void init(){
failCounter= registry.counter("requests_add_fail_total","save","carson");
counter = registry.counter("requests_add_total","save","carson");
}
@RequestMapping(value = "/add",method = RequestMethod.POST)
public String add(@Validated String firstName,@Validated String secondName) throws Exception {
try{
String name = firstName+secondName;
counter.increment();
return name;
}catch (Exception e){
failCounter.increment();
throw new Exception("异常");
}
}
}

其中init方法则是对prometheus中counter组件进行初始化,而在add接口中则可以直接使用,这里两个指标分别为调用成功的次数与调用失败的次数。

2.1 模拟调用

通过postman进行调用接口,如下图所示:

2.2 Grafana监控视图的制作

在grafana页面新增dashboard之后,便进入下图所示:



然后选中数据源,并进行metrics语句编写,如下图所示,sum(request_add_total) ,其中sum函数中的字段可以模糊搜索,只要prometheus中的服务是up的。然后图就如下所示,可以看出,调用情况:

Prometheus+Grafana监控SpringBoot的更多相关文章

  1. 【Springboot】用Prometheus+Grafana监控Springboot应用

    1 简介 项目越做越发觉得,任何一个系统上线,运维监控都太重要了.关于Springboot微服务的监控,之前写过[Springboot]用Springboot Admin监控你的微服务应用,这个方案可 ...

  2. 基于Docker+Prometheus+Grafana监控SpringBoot健康信息

    在微服务体系当中,监控是必不可少的.当系统环境超过指定的阀值以后,需要提醒指定的运维人员或开发人员进行有效的防范,从而降低系统宕机的风险.在CNCF云计算平台中,Prometheus+Grafana是 ...

  3. Prometheus + Grafana 监控SpringBoot应用

      一.用到的工具 Prometheus Grafana Micrometer Grafana Dashboard (4701)   二.安装和运行Prometheus 官网下载prometheus- ...

  4. cAdvisor+Prometheus+Grafana监控docker

    cAdvisor+Prometheus+Grafana监控docker 一.cAdvisor(需要监控的主机都要安装) 官方地址:https://github.com/google/cadvisor ...

  5. [转帖]Prometheus+Grafana监控Kubernetes

    原博客的位置: https://blog.csdn.net/shenhonglei1234/article/details/80503353 感谢原作者 这里记录一下自己试验过程中遇到的问题: . 自 ...

  6. prometheus+grafana监控redis

    prometheus+grafana监控redis redis安装配置 https://www.cnblogs.com/autohome7390/p/6433956.html redis_export ...

  7. prometheus+grafana监控mysql

    prometheus+grafana监控mysql 1.安装配置MySQL官方的 Yum Repository(有mysql只需设置监控账号即可) [root@localhost ~]# wget - ...

  8. [转帖]安装prometheus+grafana监控mysql redis kubernetes等

    安装prometheus+grafana监控mysql redis kubernetes等 https://www.cnblogs.com/sfnz/p/6566951.html plug 的模式进行 ...

  9. Prometheus + Grafana 监控系统搭

    本文主要介绍基于Prometheus + Grafana 监控Linux服务器. 一.Prometheus 概述(略) 与其他监控系统对比 1 Prometheus vs. Zabbix Zabbix ...

随机推荐

  1. SpringBoot全局异常拦截

    SpringBoot全局异常捕获 使用到的技能 @RestControllerAdvice或(@ControllerAdvice+@ResponseBody) @ExceptionHandler 代码 ...

  2. HTML文本格式化标签

    1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 < ...

  3. HTML颜色

  4. Android中app开机自启动的开发

    (1)首先添加权限开机启动权限 <!--开机启动权限--> <uses-permission android:name="android.permission.RECEIV ...

  5. VoltDB成功入选CNCF Landscape云原生数据库全景图

    近日,VoltDB正式入选 CNCF Landscape(可能是目前其中唯一的关系型分布式内存数据库).此次VoltDB 进入 CNCF Landscape,意味着 VoltDB 正式成为了 CNCF ...

  6. vue的八个生命周期

    1.beforeCreate: 创建Vue实例之前(只有默认的一些生命周期和默认的一些事件,data和methods还没有被初始化) 2.Create: 数据已经在data方法中初始化了,计算属性,事 ...

  7. Java实现RS485串口通信

    前言 前段时间赶项目的过程中,遇到一个调用RS485串口通信的需求,赶完项目因为楼主处理私事,没来得及完成文章的更新,现在终于可以整理一下当时的demo,记录下来. 首先说一下大概需求:这个项目是机器 ...

  8. Flutter 基础组件:Widget简介

    概念 在Flutter中几乎所有的对象都是一个Widget.与原生开发中"控件"不同的是,Flutter中的Widget的概念更广泛,它不仅可以表示UI元素,也可以表示一些功能性的 ...

  9. 执行py文件需要可执行权限吗?

    案例解析 这个问题描述起来有点违反直觉,要执行一个文件难道不应该需要可执行权限吗?让我们先来看一个例子: # module1.py def test(): print ('hello world!') ...

  10. IPC 经典问题:Reader & Writer Problem

    完整代码实现: #include <stdio.h> #include <unistd.h> #include <time.h> #include <stdl ...