《云原生监控》-prometheus监测技术方案

部署环境

A主机:

系统:  CentOS 7

应用: 

Docker( Prometheus + Grafana + Alertmanager + CAdvisor )

主机( Node Exporter + Consul + Confd )

B主机:

系统:  CentOS 7

应用:  

Docker( CAdvisor )

主机( Node Exporter )

总体图

下载:

Confd链接(0.16.0)  Consul链接(1.16.1)  Prometheus链接(2.4.6) 

组件总压缩包:

链接:https://pan.baidu.com/s/1UdjXhSwZkujWtj8FMccl_g?pwd=8w41 
提取码:8w41 

应用介绍

介绍Prometheus

Prometheus(普罗米修斯)是一套开源的监控&报警&时间序列数据库的组合,起始是由SoundCloud公司开发的。随着发展,越来越多公司和组织接受采用Prometheus,社会也十分活跃,他们便将它独立成开源项目,并且有公司来运作。Google SRE的书内也曾提到跟他们BorgMon监控系统相似的实现是Prometheus。现在最常见的Kubernetes容器管理系统中,通常会搭配Prometheus进行监控。

Prometheus现有的支持的 Exporter

Node Exporter:Node Exporter用于监控操作系统的硬件和操作系统层面的指标。它会暴露CPU利用率、内存使用率、磁盘空间、网络流量等指标给Prometheus。 下载链接

Blackbox Exporter:  Blackbox Exporter用于对外部系统和服务进行主动性能、可用性和正确性的检测。它可以执行HTTP、TCP、ICMP等网络探针,通过配置的模块来监控目标的响应时间、状态码、SSL证书有效性等指标。 下载链接

Consul Exporter:  Consul Exporter用于将Consul中的服务和健康检查信息导出到Prometheus中。它可以将Consul的服务、节点、健康状态等指标暴露给Prometheus进行监控和报警。 下载链接

Graphite Exporter:  Graphite Exporter用于将Graphite中的指标数据导出到Prometheus中。它提供了一种将现有的Graphite监控系统和Prometheus进行整合的方式。 下载链接

Memcached Exporter:  Memcached Exporter用于监控Memcached缓存服务器的性能指标。它会将Memcached的连接数、命中率、缓存大小等指标暴露给Prometheus。下载链接

MySQL Exporter:  MySQL Exporter用于监控MySQL数据库的性能和状态。它会暴露MySQL的连接数、查询性能、事务状态等指标给Prometheus进行监控和告警。 下载链接

PromLens:  PromLens是Prometheus的智能查询编辑器,它提供了一个可视化和交互式的方式来编写和优化Prometheus的查询语句。 下载链接

Pushgateway:  Pushgateway用于持久化和集中管理临时性的指标数据。它允许非持久性的作业将指标推送到Pushgateway中,并由Prometheus进行采集,并支持批量和瞬时性的指标数据。 下载链接

StatsD Exporter:  StatsD Exporter用于将StatsD格式的指标数据导出到Prometheus中。它允许现有的StatsD监控系统和Prometheus进行整合。 下载链接

介绍Consul

Consul是一个开源的服务网格和分布式一致性解决方案,由HashiCorp公司开发。它为可扩展的分布式系统提供了服务发现、健康检查、键值存储、多数据中心部署等核心功能。Consul的设计目标是简化分布式系统的构建和管理,同时提供了高可用性、可靠性和安全性。

架构图

介绍Confd

Confd是一个轻量级的配置管理工具,用于将配置文件和数据以可管理的方式保存和分发给多个应用程序或服务。它由Kong公司开发,专为构建和管理现代基础设施环境而设计。

架构图

介绍Grafana

Grafana是一个开源的数据可视化和监控平台,用于实时展示和分析各种数据源的指标、日志和事件。它提供了丰富的图表和仪表盘,使用户可以以直观和可视化的方式监控系统、应用程序、基础设施等

组件介绍

介绍CAdvisor

