歡迎您光臨本站 註冊首頁

linux11-日誌管理,內核編譯

←手機掃碼閱讀     火星人 @ 2014-03-08 , reply:0

--


linux的日誌管理

ls /var/log/ --此目錄下很多系統日誌都存放在此
/var/log/messages --非常重要的日誌文件,幾乎所有系統發生的重要錯誤都會記錄在此
/var/log/secure --ssh ftp telnet pop3等有關
/var/log/dmesg --開機時核心檢測過程中所產生的信息
/var/log/cron --查看時間任務有關的日誌
/var/log/wtmp --用last查看,不能直接cat
/var/log/btmp --用lastb查看,不能直接cat
/var/log/lastlog --用lastlog查看
/var/log/boot --boot相關
/var/log/rpmpkgs --rpm相關
/var/log/maillog --mail相關
/var/log/spooler --news,uucp
/var/log/acpid --高級電源管理
/var/log/yum.log --yum程序相關的日誌

還有一種日誌就是每個服務所保存的日誌,路徑因服務會有所不同
一般是在/var/log/服務名/ 下

/etc/init.d/syslog --系統log服務,打開它才能記錄系統日誌

yum list |grep log
sysklogd.i386 --相關軟體包
logrotate.i386

# description: Syslog is the facility by which many daemons use to log messages to various system log files. It is a good idea to always run syslog.

設備:(facility)
auth -- pam產生的日誌
authpriv --包括許可權,登錄相關的信息
cron --時間任務相關的信息,crontab,at
mail --郵件相關的信息
kern --內核產生的信息
uucp --unix to unxi copy 指的是unix系統之間拷貝協議相關的信息
news --新聞組相關的信息
local0 到 local7 --程序自定義的日誌設備
mark --syslog服務內部的一些信息,產生一個時間標識
user --用戶程序產生的相關信息


日誌級別:
debug --調試,產生的日誌是最多的一個級別


info --一般信息的日誌,最常用
notice --最具有重要性的普通條件的信息
warning或warn --警告級別
err或error --錯誤級別,阻止某個功能或者模塊不能正常工作的信息
crit --嚴重級別,阻止整個系統或者整個軟體不能正常工作的信息
alert --需要馬上修改的信息
emerg或panic --內核崩潰等嚴重錯誤
none --什麼都不記錄
--上面的日誌級別,從上往下級別從低到高,記錄的信息是多到少,級別低的記錄的信息包括級別高的

連接符號
. 記錄大於等於此等級
.= 只記錄等於此等級的信息
.! 不等於此等級,也就是記錄此等級之外的信息


# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console
--/dev/console指的是一種外接的終端設備,有些封閉主機(沒有screen,keyboard,mouse等),可能會需要外接設備連接
# 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
--記錄所有日誌類型的info級別的信息到/var/log/messages,除了mail,authpriv,cron的信息
# The authpriv file has restricted access.
authpriv.* /var/log/secure
--記錄authpriv的所有級別的信息到/var/log/secure
# Log all the mail messages in one place.
mail.* -/var/log/maillog
--記錄郵件的所有級別的信息到/var/log/maillog,關於減號-的意思為:因為郵件的信息相比於其他的來說是比較大的,是採用非同步的方式,先存放在內存里,然後按一定的事件觸發,或者到達一定的大小寫到磁碟,而不是象其他的日誌那樣,產生了就馬上寫到磁碟.

# Log cron stuff
cron.* /var/log/cron
--記錄時間任務所有級別的信息到/var/log/cron

# Everybody gets emergency messages
*.emerg *
--記錄所有日誌設備的emerg信息以wall的方式發送給每個登錄到系統的人知道
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
--記錄uucp,new的crit信息到/var/log/spooler
# Save boot messages also to boot.log
local7.* /var/log/boot.log
--另外把boot messages記錄到/var/log/boot.log


