日志

日志模块

可以通过创建配置文件来更改日志记录行为。要指定配置文件,请将此行添加到 /etc/nova/nova.conf 文件

log_config_append=/etc/nova/logging.conf

要更改日志记录级别,请添加 DEBUGINFOWARNINGERROR 作为参数。

日志记录配置文件是一个 INI 风格的配置文件,必须包含一个名为 logger_nova 的部分。这控制着 nova-* 服务中日志记录设施的行为。例如

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

此示例将调试级别设置为 INFO(这比默认的 DEBUG 设置更简洁)。

有关日志记录配置语法的更多信息,包括 handlersqualname 变量,请参阅 Python 文档 中关于日志记录配置文件的内容。

有关包含各种已定义处理程序的 logging.conf 文件的示例,请参阅 nova 的示例配置文件

Syslog

OpenStack Compute 服务可以将日志信息发送到 syslog。如果您想使用 rsyslog 将日志转发到远程机器,这将很有用。分别配置 Compute 服务 (nova)、Identity 服务 (keystone)、Image 服务 (glance) 以及(如果使用)Block Storage 服务 (cinder) 以将日志消息发送到 syslog。打开这些配置文件

  • /etc/nova/nova.conf

  • /etc/keystone/keystone.conf

  • /etc/glance/glance-api.conf

  • /etc/glance/glance-registry.conf

  • /etc/cinder/cinder.conf

在每个配置文件中,添加这些行

debug = False
use_syslog = True
syslog_log_facility = LOG_LOCAL0

除了启用 syslog 之外,这些设置还会关闭日志中的调试输出。

注意

虽然此示例为每个服务使用相同的本地设施 (LOG_LOCAL0,对应于 syslog 设施 LOCAL0),但我们建议为每个服务配置单独的本地设施,因为这提供了更好的隔离性和更大的灵活性。例如,您可以为不同的服务以不同的严重级别捕获日志信息。syslog 允许您定义最多八个本地设施,LOCAL0, LOCAL1, ..., LOCAL7。有关更多信息,请参阅 syslog 文档。

Rsyslog

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 服务。计算主机的错误级别日志消息现在应发送到日志服务器。

串口控制台

串口控制台提供了一种在故障排除期间检查内核输出和其他系统消息的方式,如果实例没有网络连接,则可以使用它。

可以使用 os-GetSerialOutput 服务器操作从服务器串口控制台进行只读访问。大多数云镜像默认启用此功能。有关更多信息,请参阅 Compute 的常见错误和修复

OpenStack Juno 及更高版本支持使用 os-GetSerialConsole 服务器操作使用串口控制台进行读写访问。此功能还需要一个 websocket 客户端才能访问串口控制台。

配置读写串口控制台访问

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

    [serial_console] 部分,启用串口控制台

    [serial_console]
    # ...
    enabled = true
    
  2. [serial_console] 部分,配置与图形控制台代理类似的串口控制台代理

    [serial_console]
    # ...
    base_url = ws://controller:6083/
    listen = 0.0.0.0
    proxyclient_address = MANAGEMENT_INTERFACE_IP_ADDRESS
    

    base_url 选项指定客户端从 API 收到请求串口控制台时收到的基本 URL。通常,这指的是控制器节点的 hostname。

    listen 选项指定 nova-compute 应该侦听虚拟控制台连接的网络接口。通常,0.0.0.0 将启用在所有接口上侦听。

    proxyclient_address 选项指定代理应该连接的网络接口。通常,这指的是管理接口的 IP 地址。

    当您启用读写串口控制台访问时,Compute 会将串口控制台信息添加到实例的 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-console 命令检索实例上串口控制台的 websocket URL

    $ nova get-serial-console INSTANCE_NAME
    

    或者使用 openstack console url show 命令。

    $ openstack console url show --serial INSTANCE_NAME
    

    类型

    Url

    串行

    ws://127.0.0.1:6083/?token=18510769-71ad-4e5a-8348-4218b5613b3d

    或者,直接使用 API

    $ curl -i 'http://<controller>:8774/v2.1/<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 客户端

注意

当您启用串口控制台时,使用 nova console-log 命令的典型实例日志记录将被禁用。除非您正在主动查看串口控制台,否则内核输出和其他系统消息将不可见。