电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

Docker 容器監(jiān)控原理及 cAdvisor的安裝與使用說明

瀏覽:7日期:2024-11-14 14:04:39

生產(chǎn)環(huán)境中監(jiān)控容器的運(yùn)行狀況十分重要,通過監(jiān)控我們可以隨時(shí)掌握容器的運(yùn)行狀態(tài),做到線上隱患和問題早發(fā)現(xiàn),早解決。

所以今天我就和你分享關(guān)于容器監(jiān)控的知識(原理及工具 cAdvisor)。

雖然傳統(tǒng)的物理機(jī)和虛擬機(jī)監(jiān)控已經(jīng)有了比較成熟的監(jiān)控方案,但是容器的監(jiān)控面臨著更大的挑戰(zhàn),因?yàn)槿萜鞯男袨楹捅举|(zhì)與傳統(tǒng)的虛擬機(jī)是不一樣的,總的來說,容器具有以下特性:

容器是短期存活的,并且可以動(dòng)態(tài)調(diào)度

容器的本質(zhì)是進(jìn)程,而不是一個(gè)完整操作系統(tǒng)

由于容器非常輕量,容器的創(chuàng)建和銷毀也會(huì)比傳統(tǒng)虛擬機(jī)更加頻繁

Docker 容器的監(jiān)控方案有很多,除了 Docker 自帶的docker stats命令,還有很多開源的解決方案,例如 sysdig、cAdvisor、Prometheus 等,都是非常優(yōu)秀的監(jiān)控工具。

下面我們首先來看下,不借助任何外部工具,如何用 Docker 自帶的docker stats命令實(shí)現(xiàn)容器的監(jiān)控。

使用 docker stats 命令

使用 Docker 自帶的docker stats命令可以很方便地看到主機(jī)上所有容器的 CPU、內(nèi)存、網(wǎng)絡(luò) IO、磁盤 IO、PID 等資源的使用情況。下面我們可以具體操作看看。

首先在主機(jī)上使用以下命令啟動(dòng)一個(gè)資源限制為 1 核 2G 的 nginx 容器:

$ docker run --cpus=1 -m=2g --name=nginx -d nginx

容器啟動(dòng)后,可以使用docker stats命令查看容器的資源使用狀態(tài):

$ docker stats nginx

通過docker stats命令可以看到容器的運(yùn)行狀態(tài)如下:

CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS

f742a467b6d8 0.00% 1.387 MiB / 2 GiB 0.07% 656 B / 656 B 0 B / 9.22 kB 2

從容器的運(yùn)行狀態(tài)可以看出,docker stats命令確實(shí)可以獲取并顯示 Docker 容器運(yùn)行狀態(tài)。但是它的缺點(diǎn)也很明顯,因?yàn)樗荒塬@取本機(jī)數(shù)據(jù),無法查看歷史監(jiān)控?cái)?shù)據(jù),沒有可視化展示面板。

因此,生產(chǎn)環(huán)境中我們通常使用另一種容器監(jiān)控解決方案 cAdvisor。

cAdvisor

cAdvisor 是谷歌開源的一款通用的容器監(jiān)控解決方案。cAdvisor 不僅可以采集機(jī)器上所有運(yùn)行的容器信息,還提供了基礎(chǔ)的查詢界面和 HTTP 接口,更方便與外部系統(tǒng)結(jié)合。所以,cAdvisor很快成了容器指標(biāo)監(jiān)控最常用組件,并且 Kubernetes 也集成了 cAdvisor 作為容器監(jiān)控指標(biāo)的默認(rèn)工具。

cAdvisor 的安裝與使用

下面我們以 cAdvisor 0.37.0 版本為例,演示一下 cAdvisor 的安裝與使用。

cAdvisor 官方提供了 Docker 鏡像,我們只需要拉取鏡像并且啟動(dòng)鏡像即可。

由于 cAdvisor 鏡像存放在谷歌的 gcr.io 鏡像倉庫中,國內(nèi)無法訪問到。這里我把打好的鏡像放在了 Docker Hub。你可以使用 docker pull lagoudocker/cadvisor:v0.37.0 命令從 Docker Hub 拉取。

