簡介:
企業規模大了,場景業務多了,日志不能再分散處理了。那么第一選擇就是日志服務器,一台服務器就可以查看所有業務的日志,當然,也要有專門的數據庫存儲日志,專門的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點多了。雖然還有數據庫問題,儲存格式,儲存內容一些問題沒有解決。