python logging rsyslog混合使用

简介:

  企业规模大了,场景业务多了,日志不能再分散处理了。那么第一选择就是日志服务器,一台服务器就可以查看所有业务的日志,当然,也要有专门的数据库存储日志,专门的WEB浏览日志。

  作为linux的默认日志服务,rsyslog就是我们的第一选择了,它即是linux系统的日志服务,也可以配置开放端口作为中央日志服务器。

  rsyslog能够接受从各种各样的来源,将其输入,输出的结果到不同的目的地。rsyslog可以提供超过每秒一百万条消息给目标文件。

  简单说,我们写python程序的时候,日志使用logging模块,是可以直接输出到远程的rsyslog中央日志服务器的。

一:安装rsyslog

我测试使用的fedora默认已经安装了,没安装的话,自己dnf apk ……根据自己的系统装一下。

二:配置rsyslog

rsyslog的配置文件为: /etc/rsyslog.conf

编辑此文件即可。

1.MODULES

模块:可以理解为rsyslog的插件,配置打开这些插件,rsyslog就开启了这个功能,我比较关心的是tcp、udp端口监听记录功能

# Provides UDP syslog reception
# for parameters see http://www.rsyslog.com/doc/imudp.html
#module(load="imudp") # needs to be done just once
#input(type="imudp" port="514")

# Provides TCP syslog reception
# for parameters see http://www.rsyslog.com/doc/imtcp.html
module(load="imtcp") # needs to be done just once
input(type="imtcp" port="514")

我取消了tcp端口514的注释,即监听514端口tcp协议。记录发向这里的日志内容。

2.RULES

规则:记录的保存规则吧。

$template DynamicFile,"/var/log/%HOSTNAME%/forwarded-logs.log"
*.* -?DynamicFile

我在RULES下面增加了这个内容

第一行是文件名模板,

第二行是任何日志都保存到这个模板文件名中。

3.数据库

实验没到这里,候补

三:python logging

import logging
import socket
from logging import handlers

#初始化日志
logger = logging.getLogger("AppName")

# 指定logger输出格式
formatter = logging.Formatter('%(asctime)s %(levelname)-8s: (%(name)s)%(pathname)s %(message)s')

#rsyslog日志处理器
rsyslog_handler=handlers.SysLogHandler(address=('10.0.0.10', 514), socktype=socket.SOCK_STREAM)
rsyslog_handler.setFormatter(formatter)

# 为logger添加的日志处理器
logger.addHandler(rsyslog_handler)

# 指定日志的最低输出级别,默认为WARN级别
logger.setLevel(logging.DEBUG)

# 输出不同级别的log
logger.debug('文件? ')
logger.info('this is information')
logger.warning('this is warning message')
logger.error('this is error message')
logger.fatal('this is fatal message, it is same as logger.critical')
logger.critical('this is critical message')

关键的是设置服务器地址,端口,还有协议,sysloghandler默认使用udp协议,

socktype=socket.SOCK_STREAM    是定义tcp协议

10.0.0.10    514 是定义rsyslog服务器地址和端口  只要能解析,填主机名,域名都可以。

暂时到这里吧,凌晨1点多了。虽然还有数据库问题,储存格式,储存内容一些问题没有解决。

 

原文地址:https://www.cnblogs.com/jackadam/p/14604577.html