Atom feed of this document
  

 日志记录

 日志模块

日志的行为可通过配置文件来改变。要指定配置文件的话,在文件/etc/nova/nova.conf中添加下面几行内容:

log-config=/etc/nova/logging.conf

要更改日志级别,以参数对形式添加DEBUG, INFO, WARNING, 或 ERROR

日志的配置文件时INF风格的配置,其必须包含称之为 logger_nova的一节,这个控制了nova-*服务的日志行为,举例:

[logger_nova]
level = INFO
handlers = stderr
qualname = nova

此例是将调试级别的日志置为INFO(这比默认的DEBUG设置要少一些内容)。

更多关于日志配置的语法,包括handlersquaname等变量,请参阅 Python 文档 的日志配置。

对于定义多种handler的 logging.conf实例文件,请参阅OpenStack 配置参考

 系统日志

OpenStack计算服务可以发送日志信息到syslog。如果你打算使用rsyslog将日志存放在远程的机器中,这个就非常的有用。将计算服务(nova),身份服务(keystone),镜像服务(glance)分别来配置,块存储服务(cinder)也发送日志消息到syslog。打开这些配置文件:

  • /etc/nova/nova.conf

  • /etc/keystone/keystone.conf

  • /etc/glance/glance-api.conf

  • /etc/glance/glance-registry.conf

  • /etc/cinder/cinder.conf

在每个配置文件中,增加下面这些行:

verbose = False
debug = False
use_syslog = True
syslog_log_facility = LOG_LOCAL0

另外启用syslog需要说明的一点,这些设置通常是将日志详细和调试输出关闭的。

[注意]注意

尽管这个示例为每个服务使用了同一个本地设施 (LOG_LOCAL0,对应于 syslog 设施 LOCAL0),我们建议您为每个服务配置一个分开的本地设施,因为这可以提供更好的隔离性和灵活性。例如,您可以获取不同服务级别的服务的日志信息。syslog 允许您定义最多 8 个本地设施,LOCAL0, LOCAL1, ..., LOCAL7。要了解更多信息,请阅读 syslog 文档。

 远程系统日志

rsyslog 对于在多台机器上设置一个集中日志服务器是非常有用的。本小节简单地描述了如何配置 rsyslog 服务器。完整的 rsyslog 培训超出了本书的范围。本小节假设 rsyslog 已经在您的主机上安装好 (对于大多数的 Linux 发行版,它是默认安装的)。

此例提供了一个在日志服务主机上的/etc/rsyslog.conf最小化配置,此主机用来接收日志文件:

# provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 1024

添加一个寻找主机名的过滤规则到 /etc/rsyslog.conf 中。这个示例使用了 COMPUTE_01 作为计算节点的主机名称:

:hostname, isequal, "COMPUTE_01" /mnt/rsyslog/logs/compute-01.log

在每个计算节点中创建名称为/etc/rsyslog.d/60-nova.conf的文件,然后添加下面内容:

# prevent debug from dnsmasq with the daemon.none parameter
*.*;auth,authpriv.none,daemon.none,local0.none -/var/log/syslog
# Specify a log level of ERROR
local0.error    @@172.20.1.43:1024

一旦你创建了文件,重启rsyslog服务。计算节点的Error级别的日志消息就会发送到日志服务器中。

 串口终端

串口终端提供了诊断内核输出的途径,以及在实例缺乏网连接的情况下修复其它系统故障时的解决途径。

OpenStack Icehouse及其更早的版本支持只读访问使用串口终端来使用os-GetSerialOutput服务的动作。多数的镜像默认都会启动此特性。更多信息,请参阅 故障修复

OpenStack Juno及其后续版本支持读写访问使用串口终端来使用os-GetSerialConsole的服务行为。此特性也需要websocket客户端的支持来访问串口终端。

 

配置串口终端的读-写访问

在计算节点,编辑文件 /etc/nova/nova.conf

  1. [serial_console] 一节,启用串口终端:

    [serial_console]
    ...
    enabled = true
  2. [serial_console]章节中,配置串口终端代理类似于图形终端代理:

    [serial_console]
    ...
    base_url = ws://控制器:6083/
    listen = 0.0.0.0
    proxyclient_address = MANAGEMENT_INTERFACE_IP_ADDRESS

    base_url属性指定基本的URL,此URL是客户端获取来自API上所请求的串口终端地址。典型情况,它为控制器节点的主机名称。

    listen 属性指定了 nova-compute 须监听的网卡,用于虚拟终端的连接。典型的,使用0.0.0.0来监听所有的网卡。

    proxyclient_address属性指定了代理应连接到哪块网卡,典型的情况是管理网卡的IP地址。

当你启用了读写访问串口终端时,计算服务会为实例将串口终端的信息添加到Libvirt的XML文件中。例如:

<console type='tcp'>
  <source mode='bind' host='127.0.0.1' service='10000'/>
  <protocol type='raw'/>
  <target type='serial' port='0'/>
  <alias name='serial0'/>
</console>
 

通过串口终端访问实例

  1. 使用命令nova get-serial-proxy 来获取实例串口终端的websocket URL:

    $ nova get-serial-proxy INSTANCE_NAME
    +--------+-----------------------------------------------------------------+
    | Type   | Url                                                             |
    +--------+-----------------------------------------------------------------+
    | serial | ws://127.0.0.1:6083/?token=18510769-71ad-4e5a-8348-4218b5613b3d |
    +--------+-----------------------------------------------------------------+

    另外,可直接使用API:

    $ curl -i 'http://<controller>:8774/v2/<tenant_uuid>/servers/<instance_uuid>/action' \
      -X POST \
      -H "Accept: application/json" \
      -H "Content-Type: application/json" \
      -H "X-Auth-Project-Id: <project_id>" \
      -H "X-Auth-Token: <auth_token>" \
      -d '{"os-getSerialConsole": {"type": "serial"}}'
  2. 使用Python websocket加上URL,会为访问串口终端生成 .send, .recv, 以及 .fileno方法。例如:

    import websocket
    ws = websocket.create_connection(
        'ws://127.0.0.1:6083/?token=18510769-71ad-4e5a-8348-4218b5613b3d',
        subprotocols=['binary', 'base64'])

    另外,使用Python websocket客户端,例如https://github.com/larsks/novaconsole/

[注意]注意

当你启用了串口终端,实例使用命令nova console-log 的记录就会禁用。这样的话,除非你是在串口终端下,否则内核的输出以及其它系统消息都不会显示。

Questions? Discuss on ask.openstack.org
Found an error? Report a bug against this page


loading table of contents...