實現把一個主機作為客戶端,把日志發送到指定的服務器端:
【服務器端】
開放tcp端口,udp端口:
vim /etc/rsyslog.conf:
# Provides UDP syslog reception$ModLoad imudp$UDPServerRun 514 # Provides TCP syslog reception#$ModLoad imtcp#$InputTCPServerRun 514
這里我只開放了udp端口,如果需要開放tcp端口只需把對應兩行前面的注釋去掉即可。
這兩個的區別在於:
udp不是穩定協議,可能存在丟包等現象,如果網絡環境不好應選擇tcp;
設置指定文件存放某個客戶端的日志:
vim /etc/rsyslog.conf;
:fromhost,isequal,"192.168.100.156" /var/log/124.log:fromhost,isequal,"192.168.100.156" ~
ip為客戶端的ip。第一行右邊的表示把該ip發送過來的日志存放到124.log文件夾中。
第二行右邊的~表示丟棄該ip發送過來的包。因為該文件內容是順序執行的,所以上面兩行就是把該ip日志存放到124.log后就丟棄該數據,防止在多個文件中存放相同的內容。
【客戶端】
vim /etc/rsyslog.conf:
*.* @192.168.100.127:514
@表示采用udp傳輸,如果想用tcp,改為@@就可以。
后面的ip為服務器的ip,端口號默認的514。
前面的*.*表示全匹配,把所有日志發向服務器。這里也可以自己定制指定的日志發送到服務器。
供參考:
https://www.cnblogs.com/zengkefu/p/5606875.html
通過syslog接收遠程日志
(我的實驗環境是,客戶機A:Solaris 10,服務主機B:redhat linux企業服務器版): www.2cto.com
rsyslog 傳輸日志
文章轉載自:
http://www.cnblogs.com/Eivll0m/p/6700828.html
https://segmentfault.com/a/1190000003509909#articleHeader1
Rsyslog日志服務搭建
rsyslog是比syslog功能更強大的日志記錄系統,可以將日志輸出到文件,數據庫和其它程序。Centos 6.x默認的rsyslog版本是5.x。
網上關於rsyslog的安裝配置文檔倒是不少,但大多數都是一些基礎配置,可參考的價值不大。另外如何收集多台多tomcat應用日志的文檔更是幾乎沒有,斷斷續續折騰了幾天,總算有了一個結果,下面就關於如何配置收集tomcat及其下面部署的程序日志進行說明。
一、升級Rsyslog
操作系統是Centos 6.8,默認安裝的Rsyslog版本是5.8.10,可通過rsyslogd -v命令查看:
$ rsyslogd -v rsyslogd 5.8.10, compiled with: FEATURE_REGEXP: Yes FEATURE_LARGEFILE: No GSSAPI Kerberos 5 support: Yes FEATURE_DEBUG (debug build, slow code): No 32bit Atomic operations supported: Yes 64bit Atomic operations supported: Yes Runtime Instrumentation (slow code): No See http://www.rsyslog.com for more information.
使用yum對rsyslog進行升級(需要root權限):
# cd /etc/yum.repos.d # wget http://rpms.adiscon.com/v8-stable/rsyslog.repo # yum update rsyslog
升級完成后,版本為8.26.0
$ rsyslogd -v rsyslogd 8.26.0, compiled with: PLATFORM: x86_64-redhat-linux-gnu PLATFORM (lsb_release -d): FEATURE_REGEXP: Yes GSSAPI Kerberos 5 support: No FEATURE_DEBUG (debug build, slow code): No 32bit Atomic operations supported: Yes 64bit Atomic operations supported: Yes memory allocator: system default Runtime Instrumentation (slow code): No uuid support: Yes Number of Bits in RainerScript integers: 64 See http://www.rsyslog.com for more information.
注意:Rsyslog服務端和客戶端都進行升級。
二、客戶端配置
1、防火牆配置
如果啟用了iptables防火牆,注意開放默認的514端口,當然也可以通過配置文件使用其它端口。
iptables -A INPUT -m state --state NEW -m udp -p udp -i eth0 --dport 514 -j ACCEPT iptables -A INPUT -m state --state NEW -m tcp -p tcp -i eth0 --dport 514 -j ACCEPT
說明:rsyslog可以通過tcp協議傳輸日志,也可以通過udp協議傳輸。有些服務器我采用的tcp協議,有些用了udp協議,想對比看看哪種更適合我們的環境,因此所有服務器都建立了以上兩條規則。eth0是內網網卡。
2、配置rsyslog
編輯配置文件/etc/rsyslog.conf,去掉以下配置項前的注釋,如果沒有就添加該配置項。
module(load="imuxsock") module(load="imklog") module(load="imfile") #使用udp協議 module(load="imudp") input(type="imudp" port="514") #使用tcp協議 module(load="imtcp" MaxSessions="500") input(type="imtcp" port="514")
新增配置:
ruleset(name="remote"){ action(type="omfwd" target="Rsyslog服務端主機IP" port="514" #端口 protocol="tcp" #使用協議 queue.type="linkedList" #使用異步處理 queue.spoolDirectory="/app/wutongshu/rsyslog" #隊列目錄 queue.fileName="remoteQueue_10_139_54_53" #隊列名稱 queue.maxDiskSpace="5g" #隊列占最大磁盤空間 queue.saveOnShutdown="on" #保存內存數據如果rsyslog關閉 action.resumeRetryCount="-1" #無限重試插入失敗 ) stop }
新增子配置文件:/etc/rsyslog.d/tomcat-8080.conf
$WorkDirectory /app/wutongshu/rsyslog #默認為/var/lib/rsyslog input(type="imfile" File="/app/wutongshu/tomcat-8080/logs/catalina.out" #日志路徑 #StateFile="catalina.out-8080" #新版本中不需要設置 Facility="local1" Severity="info" Tag="catalina-10.139.54.53-8080" #定義日志標簽,重要,服務端根據這個標簽可以識別日志 PersistStateInterval="1" #回寫偏移量數據到文件間隔時間(秒),根據實際情況而定 Ruleset="remote" #rsyslog.conf中定義的rule名稱 ) ######################################################################### input(type="imfile" File="/app/wutongshu/log/channelmanage/channelinfo.log" #StateFile="channelmanage-8080" Facility="local2" Severity="info" Tag="channe-10.139.54.53-8080" PersistStateInterval="1" Ruleset="remote" ) ######################################################################### input(type="imfile" File="/app/wutongshu/log/channelmanage/channelerror.log" #StateFile="channelmanage-error-8080" Facility="local3" Severity="info" Tag="channelerror-10.139.54.53-8080" PersistStateInterval="1" Ruleset="remote" )
根據實際情況,可以在/etc/rsyslog.d添加多個配置文件,我的服務器上面都有兩個tomcat實例,因此還有一個配置文件是tomcat-8090.conf,跟上面類似,只是應用不同,日志路徑,端口不同。
最后在/etc/rsyslog.conf中將
*.info;mail.none;authpriv.none;cron.none; /var/log/messages
修改為:
*.info;mail.none;authpriv.none;cron.none;local1.none;local2.none;local3.none;local4.none;local5.none;local6.none /var/log/messages
作用為不將自定義的日志記錄到/var/log/message文件中,不然的話日志量大很容將/根目占滿,后果可想而知。
三、服務端配置
1、防火牆配置
與客戶端一致:
iptables -A INPUT -m state --state NEW -m udp -p udp -i eth0 --dport 514 -j ACCEPT iptables -A INPUT -m state --state NEW -m tcp -p tcp -i eth0 --dport 514 -j ACCEPT
2、配置rsyslog
編輯/etc/rsyslog.conf,去掉以下配置項前的注釋,如果沒有就添加該配置項。
$PreserveFQDN on #用於正確的獲取主機名,暫時應該沒用到 $FileOwner wutongshu #存儲的文件屬主 $FileGroup app #文件屬主 $FileCreateMode 0644 #生成的文件權限 $DirCreateMode 0755 #生成的目錄權限 $Umask 0022 $PrivDropToUser root #可以刪除日志的用戶 $PrivDropToGroup root #可以刪除日志的用戶組 module(load="imuxsock") module(load="imklog") module(load="imudp") input(type="imudp" port="514") module(load="imtcp" MaxSessions="500") input(type="imtcp" port="514") #以下為部分配置 $template SpiceTmpl,"%msg:2:$%\n" #定義一個模塊,去掉開頭的空格 $template ChannelmanageCatalinaDynaFile,"/app/wutongshu/rsyslog/%fromhost-ip%/channelmanage/catalina_%$YEAR%-%$MONTH%-%$DAY%.log" #定義文件存儲路徑及名稱,%%中間的為變量 $template ChannelmanageInfoDynaFile,"/app/wutongshu/rsyslog/%fromhost-ip%/channelmanage/channelmanage_%$YEAR%-%$MONTH%-%$DAY%.log" #定義文件存儲路徑及名稱,%%中間的為變量 $template ChannelmanageErrorDynaFile,"/app/wutongshu/rsyslog/%fromhost-ip%/channelmanage/error_%$YEAR%-%$MONTH%-%$DAY%.log" :rawmsg,contains,"catalina-10.139.54.53-8080" ?ChannelmanageCatalinaDynaFile;SpiceTmpl #contains過濾tag為catalina-10.139.54.53-8080日志存儲到ChnnelmanageCatalinaDynaFile模板定義的日志中去 :rawmsg,contains,"channe-10.139.54.53-8080" ?ChannelmanageInfoDynaFile;SpiceTmpl :rawmsg,contains,"channelerror-10.139.54.53-8080" ?ChannelmanageErrorDynaFile;SpiceTmpl
四、重啟服務,收集日志
先重啟服務端Rsyslog,然后重啟客戶端。命令:
/etc/init.d/rsyslog restart
如果不出意外,服務端會成日志目錄及日志,當然首次會比較慢,有一個傳輸的過程。
在客戶端../rsyslog目錄下會發現傳輸的狀態文件和隊列文件:
state文件以imfile-state:開頭,后面為日志路徑,路徑中的/以-替代。
最后展示下服務端收集日志的部分效果圖:
遇到的坑:配置第一台客戶端在服務端所有日志服務端都正常能接收到,后面配置的幾台只能收到catalina.out日志,其它日志死活不行,配置檢查了很多遍,來回測試了很多遍,然后花了很長時間看官網文檔,始終沒有找到原因。在快要放棄的時候發現服務端配置文件一個規律,能接收到日志的tag定義的比較短,不能接收的tag定義的字符串都很長。之后隨便找了一台,將tag改短,重啟服務后果然收到了日志。真是坑。。如果一開始定義的tag也比較長,估計就沒這么幸運發現問題所在了。
rsyslog配置文件詳解
rsyslog 是一個 syslogd 的多線程增強版。
現在Fedora和Ubuntu, rhel6默認的日志系統都是rsyslog了
rsyslog負責寫入日志, logrotate負責備份和刪除舊日志, 以及更新日志文件
———————————————————————-
rsyslog 服務
———————————————————————-
軟件包:
[root@centos ~]# yum install rsyslog rsyslog-mysql logrotate
查看當前rsyslog服務的狀態:
[root@centos ~]#/etc/init.d/rsyslog status
rsyslogd (pid 1343) is running…
在centos6中, rsyslog服務默認是開機啟動的
我們先看一下它的進程::
[root@centos ~]# ps -ef | grep rsyslogd | grep -v grep
root 1343 1 0 12:09 ? 00:00:00 /sbin/rsyslogd -c 4
從上面命令的輸出結果看到rsyslog執行時使用的參數是-c 4.
它的意思是指定rsyslog運行(兼容)的版本號, 這個參數必須是第一個參數, 當然也可以省略, 默認為-c0, (命令行兼容sysklogd)
這個參數是在文件/etc/sysconfig/rsyslog中指定::
[root@centos ~]# cat /etc/sysconfig/rsyslog
-
# Options to syslogd
-
# syslogd options are deprecated since rsyslog v3
-
# if you want to use them, switch to compatibility mode 2 by “-c 2″
-
SYSLOGD_OPTIONS=”-c 4″
[root@centos ~]# chkconfig –list | grep rsyslog
rsyslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off
注意,這里的服務名是rsyslog!
配置文件
———————————————————————-
/etc/rsyslog.conf
配置文件的基本信息
配置文件中有很多內容, 但最主要的是指定需要記錄哪些服務和需要記錄什么等級的信息::
cat /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
-
# 允許514端口接收使用UDP協議轉發過來的日志
-
#$ModLoad imudp.so
-
#$UDPServerRun 514
-
# Provides TCP syslog reception
-
# 允許514端口接收使用TCP協議轉發過來的日志
-
#$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 關於內核的所有日志都放到/dev/console(控制台)
-
# Log anything (except mail) of level info or higher.
-
# Don’t log private authentication messages!
-
# 記錄所有日志類型的info級別以及大於info級別的信息到/var/log/messages,但是mail郵件信息,authpriv驗證方面的信息和cron時間任務相關的信息除外
-
*.info;mail.none;authpriv.none;cron.none /var/log/messages
-
# The authpriv file has restricted access.
-
# authpriv驗證相關的所有信息存放在/var/log/secure
-
authpriv.* /var/log/secure
-
# Log all the mail messages in one place.
-
# 郵件的所有信息存放在/var/log/maillog; 這里有一個-符號, 表示是使用異步的方式記錄, 因為日志一般會比較大
-
mail.* -/var/log/maillog
-
# Log cron stuff
-
# 計划任務有關的信息存放在/var/log/cron
-
cron.* /var/log/cron
-
# Everybody gets emergency messages
-
# 記錄所有的大於等於emerg級別信息, 以wall方式發送給每個登錄到系統的人
-
*.emerg * *代表所有在線用戶
-
# Save news errors of level crit and higher in a special file.
-
# 記錄uucp,news.crit等存放在/var/log/spooler
-
uucp,news.crit /var/log/spooler
-
# Save boot messages also to boot.log 啟動的相關信息
-
local7.* /var/log/boot.log
-
#:rawmsg, contains, “sdns_log” @@192.168.56.7:10514
-
#:rawmsg, contains, “sdns_log” ~
-
# ### begin forwarding rule ### 轉發規則
-
# The statement between the begin … end define a SINGLE forwarding
-
# rule. They belong together, do NOT split them. If you create multiple
-
# forwarding rules, duplicate the whole block!
-
# Remote Logging (we use TCP for reliable delivery)
-
#
-
# An on-disk queue is created for this action. If the remote host is
-
# down, messages are spooled to disk and sent when it is up again.
-
#$WorkDirectory /var/spppl/rsyslog # where to place spool files
-
#$ActionQueueFileName fwdRule1 # unique name prefix for spool files
-
#$ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible)
-
#$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
-
#$ActionQueueType LinkedList # run asynchronously
-
#$ActionResumeRetryCount -1 # infinite retries if host is down
-
# remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
-
#*.* @@remote-host:514 # @@表示通過tcp協議發送 @表示通過udp進行轉發
-
#local3.info @@localhost :514
-
#local7.* # @@192.168.56.7:514
-
# ### end of the forwarding rule ###
格式::
日志設備(類型).(連接符號)日志級別 日志處理方式(action)
日志設備(可以理解為日志類型):
———————————————————————-
auth –pam產生的日志
authpriv –ssh,ftp等登錄信息的驗證信息
cron –時間任務相關
kern –內核
lpr –打印
mail –郵件
mark(syslog)–rsyslog服務內部的信息,時間標識
news –新聞組
user –用戶程序產生的相關信息
uucp –unix to unix copy, unix主機之間相關的通訊
local 1~7 –自定義的日志設備
日志級別:
———————————————————————-
debug –有調式信息的,日志信息最多
info –一般信息的日志,最常用
notice –最具有重要性的普通條件的信息
warning –警告級別
err –錯誤級別,阻止某個功能或者模塊不能正常工作的信息
crit –嚴重級別,阻止整個系統或者整個軟件不能正常工作的信息
alert –需要立刻修改的信息
emerg –內核崩潰等嚴重信息
none –什么都不記錄
從上到下,級別從低到高,記錄的信息越來越少
詳細的可以查看手冊: man 3 syslog
連接符號
———————————————————————-
.xxx: 表示大於等於xxx級別的信息
.=xxx:表示等於xxx級別的信息
.!xxx:表示在xxx之外的等級的信息
Actions
———————————————————————-
1. 記錄到普通文件或設備文件::
*.* /var/log/file.log # 絕對路徑
*.* /dev/pts/0
測試: logger -p local3.info ‘KadeFor is testing the rsyslog and logger ‘ logger 命令用於產生日志
2. 轉發到遠程::
*.* @192.168.0.1 # 使用UDP協議轉發到192.168.0.1的514(默認)端口
*.* @@192.168.0.1:10514 # 使用TCP協議轉發到192.168.0.1的10514(默認)端口
3. 發送給用戶(需要在線才能收到)::
*.* root
*.* root,kadefor,up01 # 使用,號分隔多個用戶
*.* * # *號表示所有在線用戶
4. 忽略,丟棄::
local3.* ~ # 忽略所有local3類型的所有級別的日志
5. 執行腳本::
local3.* ^/tmp/a.sh # ^號后跟可執行腳本或程序的絕對路徑
# 日志內容可以作為腳本的第一個參數.
# 可用來觸發報警
.. note::
日志記錄的順序有先后關系!
======================================================================
一個標准的簡單的配置文件
======================================================================
::
*.info;mail.none;authpriv.none;cron.none /var/log/messages
authpriv.* /var/log/secure
mail.* /var/log/maillog
cron.* /var/log/cron
*.emerg *
uucp,news.crit /var/log/spooler
local7.* /var/log/boot.log
======================================================================
實例: 指定日志文件, 或者終端
======================================================================
[root@kadefor ule-sa3]# vi /etc/rsyslog.conf
[root@kadefor ule-sa3]# grep local3 !$
grep local3 /etc/rsyslog.conf
local3.* /var/log/local3.log
[root@kadefor ule-sa3]# rm -rf /var/log/local3.log
[root@kadefor ule-sa3]# /etc/init.d/rsyslog reload
Reloading system logger… [ OK ]
[root@kadefor ule-sa3]# ls /var/log/local3.log
/var/log/local3.log
[root@kadefor ule-sa3]# logger -t ‘LogTest’ -p local3.info ‘KadeFor is testing the rsyslog and logger’
[root@kadefor ule-sa3]# cat /var/log/local3.log
Jun 10 04:55:52 kadefor LogTest: KadeFor is testing the rsyslog and logger
[root@kadefor ule-sa3]#
自己實驗日志發送給某個終端
======================================================================
實例: 過濾特定的日志到文件, 忽略(丟棄)包含某個字符串的日志
======================================================================
# 過濾日志, 由:號開頭
:msg, contains, “error” /var/log/error.log
:msg, contains, “error” ~ # 忽略包含error的日志
:msg, contains, “user nagios” ~
:msg, contains, “user kadefor” ~
:msg, contains, “module-alsa-sink.c: ALSA woke us up to write new data to the device, but there was actually nothing to write” ~
local3.* ~
PS.
& ~ # 忽略所有的日志
把包含’oracle’的日志保存在/var/log/oracle.log
======================================================================
實例: 使用模板來定義日志格式
======================================================================
定義默認的日志格式:
-
$template myFormat,”%rawmsg%\n”
-
$ActionFileDefaultTemplate myFormat
-
#如果不要$ActionFileDefaultTemplate myFormat這一行, 就需要像這樣來使用模板:
-
#在日志文件后添加模板名, 並用;號分隔
-
$template myFormat,”%rawmsg%\n”
-
# The authpriv file has restricted access.
-
authpriv.* /var/log/secure;myFormat
-
# Log all the mail messages in one place.
-
mail.* /var/log/maillog;myFormat
-
# Log cron stuff
-
cron.* /var/log/cron;myFormat
-
# Everybody gets emergency messages
-
*.emerg *
-
# Save news errors of level crit and higher in a special file.
-
uucp,news.crit /var/log/spooler;myFormat
-
# Save boot messages also to boot.log
-
local7.* /var/log/boot.log;myFormat
======================================================================
實例: remote log 遠程發送與接收:
======================================================================
如果要修改為非514的端口, 需要設置selinux
只要在rsyslog.conf中加入
*.* @192.168.0.10
*.* @192.168.0.10:10514 # 帶端口號
*.* @@192.168.0.10 # TCP
但是沒有定義保存在遠程的哪一個文件啊?
其實保存在什么文件, 那是遠程日志服務器接收到日志之后它自己的事情了.
例1:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
———————————————————————-
Client(send):
———————————————————————-
::
local3.* @@192.0.2.1:10514
# if you need to forward to other systems as well, just
# add additional config lines:
# *.* @@other-server.example.net:10514
# 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 stuff
cron.* /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.log
local7.* /var/log/boot.log
———————————————————————-
Server(receive): <1>
———————————————————————-
::
# for TCP use:
$modload imtcp
$InputTCPServerRun 10514
# for UDP use:
$modload imudp
$UDPServerRun 514
# 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 stuff
cron.* /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.log
local7.* /var/log/boot.log
local3.* /var/log/local3.log # 測試用
例2 (僅做了解, 不做要求)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#配置服務端(接收)
———————————————————————-
vi /etc/rsyslog.conf #在文件開始加上,同時確保514端口能夠被客戶端用tcp訪問
$ModLoad imtcp.so # needs to be done just once #使用tcp方式
$InputTCPMaxSessions 500 # tcp接收連接數為500個
$InputTCPServerRun 514 # tcp接收信息的端口
$template logformat,”%TIMESTAMP:::date-mysql% %FROMHOST-IP%%msg%\n” # 定義一個名為logformat模板, 為信息加上日志時間
$template DynFile,”/var/log/tlog%$year%%$month%%$day%.log” # 定義日志文件的名稱,按照年月日
:rawmsg, contains, “sdns_log” ?DynFile;logformat # 把rawmsg(也可以使用msg)日志中包含sdns_log標志的信息寫到DynFile定義的日志文件里
:rawmsg, contains, “sdns_log” ~ # 這個表示丟棄包含sdns_log標志的信息, 一般都加上它, 以免多個日志文件記錄重復的日志
#配置客戶端(發送)
———————————————————————-
vi /etc/rsyslog.conf #在文件開始加上
#把包含sdns_log的信息通過tcp發到192.168.1.2 @@表示tcp @表示udp
:rawmsg, contains, “sdns_log” @@192.168.1.2 # 默認514端口
#這個表示丟棄包含sdns_log標志的信息,防止這個信息寫到本機的/var/log/message
:rawmsg, contains, “sdns_log” ~
#測試
———————————————————————-
在客戶端上執行
logger -p user.info “sdns_log 34334″
在服務端的/var/log/目錄里是否有tlog*日志產生
補充:
———————————————————————-
如果要把不同服務器發送過來的日志保存到不同的文件, 可以這樣操作:
:fromhost-ip, isequal, “192.168.0.160″ /var/log/host160.log
:FROMHOST-IP, isequal, “192.168.0.161″ /var/log/host161.log
:FROMHOST-IP, startswith, “192.168.1.” /var/log/network1.log
:FROMHOST-IP, startswith, “192.168.2.” /var/log/network2.log
練習:
======================================================================
1. 實現把ssh服務的日志自定義保存到/var/log/newsshd.log (先不做)
2. mail日志保存在遠程日志服務器/var/log/newmail.log
3. 過濾日志, 如果日志包含有”daydayup”, 則執行腳本/tmp/a.sh
腳本內容:
#!/bin/bash
echo “KO::** $1″ > /dev/tty2
======================================================================
logrotate服務
======================================================================
rotate 輪換,日志切換
logrotate服務的啟動方式
logrotate是一個日志管理程序,用來把舊的日志文件刪除(備份),並創建新的日志文件,這個過程稱為“轉儲”。我們可以根據日志的大小,或者根據其使用的天數來轉儲。
logrotate 的執行由crond服務實現。在/etc/cron.daily目錄中,有個文件logrotate,它實際上是個shell script,用來啟動logrotate。logrotate程序每天由cron在指定的時間(/etc/crontab)啟動。
因此,使用ps是無法查看到logrotate的。如果它沒有起來,就要查看一下crond服務有沒有在運行。
在執行logrotate時,需要指定其配置文件/etc/logrotate.conf
這 個配置文件的注釋寫得很清楚,沒有必要再羅嗦了。只想強調下面這行,它的作用包含存放在/etc/logrotate.d目錄下面的配置文件,不可或缺。 如果你安裝了一個新的服務,它的日志轉儲的規則可以建立一個專門的配置文件,放在/etc/logrotate.d下面。它其實也因為下面的這句話,在 logrotate服務啟動時被讀取。
每個存放在/etc/logrotate.d目錄里的文件,都有上面格式的配置信息。在{}中定義的規則,如果與logrotate.conf中的沖突,以/etc/logrotatate.d/中的文件定義的為准。
logrotate啟動腳本放在 /etc/cron.daily/logrotate 中,可人工執行命令進行測試:
/usr/sbin/logrotate -f /etc/logrotate.conf
dateext表示轉儲文件會以日期來結束*
::
[root@kadefor log]# vim /etc/logrotate.conf
# 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 ones
create –rotate后,創建一個新的空文件
# uncomment this if you want your log files compressed
#compress –默認是不壓縮的
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d –這個目錄下面配置文件生效
# no packages own wtmp — we’ll rotate them here
/var/log/wtmp { –定義/var/log/wtmp這個日志文件
monthly –每月輪轉一次,取代了上面的全局設定的每周輪轉一次
minsize 1M –定義日志必須要大於1M大小才會去輪轉
create 0664 root utmp –新的日志文件的權限,屬主,屬主
rotate 1 –保留一個,取代了上面的全局設定的保留四個
}
/var/log/btmp {
missingok –如果日志丟失, 不報錯
monthly
create 0600 root utmp
rotate 1
}
::
# sample logrotate configuration file
compress
# 全局設置, 壓縮
/var/log/messages {
rotate 5 # 保留5份日志
weekly # 每周輪換一次
postrotate # 輪換之后重啟syslogd服務
/usr/bin/killall -HUP syslogd
# rhel6中為:/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
# 可查看/etc/logrotate.d/下的配置文件
endscript
}
“/var/log/httpd/access.log” /var/log/httpd/error.log { # 指定多個文件, 如果有特殊字符需要用單引號
rotate 5
mail www@my.org
size 100k # 超過100k后切換日志, 並把老的日志發送郵件給www@my.org
sharedscripts # 共享腳本. 下面的postrotate腳本只運行一次.
postrotate
/usr/bin/killall -HUP httpd
endscript
}
/var/log/news/* { # 少用通配符, 因會它會包括已經切換過的日志, 要用的話最好在*號后加上擴展名, 如*.log
monthly
rotate 2
olddir /var/log/news/old
missingok
postrotate
kill -HUP ‘cat /var/run/inn.pid‘
endscript
nocompress
}
例:
修改/etc/logrotate.conf
/var/log/wtmp {
monthly
minsize 10k
create 0664 a b
rotate 2
}
logrotate -f /etc/logrotate.conf –強制輪轉
logrotate -vf /etc/logrotate.conf –再加一個-v參數查看輪轉的過程
———————————
[root@kadefor log]# vim /etc/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
sharedscripts –表示切換時腳本只執行一次
postrotate –表示rotate后執行的腳本
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
/bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
endscript –表示腳本結束
}
[root@kadefor log]# logger -t ‘aaaa’ ‘bbbbbb’–在日志里加一個內容tag和內容
[root@kadefor log]# tail /var/log/messages
Jun 12 19:38:55 kadefor dhclient[3166]: bound to 192.168.1.101 — renewal in 3384 seconds.
Jun 12 20:34:22 kadefor aaaa: bbbbbb
一、/var目錄
/var 所有服務的登錄的文件或錯誤信息文件(LOG FILES)都在/var/log下,此外,一些數據庫如MySQL則在/var/lib下,還有,用戶未讀的郵件的默認存放地點為/var/spool/mail
二、:/var/log/
系統的引導日志:/var/log/boot.log
例如:Feb 26 10:40:48 sendmial : sendmail startup succeeded
就是郵件服務啟動成功!
系統日志一般都存在/var/log下
常用的系統日志如下:
核心啟動日志:/var/log/dmesg
系統報錯日志:/var/log/messages
郵件系統日志:/var/log/maillog
FTP系統日志:/var/log/xferlog
安全信息和系統登錄與網絡連接的信息:/var/log/secure
登錄記錄:/var/log/wtmp 記錄登錄者訊錄,二進制文件,須用last來讀取內容 who -u /var/log/wtmp 查看信息
News日志:/var/log/spooler
RPM軟件包:/var/log/rpmpkgs
XFree86日志:/var/log/XFree86.0.log
引導日志:/var/log/boot.log 記錄開機啟動訊息,dmesg | more
cron(定制任務日志)日志:/var/log/cron
安全信息和系統登錄與網絡連接的信息:/var/log/secure
文件 /var/run/utmp 記錄著現在登入的用戶。
文件 /var/log/wtmp 記錄所有的登入和登出。
文件 /var/log/lastlog 記錄每個用戶最後的登入信息。
文件 /var/log/btmp 記錄錯誤的登入嘗試。
less /var/log/auth.log 需要身份確認的操作
三、部分命令詳解
/var/log/messages
messages 日志是核心系統日志文件。它包含了系統啟動時的引導消息,以及系統運行時的其他狀態消息。IO 錯誤、網絡錯誤和其他系統錯誤都會記錄到這個文件中。其他信息,比如某個人的身份切換為 root,也在這里列出。如果服務正在運行,比如 DHCP 服務器,您可以在 messages 文件中觀察它的活動。通常,/var/log/messages 是您在做故障診斷時首先要查看的文件。
這個日志記錄的是 Xfree86 Xwindows 服務器最后一次執行的結果。如果您在啟動到圖形模式時遇到了問題,一般情況從這個文件中會找到失敗的原因。
http://www.guanwei.org/post/LINUXnotes/01/linuxlogs.html
成 功地管理任何系統的關鍵之一,是要知道系統中正在發生什么事。Linux 中提供了異常日志,並且日志的細節是可配置的。Linux 日志都以明文形式存儲,所以用戶不需要特殊的工具就可以搜索和閱讀它們。還可以編寫腳本,來掃描這些日志,並基於它們的內容去自動執行某些功能。 Linux 日志存儲在 /var/log 目錄中。這里有幾個由系統維護的日志文件,但其他服務和程序也可能會把它們的日志放在這里。大多數日志只有root賬戶才可以讀,不過修改文件的訪問權限 就可以讓其他人可讀。
日志文件分類
/var/log/boot.log
該文件記錄了系統在引導過程中發生的事件,就是Linux系統開機自檢過程顯示的信息。
/var/log/cron
該 日志文件記錄crontab守護進程crond所派生的子進程的動作,前面加上用 戶、登錄時間和PID,以及派生出的進程的動作。CMD的一個動作是cron派生出一個調度進程的常見情況。REPLACE(替換)動作記錄用戶對它的 cron文件的更新,該文件列出了要周期性執行的任務調度。 RELOAD動作在REPLACE動作后不久發生,這意味着cron注意到一個用戶的cron文件被更新而cron需要把它重新裝入內存。該文件可能會查 到一些反常的情況。
/var/log/maillog
該日志文件記錄了每一個發送到系統或從系統發出的電子郵件的活動。它可以用來查看用戶使用哪個系統發送工具或把數據發送到哪個系統。下面是該日志文件的片段:
Sep 4 17:23:52 UNIX sendmail[1950]: g849Npp01950: from=root, size=25,
class=0, nrcpts=1,
msgid=<200209040923.g849Npp01950@redhat.pfcc.com.cn>,
relay=root@localhost
Sep 4 17:23:55 UNIX sendmail[1950]: g849Npp01950: to=lzy@fcceec.net,
ctladdr=root (0/0), delay=00:00:04, xdelay=00:00:03, mailer=esmtp, pri=30025,
relay=fcceec.net. [10.152.8.2], dsn=2.0.0, stat=Sent (Message queued)
/var/log/messages
該日志文件是許多進程日志文件的匯總,從該文件可以看出任何入侵企圖或成功的入侵。如以下幾行:
Sep 3 08:30:17 UNIX login[1275]: FAILED LOGIN 2 FROM (null) FOR suying,
Authentication failure
Sep 4 17:40:28 UNIX -- suying[2017]: LOGIN ON pts/1 BY suying FROM
fcceec.www.ec8.pfcc.com.cn
Sep 4 17:40:39 UNIX su(pam_unix)[2048]: session opened for user root by suying(uid=999)
該 文件的格式是每一行包含日期、主機名、程序名,后面是包含PID或內核標識的方括 號、一個冒號和一個空格,最后是消息。該文件有一個不足,就是被記錄的入侵企圖和成功的入侵事件,被淹沒在大量的正常進程的記錄中。但該文件可以由 /etc/syslog文件進行定制。由 /etc/syslog.conf配置文件決定系統如何寫入/var/messages。有關如何配置/etc/syslog.conf文件決定系統日志 記錄的行為,將在后面詳細敘述。
/var/log/syslog
默 認RedHat Linux不生成該日志文件,但可以配置/etc/syslog.conf讓系統生成該日志文件。它和/etc/log/messages日志文件不同, 它只記錄警告信息,常常是系統出問題的信息,所以更應該關注該文件。要讓系統生成該日志文件,在/etc/syslog.conf文件中加上: *.warning /var/log/syslog 該日志文件能記錄當用戶登錄時login記錄下的錯誤口令、Sendmail的問題、su命令執行失敗等信息。下面是一條記錄:
Sep 6 16:47:52 UNIX login(pam_unix)[2384]: check pass; user unknown
/var/log/secure
該日志文件記錄與安全相關的信息。該日志文件的部分內容如下:
Sep 4 16:05:09 UNIX xinetd[711]: START: ftp pid=1815 from=127.0.0.1
Sep 4 16:05:09 UNIX xinetd[1815]: USERID: ftp OTHER :root
Sep 4 16:07:24 UNIX xinetd[711]: EXIT: ftp pid=1815 duration=135(sec)
Sep 4 16:10:05 UNIX xinetd[711]: START: ftp pid=1846 from=127.0.0.1
Sep 4 16:10:05 UNIX xinetd[1846]: USERID: ftp OTHER :root
Sep 4 16:16:26 UNIX xinetd[711]: EXIT: ftp pid=1846 duration=381(sec)
Sep 4 17:40:20 UNIX xinetd[711]: START: telnet pid=2016 from=10.152.8.2
/var/log/lastlog
該 日志文件記錄最近成功登錄的事件和最后一次不成功的登錄事件,由login生成。 在每次用戶登錄時被查詢,該文件是二進制文件,需要使用 lastlog命令查看,根據UID排序顯示登錄名、端口號和上次登錄時間。如果某用戶從來沒有登錄過,就顯示為"**Never logged in**"。該命令只能以root權限執行。簡單地輸入lastlog命令后就會看到類似如下的信息:
Username Port From Latest
root tty2 Tue Sep 3 08:32:27 +0800 2002
bin **Never logged in**
daemon **Never logged in**
adm **Never logged in**
lp **Never logged in**
sync **Never logged in**
shutdown **Never logged in**
halt **Never logged in**
mail **Never logged in**
news **Never logged in**
uucp **Never logged in**
operator **Never logged in**
games **Never logged in**
gopher **Never logged in**
ftp ftp UNIX Tue Sep 3 14:49:04 +0800 2002
nobody **Never logged in**
nscd **Never logged in**
mailnull **Never logged in**
ident **Never logged in**
rpc **Never logged in**
rpcuser **Never logged in**
xfs **Never logged in**
gdm **Never logged in**
postgres **Never logged in**
apache **Never logged in**
lzy tty2 Mon Jul 15 08:50:37 +0800 2002
suying tty2 Tue Sep 3 08:31:17 +0800 2002
系統賬戶諸如bin、daemon、adm、uucp、mail等決不應該登錄,如果發現這些賬戶已經登錄,就說明系統可能已經被入侵了。若發現記錄的時間不是用戶上次登錄的時間,則說明該用戶的賬戶已經泄密了。
/var/log/wtmp
該 日志文件永久記錄每個用戶登錄、注銷及系統的啟動、停機的事件。因此隨着系統正常 運行時間的增加,該文件的大小也會越來越大,增加的速度取決於系統用戶登錄的次數。該日志文件可以用來查看用戶的登錄記錄,last命令就通過訪問這個文 件獲得這些信息,並以反序從后向前顯示用戶的登錄記錄,last也能根據用戶、終端 tty或時間顯示相應的記錄。
命令last有兩個可選參數:
last -u 用戶名 顯示用戶上次登錄的情況。
last -t 天數 顯示指定天數之前的用戶登錄情況。
/var/run/utmp
該 日志文件記錄有關當前登錄的每個用戶的信息。因此這個文件會隨着用戶登錄和注銷系 統而不斷變化,它只保留當時聯機的用戶記錄,不會為用戶保留永久的記錄。系統中需要查詢當前用戶狀態的程序,如 who、w、users、finger等就需要訪問這個文件。該日志文件並不能包括所有精確的信息,因為某些突發錯誤會終止用戶登錄會話,而系統沒有及時 更新 utmp記錄,因此該日志文件的記錄不是百分之百值得信賴的。
以 上提及的3個文件(/var/log/wtmp、/var/run/utmp、 /var/log/lastlog)是日志子系統的關鍵文件,都記錄了用戶登錄的情況。這些文件的所有記錄都包含了時間戳。這些文件是按二進制保存的,故 不能用less、cat之類的命令直接查看這些文件,而是需要使用相關命令通過這些文件而查看。其中,utmp和wtmp文件的數據結構是一樣的,而 lastlog文件則使用另外的數據結構,關於它們的具體的數據結構可以使用man命令查詢。
每 次有一個用戶登錄時,login程序在文件lastlog中查看用戶的UID。如果存在,則把用戶上次登錄、注銷時間和主機名寫到標准輸出中,然后 login程序在lastlog中記錄新的登錄時間,打開utmp文件並插入用戶的utmp記錄。該記錄一直用到用戶登錄退出時刪除。utmp文件被各種 命令使用,包括who、w、users和finger。
下一步,login程序打開文件wtmp附加用戶的utmp記錄。當用戶登錄退出時,具有更新時間戳的同一utmp記錄附加到文件中。wtmp文件被程序last使用。
/var/log/xferlog
該日志文件記錄FTP會話,可以顯示出用戶向FTP服務器或從服務器拷貝了什么文件。該文件會顯示用戶拷貝到服務器上的用來入侵服務器的惡意程序,以及該用戶拷貝了哪些文件供他使用。
該 文件的格式為:第一個域是日期和時間,第二個域是下載文件所花費的秒數、遠程系統 名稱、文件大小、本地路徑名、傳輸類型(a:ASCII,b:二進制)、與壓縮相關的標志或tar,或"_"(如果沒有壓縮的話)、傳輸方向(相對於服務 器而言:i代表進,o代表出)、訪問模式(a:匿名,g:輸入口令,r:真實用戶)、用戶名、服務名(通常是ftp)、認證方法(l:RFC931,或 0),認證用戶的ID或"*"。下面是該文件的一條記錄:
Wed Sep 4 08:14:03 2002 1 UNIX 275531
/var/ftp/lib/libnss_files-2.2.2.so b _ o a -root@UNIX ftp 0 * c
/var/log/kernlog
RedHat Linux默認沒有記錄該日志文件。要啟用該日志文件,必須在/etc/syslog.conf文件中添加一行:kern.* /var/log/kernlog 。這樣就啟用了向/var/log/kernlog文件中記錄所有內核消息的功能。該文件記錄了系統啟動時加載設備或使用設備的情況。一般是正常的操作, 但如果記錄了沒有授權的用戶進行的這些操作,就要注意,因為有可能這就是惡意用戶的行為。下面是該文件的部分內容:
Sep 5 09:38:42 UNIX kernel: NET4: Linux TCP/IP 1.0 for NET4.0
Sep 5 09:38:42 UNIX kernel: IP Protocols: ICMP, UDP, TCP, IGMP
Sep 5 09:38:42 UNIX kernel: IP: routing cache hash table of 512 buckets, 4Kbytes
Sep 5 09:38:43 UNIX kernel: TCP: Hash tables configured (established 4096 bind 4096)
Sep 5 09:38:43 UNIX kernel: Linux IP multicast router 0.06 plus PIM-SM
Sep 5 09:38:43 UNIX kernel: NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
Sep 5 09:38:44 UNIX kernel: EXT2-fs warning: checktime reached, running e2fsck is recommended
Sep 5 09:38:44 UNIX kernel: VFS: Mounted root (ext2 filesystem).
Sep 5 09:38:44 UNIX kernel: SCSI subsystem driver Revision: 1.00
/var/log/Xfree86.x.log
該 日志文件記錄了X-Window啟動的情況。另外,除了/var/log/外,惡 意用戶也可能在別的地方留下痕跡,應該注意以下幾個地方:root 和其他賬戶的shell歷史文件;用戶的各種郵箱,如.sent、mbox,以及存放在/var/spool/mail/ 和 /var/spool/mqueue中的郵箱;臨時文件/tmp、/usr/tmp、/var/tmp;隱藏的目錄;其他惡意用戶創建的文件,通常是以 "."開頭的具有隱藏屬性的文件等。
四、具體命令
wtmp和utmp文件都是二進制文件,它們不能被諸如tail之類的命令剪貼或合並(使用cat命令)。用戶需要使用who、w、users、last和ac等命令來使用這兩個文件包含的信息。
who命令
who命令查詢utmp文件並報告當前登錄的每個用戶。who的默認輸出包括用戶名、終端類型、登錄日期及遠程主機。例如,鍵入who命令,然后按回車鍵,將顯示如下內容:
chyang pts/0 Aug 18 15:06
ynguo pts/2 Aug 18 15:32
ynguo pts/3 Aug 18 13:55
lewis pts/4 Aug 18 13:35
ynguo pts/7 Aug 18 14:12
ylou pts/8 Aug 18 14:15
如果指明了wtmp文件名,則who命令查詢所有以前的記錄。命令who /var/log/wtmp將報告自從wtmp文件創建或刪改以來的每一次登錄。
w命令
w命令查詢utmp文件並顯示當前系統中每個用戶和它所運行的進程信息。例如,鍵入w命令,然后按回車鍵,將顯示如下內容:
3:36pm up 1 day, 22:34, 6 users, load average: 0.23, 0.29, 0.27
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
chyang pts/0 202.38.68.242 3:06pm 2:04 0.08s 0.04s -bash
ynguo pts/2 202.38.79.47 3:32pm 0.00s 0.14s 0.05 w
lewis pts/3 202.38.64.233 1:55pm 30:39 0.27s 0.22s -bash
lewis pts/4 202.38.64.233 1:35pm 6.00s 4.03s 0.01s sh /home/users/
ynguo pts/7 simba.nic.ustc.e 2:12pm 0.00s 0.47s 0.24s telnet mail
ylou pts/8 202.38.64.235 2:15pm 1:09m 0.10s 0.04s -bash
users命令
users命令用單獨的一行打印出當前登錄的用戶,每個顯示的用戶名對應一個登錄會話。如果一個用戶有不止一個登錄會話,那他的用戶名將顯示相同的次數。例如,鍵入users命令,然后按回車鍵,將顯示如下內容:
chyang lewis lewis ylou ynguo ynguo
last命令
last命令往回搜索wtmp來顯示自從文件第一次創建以來登錄過的用戶。例如:
chyang pts/9 202.38.68.242 Tue Aug 1 08:34 - 11:23 (02:49)
cfan pts/6 202.38.64.224 Tue Aug 1 08:33 - 08:48 (00:14)
chyang pts/4 202.38.68.242 Tue Aug 1 08:32 - 12:13 (03:40)
lewis pts/3 202.38.64.233 Tue Aug 1 08:06 - 11:09 (03:03)
lewis pts/2 202.38.64.233 Tue Aug 1 07:56 - 11:09 (03:12)
如果指明了用戶,那么last只報告該用戶的近期活動,例如,鍵入last ynguo命令,然后按回車鍵,將顯示如下內容:
ynguo pts/4 simba.nic.ustc.e Fri Aug 4 16:50 - 08:20 (15:30)
ynguo pts/4 simba.nic.ustc.e Thu Aug 3 23:55 - 04:40 (04:44)
ynguo pts/11 simba.nic.ustc.e Thu Aug 3 20:45 - 22:02 (01:16)
ynguo pts/0 simba.nic.ustc.e Thu Aug 3 03:17 - 05:42 (02:25)
ynguo pts/0 simba.nic.ustc.e Wed Aug 2 01:04 - 03:16 1+02:12)
ynguo pts/0 simba.nic.ustc.e Wed Aug 2 00:43 - 00:54 (00:11)
ynguo pts/9 simba.nic.ustc.e Thu Aug 1 20:30 - 21:26 (00:55)
ac命令
ac命令根據當前的/var/log/wtmp文件中的登錄進入和退出來報告用戶連接的時間(小時),如果不使用標志,則報告總的時間。例如,鍵入ac命令,然后按回車鍵,將顯示如下內容:
total 5177.47
鍵入ac -d命令,然后按回車鍵,將顯示每天的總的連接時間:
Aug 12 total 261.87
Aug 13 total 351.39
Aug 14 total 396.09
Aug 15 total 462.63
Aug 16 total 270.45
Aug 17 total 104.29
Today total 179.02
鍵入ac -p命令,然后按回車鍵,將顯示每個用戶的總的連接時間:
ynguo 193.23
yucao 3.35
rong 133.40
hdai 10.52
zjzhu 52.87
zqzhou 13.14
liangliu 24.34
total 5178.24
lastlog命令
lastlog 文件在每次有用戶登錄時被查詢。可以使用lastlog命令檢查某特 定用戶上次登錄的時間,並格式化輸出上次登錄日志 /var/log/lastlog的內容。它根據UID排序顯示登錄名、端口號(tty)和上次登錄時間。如果一個用戶從未登錄過,lastlog顯示 **Never logged**。注意需要以root身份運行該命令,例如:
rong 5 202.38.64.187 Fri Aug 18 15:57:01 +0800 2000
dbb **Never logged in**
xinchen **Never logged in**
pb9511 **Never logged in**
xchen 0 202.38.64.190 Sun Aug 13 10:01:22 +0800 2000
另外,可加一些參數,例如,"last -u 102"命令將報告UID為102的用戶;"last -t 7"命令表示限制為上一周的報告。
五、進程統計
UNIX 可以跟蹤每個用戶運行的每條命令,如果想知道昨晚弄亂了哪些重要的文件,進 程統計子系統可以告訴你。它還對跟蹤一個侵入者有幫助。與連接時間日志不同,進程統計子系統默認不激活,它必須啟動。在Linux系統中啟動進程統計使用 accton命令,必須用root身份來運行。
accton命令的形式為:accton file,file必須事先存在。
先使用touch命令創建pacct文件:touch /var/log/pacct,然后運行accton:accton /var/log/pacct。一旦accton被激活,就可以使用lastcomm命令監測系統中任何時候執行的命令。若要關閉統計,可以使用不帶任何 參數的accton命令。
lastcomm命令報告以前執行的文件。不帶參數時,lastcomm命令顯示當前統計文件生命周期內記錄的所有命令的有關信息。包括命令名、用戶、tty、命令花費的CPU時間和一個時間戳。如果系統有許多用戶,輸入則可能很長。看下面的例子:
crond F root ?? 0.00 secs Sun Aug 20 00:16
promisc_check.s S root ?? 0.04 secs Sun Aug 20 00:16
promisc_check root ?? 0.01 secs Sun Aug 20 00:16
grep root ?? 0.02 secs Sun Aug 20 00:16
tail root ?? 0.01 secs Sun Aug 20 00:16
sh root ?? 0.01 secs Sun Aug 20 00:15
ping S root ?? 0.01 secs Sun Aug 20 00:15
ping6.pl F root ?? 0.01 secs Sun Aug 20 00:15
sh root ?? 0.01 secs Sun Aug 20 00:15
ping S root ?? 0.02 secs Sun Aug 20 00:15
ping6.pl F root ?? 0.02 secs Sun Aug 20 00:15
sh root ?? 0.02 secs Sun Aug 20 00:15
ping S root ?? 0.00 secs Sun Aug 20 00:15
ping6.pl F root ?? 0.01 secs Sun Aug 20 00:15
sh root ?? 0.01 secs Sun Aug 20 00:15
ping S root ?? 0.01 secs Sun Aug 20 00:15
sh root ?? 0.02 secs Sun Aug 20 00:15
ping S root ?? 1.34 secs Sun Aug 20 00:15
locate root ttyp0 1.34 secs Sun Aug 20 00:15
accton S root ttyp0 0.00 secs Sun Aug 20 00:15
進程統計的一個問題是pacct文件可能增長得十分迅速。這時需要交互式地或經過 cron機制運行sa命令來保證日志數據在系統控制內。sa命令報告、清理並維護進程統計文件。它能把/var/log/pacct中的信息壓縮到摘要文 件/var/log/savacct和 /var/log/usracct中。這些摘要包含按命令名和用戶名分類的系統統計數據。在默認情況下sa先讀它們,然后讀pacct文件,使報告能包含 所有的可用信息。sa的輸出有下面一些標記項。
/var/log目錄下的20個Linux日志文件功能詳解 :
如果願意在Linux環境方面花費些時間,首先就應該知道日志文件的所在位置以及它們包含的內容。在系統運行正常的情況下學習了解這些不同的日志文件有助於你在遇到緊急情況時從容找出問題並加以解決。
以下介紹的是20個位於/var/log/ 目錄之下的日志文件。其中一些只有特定版本采用,如dpkg.log只能在基於Debian的系統中看到。
/var/log/messages — 包括整體系統信息,其中也包含系統啟動期間的日志。此外,mail,cron,daemon,kern和auth等內容也記錄在var/log/messages日志中。
/var/log/dmesg — 包含內核緩沖信息(kernel ring buffer)。在系統啟動時,會在屏幕上顯示許多與硬件有關的信息。可以用dmesg查看它們。
/var/log/auth.log — 包含系統授權信息,包括用戶登錄和使用的權限機制等。
/var/log/boot.log — 包含系統啟動時的日志。
/var/log/daemon.log — 包含各種系統后台守護進程日志信息。
/var/log/dpkg.log – 包括安裝或dpkg命令清除軟件包的日志。
/var/log/kern.log – 包含內核產生的日志,有助於在定制內核時解決問題。
/var/log/lastlog — 記錄所有用戶的最近信息。這不是一個ASCII文件,因此需要用lastlog命令查看內容。
/var/log/maillog /var/log/mail.log — 包含來着系統運行電子郵件服務器的日志信息。例如,sendmail日志信息就全部送到這個文件中。
/var/log/user.log — 記錄所有等級用戶信息的日志。
/var/log/Xorg.x.log — 來自X的日志信息。
/var/log/alternatives.log – 更新替代信息都記錄在這個文件中。
/var/log/btmp – 記錄所有失敗登錄信息。使用last命令可以查看btmp文件。例如,”last -f /var/log/btmp | more“。
/var/log/cups — 涉及所有打印信息的日志。
/var/log/anaconda.log — 在安裝Linux時,所有安裝信息都儲存在這個文件中。
/var/log/yum.log — 包含使用yum安裝的軟件包信息。
/var/log/cron — 每當cron進程開始一個工作時,就會將相關信息記錄在這個文件中。
/var/log/secure — 包含驗證和授權方面信息。例如,sshd會將所有信息記錄(其中包括失敗登錄)在這里。
/var/log/wtmp或/var/log/utmp — 包含登錄信息。使用wtmp可以找出誰正在登陸進入系統,誰使用命令顯示這個文件或信息等。
/var/log/faillog – 包含用戶登錄失敗信息。此外,錯誤登錄命令也會記錄在本文件中。
除了上述Log文件以外, /var/log還基於系統的具體應用包含以下一些子目錄:
/var/log/httpd/或/var/log/apache2 — 包含服務器access_log和error_log信息。
/var/log/lighttpd/ — 包含light HTTPD的access_log和error_log。
/var/log/mail/ – 這個子目錄包含郵件服務器的額外日志。
/var/log/prelink/ — 包含.so文件被prelink修改的信息。
/var/log/audit/ — 包含被 Linux audit daemon儲存的信息。
/var/log/samba/ – 包含由samba存儲的信息。
/var/log/sa/ — 包含每日由sysstat軟件包收集的sar文件。
/var/log/sssd/ – 用於守護進程安全服務。
除了手動存檔和清除這些日志文件以外,還可以使用logrotate在文件達到一定大小后自動刪除。可以嘗試用vi,tail,grep和less等命令查看這些日志文件。