自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

LXD 2.0 系列(十二):調(diào)試,及給LXD做貢獻(xiàn)

系統(tǒng) Linux 系統(tǒng)運(yùn)維
這個(gè)大約一年前開始的這系列文章的最后一篇博文。如果你從一開始就關(guān)注了這個(gè)系列,你應(yīng)該已經(jīng)使用了 LXD 相當(dāng)長(zhǎng)的時(shí)間了,并且非常熟悉它的日常操作和功能。

介紹

終于要結(jié)束了!這個(gè)大約一年前開始的這系列文章的***一篇博文。

  1. LXD 入門
  2. 安裝與配置
  3. 你的***個(gè) LXD 容器
  4. 資源控制
  5. 鏡像管理
  6. 遠(yuǎn)程主機(jī)及容器遷移
  7. LXD 中的 Docker
  8. LXD 中的 LXD
  9. 實(shí)時(shí)遷移
  10. LXD 和 Juju
  11. LXD 和 OpenStack
  12. 調(diào)試,及給 LXD 做貢獻(xiàn)

如果你從一開始就關(guān)注了這個(gè)系列,你應(yīng)該已經(jīng)使用了 LXD 相當(dāng)長(zhǎng)的時(shí)間了,并且非常熟悉它的日常操作和功能。

但如果出現(xiàn)問題怎么辦?你可以做什么來自己跟蹤問題?如果你不能,你應(yīng)該記錄什么信息,以便上游可以跟蹤問題?

如果你想自己解決問題或通過實(shí)現(xiàn)你需要的功能來幫助改善LXD怎么辦?如何構(gòu)建,測(cè)試和貢獻(xiàn) LXD 代碼庫?

調(diào)試 LXD 并填寫 bug 報(bào)告

LXD 日志文件

/var/log/lxd/lxd.log:

這是 LXD 日志的主文件。為了避免它快速充滿你的磁盤,默認(rèn)只會(huì)記錄 INFO、WARNING 或者 ERROR 級(jí)別的日志。你可以在 LXD 守護(hù)進(jìn)程中使用 –debug 改變其行為。

/var/log/lxd/CONTAINER/lxc.conf:

每當(dāng)你啟動(dòng)容器時(shí),此文件將更新為傳遞給 LXC 的配置。

這里會(huì)展示容器將如何配置,包括其所有的設(shè)備、綁定掛載等等。

/var/log/lxd/CONTAINER/forkexec.log:

這個(gè)文件包含 LXC 命令執(zhí)行失敗時(shí)產(chǎn)生的錯(cuò)誤。這個(gè)情況是非常罕見的,因?yàn)?LXD 通常會(huì)在發(fā)生之前處理大多數(shù)錯(cuò)誤。

/var/log/lxd/CONTAINER/forkstart.log:

這個(gè)文件包含 LXC 在啟動(dòng)容器時(shí)的錯(cuò)誤信息。含 LXC 命令執(zhí)行失敗時(shí)產(chǎn)生的錯(cuò)誤。

CRIU 日志 (對(duì)于實(shí)時(shí)遷移)

如果使用 CRIU 進(jìn)行容器實(shí)時(shí)遷移或?qū)崟r(shí)快照,則每次生成 CRIU 轉(zhuǎn)儲(chǔ)或恢復(fù)轉(zhuǎn)儲(chǔ)時(shí)都會(huì)記錄額外的日志文件。

這些日志也可以在 /var/log/lxd/CONTAINER/ 中找到,并且有時(shí)間戳,以便你可以找到與你最近的操作所匹配的那些日志。它們包含 CRIU 轉(zhuǎn)儲(chǔ)和恢復(fù)的所有內(nèi)容的詳細(xì)記錄,并且比典型的遷移/快照錯(cuò)誤消息更容器理解。

LXD 調(diào)試消息

如上所述,你可以使用 -debug 選項(xiàng)將守護(hù)進(jìn)程切換為執(zhí)行調(diào)試日志記錄。另一種方法是連接到守護(hù)進(jìn)程的事件接口,它將顯示所有日志條目,而不管配置的日志級(jí)別(即使是遠(yuǎn)程工作)。