格式的寫法有兩種:
uucp.crit;news.crit
uucp,new.crit
--上面這兩種寫法是一致

例1,
只記錄mail的info級別信息到/var/log/newmaillog
mail.=info /var/log/newmaillog


例2,
記錄時間任務的info級別以上的所有信息(除了err外)到/var/log/newcron
cron.info;cron.!err /var/log/newcron

例3,把ssh的日誌單獨記錄
# vim /etc/ssh/sshd_config
SyslogFacility local5 --修改成local5,把ssh的日誌定義由local5來記錄

# /etc/init.d/sshd restart --重啟使之生效


# vim /etc/syslog.conf
local5.* /var/log/ssh --加這麼一句

# /etc/init.d/syslog restart --重啟后/var/log/ssh文件被自動創建


驗證發現所有的ssh登錄有關的信息被記錄到了/var/log/ssh


====================================


遠程系統日誌管理
管理多台主機,有時為了方便,可以把多台主機的日誌給傳到管理機(只一台)上,然後,系統管理員只要在管理機上查看,就可以查到多台主機的日誌


例4,把71的ssh登錄信息記錄到35的/var/log/remotessh.log日誌文件里


真實機做日誌服務端(管理端) 虛擬機做日誌客戶端
10.1.1.35 10.1.1.71


在35先做
vim /etc/sysconfig/syslog

SYSLOGD_OPTIONS="-m 0 -r" --加-r參數

/etc/init.d/syslog restart --重啟服務

[root@li ~]# netstat -ntlup |grep sys --加了-r參數后打開了遠程日誌功能,那麼就會多了一個監聽埠,為udp的514埠
udp 0 0 0.0.0.0:514 0.0.0.0:* 4252/syslogd


在71上做:
vim /etc/ssh/sshd_config
SyslogFacility local5
/etc/init.d/sshd restart


vim /etc/syslog.conf
local5.* @10.1.1.35
/etc/init.d/syslog restart


再回到35上做
vim /etc/syslog.conf
local5.* /var/log/remotessh.log
/etc/init.d/syslog restart


--把所有的日誌都放到同一台機器,可以方便使用grep,awk,sed等方便對其進行截取統計


如:在35上統計4月27號10.1.1.71這台機器允許ssh的次數
[root@dns /]# cat /var/log/ssh.log |grep "Apr 27" |grep 71 |grep Acc |wc -l

[root@li ~]# echo "7月11號34被ssh過`cat /var/log/ssh |grep 2.2.2.34 |grep "Jul 11" |wc -l`次"
7月11號34被ssh過5次

==================================================================


logrotate - rotates, compresses, and
mails system logs


日誌輪轉 rotate 日誌切割

常見的輪轉的日誌有:
/var/log/messages
/var/log/cron
/var/log/boot.log
/var/log/maillog
/var/log/secure


vim /etc/logrotate.conf --配置文件


# see "man logrotate" for details
# rotate log files weekly
weekly --默認是一個星期rotate一次

# keep 4 weeks worth of backlogs
rotate 4 --默認保留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 --這表示/etc/logrotate.d目錄下的所有配置文件都生效

# no packages own wtmp -- we'll rotate them here
/var/log/wtmp { --針對wtmp單獨的配置,這裡是絕對路徑
monthly --一個月rotate一次,取代上面的全局配置里的一個星期一次
minsize 1M --指定最小大小為1M,才rotate,就算是時間到了,大小沒有1M,也不rotate
create 0664 root utmp --定義創建的為屬性為0664,屬主為root,屬組utmp
rotate 1 --保留一個
}

logrotate -vf /etc/logrotate.conf --查看輪轉的過程

------------------------------


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 --腳本結束
}


結構如下:
sharedscripts
prerotate
xxxxx --輪轉之前執行XXXX


endscript
sharedscripts
postrotate
xxxxx --輪轉之後執行xxxx
endscript


