教你看懂 OpenStack 日志 - 每天5分钟玩转 OpenStack(29)
instance 从创建到删除的整个生命周期都是由 Nova 管理的。 后面各小节我们以 instance 生命周期中的不同操作场景为例,详细分析 Nova 不同组件如何协调工作,并通过日志分析加深大家对 Nova 的理解。
在研究 Nova 各个操作之前,我们先来学习一个重要的内容:OpenStack 日志。
OpenStack 的日志记录了非常详细的细节信息,是我们学习和 troubleshoting 的利器。
日志的位置
我们实验环境使用的是 devstack,日志都统一放在 /opt/stack/logs 目录下,每个服务有自己的日志文件,从命名上很容易区分。
比如 nova-* 各个子服务的日志都以 “n-” 开头: n-api.log 是 nova-api 的日志 n-cpu.log 是 nova-compute 的日志。
Glance 的日志文件都是 “g-” 开头: g-api.log 是 glance-api 的日志 g-reg.log 是 glance-registry 的日志。
Cinder、Neutron 的日志分别以 “c-” 和 “q-” 开头。
对于非 devstack 安装的 OpenStack,日志一般放在 /var/log/xxx/ 目录下。 比如 Nova 放在 /var/log/nova/ 下,Glance 放在/var/log/glance下……
各个子服务的日志文件也是单独保存,命名也很规范,容易区分。 比如 nova-api 的日志一般就命名为 /var/log/nova/api.log,其他日志类似。
日志的格式
OpenStack 的日志格式都是统一的,如下
<时间戳><日志等级><代码模块><Request ID><日志内容><源代码位置>
简单说明一下
时间戳 日志记录的时间,包括 年 月 日 时 分 秒 毫秒
日志等级 有INFO WARNING ERROR DEBUG等
代码模块 当前运行的模块Request ID 日志会记录连续不同的操作,为了便于区分和增加可读性,每个操作都被分配唯一的Request ID,便于查找
日志内容 这是日志的主体,记录当前正在执行的操作和结果等重要信息
源代码位置 日志代码的位置,包括方法名称,源代码文件的目录位置和行号。这一项不是所有日志都有
下面举例说明
2015-12-10 20:46:49.566 DEBUG nova.virt.libvirt.config [req-5c973fff-e9ba-4317-bfd9-76678cc96584 None None] Generated XML ('<cpu>\n <arch>x86_64</arch>\n <model>Westmere</model>\n <vendor>Intel</vendor>\n <topology sockets="2" cores="3" threads="1"/>\n <feature name="avx"/>\n <feature name="ds"/>\n <feature name="ht"/>\n <feature name="hypervisor"/>\n <feature name="osxsave"/>\n <feature name="pclmuldq"/>\n <feature name="rdtscp"/>\n <feature name="ss"/>\n <feature name="vme"/>\n <feature name="xsave"/>\n</cpu>\n',) to_xml /opt/stack/nova/nova/virt/libvirt/config.py:82
这条日志我们可以得知:
-
代码模块是 nova.virt.libvirt.config,由此可知应该是 Hypervisor Libvirt 相关的操作
-
日志内容是生成 XML
-
如果要跟踪源代码,可以到 /opt/stack/nova/nova/virt/libvirt/config.py 的 82 行,方法是 to_xml
又例如下面这条日志:
2015-12-10 20:46:49.671 ERROR nova.compute.manager [req-5c973fff-e9ba-4317-bfd9-76678cc96584 None None] No compute node record for host devstack-controller
这条日志我们可以得知:
-
这是一个 ERROR 日志
-
具体内容是 “No compute node record for host devstack-controller”
-
该日志没有指明源代码位置
关于日志的几点说明
-
学习 OpenStack 需要看日志吗?这个问题的答案取决于你是谁。 如果你只是 OpenStack 的最终用户,那么日志对你不重要。你只需要在 GUI上 操作,如果出问题直接找管理员就可以了。 但如果你是 OpenStack 的运维和管理人员,日志对你就非常重要了。因为 OpenStack 操作如果出错,GUI 上给出的错误信息是非常笼统和简要的,日志则提供了大量的线索,特别是当 debug 选项打开之后。 如果你正处于 OpenStack 的学习阶段,正如我们现在的状态,那么也强烈建议你多看日志。日志能够帮助你更加深入理解 OpenStack 的运行机制。
-
日志能够帮助我们深入学习 OpenStack 和排查问题。但要想高效的使用日志还得有个前提: 必须先掌握 OpenStack 的运行机制,然后针对性的查看日志。 就拿 Instance Launch 操作来说,如果之前不了解 nova-* 各子服务在操作中的协作关系,如果没有理解流程图,面对如此多和分散的日志文件,我们也很难下手不是。
-
对于 OpenStack 的运维和管理员来说,在大部分情况下,我们都不需要看源代码。 因为 OpenStack 的日志记录得很详细了,足以帮助我们分析和定位问题。 但还是有一些细节日志没有记录,必要时可以通过查看源代码理解得更清楚。 即便如此,日志也会为我们提供源代码查看的线索,不需要我们大海捞针。 这一点我们会在后面的操作分析中看到。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
虚拟化技术(2)——存储虚拟化
存储虚拟化 随着存储的需求呈螺旋式向上增长,公司内的存储服务器和阵列都无一例外地随之成倍增长。对于这种存储管理困境的一种解决办法便是存储虚拟化。存储虚拟化可以使管理程序员将不同的存储作为单个集合的资源来进行识别、配置和管理。存储虚拟化是存储整合的一个重要组成部分,它能减少管理问题,而且能够提高存储利用率,这样可以降低新增存储的费用。 权威机构S N I A(存储网络工业协会)给出的定义 “通过将存储系统/子系统的内部功能从应用程序、计算服务器、网络资源中进行抽象、隐藏或隔离,实现独立于应用程序、网络的存储与数据管理”。 存储虚拟化技术将底层存储设备进行抽象化统一管理,向服务器层屏蔽存储设备硬件的特殊性,而只保留其统一的逻辑特性,从而实现了存储系统的集中、统一、方便的管理。 与传统存储的比较 与传统存储相比,虚拟化存储的优点主要体现在:磁盘利用率高,传统存储技术的磁盘利用率一般只有30-70%,而采用虚拟化技术后的磁盘利用率高达70-90%;存储灵活,可以适应不同厂商、不同类别的异构存储平台,为存储资源管理提供了更好的灵活性;管理方便,提供了一个大容量存储系统集中管理的手段,避免了由于存...
- 下一篇
Launch和Shut Off操作详解 - 每天5分钟玩转 OpenStack(30)
本节详细分析 instance launch 和 shut off 操作,以及如何在日志中快速定位有用信息的技巧。 Launch Launch instance 应该算 Nova 最重要的操作。 仔细研究 lanuch 操作能够帮助我们充分理解 Nova 各个子服务的协调配合和运行机制。 前面我们已经以 launch 操作为例详细讨论了各个 nova-* 子服务。 这里不再赘述,只是再回顾一下流程。 客户(可以是 OpenStack 最终用户,也可以是其他程序)向 API(nova-api)发送请求:“帮我创建一个 Instance” API对请求做一些必要处理后,向 Messaging(RabbitMQ)发送了一条消息:“让 Scheduler 创建一个 Instance” Scheduler(nova-scheduler)从 Messaging 获取到 API 发给它的消息,然后执行调度算法,从若干计算节点中选出节点 A Scheduler 向 Messaging 发送了一条消息:“在计算节点 A 上创建这个 Instance” 计算节点 A 的 Compute(nova-comp...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7