zoukankan      html  css  js  c++  java
  • 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点多了。虽然还有数据库问题,储存格式,储存内容一些问题没有解决。

     

  • 相关阅读:
    psy & vr
    psy 2
    psy
    linux c中select使用技巧
    hostent h_addr_list
    gethostbyname() -- 用域名或主机名获取IP地址
    c_select 调用参数说明
    [NYOJ 737] 石子合并(一)
    [HDU 1059] Dividing
    [HDU 1789] Doing Homework again
  • 原文地址:https://www.cnblogs.com/jackadam/p/14604577.html
Copyright © 2011-2022 走看看