logger -t 'aa' 'bb' --在日誌文件里加上一個標記
[root@li test]# tail -n 1 /var/log/messages
May 8 15:33:02 li aa: bb --可以看到剛才加的標記


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
prerotate --------
/bin/logger -t 'rotate' 'begin' --------
endscript --------
sharedscripts --------
postrotate
/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
/bin/logger -t 'rotate' 'end' ---------
endscript
}

logrotate -vf /etc/logrotate.conf --強制rotate,然後查看輪轉時日誌文件的重命名過程

這裡不要去強制輪轉/etc/logrotate.d/syslog這個文件,會造成.1結尾的文件被刪除


-f 強制rotate
-v 顯示過程


再去tail /var/log/message去查看打的標記是否已經成功打上

================================================
或者做下面的例子:
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
sharedscripts
prerotate
echo "before rotate" | mail root --輪轉前發郵件
endscript
sharedscripts
postrotate
/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


echo "end rotate" |mail root --輪轉后發郵件
endscript
}


/etc/init.d/sendmail restart --啟動此服務,默認本機給本機可以收發郵件

logrotate -vf /etc/logrotate.conf --然後強制輪轉

cat /var/mail/root --查看郵件是否收到

==============================================


例5,配置/var/log/ssh日誌每星期輪轉一次,保留2份備份日誌,並且最小要2M才輪轉,忽略文件不存在的情況

# vim /etc/logrotate.conf --加上下面一段
/var/log/ssh {
weekly
minsize 2M
missingok
create 0600 root root
rotate 2
}

# logrotate -f /etc/logrotate.conf --使用此命令去驗證

=============================================================

logwatch - system log analyzer and reporter


logwatch --分析系統的日誌,並以容易查看的格式發郵件

logwatch 配置文件
[root@li ~]# vim /etc/logwatch/conf/logwatch.conf --會提示你去打開下面的配置文件

[root@li ~]# vim /usr/share/logwatch/default.conf/logwatch.conf

[root@li ~]# logwatch --直接使用此命令分析日誌

[root@li ula]# ls /etc/cron.daily/0logwatch --每天都會運行的一個crontab時間任務
/etc/cron.daily/0logwatch


LogDir = /var/log --分析/var/log下的所有日誌
TmpDir = /var/cache/logwatch --臨時目錄
MailTo = root --分析后郵件給root
MailFrom = Logwatch --從logwatch發郵件
Print = No --設為yes,表示分析后的報告輸出到屏幕
Save = /tmp/logwatch --有設置的話,表示分析后的報告保存到文件
Range = Yesterday --默認只分析昨天的日誌,改為all可以分析所有的,但速度較慢,視日誌大小定


Detail = 0 --分析日誌報告的詳細程度,最高是10,可以寫數字,也可以low,med,或者high


# logwatch --直接使用此命令,讓系統分析昨天的日誌
# cat /var/mail/root --分析完后,直接查看這個文件就可以看到最新的分析結果


====================================


tcpwrapper


看程序是否支持tcpwrapper方式

比如說看sshd
[root@li test]# which sshd
/usr/sbin/sshd

[root@li test]# ldd /usr/sbin/sshd |grep wrap
libwrap.so.0 => /lib/libwrap.so.0 (0x00d39000) --有此模塊就表示支持


--不是所有的服務都支持,很多軟體編譯時會有./configure --enable-libwrap來支持tcpwrapper


由兩個文件來控制
/etc/hosts.allow
/etc/hosts.deny
訪問控制機製為先去匹配/etc/hosts.allow,再去匹配/etc/hosts.deny,如果都沒有,則都允許

vim /etc/hosts.deny
sshd: all --拒絕所有

sshd: all EXCEPT 10.1.1.104 --只允許104ssh上來


sshd: 10.1.1.0/255.255.255.0 EXCEPT 10.1.1.104 --拒絕10.1.1.0網段的人ssh訪問,除了104外;注意子網掩碼不支持/24寫法


