有一個(gè)4臺(tái)機(jī)器的分布式服務(wù),不多不少,上每臺(tái)機(jī)器上查看日志比較麻煩,用Flume,Logstash、ElasticSearch、Kibana等分布式日志管理系統(tǒng)又顯得大材小用,所以想到了centos自帶的rsyslog。
創(chuàng)新互聯(lián)建站專注于企業(yè)全網(wǎng)營(yíng)銷推廣、網(wǎng)站重做改版、市中網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5網(wǎng)站設(shè)計(jì)、商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為市中等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。Rsyslog可以簡(jiǎn)單的理解為syslog的超集,在老版本的Linux系統(tǒng)中,Red Hat Enterprise Linux 3/4/5默認(rèn)是使用的syslog作為系統(tǒng)的日志工具,從RHEL 6 開始系統(tǒng)默認(rèn)使用了Rsyslog。
Rsyslog 是負(fù)責(zé)收集 syslog 的程序,可以用來取代 syslogd 或 syslog-ng。 在這些 syslog 處理程序中,個(gè)人認(rèn)為 rsyslog 是功能最為強(qiáng)大的。 其特性包括:
支持輸出日志到各種數(shù)據(jù)庫(kù),如 MySQL,PostgreSQL,MongoDB,ElasticSearch,等等;
通過 RELP + TCP 實(shí)現(xiàn)數(shù)據(jù)的可靠傳輸(基于此結(jié)合豐富的過濾條件可以建立一種 可靠的數(shù)據(jù)傳輸通道供其他應(yīng)用來使用);
精細(xì)的輸出格式控制以及對(duì)消息的強(qiáng)大 過濾能力;
高精度時(shí)間戳;隊(duì)列操作(內(nèi)存,磁盤以及混合模式等); 支持?jǐn)?shù)據(jù)的加密和壓縮傳輸?shù)取?/p>
$rsyslogd -version rsyslogd 3.22.1, compiled with: FEATURE_REGEXP: Yes FEATURE_LARGEFILE: Yes FEATURE_NETZIP (message compression): Yes GSSAPI Kerberos 5 support: Yes FEATURE_DEBUG (debug build, slow code): No Atomic operations supported: Yes Runtime Instrumentation (slow code): NoSee http://www.rsyslog.com for more information.
/etc/init.d/rsyslog start/etc/init.d/rsyslog stop/etc/init.d/rsyslog restart //幫助文檔 man rsyslogd, 或者輸入一個(gè)錯(cuò)誤的命令 $rsyslogd --helprsyslogd: invalid option -- '-'usage: rsyslogd [-c] [-46AdnqQvwx] [-l ] [-s ] [-f ] [-i ] [-N ] [-M ] [-u ]To run rsyslogd in native mode, use "rsyslogd -c3 "For further information see http://www.rsyslog.com/doc
rsyslog的配置文件有多種書寫方法:
sysklogd(一些結(jié)構(gòu)不兼容新特性),
legacy rsyslog(以“\$”開頭的寫法,如:$ModLoad imtcp.so
),
RainerScript(一種新的格式,是最推薦使用的一種,尤其是需要做復(fù)雜的配置時(shí))。
在本文中的配置都比較簡(jiǎn)單,就采用了legacy rsyslog的配置書寫方法。更多詳情參考:http://www.rsyslog.com/doc/master/configuration/basic_structure.html#statement-types
下面是一個(gè)例子:
$less /etc/rsyslog.conf #rsyslog v3 config file# if you experience problems, check# http://www.rsyslog.com/troubleshoot for assistance#### MODULES ####$ModLoad imuxsock.so # provides support for local system logging (e.g. via logger command)$ModLoad imklog.so # provides kernel logging support (previously done by rklogd)#$ModLoad immark.so # provides --MARK-- message capability# Provides UDP syslog reception#$ModLoad imudp.so#$UDPServerRun 514# Provides TCP syslog reception#$ModLoad imtcp.so #$InputTCPServerRun 514#### GLOBAL DIRECTIVES ##### Use default timestamp format$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat# File syncing capability is disabled by default. This feature is usually not required, # not useful and an extreme performance hit#$ActionFileEnableSync on#### RULES ##### Log all kernel messages to the console.# Logging much else clutters up the screen.#kern.* /dev/console# Log anything (except mail) of level info or higher.# Don't log private authentication messages!*.info;mail.none;authpriv.none;cron.none /var/log/messages# The authpriv file has restricted access.authpriv.* /var/log/secure# Log all the mail messages in one place.mail.* -/var/log/maillog# Log cron stuffcron.* /var/log/cron# Everybody gets emergency messages*.emerg *# Save news errors of level crit and higher in a special file.uucp,news.crit /var/log/spooler# Save boot messages also to boot.loglocal7.* /var/log/boot.log
配置文件查看less /etc/rsyslog.conf
。Rsyslog的配置主要有以下模塊:
modules,模塊,配置加載的模塊,如:ModLoad imudp.so
配置加載UDP傳輸模塊
global directives,全局配置,配置ryslog守護(hù)進(jìn)程的全局屬性,比如主信息隊(duì)列大?。∕ainMessageQueueSize)
rules,規(guī)則(選擇器+動(dòng)作),每個(gè)規(guī)則行由兩部分組成,selector部分和action部分,這兩部分由一個(gè)或多個(gè)空格或tab分隔,selector部分指定源和日志等級(jí),action部分指定對(duì)應(yīng)的操作
模板(templates)
輸出(outputs)
imudp,傳統(tǒng)方式的UDP傳輸,有損耗
imtcp,基于TCP明文的傳輸,只在特定情況下丟失信息,并被廣泛使用
imrelp,RELP傳輸,不會(huì)丟失信息,但只在rsyslogd 3.15.0及以上版本中可用
更多參考
selector也由兩部分組成,設(shè)施和優(yōu)先級(jí),由點(diǎn)號(hào).
分隔。第一部分為消息源或稱為日志設(shè)施,第二部分為日志級(jí)別。多個(gè)選擇器用;
分隔,如:*.info;mail.none
。
日志設(shè)施有:
auth(security), authpriv: 授權(quán)和安全相關(guān)的消息
kern: 來自Linux內(nèi)核的消息
mail: 由mail子系統(tǒng)產(chǎn)生的消息
cron: cron守護(hù)進(jìn)程相關(guān)的信息
daemon: 守護(hù)進(jìn)程產(chǎn)生的信息
news: 網(wǎng)絡(luò)消息子系統(tǒng)
lpr: 打印相關(guān)的日志信息
user: 用戶進(jìn)程相關(guān)的信息
local0 to local7: 保留,本地使用
日志級(jí)別有(升序):
debug:包含詳細(xì)的開發(fā)情報(bào)的信息,通常只在調(diào)試一個(gè)程序時(shí)使用。
info:情報(bào)信息,正常的系統(tǒng)消息,比如騷擾報(bào)告,帶寬數(shù)據(jù)等,不需要處理。
notice: 不是錯(cuò)誤情況,也不需要立即處理。
warning: 警告信息,不是錯(cuò)誤,比如系統(tǒng)磁盤使用了85%等。
err:錯(cuò)誤,不是非常緊急,在一定時(shí)間內(nèi)修復(fù)即可。
crit:重要情況,如硬盤錯(cuò)誤,備用連接丟失。
alert:應(yīng)該被立即改正的問題,如系統(tǒng)數(shù)據(jù)庫(kù)被破壞,ISP連接丟失。
emerg:緊急情況,需要立即通知技術(shù)人員。
日志設(shè)施的配置:
.
代表比后面還要高的消息等級(jí)都會(huì)記錄下來
.=
代表只有后面的這個(gè)消息等級(jí)會(huì)被記錄下來
.!
代表除了后面的這個(gè)消息等級(jí),其他的都會(huì)被記錄下來,我在rsyslogd 4.6.2中失敗了不知道為啥。。
對(duì)于多個(gè)選擇器可以用;
分隔。
local0.=debug /home/admin/applogs/app-name/debug.loglocal0.err;local0.warning;local0.info /home/admin/applogs/app-name/info.loglocal0.err /home/admin/applogs/app-name/error.log
action是規(guī)則描述的一部分,位于選擇器的后面,規(guī)則用于處理消息??偟膩碚f,消息內(nèi)容被寫到一種日志文件上,但也可以執(zhí)行其他動(dòng)作,比如寫到數(shù)據(jù)庫(kù)表中或轉(zhuǎn)發(fā)到其他主機(jī)。
在前面的實(shí)例中的是寫到本地文件中的:
# The authpriv file has restricted access. authpriv.* /var/log/secure
也可以寫到mysql數(shù)據(jù)庫(kù)中,
# modules, 要將日志寫到mysql中需要加載ommysql模塊$ModLoad ommysql # rule, send to mysql#*.* :ommysql:database-server,database-name,database-userid,database-password*.* :ommysql:127.0.0.1,Syslog,syslogwriter,topsecret
關(guān)于配置發(fā)送消息到數(shù)據(jù)庫(kù)的更多類容可以參考:http://www.rsyslog.com/doc/master/tutorials/database.html
action的配置:
保存到文件,cron.* -/var/log/cron.log
如果路徑前有-
則表示每次輸出日志時(shí)不同步(fsync)指定日志文件。 文件路徑既可以是靜態(tài)文件也可以是動(dòng)態(tài)文件。動(dòng)態(tài)文件由模板前加 ? 定義。
通過網(wǎng)絡(luò)發(fā)送日志 格式如下: @[()]:[] @ 表示使用 UDP 協(xié)議。@@ 表示使用 TCP 協(xié)議。 可以為: z 表示使用 zlib 壓縮,NUMBER 表示壓縮級(jí)別。多個(gè)選項(xiàng) 使用 , 分隔。 例如: . @192.168.0.1 # 使用 UDP 發(fā)送日志到 192.168.0.1 *.*@@example.com:18 # 使用 TCP 發(fā)送到 "example.com" 的 18 端口 . @(z9)[2001::1] # 使用 UDP 發(fā)送消息到 2001::1,啟用 zlib 9 級(jí)壓縮
cron.* ~ 丟棄所有信息,即該配置之后的動(dòng)作不會(huì)看到該日志。 隨 rsyslog 版本不同,如果有如下警告信息,則將 ~ 修改為 stop。
模板允許你指定日志信息的格式,也可用于生成動(dòng)態(tài)文件名,或在規(guī)則中使用。其定義如下所示,其中TEMPLATE_NAME是模板的名字,PROPERTY是rsyslog本身支持的一些屬性參數(shù)。
$template TEMPLATE_NAME,"text %PROPERTY% more text", [OPTION]
使用例子:
$template DynamicFile,"/var/log/test_logs/%timegenerated%-test.log"$template DailyPerHostLogs,"/var/log/syslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/messages.log"*.info ?DailyPerHostLogs *.* ?DynamicFile
在模板中我們用到的properties可以參考官方文檔說明,例子中用到的timegenerated
是指接收到消息時(shí)的時(shí)間戳。
輸出頻道為用戶可能想要的輸出類型提供了保護(hù),在規(guī)則中使用前要先定義.其定義如下所示,其中NAME指定輸出頻道的名稱,F(xiàn)ILE_NAME指定輸出文件,MAX_SIZE指定日志文件的大小,單位是bytes, ACTION指定日志文件到達(dá)MAX_SIZE時(shí)的操作。
$outchannel NAME, FILE_NAME, MAX_SIZE, ACTION
在規(guī)則中使用輸出頻道按照如下的格式:
selectors :omfile:$NAME
例子:
$outchannel log_rotation, /var/log/test_log.log, 104857600, /home/joe/log_rotation_script *.* :omfile:$log_rotation
通過下面命令可以校驗(yàn)配置文件是否配置正確:
sudo rsyslogd -f /etc/rsyslog.conf -N4其中 -N后面的數(shù)值代表rsyslog啟動(dòng)時(shí)-c 后指定的版本。
通過下面命令可以手動(dòng)發(fā)送日志信息:
logger -p local0.info "hello world"隨著日志文件越來越大,這不僅會(huì)帶來性能問題,同時(shí)對(duì)日志的管理也非常棘手。 當(dāng)一個(gè)日志文件被rotated,會(huì)創(chuàng)建一個(gè)新的日志文件,同時(shí)舊的日志文件會(huì)被重命名。這些文件在一段時(shí)間內(nèi)被保留,一旦產(chǎn)生一定數(shù)量的舊的日志,系統(tǒng)就會(huì)刪除一部分舊的日志。
logrotate是通過cron任務(wù)調(diào)用的,在安裝的時(shí)候就自動(dòng)創(chuàng)建了,所以通過ps命令看不到logrotate,可查看定時(shí)任務(wù)調(diào)用:cat /etc/cron.daily/logrotate
:
cron.daily下的文件執(zhí)行都是通過/etc/crontab
配置的:
logrotate的配置文件為/etc/logrotate.conf,下面給一個(gè)例子:
# see "man logrotate" for details # rotate log files weekly weekly # keep 4 weeks worth of backlogs rotate 4 # create new (empty) log files after rotating old onescreate# uncomment this if you want your log files compressed #compress# packages drop log rotation information into this directoryinclude /etc/logrotate.d# no packages own wtmp, or btmp -- we'll rotate them here/var/log/syslog { rotate 7 daily missingok notifempty delaycompress compress postrotate invoke-rc.d rsyslog reload > /dev/null endscript } /var/log/cron.log/var/log/debug /var/log/messages { rotate 4 weekly missingok notifempty compress delaycompress sharedscripts postrotate invoke-rc.d rsyslog reload > /dev/null endscript } # system-specific logs may be configured here
syslog的日志文件每天被rotated,保留7份舊的日志。其他的日志文件每周進(jìn)行一次rotate,并保留4份舊的日志。
我們可以通過man logrotate
來獲取所有的參數(shù)和詳細(xì)描述。這里列出一部分:
daily
指定轉(zhuǎn)儲(chǔ)周期為每天
weekly
指定轉(zhuǎn)儲(chǔ)周期為每周
monthly
指定轉(zhuǎn)儲(chǔ)周期為每月
compress
通過gzip 壓縮轉(zhuǎn)儲(chǔ)以后的日志
nocompress
不需要壓縮時(shí),用這個(gè)參數(shù)
copytruncate
用于還在打開中的日志文件,把當(dāng)前日志備份并截?cái)?/p>
nocopytruncate
備份日志文件但是不截?cái)?/p>
missingok
如果文件不存在,繼續(xù)下一個(gè)文件,不報(bào)異常
nomissingok
如果文件不存在,報(bào)異常(默認(rèn)配置)
create mode(文件權(quán)限) owner(擁有者) group(組)
轉(zhuǎn)儲(chǔ)文件,使用指定的文件模式創(chuàng)建新的日志文件
nocreate
不建立新的日志文件
delaycompress
和 compress 一起使用時(shí),轉(zhuǎn)儲(chǔ)的日志文件到下一次轉(zhuǎn)儲(chǔ)時(shí)才壓縮
nodelaycompress
覆蓋 delaycompress 選項(xiàng),轉(zhuǎn)儲(chǔ)同時(shí)壓縮。
errors address
轉(zhuǎn)儲(chǔ)時(shí)的錯(cuò)誤信息發(fā)送到指定的Email 地址
ifempty
即使是空文件也轉(zhuǎn)儲(chǔ),(logrotate 的缺省選項(xiàng))
notifempty
如果是空文件的話,不轉(zhuǎn)儲(chǔ)
mail address
把轉(zhuǎn)儲(chǔ)的日志文件發(fā)送到指定的E-mail 地址
nomail
轉(zhuǎn)儲(chǔ)時(shí)不發(fā)送日志文件
olddir directory
轉(zhuǎn)儲(chǔ)后的日志文件放入指定的目錄,必須和當(dāng)前日志文件在同一個(gè)文件系統(tǒng)
noolddir
轉(zhuǎn)儲(chǔ)后的日志文件和當(dāng)前日志文件放在同一個(gè)目錄下
prerotate/endscript
在轉(zhuǎn)儲(chǔ)以前需要執(zhí)行的命令可以放入這個(gè)對(duì),這兩個(gè)關(guān)鍵字必須單獨(dú)成行
postrotate/endscript
在轉(zhuǎn)儲(chǔ)以后需要執(zhí)行的命令可以放入這個(gè)對(duì),這兩個(gè)關(guān)鍵字必須單獨(dú)成行
rotate count
指定日志文件刪除之前轉(zhuǎn)儲(chǔ)的次數(shù),0 指沒有備份,5 指保留5 個(gè)備份
tabootext [+] LIST
讓logrotate 不轉(zhuǎn)儲(chǔ)指定擴(kuò)展名的文件,缺省的擴(kuò)展名是:.rpm-orig, .rpmsave, v, 和 ~
size SIZE
當(dāng)日志文件到達(dá)指定的大小時(shí)才轉(zhuǎn)儲(chǔ),Size 可以指定 bytes (缺省)以及KB (sizek)或者M(jìn)B (sizem)
sudo vim /etc/rsyslog.conf
sudo service rsyslog restart
sudo service syslog/syslog-ng stop
sudo vim /etc/logrotate.conf
注意,最后必須加上:
postrotate /etc/init.d/rsyslog restart > /dev/null 2>&1endscript
因?yàn)閘ogrotate之后,即使已經(jīng)移走了,但是rsyslog還是持有這個(gè)文件操作句柄,會(huì)繼續(xù)往原文件(被rotate的文件)中寫,即使已經(jīng)被重命名了,所以需要 restart rsyslog 來 reopen 下 logrotate新創(chuàng)建的同名文件。
另外有一個(gè)可以不用重啟的辦法,但是會(huì)丟失部分?jǐn)?shù)據(jù),logrotate 提供了 copytruncate
。默認(rèn)的指令 create
做法,是 移動(dòng)舊文件,創(chuàng)建新文件,然后用腳本reopen新文件;而 copytruncate 是采用的先拷貝再清空, 先復(fù)制一份舊的日志,然后請(qǐng)客原文件,整個(gè)過程原來的文件句柄,并沒有變化,所以不需要reopen,服務(wù)可以不中斷,但是這個(gè)過程會(huì)導(dǎo)致部分?jǐn)?shù)據(jù)丟失。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。