首先使用以下命令啟動(dòng) cAdvisor:

$ docker run --volume=/:/rootfs:ro --volume=/var/run:/var/run:ro --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro --volume=/dev/disk/:/dev/disk:ro --publish=8080:8080 --detach=true --name=cadvisor --privileged --device=/dev/kmsg lagoudocker/cadvisor:v0.37.0

此時(shí),cAdvisor 已經(jīng)成功啟動(dòng),我們可以通過訪問 http://localhost:8080 訪問到 cAdvisor 的 Web 界面。

Docker 容器監(jiān)控原理及 cAdvisor的安裝與使用說明

cAdvisor 不僅可以監(jiān)控容器的資源使用情況,還可以監(jiān)控主機(jī)的資源使用情況。下面我們就先看下它是如何查看主機(jī)資源使用情況的。

使用 cAdvisor 查看主機(jī)監(jiān)控

訪問 http://localhost:8080/containers/ 地址,在首頁可以看到主機(jī)的資源使用情況,包含 CPU、內(nèi)存、文件系統(tǒng)、網(wǎng)絡(luò)等資源,如下圖所示。

Docker 容器監(jiān)控原理及 cAdvisor的安裝與使用說明

使用 cAdvisor 查看容器監(jiān)控

如果你想要查看主機(jī)上運(yùn)行的容器資源使用情況,可以訪問 http://localhost:8080/docker/,這個(gè)頁面會(huì)列出 Docker 的基本信息和運(yùn)行的容器情況,如下圖所示。

Docker 容器監(jiān)控原理及 cAdvisor的安裝與使用說明

在上圖中的 Subcontainers 下會(huì)列出當(dāng)前主機(jī)上運(yùn)行的所有容器,點(diǎn)擊其中一個(gè)容器即可查看該容器的詳細(xì)運(yùn)行狀態(tài),如下圖所示。

Docker 容器監(jiān)控原理及 cAdvisor的安裝與使用說明

總體來說,使用 cAdvisor 監(jiān)控容器具有以下特點(diǎn):

可以同時(shí)采集物理機(jī)和容器的狀態(tài)

可以展示監(jiān)控歷史數(shù)據(jù)

了解 Docker 的監(jiān)控工具,你是否想問,這些監(jiān)控?cái)?shù)據(jù)是怎么來的呢?下面我就帶你了解一下容器監(jiān)控的原理。

監(jiān)控原理

我們知道 Docker 是基于 Namespace、Cgroups 和聯(lián)合文件系統(tǒng)實(shí)現(xiàn)的。其中 Cgroups 不僅可以用于容器資源的限制,還可以提供容器的資源使用率。無論何種監(jiān)控方案的實(shí)現(xiàn),底層數(shù)據(jù)都來源于 Cgroups。

Cgroups 的工作目錄為/sys/fs/cgroup,/sys/fs/cgroup目錄下包含了 Cgroups 的所有內(nèi)容。Cgroups包含很多子系統(tǒng),可以用來對不同的資源進(jìn)行限制。例如對CPU、內(nèi)存、PID、磁盤 IO等資源進(jìn)行限制和監(jiān)控。

為了更詳細(xì)的了解 Cgroups 的子系統(tǒng),我們通過 ls -l 命令查看/sys/fs/cgroup文件夾,可以看到很多目錄:

$ sudo ls -l /sys/fs/cgroup/total 0 dr-xr-xr-x 5 root root 0 Jul 9 19:32 blkiolrwxrwxrwx 1 root root 11 Jul 9 19:32 cpu -> cpu,cpuacctdr-xr-xr-x 5 root root 0 Jul 9 19:32 cpu,cpuacctlrwxrwxrwx 1 root root 11 Jul 9 19:32 cpuacct -> cpu,cpuacctdr-xr-xr-x 3 root root 0 Jul 9 19:32 cpusetdr-xr-xr-x 5 root root 0 Jul 9 19:32 devicesdr-xr-xr-x 3 root root 0 Jul 9 19:32 freezerdr-xr-xr-x 3 root root 0 Jul 9 19:32 hugetlbdr-xr-xr-x 5 root root 0 Jul 9 19:32 memorylrwxrwxrwx 1 root root 16 Jul 9 19:32 net_cls -> net_cls,net_priodr-xr-xr-x 3 root root 0 Jul 9 19:32 net_cls,net_priolrwxrwxrwx 1 root root 16 Jul 9 19:32 net_prio -> net_cls,net_priodr-xr-xr-x 3 root root 0 Jul 9 19:32 perf_eventdr-xr-xr-x 5 root root 0 Jul 9 19:32 pidsdr-xr-xr-x 5 root root 0 Jul 9 19:32 systemd