CAdvisor(Container Advisor)是一个开源的容器资源使用和性能分析工具,它专注于监控Docker容器以及其他容器化平台上的容器。cAdvisor可以提供关于容器 CPU、内存、磁盘和网络等资源使用情况的实时统计信息,并提供容器的历史性能数据。

介绍Alertmanager

Alertmanager是一个开源的告警处理器和路由器,用于集中管理和处理来自不同监控系统的告警通知。它是Prometheus生态系统的一部分,设计用于处理Prometheus服务器生成的告警,并提供灵活的路由和通知机制。

架构图

安装部署

: 安装应用前先检查端口是否被占有,端口查询命令netstat -anpt

安装Docker

1.卸载旧的版本

yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate    docker-logrotate docker-engine

2、更新yum软件包索引(安装前的工作,非必须)

yum makecache fast

# yum makecache: error: argument timer: invalid choice: 'fast' (choose from 'timer')

# 安装报错了,yum makecache fast是centOS7的命令, 不使用8,可以直接使用

yum makecache  或者  dnf makecache

# 如有需要,可以安装gcc

yum -y install gcc

# 以及gcc-c++

yum -y install gcc-c++

需要的安装包

yum install -y yum-utils

设置镜像仓库

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 建议使用阿里云的镜像,十分快

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装docker docker-ce:社区版的,docker-ee:企业版的

sudo yum install docker-ce docker-ce-cli containerd.io

启动Docker

systemctl start docker 

设置Docker为开机自启

systemctl enable docker 

安装Prometheus

1.创建配置文件

mkdir  /home/prometheus
cd   /home/prometheus/
vim  prometheus.yml

文件内容如下:

global:scrape_interval:     15s #抓取数据的时间间隔evaluation_interval: 15s #触发告警检测的时间
scrape_configs:- job_name: prometheus  #任务名称static_configs:  #静态配置节点- targets: ['主机IP:9090']labels:instance: prometheus  #实例名称# Consul配置管理- job_name: consul-exporterconsul_sd_configs:- server: '主机IP:8500'
# 告警服务配置
alerting:alertmanagers:- static_configs:- targets: ['主机IP:9093']
# 告警规则加载文件
rule_files:- "*rule.yml"

注意: Prometheus.yml配置文件格式必须遵循yml格式

docker启动

docker run -d \--name=prometheus \--restart=always \-p 9090:9090 \-v /home/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \-v /home/prometheus/data:/prometheus \prom/Prometheus

挂载这个如果把错,直接删掉这行 -v /home/prometheus/data:/prometheus \

安装Consul

  1. 找到适合你系统的包下载他 链接 ZIP
  2. 下载后解开压缩包.拷贝Consul到你的PATH路径中 /usr/local/bin
  3. 完成安装后,检查consul安装是否成功.通过执行 consul你应该看到类似下面的输出

 

: 如果你得到一个consul not be found的错误,你的PATH可能没有正确设置.请返回检查你的consul的安装路径是否包含在PATH.

运行Agent

完成Consul的安装后,必须运行agent. agent可以运行为server或client模式.每个数据中心至少必须拥有一台server . 建议在一个集群中有3或者5个server.部署单一的server,在出现失败时会不可避免的造成数据丢失.

其他的agent运行为client模式.一个client是一个非常轻量级的进程.用于注册服务,运行健康检查和转发对server的查询.agent必须在集群中的每个主机上运行.

启动 Consul Server

consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=0.0.0.0 \
-client=0.0.0.0 \
-node=consul-server02 &> /var/log/consul.log &

运行cosnul agent以server模式,

-server : 定义agent运行在server模式

-bootstrap-expect :在一个datacenter中期望提供的server节点数目,当该值提供的时候,consul一直等到达到指定sever数目的时候才会引导整个集群,该标记不能和bootstrap共用

