instance 從創建到刪除的整個生命周期都是有 Nova 管理的,后面各小節我們以instance生命周期中不同操作場景為例,詳細分析 Nova不同組件如何協調工作,並通過日志分析加深大家對 Nova 的理解
在研究 Nova 各個操作之前,我們先來學習一個重要的內容:OpenStack 日志。OpenStack 的日志記錄了非常詳細的細節信息,是我們學習和Troubleshooting的利器。
日志的位置
我們實驗環境使用的是DevStack ,日志統一放在 /opt/stack/logs 下面,每個服務都有自己的日志文件,從命名上很容易區分。
對於非 DevStack 安裝的OpenStack ,日志一般放在 /var/log/xxx/ 目錄下
各個子服務的日志文件也是單獨保存的,命名也很規范,容易區分。比如nova-api 的日志,存放路徑 /var/log/nova/api.log
root@DevStack-Controller:~# ls /opt/stack/logs/ | grep -v 2019
c-api.log # cinder日志
c-sch.log
c-vol.log
dstat-csv.log
dstat.log
g-api.log # glance-api 日志
g-reg.log # glance-registry日志
horizon.log
key-access.log
key.log # keystone日志
n-api.log # nova-api日志
n-cauth.log
n-cond.log
n-cpu.log # nova-compute日志
n-dhcp.log
n-novnc.log
n-sch.log
placement-api.log
q-agt.log
q-dhcp.log # q- 是Neutron日志
q-l3.log
q-meta.log
q-svc.log
screen
stack.sh.log
stack.sh.log.summary
日志的格式
OpenStack 的日志格式都是統一的,如下:
<時間戳><日志等級><代碼模塊><Request ID><日志內容><源代碼位置>
簡單說一下:
<時間戳> 日志記錄的時間點,年月日時分秒
<日志等級> INFO WARNING ERROR DEBUG 等
<代碼模塊> 當前運行的模塊1
<Request ID> 日志會記錄連續不同的操作,為了便於區分和增加可讀性,每個操作都被分配唯一的 Request ID ,便於查找日志內容
<日志內容> 這是日志的主體,記錄當前正在執行的操作和結果等重要信息
<源代碼位置> 日志代碼的位置,包括方法名稱、源代碼文件的目錄位置和行號,這一項不是所有日志都有
2019-05-23 16:35:16.430
DEBUG
nova.compute.manager
[req-808daefa-2cd8-4c34-bd34-2730453805da admin admin]
[instance: a0e2b485-f40c-43e4-beb6-049b6399f0ec] Starting instance...
from (pid=4613) _do_build_and_run_instance /opt/stack/nova/nova/compute/manager.py:1766
2019-05-23 16:35:16.528
INFO
nova.compute.claims
[req-808daefa-2cd8-4c34-bd34-2730453805da admin admin]
[instance: a0e2b485-f40c-43e4-beb6-049b6399f0ec] Attempting claim: memory 256 MB, disk 0 GB, vcpus 1 CPU
關於日志的幾點說明
1、學習OpenStack 需要看日志嗎?這個問題的答案取決於你是誰。如果你是OpenStack的最終用戶,那么日志對你不重要。你只需要愛GUI 上操作就可以了,出過出了問題直接找管理員處理。但如果你是OpenStack的運維和管理人員,日志對你就非常重要了。因為OpenStack操作如果出錯,GUI上給出的錯誤信息是非常籠統和簡要的,日志則提供了大量的線索,特別是當debug選項打開之后。如果你正處於OpenStack的學習階段,正如我們現在的狀態,那么也強烈建議你多看日志。日志能夠幫助你更加深入理解 OpenStack 的運行機制
2、日志能夠幫助我們深入學習OpenStack 和排查問題。但要想高效的使用日志還有個前提:必須先掌握OpenStack的運行機制,然后針對性的查看日志。就拿Instance Launch 的操作來說,如果之前不了解 nova-* 各子服務在操作中的協作關系,如果沒有理解流程圖,面對如此多而且分散的日志文件,我們也很難下手。
3、對於OpenStack 的運維和管理員來說,在大部分情況下,我們不需要看源代碼。因為OpenStack的日志記錄的很詳細了,足以幫助我們分析和定位問題。但還是有一些細節日志沒有記錄,必要時可以通過查看源代碼來來接得更清楚。即便如此,日志也會為我們提供源代碼查看的線索,不需要我們大海撈針。這一點我們會在后面的操作分析中看到。