這些目錄代表了 Cgroups 的子系統(tǒng),Docker 會(huì)在每一個(gè) Cgroups 子系統(tǒng)下創(chuàng)建 docker 文件夾。這里如果你對 Cgroups 子系統(tǒng)不了解的話,不要著急,這里你只需要明白容器監(jiān)控?cái)?shù)據(jù)來源于 Cgroups 即可。

監(jiān)控系統(tǒng)是如何獲取容器的內(nèi)存限制的?

下面我們以 memory 子系統(tǒng)(memory 子系統(tǒng)是Cgroups 眾多子系統(tǒng)的一個(gè),主要用來限制內(nèi)存使用)為例,講解一下監(jiān)控組件是如何獲取到容器的資源限制和使用狀態(tài)的(即容器的內(nèi)存限制)。

我們首先在主機(jī)上使用以下命令啟動(dòng)一個(gè)資源限制為 1 核 2G 的 nginx 容器:

$ docker run --name=nginx --cpus=1 -m=2g --name=nginx -d nginx

## 這里輸出的是容器 ID

51041a74070e9260e82876974762b8c61c5ed0a51832d74fba6711175f89ede1

注意:如果你已經(jīng)創(chuàng)建過名稱為 nginx 的容器,請先使用 docker rm -f nginx 命令刪除已經(jīng)存在的 nginx 容器。

容器啟動(dòng)后,我們通過命令行的輸出可以得到容器的 ID,同時(shí) Docker 會(huì)在/sys/fs/cgroup/memory/docker目錄下以容器 ID 為名稱創(chuàng)建對應(yīng)的文件夾。

下面我們查看一下/sys/fs/cgroup/memory/docker目錄下的文件:

$ sudo ls -l /sys/fs/cgroup/memory/dockertotal 0 drwxr-xr-x 2 root root 0 Sep 2 15:12 51041a74070e9260e82876974762b8c61c5ed0a51832d74fba6711175f89ede1-rw-r--r-- 1 root root 0 Sep 2 14:57 cgroup.clone_children--w--w--w- 1 root root 0 Sep 2 14:57 cgroup.event_control-rw-r--r-- 1 root root 0 Sep 2 14:57 cgroup.procs-rw-r--r-- 1 root root 0 Sep 2 14:57 memory.failcnt--w------- 1 root root 0 Sep 2 14:57 memory.force_empty-rw-r--r-- 1 root root 0 Sep 2 14:57 memory.kmem.failcnt-rw-r--r-- 1 root root 0 Sep 2 14:57 memory.kmem.limit_in_bytes-rw-r--r-- 1 root root 0 Sep 2 14:57 memory.kmem.max_usage_in_bytes-r--r--r-- 1 root root 0 Sep 2 14:57 memory.kmem.slabinfo-rw-r--r-- 1 root root 0 Sep 2 14:57 memory.kmem.tcp.failcnt-rw-r--r-- 1 root root 0 Sep 2 14:57 memory.kmem.tcp.limit_in_bytes-rw-r--r-- 1 root root 0 Sep 2 14:57 memory.kmem.tcp.max_usage_in_bytes-r--r--r-- 1 root root 0 Sep 2 14:57 memory.kmem.tcp.usage_in_bytes-r--r--r-- 1 root root 0 Sep 2 14:57 memory.kmem.usage_in_bytes-rw-r--r-- 1 root root 0 Sep 2 14:57 memory.limit_in_bytes-rw-r--r-- 1 root root 0 Sep 2 14:57 memory.max_usage_in_bytes-rw-r--r-- 1 root root 0 Sep 2 14:57 memory.memsw.failcnt-rw-r--r-- 1 root root 0 Sep 2 14:57 memory.memsw.limit_in_bytes-rw-r--r-- 1 root root 0 Sep 2 14:57 memory.memsw.max_usage_in_bytes-r--r--r-- 1 root root 0 Sep 2 14:57 memory.memsw.usage_in_bytes-rw-r--r-- 1 root root 0 Sep 2 14:57 memory.move_charge_at_immigrate-r--r--r-- 1 root root 0 Sep 2 14:57 memory.numa_stat-rw-r--r-- 1 root root 0 Sep 2 14:57 memory.oom_control---------- 1 root root 0 Sep 2 14:57 memory.pressure_level-rw-r--r-- 1 root root 0 Sep 2 14:57 memory.soft_limit_in_bytes-r--r--r-- 1 root root 0 Sep 2 14:57 memory.stat-rw-r--r-- 1 root root 0 Sep 2 14:57 memory.swappiness-r--r--r-- 1 root root 0 Sep 2 14:57 memory.usage_in_bytes-rw-r--r-- 1 root root 0 Sep 2 14:57 memory.use_hierarchy-rw-r--r-- 1 root root 0 Sep 2 14:57 notify_on_release-rw-r--r-- 1 root root 0 Sep 2 14:57 tasks