舉例說,對(duì)于 lxc init ubuntu:16.04 xen 來說,

lxd.log 會(huì)是這樣:

  1. INFO[02-24|18:14:09] Starting container action=start created=2017-02-24T23:11:45+0000 ephemeral=false name=xen stateful=false used=1970-01-01T00:00:00+0000 
  2. INFO[02-24|18:14:10] Started container action=start created=2017-02-24T23:11:45+0000 ephemeral=false name=xen stateful=false used=1970-01-01T00:00:00+0000 

而 lxc monitor –type=logging 會(huì)是:

  1. metadata: 
  2.   context: {} 
  3.   level: dbug 
  4.   message: 'New events listener: 9b725741-ffe7-4bfc-8d3e-fe620fc6e00a' 
  5. timestamp: 2017-02-24T18:14:01.025989062-05:00 
  6. type: logging 
  7. metadata: 
  8.   context: 
  9.     ip: '@' 
  10.     method: GET 
  11.     url: /1.0 
  12.   level: dbug 
  13.   message: handling 
  14. timestamp: 2017-02-24T18:14:09.341283344-05:00 
  15. type: logging 
  16. metadata: 
  17.   context: 
  18.     driver: storage/zfs 
  19.   level: dbug 
  20.   message: StorageCoreInit 
  21. timestamp: 2017-02-24T18:14:09.341536477-05:00 
  22. type: logging 
  23. metadata: 
  24.   context: 
  25.     ip: '@' 
  26.     method: GET 
  27.     url: /1.0/containers/xen 
  28.   level: dbug 
  29.   message: handling 
  30. timestamp: 2017-02-24T18:14:09.347709394-05:00 
  31. type: logging 
  32. metadata: 
  33.   context: 
  34.     ip: '@' 
  35.     method: PUT 
  36.     url: /1.0/containers/xen/state 
  37.   level: dbug 
  38.   message: handling 
  39. timestamp: 2017-02-24T18:14:09.357046302-05:00 
  40. type: logging 
  41. metadata: 
  42.   context: {} 
  43.   level: dbug 
  44.   message: 'New task operation: 2e2cf904-c4c4-4693-881f-57897d602ad3' 
  45. timestamp: 2017-02-24T18:14:09.358387853-05:00 
  46. type: logging 
  47. metadata: 
  48.   context: {} 
  49.   level: dbug 
  50.   message: 'Started task operation: 2e2cf904-c4c4-4693-881f-57897d602ad3' 
  51. timestamp: 2017-02-24T18:14:09.358578599-05:00 
  52. type: logging 
  53. metadata: 
  54.   context: 
  55.     ip: '@' 
  56.     method: GET 
  57.     url: /1.0/operations/2e2cf904-c4c4-4693-881f-57897d602ad3/wait 
  58.   level: dbug 
  59.   message: handling 
  60. timestamp: 2017-02-24T18:14:09.366213106-05:00 
  61. type: logging 
  62. metadata: 
  63.   context: 
  64.     driver: storage/zfs 
  65.   level: dbug 
  66.   message: StoragePoolInit 
  67. timestamp: 2017-02-24T18:14:09.369636451-05:00 
  68. type: logging 
  69. metadata: 
  70.   context: 
  71.     driver: storage/zfs 
  72.   level: dbug 
  73.   message: StoragePoolCheck 
  74. timestamp: 2017-02-24T18:14:09.369771164-05:00 
  75. type: logging 
  76. metadata: 
  77.   context: 
  78.     container: xen 
  79.     driver: storage/zfs 
  80.   level: dbug 
  81.   message: ContainerMount 
  82. timestamp: 2017-02-24T18:14:09.424696767-05:00 
  83. type: logging 
  84. metadata: 
  85.   context: 
  86.     driver: storage/zfs 
  87.     name: xen 
  88.   level: dbug 
  89.   message: ContainerUmount 
  90. timestamp: 2017-02-24T18:14:09.432723719-05:00 
  91. type: logging 
  92. metadata: 
  93.   context: 
  94.     container: xen 
  95.     driver: storage/zfs 
  96.   level: dbug 
  97.   message: ContainerMount 
  98. timestamp: 2017-02-24T18:14:09.721067917-05:00 
  99. type: logging 
  100. metadata: 
  101.   context: 
  102.     action: start 
  103.     created: 2017-02-24 23:11:45 +0000 UTC 
  104.     ephemeral: "false" 
  105.     name: xen 
  106.     stateful: "false" 
  107.     used: 1970-01-01 00:00:00 +0000 UTC 
  108.   level: info 
  109.   message: Starting container 
  110. timestamp: 2017-02-24T18:14:09.749808518-05:00 
  111. type: logging 
  112. metadata: 
  113.   context: 
  114.     ip: '@' 
  115.     method: GET 
  116.     url: /1.0 
  117.   level: dbug 
  118.   message: handling 
  119. timestamp: 2017-02-24T18:14:09.792551375-05:00 
  120. type: logging 
  121. metadata: 
  122.   context: 
  123.     driver: storage/zfs 
  124.   level: dbug 
  125.   message: StorageCoreInit 
  126. timestamp: 2017-02-24T18:14:09.792961032-05:00 
  127. type: logging 
  128. metadata: 
  129.   context: 
  130.     ip: '@' 
  131.     method: GET 
  132.     url: /internal/containers/23/onstart 
  133.   level: dbug 
  134.   message: handling 
  135. timestamp: 2017-02-24T18:14:09.800803501-05:00 
  136. type: logging 
  137. metadata: 
  138.   context: 
  139.     driver: storage/zfs 
  140.   level: dbug 
  141.   message: StoragePoolInit 
  142. timestamp: 2017-02-24T18:14:09.803190248-05:00 
  143. type: logging 
  144. metadata: 
  145.   context: 
  146.     driver: storage/zfs 
  147.   level: dbug 
  148.   message: StoragePoolCheck 
  149. timestamp: 2017-02-24T18:14:09.803251188-05:00 
  150. type: logging 
  151. metadata: 
  152.   context: 
  153.     container: xen 
  154.     driver: storage/zfs 
  155.   level: dbug 
  156.   message: ContainerMount 
  157. timestamp: 2017-02-24T18:14:09.803306055-05:00 
  158. type: logging 
  159. metadata: 
  160.   context: {} 
  161.   level: dbug 
  162.   message: 'Scheduler: container xen started: re-balancing' 
  163. timestamp: 2017-02-24T18:14:09.965080432-05:00 
  164. type: logging 
  165. metadata: 
  166.   context: 
  167.     action: start 
  168.     created: 2017-02-24 23:11:45 +0000 UTC 
  169.     ephemeral: "false" 
  170.     name: xen 
  171.     stateful: "false" 
  172.     used: 1970-01-01 00:00:00 +0000 UTC 
  173.   level: info 
  174.   message: Started container 
  175. timestamp: 2017-02-24T18:14:10.162965059-05:00 
  176. type: logging 
  177. metadata: 
  178.   context: {} 
  179.   level: dbug 
  180.   message: 'Success for task operation: 2e2cf904-c4c4-4693-881f-57897d602ad3' 
  181. timestamp: 2017-02-24T18:14:10.163072893-05:00 
  182. type: logging 