sshd:all:spawn echo "`date`" %c %d >> /var/log/tcpwrapperdeny.log
--拒絕所有人登錄,並把拒絕的時間和IP等信息保存到日誌文件

--man hosts.deny查看幫助


====================================================================

模塊管理

ls /usr/src/kernels/2.6.18-164.el5-i686/ 內核源碼


/lib/modules/`uname -r`/kernel

[root@li /]# ls /lib/modules/2.6.18-164.el5/kernel/
arch/ crypto/ drivers/ fs/ lib/ net/ sound/


架構平台 加密有關 驅動有關 文件系統 庫 網路 聲音

--也就是說由內核源碼編譯出來的模塊被分類放在上面的目錄

lsmod --查看裝載的模塊
--查看模塊信息
rmmod 8139too --刪除模塊

modprobe 8139too
insmod /lib/modules/2.6.18-164.el5/kernel/drivers/net/8139too.ko


=============================================================


內核編譯


內核的功能定製

www.kernel.org --下載內核源代碼


ls /usr/src/kernels/`uname -r` --當前使用系統的內核源碼


什麼情況下需要編譯內核?
系統要支持一個功能,但內核默認不支持,又不想升級成新的系統,則需要內核編譯
開發了一個模塊,需要內核的支持,也需要編入內核


內核編譯要考慮幾點:
自己定製的內核運行更快,具有更少的代碼
把不需要的功能編譯進內核可能會有受到漏洞被利用的風險
將某種功能編譯成模塊方式比直接編譯進內核速度要慢

10.1.1.35:/share/soft/kernel/linux-2.6.25.tar.bz2
10.1.1.35:/share/soft/kernel/linux-2.6.38.tar.bz2
10.1.1.35:/share/soft/kernel/config-2.6.25.selinux.ok

tar xvf /share/soft/kernel/linux-2.6.25.tar.bz2 -C /usr/src/

cd /usr/src/linux-2.6.25/

ls /share/soft/kernel/config-2.6.25.selinux.ok --這是一個編譯成功的配置文件

cp /share/soft/kernel/config-2.6.25.selinux.ok /usr/src/linux-2.6.25/.config
--拷到內核源碼下

編譯內核的步驟:
1,make mrproper --消除當前內核源碼,使之乾淨,(和make clean相似)
2,make config --基於文本的傳統的配置界面,不推薦使用


make menuconfig --基於ncurses-devel庫的一種文本選單方式(要裝ncurses-devel)
make oldconfig --如果只想在原來的內核配置基礎上修改的話,用此選項
make xconfig --基於x windows的圖形配置界面,基於qt的(要裝avahi-qt3-devel)

* 代表編入內核
M 代表編成模塊
空 代表不編入內核


有三種括弧:
方括弧:要麼是編進,要麼是不編
尖括弧:三種選擇,編進,不編,編成模塊
圓括弧: 多選一


3,make
4,make modules_install --把編譯后的模塊複製到/lib/modules/內核新版本/ 以後就可以用modprobe insmod來裝載使用
5,make install --拷貝vmlinuz,initrd 到/boot/下 ,並自動修改grub


上面的編譯完成後,就可以reboot你的系統,然後在grub里選擇新的內核進入系統進行驗證

上面的內核編譯過程麻煩,有時候如果想升級內核的話,可以直接下載相關的內核rpm包,安裝就可以了

[root@li rac5.3]# pwd
/share/soft/rac5.3
[root@li rac5.3]# rpm -ivh kernel-PAE-2.6.18-128.el5.i686.rpm
[root@li rac5.3]# rpm -ivh kernel-PAE-devel-2.6.18-128.el5.i686.rpm

本文出自 「linuxart」 博客,請務必保留此出處http://linuxart.blog.51cto.com/686203/843948


[火星人 ] linux11-日誌管理,內核編譯已經有548次圍觀

http://coctec.com/docs/linux/show-post-45750.html