系统: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配置后记得重启服务。