lxc monitor 的格式有點(diǎn)不同于每個(gè)條目都縮合成一行的日志文件,但更重要的是,你可以看到所有 level:dbug 條目。

如何報(bào)告 bug

LXD 的 bug

***報(bào)告 bug 的地方是 https://github.com/lxc/lxd/issues。確保完整填寫了 bug 報(bào)告模板中的內(nèi)容,這些信息可以節(jié)省我們我們時(shí)間來復(fù)現(xiàn)環(huán)境。

Ubuntu 的 bug

如果你發(fā)現(xiàn) Ubuntu 包本身有問題,無法安裝、升級(jí)或刪除?;蛘哂龅?LXD init 腳本的問題。報(bào)告此類錯(cuò)誤的***是在 Launchpad 上。

在 Ubuntu 系統(tǒng)上,你可以使用:ubuntu-bug lxd ,它將自動(dòng)包括一些日志文件和包信息供我們查看。

CRIU 的 bug

與 CRIU 相關(guān)的 Bug,你可以通過 CRIU 的錯(cuò)誤輸出發(fā)現(xiàn),你應(yīng)該在 Launchpad 上報(bào)告這些:ubuntu-bug criu

請(qǐng)注意,通過 LXD 使用 CRIU 屬于測(cè)試版功能,除非你愿意通過 Canonical 的支持合同付費(fèi)支持,要么可能需要一段時(shí)間才能查看你的錯(cuò)誤報(bào)告。

