rsyslogd、syslog遠端傳輸、日誌儲存、轉存
一、產生本地日誌
1、/etc/resolv.conf 配置檔案 local0~local7是使用者自定義的日誌這裡我們使用local1,新增以下 local1.* /www/admin/admin/log/web_log 配置完需要重啟 rsyslogd程式 /etc/init.d/rsyslog restart
2、程式中用以下記入日誌 openlog("audit_as_cgi", LOG_PID, LOG_LOCAL1);
syslog(LOG_DEBUG,"%s",write_buf);
closelog();
audit_as_cgi :
LOG_PID:每條日誌都包含程序號
LOG_LOCAL1:是我們自定義的日誌型別
LOG_DEBUG:日誌等級
3、產生的本地日誌,如下所示
二、遠端傳送日誌
rsyslog提供三個遠端日誌傳輸方式:
- UDP: 資料包傳輸可信度不高
- TCP: 資料包傳輸可信度比較高
- RELP: 資料包傳輸可信度最高,避免資料丟失,比較新的協議,目前應用較少
關於RELP的更進一步瞭解可以參考 Using TLS with RELP
TCP配置和UDP類似,如下
Server端配置
/etc/rsyslog.conf |
Client端配置
/etc/rsyslog.conf ,這裡我們把使用者自定義的local1型別日誌傳送給2.108裝置 |
當然,如果你是用的之前老版本的syslogd程式,則傳送端不需要配置檔案,直接syslogd -R 伺服器地址即可,只不過syslogd好像是UDP協議的514埠,照樣可以用rsyslogd接收。
客戶端和服務端重啟相關服務即可在伺服器(192.168.2.108)端看的如下結果:
重啟rsyslogd之後如果沒有收到日誌,檢視防火牆是否開啟了514埠,沒有開啟就在伺服器端開啟514埠
iptables -I INPUT -p tcp --dport 514 -j ACCEPT
iptables -I OUTPUT -p tcp --dport 514 -j ACCEPT
三、日誌自動轉存-logrotate程式
logrotate是個十分有用的工具,它可以自動對日誌進行截斷(或輪循)、壓縮以及刪除舊的日誌檔案。例如,你可以設定logrotate,讓/var/log/foo日誌檔案每30天輪循,並刪除超過6個月的日誌。配置完後,logrotate的運作完全自動化,不必進行任何進一步的人為干預。另外,舊日誌也可以通過電子郵件傳送,不過該選項超出了本教程的討論範圍。
1、在/etc/logrotate.d/ 路徑下建立自己的日誌配置檔案,如下所示:
第一行:要管理的日誌檔案
daily: 按天轉存
dateext: 按日誌備份檔案
rotate: 共備份5份,之後會依次替換掉最舊的檔案
size=1M:當日志文件達到1M時,才備份
最後3句:必須重啟rsyslogd程式,否則日誌轉存之後,不會寫入最新的檔案
另外,如果你的遠端伺服器沒有建立好連線,也會影響本地日誌的生產速度
四、logrotate觸發過程
centos從6開始,daily hourly monthly weekly等這些資料夾裡面的任務已經不用crond處理,而是交給了anacron處理
1、/etc/cron.hourly/0anacron 會每小時定時執行,由 /etc/cron.d/0hourly 每小時呼叫一次
/etc/cron.hourly/0anacron 內容如下
if test -r /var/spool/anacron/cron.daily; then
day=`cat /var/spool/anacron/cron.daily`
fi
if [ `date +%Y%m%d` = "$day" ]; then
exit 0;
fi
# Do not run jobs when on battery power
if test -x /usr/bin/on_ac_power; then
/usr/bin/on_ac_power >/dev/null 2>&1
if test $? -eq 1; then
exit 0
fi
fi
/usr/sbin/anacron -s
它會檢測系統當前時間和/var/spool/anacron/cron.daily(誰寫入的還沒搞清楚)檔案裡的日期是否一致,一致就退出,否則執行anacron
2、anacron 程式啟動,它的配置檔案為/etc/anacrontab ,內容如下:
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=54 (延時54分、預設延時最小為6分)
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22 這個設定就是你看到日誌切割的時間範圍,一般是凌晨3點+RANDOM_DELAY+5 大約是凌晨3:59切割檔案
下面任務列表:第一列是輪詢天數、第2列是延時時間(單位分鐘)、第3、4列是任務描述和命令,在此呼叫daily、weekly、monthly任務
#period in days delay in minutes job-identifier command
15cron.dailynice run-parts /etc/cron.daily
725cron.weeklynice run-parts /etc/cron.weekly
@monthly 45cron.monthlynice run-parts /etc/cron.monthly
3、由上面的anacron 呼叫cron.daily任務後,logrotate程式得以執行
cat /etc/cron.daily/logrotate ,內容如下:
#!/bin/sh
/usr/sbin/logrotate -s /var/lib/logrotate.status /etc/logrotate.conf (這裡的路徑要注意,有的是 /var/lib/logrotate/logrotate.status)
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
logrotate程式呼叫配置檔案/etc/logrotate.conf 及/etc/logrotate.d/路徑下的配置,生成按天、周、月為週期的檔案。
遺留問題:
logrotate生成的備份日誌,日期不太對,沒有明確的分隔點。例如16號生成的日誌,備份到了17號檔案裡,而17檔案裡包含部分18號的內容。
我感覺這類問題,應該通過START_HOURS_RANGE這個引數來設定以儘量縮小時間誤差。
一、產生本地日誌
1、/etc/resolv.conf 配置檔案 local0~local7是使用者自定義的日誌這裡我們使用local1,新增以下 local1.* /www/admin/admin/log/web_log 配置完需要重啟 rsyslogd程式 /etc/init.d/rsyslog restart
2、程式中用以下記入日誌 openlog("audit_as_cgi", LOG_PID, LOG_LOCAL1);
syslog(LOG_DEBUG,"%s",write_buf);
closelog();
audit_as_cgi :是日誌字首
LOG_PID:每條日誌都包含程序號
LOG_LOCAL1:是我們自定義的日誌型別
LOG_DEBUG:日誌等級
3、產生的本地日誌,如下所示
二、遠端傳送日誌
rsyslog提供三個遠端日誌傳輸方式:
- UDP: 資料包傳輸可信度不高
- TCP: 資料包傳輸可信度比較高
- RELP: 資料包傳輸可信度最高,避免資料丟失,比較新的協議,目前應用較少
關於RELP的更進一步瞭解可以參考 Using TLS with RELP RELP Input Module RELP Output Module (omrelp)
TCP配置和UDP類似,如下
Server端配置
/etc/rsyslog.conf |
Client端配置
/etc/rsyslog.conf ,這裡我們把使用者自定義的local1型別日誌傳送給2.108裝置 |
當然,如果你是用的之前老版本的syslogd程式,則傳送端不需要配置檔案,直接syslogd -R 伺服器地址即可,只不過syslogd好像是UDP協議的514埠,照樣可以用rsyslogd接收。
客戶端和服務端重啟相關服務即可在伺服器(192.168.2.108)端看的如下結果:
重啟rsyslogd之後如果沒有收到日誌,檢視防火牆是否開啟了514埠,沒有開啟就在伺服器端開啟514埠
iptables -I INPUT -p tcp --dport 514 -j ACCEPT
iptables -I OUTPUT -p tcp --dport 514 -j ACCEPT
三、日誌自動轉存-logrotate程式
logrotate是個十分有用的工具,它可以自動對日誌進行截斷(或輪循)、壓縮以及刪除舊的日誌檔案。例如,你可以設定logrotate,讓/var/log/foo日誌檔案每30天輪循,並刪除超過6個月的日誌。配置完後,logrotate的運作完全自動化,不必進行任何進一步的人為干預。另外,舊日誌也可以通過電子郵件傳送,不過該選項超出了本教程的討論範圍。
1、在/etc/logrotate.d/ 路徑下建立自己的日誌配置檔案,如下所示:
第一行:要管理的日誌檔案
daily: 按天轉存
dateext: 按日誌備份檔案
rotate: 共備份5份,之後會依次替換掉最舊的檔案
size=1M:當日志文件達到1M時,才備份
最後3句:必須重啟rsyslogd程式,否則日誌轉存之後,不會寫入最新的檔案
另外,如果你的遠端伺服器沒有建立好連線,也會影響本地日誌的生產速度
四、logrotate觸發過程
centos從6開始,daily hourly monthly weekly等這些資料夾裡面的任務已經不用crond處理,而是交給了anacron處理
1、/etc/cron.hourly/0anacron 會每小時定時執行,由 /etc/cron.d/0hourly 每小時呼叫一次
/etc/cron.hourly/0anacron 內容如下
if test -r /var/spool/anacron/cron.daily; then
day=`cat /var/spool/anacron/cron.daily`
fi
if [ `date +%Y%m%d` = "$day" ]; then
exit 0;
fi
# Do not run jobs when on battery power
if test -x /usr/bin/on_ac_power; then
/usr/bin/on_ac_power >/dev/null 2>&1
if test $? -eq 1; then
exit 0
fi
fi
/usr/sbin/anacron -s
它會檢測系統當前時間和/var/spool/anacron/cron.daily(誰寫入的還沒搞清楚)檔案裡的日期是否一致,一致就退出,否則執行anacron
2、anacron 程式啟動,它的配置檔案為/etc/anacrontab ,內容如下:
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=54 (延時54分、預設延時最小為6分)
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22 這個設定就是你看到日誌切割的時間範圍,一般是凌晨3點+RANDOM_DELAY+5 大約是凌晨3:59切割檔案
下面任務列表:第一列是輪詢天數、第2列是延時時間(單位分鐘)、第3、4列是任務描述和命令,在此呼叫daily、weekly、monthly任務
#period in days delay in minutes job-identifier command
15cron.dailynice run-parts /etc/cron.daily
725cron.weeklynice run-parts /etc/cron.weekly
@monthly 45cron.monthlynice run-parts /etc/cron.monthly
3、由上面的anacron 呼叫cron.daily任務後,logrotate程式得以執行
cat /etc/cron.daily/logrotate ,內容如下:
#!/bin/sh
/usr/sbin/logrotate -s /var/lib/logrotate.status /etc/logrotate.conf (這裡的路徑要注意,有的是 /var/lib/logrotate/logrotate.status)
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
logrotate程式呼叫配置檔案/etc/logrotate.conf 及/etc/logrotate.d/路徑下的配置,生成按天、周、月為週期的檔案。
遺留問題:
logrotate生成的備份日誌,日期不太對,沒有明確的分隔點。例如16號生成的日誌,備份到了17號檔案裡,而17檔案裡包含部分18號的內容。
我感覺這類問題,應該通過START_HOURS_RANGE這個引數來設定以儘量縮小時間誤差。