可以看到 Docker 已經(jīng)創(chuàng)建了以容器 ID 為名稱的目錄,我們再使用 ls 命令查看一下該目錄的內(nèi)容:

$ sudo ls -l /sys/fs/cgroup/memory/docker/51041a74070e9260e82876974762b8c61c5ed0a51832d74fba6711175f89ede1 total 0-rw-r--r-- 1 root root 0 Sep 2 15:21 cgroup.clone_children--w--w--w- 1 root root 0 Sep 2 15:13 cgroup.event_control-rw-r--r-- 1 root root 0 Sep 2 15:12 cgroup.procs-rw-r--r-- 1 root root 0 Sep 2 15:12 memory.failcnt--w------- 1 root root 0 Sep 2 15:21 memory.force_empty-rw-r--r-- 1 root root 0 Sep 2 15:21 memory.kmem.failcnt-rw-r--r-- 1 root root 0 Sep 2 15:12 memory.kmem.limit_in_bytes-rw-r--r-- 1 root root 0 Sep 2 15:21 memory.kmem.max_usage_in_bytes-r--r--r-- 1 root root 0 Sep 2 15:21 memory.kmem.slabinfo-rw-r--r-- 1 root root 0 Sep 2 15:21 memory.kmem.tcp.failcnt-rw-r--r-- 1 root root 0 Sep 2 15:21 memory.kmem.tcp.limit_in_bytes-rw-r--r-- 1 root root 0 Sep 2 15:21 memory.kmem.tcp.max_usage_in_bytes-r--r--r-- 1 root root 0 Sep 2 15:21 memory.kmem.tcp.usage_in_bytes-r--r--r-- 1 root root 0 Sep 2 15:21 memory.kmem.usage_in_bytes-rw-r--r-- 1 root root 0 Sep 2 15:12 memory.limit_in_bytes-rw-r--r-- 1 root root 0 Sep 2 15:12 memory.max_usage_in_bytes-rw-r--r-- 1 root root 0 Sep 2 15:21 memory.memsw.failcnt-rw-r--r-- 1 root root 0 Sep 2 15:12 memory.memsw.limit_in_bytes-rw-r--r-- 1 root root 0 Sep 2 15:21 memory.memsw.max_usage_in_bytes-r--r--r-- 1 root root 0 Sep 2 15:21 memory.memsw.usage_in_bytes-rw-r--r-- 1 root root 0 Sep 2 15:21 memory.move_charge_at_immigrate-r--r--r-- 1 root root 0 Sep 2 15:21 memory.numa_stat-rw-r--r-- 1 root root 0 Sep 2 15:13 memory.oom_control---------- 1 root root 0 Sep 2 15:21 memory.pressure_level-rw-r--r-- 1 root root 0 Sep 2 15:21 memory.soft_limit_in_bytes-r--r--r-- 1 root root 0 Sep 2 15:21 memory.stat-rw-r--r-- 1 root root 0 Sep 2 15:21 memory.swappiness-r--r--r-- 1 root root 0 Sep 2 15:12 memory.usage_in_bytes-rw-r--r-- 1 root root 0 Sep 2 15:21 memory.use_hierarchy-rw-r--r-- 1 root root 0 Sep 2 15:21 notify_on_release-rw-r--r-- 1 root root 0 Sep 2 15:21 tasks

