美文网首页
Spring-Boot-Actuator,Prometheus,

Spring-Boot-Actuator,Prometheus,

作者: Shawn_Shawn | 来源:发表于2020-07-12 23:41 被阅读0次

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 具有以下特点:

  • 强大的多维度数据模型:

    1. 时间序列数据通过 metric 名和键值对来区分。

    2. 所有的 metrics 都可以设置任意的多维标签。

    3. 数据模型更随意,不需要刻意设置为以点分隔的字符串。

    4. 可以对数据模型进行聚合,切割和切片操作。

    5. 支持双精度浮点类型,标签可以设为全 unicode。

  • 灵活而强大的查询语句(PromQL):在同一个查询语句,可以对多个 metrics 进行乘法、加法、连接、取分数位等操作。

  • 易于管理: Prometheus server 是一个单独的二进制文件,可直接在本地工作,不依赖于分布式存储。

  • 高效:平均每个采样点仅占 3.5 bytes,且一个 Prometheus server 可以处理数百万的 metrics。

  • 使用 pull 模式采集时间序列数据,这样不仅有利于本机测试而且可以避免有问题的服务器推送坏的 metrics。

  • 可以采用 push gateway 的方式把时间序列数据推送至 Prometheus server 端。

  • 可以通过服务发现或者静态配置去获取监控的 targets。

  • 有多种可视化图形界面。

  • 易于伸缩。

需要指出的是,由于数据采集可能会有丢失,所以 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

示例代码

  • 新建maven项目

  • pom.xml

<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>
  • application.yaml
server.port: 8088
management.endpoints.web.exposure.include: '*'
  • ActuatorConfig.java
@Configuration
public class ActuatorConfig {

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

}
  • ActuatorController.java
@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);
 }

}
  • ActuatorApplication.java
@SpringBootApplication
public class ActuatorApplication {

  public static void main(String[] args) {
    SpringApplication.run(ActuatorApplication.class, args);
  }
}
  • Test
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
  • 进入Prometheus安装目录,修改Prometheus.yaml文件,添加如下配置
  - job_name: 'spring-actuator'
    metrics_path: '/actuator/prometheus'
    scrape_interval: 5s
    static_configs:
    - targets: ['193.168.1.104:8088']
  • 启动Prometheus。
./prometheus --config.file=prometheus.yml
  • 测试访问Prometheus

    prometheus-job.png
  • 启动Grafana

service grafana-server start web
  • 测试访问Grafana ,默认端口3000
  • 添加datasource: 选择设置图标中的Data Source,添加Prometheus的数据源,URL就填上面你给Prometheus Server设置的ip+端口号。并且需要导入Prometheus 2.0 Stats这个面板
  • 添加dashboard。

相关文章

网友评论

      本文标题:Spring-Boot-Actuator,Prometheus,

      本文链接:https://www.haomeiwen.com/subject/enlocktx.html