-bind:该地址用来在集群内部的通讯,集群内的所有节点到地址都必须是可达的,默认是0.0.0.0,(这里替换为主机IP

-node:节点在集群中的名称,在一个集群中必须是唯一的,默认是该节点的主机名

-ui-dir: 提供存放web ui资源的路径,该目录必须是可读的

-rejoin:使consul忽略先前的离开,在再次启动后仍旧尝试加入集群中。

-config-dir:配置文件目录,里面所有以.json结尾的文件都会被加载

-client:consul服务侦听地址,这个地址提供HTTP、DNS、RPC等服务,默认是127.0.0.1所以不对外提供服务,如果你要对外提供服务改成0.0.0.0

查看集群成员 consul members

启动成功

:如果访问ip:8500访问不了,请检查防火墙是否开启端口

# 注册服务
curl -X PUT -d '{"id": "consul","name": "consul-node-exporter","address": "192.168.0.77","port": 8080,"tags": ["jvm-exporter"],"checks": [{"http": "http://192.168.0.77:8080/metrics","interval":"5s"}]}'  http://192.168.0.77:8500/v1/agent/service/register

name:consul的service注册名称

id:consul的实例名称

address:监控地址ip

port:监控的端口号

tags:标签名

checks:检查的节点的路径

# 删除

curl -v -X PUT http://192.168.0.77:8500/v1/agent/service/deregister/服务名( consul中的ID )

# 添加K/V

http://ip:8500/v1/kv/prometheus/rules/mysql-status

{"alert": "MysqlTooManyConnections(>80%)","expr": "avg by (instance) (rate(mysql_global_status_threads_connected[1m])) / avg by (instance) (mysql_global_variables_max_connections) * 100 > 80","for": "1m","labels": {"severity": "warning"},"annotations": {"summary": "'MySQL too many connections (> 80%)'","description": "'Mysql实例: 【{{ $labels.instance }}】, More than 80% of MySQL connections are in use, Current Value: {{ $value }}%'"}
}

: 告警规则中有双引号的请换成单引号,否则Prometheus会识别不到

安装Confd

  1. 下载confd二进制文件 链接 文件
  2. 重命名二进制文件,并移动到PATH的目录下

mv confd-0.16.0-linux-amd64 /prometheus目录/confd

chmod +x /prometheus目录/confd

  1. 验证是否安装成功 confd --help
  2. 创建confdir

confdir底下包含两个目录:

conf.d: confd的配置文件,主要包含配置的生成逻辑,例如模板源,后端存储对应的keys,命令执行等。

templates: 配置模板Template,即基于不同组件的配置,修改为符合 Golang text templates的模板文件。

命令: mkdir -p /etc/confd/{conf.d,templates}

: 创建Conf.dTemplates目录时请注意名称是否正确,如不正确confd会读取不到文件.

创建confd配置文件

vim  /etc/confd/conf.d/config.toml[template]
# 模板文件的来源路径( src要与templates中的文件名称对应 )
src = "alerts.conf.tmpl"
# 生成的配置文件的路径和名称
dest = "/home/prometheus/node-alerts-rule.yml"
# 指定需要访问和操作的配置数据的键路径
keys = ["/prometheus"
]
# 在模板生成配置文件之前执行的命令
check_cmd = "touch /tmp/check"
# 在配置文件发生变化并重新生成后,执行的命令
reload_cmd = "docker restart prometheus"

创建模板文件 名字自定义

vim  /etc/confd/templates/alerts.conf.tmpl
# 告警规则分组列表的开始
groups:     
# 分组名称为node-alerts               
- name: node-alerts        
# 规则列表的开始,并进入循环rules:                   # 遍历以"/prometheus/rules/"开头的所有键{{range gets "/prometheus/rules/*"}}  # 将当前键对应的值解析为JSON格式,并赋值给$data变量{{$data := json .Value}}  # 使用$data变量的alert字段的值生成alert规则- alert: {{$data.alert}}  # 使用$data变量的expr字段的值赋给expr表达式expr: {{$data.expr}}    # 使用$data变量的for字段的值赋给规则的持续时间for: {{$data.for}}      # 定义标签部分labels:                 # 使用$data变量的labels.severity字段的值作为severity标签的值severity: {{$data.labels.severity}}  # 定义注释部分annotations:            # 使用$data变量的annotations.summary字段的值作为summary注释的值summary: {{$data.annotations.summary}}        # 使用$data变量的annotations.description字段的值作为description注释的值description: {{$data.annotations.description}}  # 结束循环{{end}}    

:  range gets "/prometheus/rules/*" ConsulK/V的目录地址

,其中的值必须与Consul中的Value相对于.

在Prometheus目录下启动confd

nohup ./confd -interval 3 -log-level debug -backend consul -node 192.168.0.77:8500 &

如果报错执行:nohup confd -interval 3 -log-level debug -backend consul -node 192.168.0.77:8500 &

Interval: 去后端拉取配置数据频率

log-level: 日志级别

Backend: 指定后端

Node: 节点地址

安装Grafana

创建本地目录

mkdir /home/grafana
mkdir /home/grafana/config
mkdir /home/grafana/data

需要授权相关文件夹权限

chmod -R 777  /home/grafana
chmod -R 777  /home/grafana/config
chmod -R 777  /home/grafana/data

:如不给文件夹授权Grafana会找不到文件夹

Docker启动Grafana

docker run -d -p 3000:3000 --name=grafana grafana/grafana:9.2.0

复制Docker容器文件到本地,复制完后删除容器中的grafana

docker cp grafana:/etc/grafana/grafana.ini /home/grafana/config
docker cp grafana:/var/lib/grafana/plugins /home/grafana/
docker cp grafana:/var/lib/grafana/grafana.db /home/grafana/data
docker rm -f grafana

再启动grafana

docker run -d \-p 3000:3000 \--name=grafana \
--restart=always \-v /etc/localtime:/etc/localtime:ro \-v /home/grafana/data:/var/lib/grafana \-v /home/grafana/plugins/:/var/lib/grafana/plugins \-v /home/grafana/config/grafana.ini:/etc/grafana/grafana.ini \-e "GF_SECURITY_ADMIN_PASSWORD=admin" \-e "GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource,grafana-piechart-panel" \grafana/grafana:9.2.0

(如果报错把 -e "GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource,grafana-piechart-panel" 删掉)

 

启动成功访问ip:3000进入Grafana登录页面, 账号admin,密码admin

1.chmod -R 777  /home/tehc/grafana/   #[这是挂载的父目录,不给权限后面修改密码也不会生效]

2. sqlite3 /home/tech/grafana/data/grafana.db

3.进入数据库

4. update user set password = '59acf18b94d7eb0694c61e60ce44c110c7a683ac6a8f09580d626f90f4a242000746579358d77dd9e570e83fa24faa88a8a6', salt = 'F3FAxVm33R' where login = 'admin';

5. .exit;

6.重启Grafana容器

登录成功后会让你修改密码, 修不修改都可. (如不修改登录一次会再次跳转到此页面.)

设置Prometheus数据源

模板链接, 下面是模板页面,想要监控什么去搜索栏查询就行

安装Node Exporter

  • 解压tar压缩包 tar
  • 将解压后的文件移到 /usr/local/bin
  • mv node_exporter-1.6.1.linux-amd64/node_exporter /usr/local/bin/
  • 创建自定义Node Exporter服务
  • vim  /etc/systemd/system/node_exporter.service
  • 文件内容如下
  • [Unit]
  • Description=Node Exporter
  • After=network.target
  • [Service]
  • User=root
  • Type=simple
  • ExecStart=/usr/local/bin/node_exporter
  • [Install]
  • WantedBy=multi-user.target
  • 重新加载系统守护进程并启动Node Exporter服务。
  • systemctl daemon-reload
  • systemctl start node_exporter
  • 检查Node Exporter状态,确保其处于正常运行状态。
  • systemctl status node_exporter
  • 开启服务器开机自启动Node Exporter服务。
  • systemctl enable node_exporter
  • 将node_exporter注册到consul中去

http://ip:8500/v1/agent/service/register

{"id": "node-exporter","name": "node-exporter","address": "主机IP","port": 9100,"tags": ["node-exporter"],"checks": [{"http": "http://主机IP:9100/metrics","interval": "5s"}]
}

安装CAdvisor

Docker启动

docker run \
-v /:/rootfs:ro \
-v /var/run:/var/run:rw \
-v /sys:/sys:ro \
-v /var/lib/docker/:/var/lib/docker:ro \
-v /dev/disk/:/dev/disk:ro \
-p 8080:8080 \
-d --name=cadvisor \--restart=always \google/cadvisor:latest

访问ip:8080端口进入页面,如访问不到请查看是否开放端口, ​​​​​​指标含义

将CAdvisor注册到Consul服务中去

http://192.168.0.77:8500/v1/agent/service/register

{"id": "cadvisor-node-exporter-1","name": "cadvisor-node-exporter","address": "ip","port": 9100,"tags": ["cadvisor"],"checks": [{"http": "http://ip:8500/metrics","interval": "5s"}]
}

安装Alertmanager

  • 创建目录
  • mkdir -p /home/alertmanager
  • mkdir -p /home/alertmanager/conf
  • mkdir -p /home/alertmanager/conf/tmpl
  • 创建文件
  • vim /home/alertmanager/alertmanager.yml
  • vim /home/alertmanager/conf/tmpl/e-mail.tmpl
  • Docker 启动
  • docker run -d --restart=always \
  • --name=alertmanager \
  • -p 9093:9093 \
  • -v /home/alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml \
  • -v /home/alertmanager/conf/tmpl:/etc/alertmanager/template \
  • prom/alertmanager
  • 访问ip:9093页面查看是否启动成功

告警规则

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/19768.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringMVC框架学习笔记(三):url请求风格-Rest 以及 SpringMVC 映射获取到各种类型数据

1 Rest 基本介绍 1.1 基本说明 REST:即 Representational State Transfer。(资源)表现层状态转化。是目前流行的请求方 式。它结构清晰, 很多网站采用 HTTP 协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。它们分别对应四种基本…

使用servlet与jdbc进行的小demo

文章目录 demo实例首先三层架构servlet层 也可以叫web层service层 ,用于处理业务逻辑 dao层 用于写sql语句,与数据库进行交互这三层一次调用 进行环境初始化utils的书写jdbcUtils先写web层,需要进行参数校验service书写dao层使用jdbc进行操作就可以 demo实例 使用三层架构进行查…

美国RAKsmart海外大带宽服务器的显著特点

美国RAKsmart海外大带宽服务器在当前的互联网服务领域中备受瞩目,其显著特点主要体现在以下几个方面: 高带宽资源:RAKsmart服务器拥有充足的带宽资源,最低提供100M独享带宽,并支持升级至G口、10G口大带宽方案。这种高带…

Mybatis-plus 更新或新增时设置某些字段值为空

方式一 在实体中设置某个字段为的注解中 TableField(updateStrategy FieldStrategy.IGNORED)private Date xxxxxxTime;通过这种方式会指定更新时该字段的策略,通常情况下updateById这种会根据字段更新,通常都会判断null 以及空值 指定 updateStrategy …

java属性重写

介绍 关于,属性没有重写只能是编译类型的 代码 package b;public class main_ {public static void main(String[] args) {//向上转型,父类的引用转向了子类的fathetr fatnew son();System.out.println("编译类型是father时的sum属性是"fat.…

不是从APP store下载的APP在mac上一直提示有损坏,打不开怎么办?

1.点击设置 2.安全与隐私 3.通用看看允许从以下位置下载的APP是否有任何来源 4.如果没有,mac桌面点击🔍输入终端或Terminal 命令行输入下述代码: sudo spctl --master-disable 5.回车,输入mac开机密码。注意:此时密…

java maven selenium12306 爬虫 包含浏览器驱动

前言 5月搞hw,一直没时间弄ctf,刚好java综合实践结课了,用java写了个12306爬虫,今天分享一下吧。 开发:工具idea jdk:11.0.11 maven环境请自己搭建 注意 :GetNetUtil类里的cookie请替换为自己的cookie(请求12306的…

滑动的登录注册页面

前言 在Web开发中,登录和注册页面是网站或应用程序的重要组成部分。为了提高用户体验和安全性,开发人员通常会采用各种方法来改进登录注册页面的设计。滑动式登录注册页面是一种常见的解决方案,它不仅提供了更好的用户友好性。本文将介绍如何…

前端html-docx实现html转word,并导出文件,文字+图片

前端html-docx实现html转word,并导出文件 前端web页面 有文字,有图片,保存web的css效果 使用工具:html-docx 官方网址:http://docs.asprain.cn/html-docx/readme.html 步骤: 1 npm install html-docx-js…

铁塔基站用能监控能效解决方案

截至2023年10月,我国5G基站总数达321.5万个,占全国通信基站总数的28.1%。然而,随着5G基站数量的快速增长,基站的能耗问题也逐渐日益凸显,基站的用电给运营商带来了巨大的电费开支压力,降低5G基站的能耗成为…

客户文章|难能可贵,非模式生物的功能研究与创新

菜豆(Phaseolus vulgaris),又名四季豆、芸豆、油豆角,是全球第一大豆类蔬菜,我国是世界上最主要的菜豆生产国和销售国。在田间生产过程中,菜豆常面临着各种生物和非生物逆境的胁迫,对其产量品质…

校园导航系统C++

制作一个简单的大学城导航系统,根据用户指定的起点和终点,求出最短路径长度以及具体路径。 项目要求: 1)程序与数据相分离,地图中的所有数据都是从文件读入,而不是写在代码中 2)最短路径算法…

智能家居元宇宙三维互动展示在线创作平台

卫浴行业正迎来一场全新的革命——卫浴元宇宙3D展厅搭建编辑器。它基于互联网信息技术、3D线上展示与VR虚拟现实技术,为您打造一个沉浸式的3D虚拟空间,让您的卫浴产品在线上展示中焕发出前所未有的光彩。 在这个卫浴元宇宙中,您可以随心所欲地…

QT C++ 基于word模板 在书签位置写入文字和图片

如果你有按模版批量自动化操作word文件的需求,那么本文能给你一定的帮助。 它能满足你程序自动化生成报表的需求。常常用于上位机、测试仪器的软件中。 需要你你自己做个word模版文档,添加2个书签。点按钮,会按照你的模板文档生成一个同样的…

【开源】在线考试系统 JAVA+Vue.js+SpringBoot 新手入门项目

目录 一、项目介绍 二、项目截图 三、核心代码 【开源】在线考试系统 JAVAVue.jsSpringBoot 新手入门项目 一、项目介绍 经典老框架SSM打造入门项目《在线考试系统》,包括班级模块、教师学生模块、试卷模块、试题模块、考试模块、考试回顾模块,项目编…

出吉林大学计算机考研资料适用于计专966/计学941/软专967

本人是24上岸吉大计算机专硕的考生,先上成绩: 出专业课备考过程的相关笔记资料,也可以提供经验分享等: 吉林大学计算机数据结构基础算法ADL汇总,适用于计专966/计学941/软专967综合整理小绿书以及期末题上重难点算法…

Linus Torvalds把控着linux内核开发审核,他去世之后linux内核会怎样?

在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「linux的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!! Linus Torvalds 是 Linux…

Docker安装Zookeeper(单机)

Docker安装Zookeeper(单机) 目录 Docker安装Zookeeper(单机)拉取镜像创建目录添加配置文件启动容器测试 拉取镜像 docker pull zookeeper创建目录 mkdir -p /data/zookeeper/data # 数据挂载目录 mkdir -p /data/zookeeper/conf…

CSS学习笔记目录

CSS学习笔记之基础教程(一) CSS学习笔记之基础教程(二) CSS学习笔记之中级教程(一) CSS学习笔记之中级教程(二) CSS学习笔记之中级教程(三) CSS学习笔记之高级…

Docker 环境下 3D Guassian Splatting 的编译和配置

Title: Docker 环境下 3D Guassian Splatting 的编译和配置 文章目录 前言I. 宿主系统上的安装配置1. 安装 nvidia driver2. 安装 docker3. 安装 nvidia-container-toolkit II. Docker 容器安装配置1. 拉取 ubuntu 22.042. 创建容器3. 进入容器4. 容器中安装 cuda SDK5. 容器中…