由上可以看到,容器 ID 的目錄下有很多文件,其中 memory.limit_in_bytes 文件代表該容器內(nèi)存限制大小,單位為 byte,我們使用 cat 命令(cat 命令可以查看文件內(nèi)容)查看一下文件內(nèi)容:

$ sudo cat /sys/fs/cgroup/memory/docker/51041a74070e9260e82876974762b8c61c5ed0a51832d74fba6711175f89ede1/memory.limit_in_bytes

2147483648

這里可以看到memory.limit_in_bytes 的值為2147483648,轉(zhuǎn)換單位后正好為 2G,符合我們啟動(dòng)容器時(shí)的內(nèi)存限制 2G。

通過 memory 子系統(tǒng)的例子,我們可以知道監(jiān)控組件通過讀取 memory.limit_in_bytes 文件即可獲取到容器內(nèi)存的限制值。了解完容器的內(nèi)存限制我們來了解一下容器的內(nèi)存使用情況。

$ sudo /sys/fs/cgroup/memory/docker/51041a74070e9260e82876974762b8c61c5ed0a51832d74fba6711175f89ede1/memory.usage_in_bytes

4259840

可以看到當(dāng)前內(nèi)存的使用大小為 4259840 byte,約為 4 M。了解了內(nèi)存的監(jiān)控。

下面我們來了解下網(wǎng)絡(luò)的監(jiān)控?cái)?shù)據(jù)來源

網(wǎng)絡(luò)的監(jiān)控?cái)?shù)據(jù)來源是從 /proc/{PID}/net/dev 目錄下讀取的,其中 PID 為容器在主機(jī)上的進(jìn)程 ID。下面我們首先使用 docker inspect 命令查看一下上面啟動(dòng)的 nginx 容器的 PID,命令如下:

$ docker inspect nginx |grep Pid 'Pid': 27348, 'PidMode': '', 'PidsLimit': 0,

可以看到容器的 PID 為 27348,使用 cat 命令查看一下 /proc/27348/net/dev 的內(nèi)容

$ sudo cat /proc/27348/net/devInter-| Receive | Transmitface |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed lo: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 eth0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

/proc/27348/net/dev 文件記錄了該容器里每一個(gè)網(wǎng)卡的流量接收和發(fā)送情況,以及錯(cuò)誤數(shù)、丟包數(shù)等信息。可見容器的網(wǎng)絡(luò)監(jiān)控?cái)?shù)據(jù)都是定時(shí)從這里讀取并展示的。

總結(jié)一下,容器的監(jiān)控原理其實(shí)就是定時(shí)讀取 Linux 主機(jī)上相關(guān)的文件并展示給用戶。

結(jié)語

k8s后面使用metrics serve,cAdvisor 是提供底層數(shù)據(jù)的,metrics-server 底層數(shù)據(jù)來源是 cAdvisor

cAdvisor 是提供監(jiān)控?cái)?shù)據(jù)的,Prometheus 是負(fù)責(zé)采集的數(shù)據(jù)的,這兩個(gè)作用是不一樣的,生產(chǎn)集群中一般都是 cAdvisor 配合 Prometheus 一起使用。