貢獻(xiàn)給 LXD

LXD 用 Go 寫成并托管在 Github。我們歡迎任外部的貢獻(xiàn)。為 LXD 貢獻(xiàn)不需要 CLA 或類似的法律協(xié)議簽署,只是通常的開發(fā)者所有權(quán)證書(Signed-off-by: 行)。

在我們的問題追蹤器工具中,我們列有許多潛在的功能需求,新的貢獻(xiàn)者可以以此作為良好的起點(diǎn)。通常***在開始處理代碼先發(fā)出 issue,這樣每個(gè)人都知道你正在做這項(xiàng)工作,以便我們可以提供一些早期反饋。

從源碼源碼構(gòu)建 LXD

這里有上游的維護(hù)說明:https://github.com/lxc/lxd#building-from-source

你需要在 Github 上 fork 上游倉庫,然后將你的更改推送到你的分支。我們建議每天 rebase 上游的 LXD,因?yàn)槲覀儍A向于定期合并更改。

運(yùn)行測(cè)試套件

LXD 維護(hù)了兩套測(cè)試集,單元測(cè)試和集成測(cè)試。你可以用下面的命令測(cè)試所有:

  1. sudo -E make check 

要只運(yùn)行單元測(cè)試,使用:

  1. sudo -E go test ./... 

要運(yùn)行集成測(cè)試,使用:

  1. cd test
  2. sudo -E ./main.sh 

后者支持相當(dāng)多的環(huán)境變量來測(cè)試各種存儲(chǔ)后端、禁用網(wǎng)絡(luò)測(cè)試、使用 ramdisk 或只是調(diào)整日志輸出。其中一些是:

  • LXD_BACKEND:btrfs、dir、lvm 或 zfs” 之一(默認(rèn)為 dir)

運(yùn)行 LXD 存儲(chǔ)驅(qū)動(dòng)程序相關(guān)的所有測(cè)試。

  • LXD_CONCURRENT:true 或 false(默認(rèn)為 false)

這啟用一些額外的并發(fā)測(cè)試。

  • LXD_DEBUG:true 或 false(默認(rèn)為 false)

記錄所有 shell 命令,并在調(diào)試模式下運(yùn)行所有 LXD 命令。

  • LXD_INSPECT:true 或 false(默認(rèn)為 false)

測(cè)試程序會(huì)在故障時(shí)掛起,以便你可以檢查環(huán)境。

  • LXD_LOGS:將所有 LXD 日志文件轉(zhuǎn)儲(chǔ)到的目錄(默認(rèn)為 “”)

所有生成的 LXD 守護(hù)進(jìn)程的 logs 目錄將被復(fù)制到此路徑。

  • LXD_OFFLINE:true 或 false(默認(rèn)為 false)

禁用任何依賴于外部網(wǎng)絡(luò)連接的測(cè)試。

  • LXD_TEST_IMAGE: unified 格式的 LXD 鏡像的路徑(默認(rèn)為 “”)

可以使用自定義測(cè)試鏡像,而不是默認(rèn)的最小 busybox 鏡像。

  • LXD_TMPFS:true 或 false(默認(rèn)為 false)

在 tmpfs 安裝中運(yùn)行整個(gè)測(cè)試套件,這會(huì)使用相當(dāng)多的內(nèi)存,但會(huì)使測(cè)試速度明顯更快。

  • LXD_VERBOSE:true 或 false(默認(rèn)為 false)

不太極端的 LXD_DEBUG 版本。shell 命令仍然會(huì)記錄,但 -debug 不會(huì)傳遞給 LXC 命令,LXD 守護(hù)進(jìn)程只能使用 -verbose 運(yùn)行。

