Spring-Boot-Actuator,Prometheus,

2020-07-12  本文已影响0人  Shawn_Shawn

Spring-Boot-Actuator

SpringBoot自带监控功能Actuator,可以帮助实现对程序内部运行情况监控,比如监控状况、Bean加载情况、环境变量、日志信息、线程信息、健康检查、审计、统计和HTTP追踪等

Actuator同时还可以与外部应用监控系统整合,比如Prometheus。可以选择使用HTTP端点或JMX来管理和监视应用程序。

Actuator使用Micrometer来整合上面提到的外部应用监控系统。这使得只要通过非常小的配置就可以集成任何应用监控系统。

Spring-Boot-Actuator官方文档

Prometheus

简介

Prometheus 是一套开源的系统监控报警框架。它启发于 Google 的 borgmon 监控系统,由工作在 SoundCloud 的 google 前员工在 2012 年创建,作为社区开源项目进行开发,并于 2015 年正式发布。2016 年,Prometheus 正式加入 Cloud Native Computing Foundation,成为受欢迎度仅次于 Kubernetes 的项目。

作为新一代的监控框架,Prometheus 具有以下特点:

需要指出的是,由于数据采集可能会有丢失,所以 Prometheus 不适用对采集数据要 100% 准确的情形。但如果用于记录时间序列数据,Prometheus 具有很大的查询优势,此外,Prometheus 适用于微服务的体系架构。

参考文章

安装

prometheus下载地址

# 1. 到官网里下载prometheus-2.19.2.linux-amd64.tar.gz
# 2. 解压  tar xvfz prometheus-2.19.2.linux-amd64.tar.gz
# 3. 重命名 mv prometheus-2.19.2.linux-amd64.tar.gz prometheus
# 4. 测试查看版本   ./prometheus --version 
# 5. 运行 ./prometheus --config.file=prometheus.yml

Grafana

简介

Grafana是一个跨平台的开源的度量分析和可视化工具,可以通过将采集的数据查询然后可视化的展示,并及时通知。它主要有以下六大特点:

1、展示方式:快速灵活的客户端图表,面板插件有许多不同方式的可视化指标和日志,官方库中具有丰富的仪表盘插件,比如热图、折线图、图表等多种展示方式;

2、数据源:Graphite,InfluxDB,OpenTSDB,Prometheus,Elasticsearch,CloudWatch和KairosDB等;

3、通知提醒:以可视方式定义最重要指标的警报规则,Grafana将不断计算并发送通知,在数据达到阈值时通过Slack、PagerDuty等获得通知;

4、混合展示:在同一图表中混合使用不同的数据源,可以基于每个查询指定数据源,甚至自定义数据源;

5、注释:使用来自不同数据源的丰富事件注释图表,将鼠标悬停在事件上会显示完整的事件元数据和标记;

6、过滤器:Ad-hoc过滤器允许动态创建新的键/值过滤器,这些过滤器会自动应用于使用该数据源的所有查询。

安装

# 1. 建议国内镜像下载  https://www.newbe.pro/Mirrors/Mirrors-Grafana/
# 2. 选择7.0.5下载,下载完上传至Linux服务器,或者直接在linux服务器里执行
wget https://mirrors.huaweicloud.com/grafana/7.0.5/grafana-7.0.5-1.x86_64.rpm
# 3. sudo yum install grafana-7.0.5-1.x86_64.rpm
# 4. service grafana-server start web

示例代码

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from mapper -->
</parent>

<properties>
<spring.boot.version>2.2.2.RELEASE</spring.boot.version>
<micrometer.version>1.5.2</micrometer.version>
</properties>

<dependencies>
<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-actuator</artifactId>
  <version>${spring.boot.version}</version>
</dependency>
<dependency>
  <groupId>io.micrometer</groupId>
  <artifactId>micrometer-registry-prometheus</artifactId>
  <version>${micrometer.version}</version>
</dependency>
</dependencies>
server.port: 8088
management.endpoints.web.exposure.include: '*'
@Configuration
public class ActuatorConfig {

  @Bean
  MeterRegistryCustomizer<MeterRegistry> registryCustomizer(){
    return registry -> registry.config().commonTags("application","test");
  }

}
@RestController
public class ActuatorController {

 @GetMapping("/user/info/{id}")
 public ResponseEntity<Map<String, Object>> queryUserInfoById(@PathVariable("id") long id)
     throws InterruptedException {
   Map<String, Object> map = new HashMap<>();
   map.put("id", id);
   map.put("username", "shawn");
   map.put("realname", "shawn");
   map.put("age", 25);
   TimeUnit.SECONDS.sleep(2);
   return ResponseEntity.ok(map);
 }

 @GetMapping("/user/list")
 public ResponseEntity<List<Map<String, Object>>> listUser()
     throws InterruptedException {
   List<Map<String, Object>> list = new ArrayList<>();
   for (int i = 1; i <= 5; i++) {
     Map<String, Object> map = new HashMap<>();
     map.put("id", i);
     map.put("username", "shawn_" + i);
     map.put("realname", "shawn_" + i);
     map.put("age", 25 + i);
     list.add(map);
   }
   TimeUnit.SECONDS.sleep(2);
   return ResponseEntity.ok(list);
 }

}
@SpringBootApplication
public class ActuatorApplication {

  public static void main(String[] args) {
    SpringApplication.run(ActuatorApplication.class, args);
  }
}
curl -i http://localhost:8088/actuator/prometheus
curl -i http://localhost:8088/actuator/metrics
curl -i http://localhost:8088/actuator/metrics/http.server.requests
curl -i http://localhost:8088/user/info/1
curl -i http://localhost:8088/user/list
  - job_name: 'spring-actuator'
    metrics_path: '/actuator/prometheus'
    scrape_interval: 5s
    static_configs:
    - targets: ['193.168.1.104:8088']
./prometheus --config.file=prometheus.yml
service grafana-server start web
上一篇 下一篇

猜你喜欢

热点阅读