8lovelife's life
0%

监控 Docker

容器的优势让越来越多的应用开始容器化,如何监控容器的健康越来越重要。文章记录如何围绕主机与容器的CPU、内存、磁盘、网络等指标建立Docker应用监控系统

组件准备

文章目的是建立Docker的监控系统,所以系统中除了如下组件要求,还需要监控的系统中安装并使用了Docker

  1. node-exporter
  2. cAdvisor
  3. prometheus
  4. grafana
阅读全文 »

圣诞节在家整理了一下Spring容器中的Bean到底是怎么诞生的,又是如何毁灭的

容器中Bean的生命周期

下图为Spring容器中Bean的生命周期

image

阅读全文 »

记录如何使用Spring中的RestTemplate(with apache.httpcomponents)发起 REST API请求

REQUIREMENTS

1
2
3
4
5
6
7
8
9
10
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.6</version>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
阅读全文 »

容器是什么

简单来说,容器通过利用操作系统的一些底层技术(Namespace、UnionFS、Cgroup等)来运行一些进程。Docker封装了这些底层技术(Container format),方便用户去使用

容器的好处

  • 可移植性/快速部署: 不需要关心不同的运行环境,容器运行所需的库都是打包好的一个整体
  • 应用打包灵活高效: 由于image的分层共享设计,需要更换某一层的内容变得高效灵活
  • 提升资源利用率(相比VM): 共享底层的操作系统,管理程序没有额外的开销
阅读全文 »

WHAT

Docker Compose是用Python编写的工具,并不包含在Docker Engine安装包中。Docker Compose用于解析YML文件并运行YML中定义的容器服务。Docker Compose命令通过调用Docker API完成多容器的创建启动,使用Docker Compose需要自行安装

Docker Compose VS Docker Stack

  • docker stack 包含在 swarm mode中,swarm mode 已经被集成到Docker Engine中,由GO语言编写。docker compose 需要自行安装,由Python编写
  • docker stack 只支持 version >= 3 的YML定义且部分命令无法生效如 build。docker compose 对YML的不同version处理都没有问题
  • docker stack 可以将服务分发到不同的主机上,docker compose 只能将服务分发到同一台主机上
阅读全文 »

WHAT

@Retryable由spring-retry模块提供,在方法或类上添加@Retryable注解可以实现方法调用失败的重试。可以指定失败重试的次数、fallback方法

@Retryable

设置重试的次数、指定需要重试的异常

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Target({ ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Retryable {
// 指定拦截方法
String interceptor() default "";
// 指定需要重试异常,若未指定异常则重试异常为 Exception.class
Class<? extends Throwable>[] value() default {};
// 最大尝试次数(包含第一次
int maxAttempts() default 3;
Class<? extends Throwable>[] include() default {};
Class<? extends Throwable>[] exclude() default {};
String label() default "";
boolean stateful() default false;
String maxAttemptsExpression() default "";
Backoff backoff() default @Backoff();
String exceptionExpression() default "";
}
阅读全文 »

WHAT

@Async由Spring定义,在方法上添加此注解,方法的执行将会是异步的(在另一个线程中执行),调用者不需要等待方法执行完成

1
2
3
4
5
6
7
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Async {
// 用于指定异步执行的线程池名称
String value() default "";
}
阅读全文 »

WHAT

@Scheduled 由Spring定义,用于将方法设置为调度任务。如:方法每隔十秒钟被执行、方法在固定时间点被执行等

  1. @Scheduled(fixedDelay = 1000)
    上一个任务结束到下一个任务开始的时间间隔为固定的1秒,任务的执行总是要先等到上一个任务的执行结束

  2. @Scheduled(fixedRate = 1000)
    每间隔1秒钟就会执行任务(如果任务执行的时间超过1秒,则下一个任务在上一个任务结束之后立即执行)

  3. @Scheduled(fixedDelay = 1000, initialDelay = 2000)
    第一次执行的任务将会延迟2秒钟后才会启动

  4. @Scheduled(cron = “0 15 10 15 * ?”)
    Cron表达式,每个月的15号上午10点15开始执行任务

  5. 在配置文件中配置任务调度的参数

    @Scheduled(fixedDelayString = “${fixedDelay.in.milliseconds}”)
    @Scheduled(fixedRateString = “${fixedRate.in.milliseconds}”)
    @Scheduled(cron = “${cron.expression}”)

阅读全文 »

WHAT

Bean Validation 是一个java规范。可以通过注解的方式约束定义的对象模型或约束方法的入参和出参对象

Bean Validation 1.0

Bean Validation 1.0(JSR303)是最早的一版java标准对象验证规范,是Java EE 6的一部分。认证的具体实现有:

名称 版本
Hibernate Validator 4.3.1.Final
Apache BVal 0.5

Bean Validation 1.1

Bean Validation 1.1(JSR349)是Java EE 7的一部分。
认证的具体实现有:

名称 版本
Hibernate Validator 4.3.1.Final
Apache BVal 1.1.2
阅读全文 »

记录如何基于Docker搭建监控系统

StatsD

StatsD 用于统计和聚合系统的指标数据

  1. StatsD client
    拥有多语言实现,用于将数据发送到StatsD Server
  2. StatsD daemon
    监听StatsD client 发送的数据并整合数据发送(默认每10s)到后端
  3. 监控后端 Graphite、influxDB

StatsD 协议

StatsD采用简单的行协议,StatsD Server默认采用UDP协议,可配置为 TCP协议

1
2
3
4
5
<bucket>:<value>|<type>[|@sample_rate]
* bucket: Metric 标识
* value: Metric 数值
* type: Metric 类型
* sample_rate: 采样率
阅读全文 »