以上這篇Docker 容器監(jiān)控原理及 cAdvisor的安裝與使用說明就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Docker
相關(guān)文章:
主站蜘蛛池模板: 螺杆式冷水机-低温冷水机厂家-冷冻机-风冷式-水冷式冷水机-上海祝松机械有限公司 | 东莞螺丝|东莞螺丝厂|东莞不锈钢螺丝|东莞组合螺丝|东莞精密螺丝厂家-东莞利浩五金专业紧固件厂家 | 东莞动力锂电池保护板_BMS智能软件保护板_锂电池主动均衡保护板-东莞市倡芯电子科技有限公司 | 棉柔巾代加工_洗脸巾oem_一次性毛巾_浴巾生产厂家-杭州禾壹卫品科技有限公司 | 硫酸亚铁-聚合硫酸铁-除氟除磷剂-复合碳源-污水处理药剂厂家—长隆科技 | 刑事律师_深圳著名刑事辩护律师_王平聚【清华博士|刑法教授】 | 深圳善跑体育产业集团有限公司_塑胶跑道_人造草坪_运动木地板 | 校服厂家,英伦校服定做工厂,园服生产定制厂商-东莞市艾咪天使校服 | 深圳市万色印象美业有限公司| 气动调节阀,电动调节阀,自力式压力调节阀,切断阀「厂家」-浙江利沃夫自控阀门 | 上海诺狮景观规划设计有限公司 | 气动隔膜泵-电动隔膜泵-循环热水泵-液下排污/螺杆/管道/化工泵「厂家」浙江绿邦 | 硬齿面减速机[型号全],ZQ减速机-淄博久增机械 | 主题班会网 - 安全教育主题班会,各类主题班会PPT模板 | 座椅式升降机_无障碍升降平台_残疾人升降平台-南京明顺机械设备有限公司 | 自动钻孔机-全自动数控钻孔机生产厂家-多米(广东)智能装备有限公司 | CXB船用变压器-JCZ系列制动器-HH101船用铜质开关-上海永上船舶电器厂 | 对辊破碎机-液压双辊式,强力双齿辊,四辊破碎机价格_巩义市金联机械设备生产厂家 | 天一线缆邯郸有限公司_煤矿用电缆厂家_矿用光缆厂家_矿用控制电缆_矿用通信电缆-天一线缆邯郸有限公司 | 粉碎机_塑料粉碎机_塑料破碎机厂家-星标机械 | 睿婕轻钢别墅_钢结构别墅_厂家设计施工报价 | 辐射色度计-字符亮度测试-反射式膜厚仪-苏州瑞格谱光电科技有限公司 | 西安展台设计搭建_西安活动策划公司_西安会议会场布置_西安展厅设计西安旭阳展览展示 | 水成膜泡沫灭火剂_氟蛋白泡沫液_河南新乡骏华消防科技厂家 | 保镖公司-私人保镖-深圳保镖公司【环宇兄弟保镖】 | 大数据营销公司_舆情监测软件_上海SEO公司-文军营销官网 | 橡胶膜片,夹布膜片,橡胶隔膜密封,泵阀设备密封膜片-衡水汉丰橡塑科技公司网站 | 淘趣英语网 - 在线英语学习,零基础英语学习网站 | 压力喷雾干燥机,喷雾干燥设备,柱塞隔膜泵-无锡市闻华干燥设备有限公司 | 发电机组|柴油发电机组-批发,上柴,玉柴,潍柴,康明斯柴油发电机厂家直销 | 吉祥新世纪铝塑板_生产铝塑板厂家_铝塑板生产厂家_临沂市兴达铝塑装饰材料有限公司 | 今日热点_实时热点_奇闻异事_趣闻趣事_灵异事件 - 奇闻事件 | 粉末冶金-粉末冶金齿轮-粉末冶金零件厂家-东莞市正朗精密金属零件有限公司 | 盘煤仪,盘料仪,盘点仪,堆料测量仪,便携式激光盘煤仪-中科航宇(北京)自动化工程技术有限公司 | 【甲方装饰】合肥工装公司-合肥装修设计公司,专业从事安徽办公室、店面、售楼部、餐饮店、厂房装修设计服务 | 智能垃圾箱|垃圾房|垃圾分类亭|垃圾分类箱专业生产厂家定做-宿迁市传宇环保设备有限公司 | 电动球阀_不锈钢电动球阀_电动三通球阀_电动调节球阀_上海湖泉阀门有限公司 | 西装定制/做厂家/公司_西装订做/制价格/费用-北京圣达信西装 | 桂林腻子粉_内墙外墙抗裂砂浆腻子粉推荐广西鑫达涂料厂家供应 | ICP备案查询_APP备案查询_小程序备案查询 - 备案巴巴 | 四合院设计_四合院装修_四合院会所设计-四合院古建设计与建造中心1 |