測(cè)試程序?qū)⒃趯?shí)際運(yùn)行之前提醒你任何缺失的依賴項(xiàng)。在相當(dāng)快的機(jī)器上運(yùn)行該測(cè)試可在 10 分鐘內(nèi)完成。

發(fā)送你的分支

發(fā)送拉取請(qǐng)求(PR)之前,你需要確認(rèn):

  • 你已經(jīng) rebase 了上游分支
  • 你的所有提交信息都包括 Signed-off-by: First Last <email> 這行
  • 已刪除任何你的臨時(shí)調(diào)試代碼
  • 你已經(jīng)將相關(guān)的提交 squash 在一起,以保持你的分支容易審查
  • 單元和集成測(cè)試全部通過

一切完成后,在 Github 上發(fā)起一個(gè)拉取請(qǐng)求。我們的 Jenkins 將驗(yàn)證提交是否全部有 signed-off,在 MacOS 和 Windows 上的測(cè)試將自動(dòng)執(zhí)行,如果看起來不錯(cuò),我們將觸發(fā)一個(gè)完整的 Jenkins 測(cè)試,它將在所有存儲(chǔ)后端、32 位和 64 位以及我們關(guān)心的所有 Go 版本上測(cè)試你的分支。

假設(shè)我們有人觸發(fā)了 Jenkins,這通常需要不到一個(gè)小時(shí)的時(shí)間。

一旦所有測(cè)試完成,我們對(duì)代碼本身感到滿意,你的分支將會(huì)被合并,你的代碼會(huì)出現(xiàn)在下一個(gè) LXD 發(fā)布中。如果更改適用于 LXD stable-2.0 分支,我們將為你向后移植。

總結(jié)

我希望這個(gè)系列的博客文章有助于你了解什么是 LXD,以及它可以做什么!

本系列的范圍僅限于 LXD(2.0.x),但我們也為那些想要***功能的用戶提供每月功能版本。你可以找到一些其他涵蓋了原來的 LXD 2.0系列文章中列出的功能的博客文章。

額外的信息

LXD 的主站在: https://linuxcontainers.org/lxd

LXD 的 GitHub 開發(fā)倉庫: https://github.com/lxc/lxd

LXD 的郵件列表: https://lists.linuxcontainers.org

LXD 的 IRC 頻道:#lxcontainers on irc.freenode.net

在線嘗試 LXD: https://linuxcontainers.org/lxd/try-it

作者簡(jiǎn)介:

我是 Stéphane Graber。我是 LXC 和 LXD 項(xiàng)目的***,目前在加拿大魁北克蒙特利爾的家所在的 Canonical 有限公司擔(dān)任 LXD 的技術(shù)主管。 

責(zé)任編輯:龐桂玉 來源: Linux中國(guó)
相關(guān)推薦

2017-03-06 14:00:22

LXD 2.0LXDLinux

2016-07-29 14:12:21

2017-03-08 18:00:10

LXD 2.0LinuxOpenStack

2017-03-08 10:40:14

LXD 2.0JujuLinux

2017-02-27 19:27:52

LXDDockerLinux

2017-01-12 15:37:34

LinuxLXD 2.0鏡像管理

2017-02-05 14:52:42

2016-12-29 11:01:03

LinuxLXD 2.0資源控制

2017-03-07 16:41:03

LXD 2.0Linux實(shí)時(shí)遷移

2016-08-22 21:41:37

LXDLinux容器管理器

2016-08-24 15:12:41

LXDLinux容器

2015-04-24 10:57:22

Ubuntu 15.0Ubuntu

2017-12-25 13:51:32

LinuxUbuntu LinuLXD容器

2014-11-20 10:12:59

Docker容器LXDCanonica

2023-02-03 17:47:28

2021-06-11 21:25:45

Dubbo源碼機(jī)制

2014-04-01 10:20:00

開源Rails

2013-09-27 10:51:00

Github

2020-01-02 10:04:32

Linux 系統(tǒng) 數(shù)據(jù)

2021-07-21 09:58:50

鴻蒙HarmonyOS應(yīng)用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)