openstack(juno版)使用rsyslog转发日志

系统:ubuntu14.04

openstack版本: juno

一,在nova中启用rsyslog

1. 修改 /etc/nova/nova.conf

[DEFAULT]
use_syslog = True
syslog_log_facility = LOG_LOCAL0


2. 修改nova代码。

2.1首先确认nova代码的位置

python -c 'import nova;print nova.__path__'
['/usr/lib/python2.7/dist-packages/nova']

2.2进入nova目录

cd /usr/lib/python2.7/dist-packages/nova

2.3修改代码

vim openstack/common/log.py

2.3.1 搜索"use-syslog-rfc-format"关键字,将配置中的default=False改为True,启用rfc格式的日志,如果不启用的话,不会把发送日志的程序名打印出来,该配置在配置文件中修改无效,所以直接改代码中的默认值。修改后如下:

    cfg.BoolOpt('use-syslog-rfc-format',
                # TODO(bogdando) remove or use True after existing
                #    syslog format deprecation in J
                default=True,
                help='(Optional) Enables or disables syslog rfc5424 format '
                     'for logging. If enabled, prefixes the MSG part of the '
                     'syslog message with APP-NAME (RFC5424). The '
                     'format without the APP-NAME is deprecated in I, '
                     'and will be removed in J.'),

2.3.2 搜索“if CONF.use_syslog”关键字,往下几行。

(1)将syslog = RFCSysLogHandler(facility=facility)改为syslog = RFCSysLogHandler(address='/dev/log',facility=facility)

(2)将syslog = logging.handlers.SysLogHandler(facility=facility)改为syslog = logging.handlers.SysLogHandler(address='/dev/log',facility=facility)

最终结果如下:

    if CONF.use_syslog:
        try:
            facility = _find_facility_from_conf()
            # TODO(bogdando) use the format provided by RFCSysLogHandler
            #   after existing syslog format deprecation in J
            if CONF.use_syslog_rfc_format:
                syslog = RFCSysLogHandler(address='/dev/log',facility=facility)
            else:
                syslog = logging.handlers.SysLogHandler(address='/dev/log',facility=facility)
                #syslog = logging.handlers.SysLogHandler(facility=facility)
            log_root.addHandler(syslog)
        except socket.error:
            log_root.error('Unable to add syslog handler. Verify that syslog'
                           'is running.')

二, 配置rsyslog

 1. 新增rsyslog配置。rsyslog在ubuntu14.04中已经安装。

#新增配置文件
echo 'local0.*    @@192.168.100.100:514' > /etc/rsyslog.d/60-nova.conf

效果是将本地local0.*的日志转发到远程的192.168.100.100:514。

local0对应nova.conf中的LOG_LOCAL0,后面的.*表示转发所有级别的日志,如果只想传送错入日志,可以改成local0.error,最后的@@192.168.100.100:514表示将本地的rsyslog转发到远程日志服务器。具体参考rsyslog官方文档。

local0.*    @@192.168.100.100:514

2, 重启服务器

service rsyslog restart
service nova-compute restart

3. 验证rsyslog有没有配置成功。在shell中执行如下命令,正常的话结果会在192.168.100.100显示出来。

logger -p local0.debug "test rsyslog"

三, 总结

整个日志的流程是(1)nova发送日志给本地的rsyslog服务器。(2)本地的rsyslog接收日志,并转发到远程的日志服务器192.168.100.100。(3)远程的日志服务器可以使rsyslog,也可以是其他的日志服务器如graylog,记得打开远程日志服务器的tcp接收端口。

openstack其他服务的配置也是类似的,唯一的区别是定位代码的位置,如过要修改cinder的话,可以这样确定代码位置:

python -c 'import cinder;print cinder.__path__'

修改openstack或rsyslog配置后记得重启服务。

你可能感兴趣的:(日志,openstack,rsyslog)