OpenStack的日志管理介绍( 二 )

在这个例子,cinder-volume启动失败和提供一个stack trace(堆栈跟踪) 。因为其卷后端无法设置存储卷,这可能因为配置中预期的LVM卷不存在 。
备注:Stacktrace(堆栈跟踪)是一个非常有用的调试工具. 在未捕获的异常被抛出时(或者手动制造堆栈跟踪的时候)它让你看到你调到的堆(意思是,在某一点调用方法的堆). 不仅显示出出现错误的地方, 也显示出程序在那个地方是如何结束的.
下面是一个Error日志实例:
【OpenStack的日志管理介绍】2013-02-25 20:26:33 6619 ERROR nova.openstack.common.rpc.common [-] AMQP server on localhost:5672 is unreachable: [Errno 111] ECONNREFUSED. Trying again in 23 seconds.在这错误中,一个nova服务不能连接到RabbitMQ服务器,因为它有一个拒绝连接的错误 。
三、跟踪实例请求当一个实例无法正常运行时,您通常需要在各种nova-*服务的日志文件中以及在云控制器和计算节点上跟踪与该实例相关的活动 。
典型的方法是在服务日志中跟踪与实例关联的UUID 。
考虑下面的例子:
 

OpenStack的日志管理介绍

文章插图
 
在这里,与实例关联的ID是
faf7ded8-4a46-413b-b113-f19590746ffe,如果是在云控制器的/var/log/nova-*日志文件中搜索此字符串,它出现在nova-api.log和nova-scheduler.log中 。如果你在计算点的/var/log/nova-*.log日志文件中搜索,它会出现在nova-compute.log中 。日志如果没有出现Error或Critical消息,则在最新日志条目可能会提示出现了什么问题 。
四、添加自定义日志语句如果现有日志中没有足够的信息,您可能需要将自己的自定义日志语句添加到nova-*服务中 。
源文件位于
/usr/lib/python2.7/dist-packages/nova.
添加日志记录语句,下面一行应该位于文件顶部附近 。对于大多数文件,这些文件应该已经存在 。
OpenStack的日志管理介绍

文章插图
 
要添加DEBUG 日志记录语句,你要做:
OpenStack的日志管理介绍

文章插图
 
您可能注意到,所有现有日志消息前面都有一个下划线,并用括号括起来,例如:
OpenStack的日志管理介绍

文章插图
 
此格式用于支持使用gettex 国际化库将日志消息转换为不同语言 。您不需要为自己的自定义日志消息执行此操作 。但是,如果希望将代码贡献回包含日志语句的OpenStack项目,则必须用下划线和括号将日志消息括起来 。
五、RabbitMQ Web管理界面或rabbitmqctl除了连接失败之外,RabbitMQ日志文件通常对调试OpenStack相关问题没有用处 。相反,我们建议使用RabbitMQ web管理界面 。在云控制器上启用它:
# /usr/lib/rabbitmq/bin/rabbitmq-plugins enable rabbitmq_management
# service rabbitmq-server restart
RabbitMQ网页管理界面通过http://localhost:55672来访问 。
其中Ubuntu的不同版本的访问端口会有所不同,如2.7.1是使用55672,而3.0以上则使用15672 。
可以通过以下命令查看版本
OpenStack的日志管理介绍

文章插图
 
另外,使用rabbitmqctl命令行也是可以查看队列情况,如
rabbitmqctl list_queues| grep cinder 可以显示剩余在队列中的消息 。如果有消息,可能表明cinder服务未正确连接到rabbitmq,可能必须重新启动 。
RabbitMQ要监视的项目包括每个队列中的项目数以及服务器的处理时间统计信息 。
六、集中管理日志因为云平台很可能由许多服务器组成,所以你必须检查每台服务器上的日志,才能正确地将一个事件关联在一起 。更好的解决方案是将所有服务器的日志发送到一个集中的地方,以便可以统一管理和方便查阅 。
统一日志管理方案的选择将取决于所使用的操作系统以及对日志工具的需求 。目前业内比较有名的ElasticStack,是一个比较流行的开源解决方案 。
OpenStack的日志管理介绍

文章插图
 




推荐阅读