日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Linux 学会看日志文件处理问题

發布時間:2025/3/15 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux 学会看日志文件处理问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

rsyslog是一個進程,是一個命令。管理日志的。–》系統日志記錄器
它有一個配置文件:/etc/rsyslog.conf
自己創建日志時,要修改該配置文件。

日志的作用:

  • 用于記錄系統、程序運行中發生的各種事件;
  • 通過閱讀日志,有助于診斷和解決系統故障

日志文件的分類:

  • 內核及系統日志
    • 由系統服務rsyslog統一進行管理,日志格式基本相似
  • 用戶日志
    • 記錄系統用戶登錄及退出系統的相關信息
  • 程序日志
    • 由各種應用程序獨立管理的日志文件,記錄格式不統一

日志記錄的一般格式:

時間標簽 主機名 子系統名 消息字段

/var/log –》此目錄下有很多的日志文件。
eg:tailf /var/log/cron –》監聽cron命令的日志文件的末尾五行。

相應的應用程序獨立進行管理的日志文件:

  • Web服務:/var/log/httpd/
    • access_log、error_log
  • 代理服務:/var/log/squid/
    • access.log、cache.log、squid.out、store.log
  • FTP服務:/var/log/xferlog
    等等

保存了用戶登錄、退出等信息的日志文件:

  • /var/log/lastlog:最近的用戶登錄事件
  • /var/log/wtmp:用戶登錄、注銷及系統開、關機事件
  • /var/run/utmp:當前登錄的每個用戶的詳細信息
  • /var/log/secure:與用戶驗證相關的安全性事件

用戶登錄分析:

  • who、w、user、last、ac、lastlog等命令,其中:
    • last 最近登錄系統的用戶;
    • lastlog 查看所有的用戶的登錄信息

日志分析工具:

  • 文本查看、grep過濾檢索、Webmin管理套件中查看
  • awk、sed等文本過濾、格式化編輯工具
  • Webalizer、Awstats等專用日志分析工具
  • 其他市面上的商業日志分析工具等

syslog系統日志

syslog系統日志/etc/syslog.conf
由系統服務syslogd 統一管理:

  • 軟件包:sysklogd-1.4.1-29.2
  • 主要程序:/sbin/klogd、/sbin/syslogd
  • 系統日志的配置文件:/etc/syslog.conf


(設備類別.日志級別 消息發送到的文件)
(像cron級別的日志文件,都寫到/var/log/cron里面去。)
設備類別[連接符]日志級別:

  • . 記錄大于等于后面的級別日志
  • .=只記錄等于后面的級別日志
  • .!=只記錄不等于后面的級別日志

消息發送位置:

  • 本地文件:通常就是文件的絕對路徑
  • 打印機:例如 /dev/lp0 這個打印機裝置
  • 用戶名稱:顯示給用戶
  • 遠程主機:例如 @202.100.100.1
  • *:所有在線的人

系統日志保存位置:默認為/var/log目錄下

主要日志文件介紹:

  • 內核及公共消息日志:/var/log/messages
  • 計劃任務日志:/var/log/cron
  • 系統引導日志:/var/log/dmesg
  • 郵件系統日志:/var/log/maillog
  • 錯誤登錄日志:/var/log/faillog

用戶運行過的進程分析工具:

  • accton、lastcomm
  • sa:報告、清理和維護進程統計文件。

例子:

# accton /var/account/pacct --》啟用統計 # lastcomm --user root --》查看統計 lastcomm root pts/2 0.00 secs Thu Jul 28 21:22 lastcomm root pts/2 0.00 secs Thu Jul 28 21:22 accton S root pts/2 0.00 secs Thu Jul 28 21:22 #accton --》關閉統計
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

PS:
配置文件和程序的關系:
配置文件為程序傳遞參數,告訴程序要做什么,或者哪些做,哪些不做等信息。

日志消息的級別loglevel(記住!)

  • 0 EMERG(緊急):會導致主機系統不可用的情況 emergencies(零,最嚴重!!)
  • 1 ALERT(警告):必須馬上采取措施解決的問題 alert
  • 2 CRIT(嚴重):比較嚴重的情況 critical
  • 3 ERR(錯誤):運行出現錯誤 error
  • 4 WARNING(提醒):可能會影響系統功能的事件
  • 5 NOTICE(注意):不會影響系統但值得注意
  • 6 INFO(信息):一般信息 information
  • 7 DEBUG(調試):程序或系統調試信息等
  • 8 none 沒有優先級,不記錄任何日志消息。

日志的設備類型:SyslogFacility

  • mail 郵件日志
  • cron 計劃任務日志
  • authpriv 用戶認證時產生的日志,如login命令、su命令。
  • local0–local7 由自定義程序使用。
  • news 網絡新聞傳輸協議(nntp)產生的消息。
  • user 用戶進程。
  • kern 系統內核消息。 kernel
  • daemon 某些守護

/var/log/下面的日志文件

  • messages —>默認情況下會記錄所有的日志信息
  • secure —》安全認證相關的日志(ssh、useradd、passwd)
  • dmesg —》系統在啟動的過程中加載了那些內核模塊的信息,對一些硬件的識別加載的驅動等信息。kernel啟動的過程中的信息
  • boot.log —》啟動系統的過程之中出現的問題和正常的情況
  • maillog —》與發郵件相關的日志
  • lastlog —》記錄最近登錄過系統的用戶的信息 last
  • cron —》計劃任務
  • httpd —》獨立的目錄,記錄httpd進程產生相關的日志
  • nginx —》獨立的目錄,記錄nginx進程產生的相關的日志
  • mysqld.log —》mysql的日志
  • yum.log —》yum的日志
  • xferlog —-》ftp的日志
  • wtmp —》lastlog 查看所有的用戶的登錄信息

主動記錄日志工具:logger:從命令行直接向系統日志文件寫入一行信息

# ping -c2 172.16.70.7|logger -i(ping命令的pid號)-t (信息)"This is a test" -p authpriv.info(設備類型) # tail -5 /var/log/secure Jul 28 21:26:20 localhost This is a test[5623]: 64 bytes from 172.16.70.7: icmp_seq=2 ttl=64 time=0.178 ms Jul 28 21:26:20 localhost This is a test[5623]: Jul 28 21:26:20 localhost This is a test[5623]: --- 172.16.70.7 ping statistics --- Jul 28 21:26:20 localhost This is a test[5623]: 2 packets transmitted, 2 received, 0% packet loss, time 1000ms Jul 28 21:26:20 localhost This is a test[5623]: rtt min/avg/max/mdev = 0.166/0.172/0.178/0.006 ms
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

自己寫腳本實現記錄日志的功能

①修改 /etc/rsyslog.conf 文件
在#Save boot messages also to boot.log下面添加東西。

②刷新服務#service rsyslog restart
(刷新rsyslog服務后,就會發現在/var/log/下面出現了shell_monitor.log文件!)
(但是里面沒有東西!)
③腳本的內容

#vim /var/log/monitor.sh if service httpd status &>/dev/null thenecho "httpd is running"|logger -t(信息) "httpd01_server"-p(設備類型號) local6.info (把echo的內容傳遞給logger) elseservice httpd start &>/dev/nullecho "httpd is star"| logger -t "httpd01_server" -p local6.info fi
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

④#bash monitor.sh #執行腳本

#cat shell_monitor.log #查看自己定義的日志文件
  • 1


(發現里面有內容了!)(輸出的時候,先顯示-t的,再顯示前面echo的內容)

日志輪轉功能 logrotate

方便有效的管理日志,防止日志文件過大
日志輪轉命令:logrotate
日志輪轉主要配置文件:/etc/logrotate.conf

  • 配合一個配置文件,再加上計劃任務,每天執行一次來達到循環的效果;
  • 好處:總保留最近最新的日志。

日志輪轉主要配置文件:/etc/logrotate.conf (主配置文件)

# cat /etc/logrotate.conf |grep -v ^#|grep -v ^$ (刪除注釋行和空行) --》查看日志輪轉配置文件的內容 weekly --》每周一次 rotate 4 --》保留4個備份的日志文件 create --》創建新的空的日志文件 dateext --》以日期做后綴 include /etc/logrotate.d --》次要配置文件都存放在次目錄下 /var/log/wtmp { --》(單獨針對wtmp的)monthlycreate 0664 root utmp --》創建文件的時候,指定權限和屬組、屬主minsize 1M --》大于1M才輪轉日志rotate 1 --》保留1個備份日志 } /var/log/btmp { --》針對btmp的missingok --》如果某文件沒丟失,做什么monthlycreate 0600 root utmprotate 1 }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

PS:
沒有單獨的日志文件,在輪轉的時候,參考/etc/logrotate.conf里面的配置。
同時如果有單獨的日志文件,但是里面有些配置沒有,也會參考主配置文件里的內容。—》單獨配置文件里沒有的配置項,參考主配置文件公共的配置項,建議寫到主配置文件里,各個日志文件根據自身的特點,可以單獨寫一些配置。

日志輪轉是怎么實現的?

日志輪轉,依賴cron計劃任務的每天執行的任務來完成輪轉的。
系統把日志輪轉的腳本logrotate放在/etc/cron.daily目錄下

mysqld日志輪轉文件

#vim /etc/logrotate.d/mysqld
  • 1

vim /etc/rsyslog.conf

①local6.* /var/log/mysqld.log

  • 指定目錄的日志設備類型是local6
  • 消息級別是,記錄到/var/log/mysqld.log
  • 主要是告訴rsyslog進程去記錄,至于mysqld進程是否采用rsyslog進程去記錄日志,取決于mysqld進程。
  • mysqld進程也許沒有采用rsyslog進程去幫助記錄日志,它自己有獨立的進程去實現日志的記錄功能。

②#service rsyslog restart –》刷新服務,讓配置文件生效。

#vim httpd /var/log/httpd/*log { --》指定輪轉的日志文件,具體如何輪轉,看大括號里的內容!missingok --》日志文件不存在的時候,繼續進行,不報錯。notifempty --》若日志文件為空,不輪轉(not if empty)sharedscripts --》配合prerotate和postrotate使用delaycompress --》推遲壓縮postrotate --》輪轉后執行下面的命令/sbin/service httpd reload > /dev/null 2>/dev/null || trueendscript }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

多個日志文件使用一套輪轉方法:

內核及公共消息日志:/var/log/messages
計劃任務日志:/var/log/cron
郵件系統日志:/var/log/maillog
/var/log/secure
/var/log/spooler
{
sharedscripts
postrotate
/bin/kill -HUP cat /var/run/syslogd.pid 2>/dev/null 2>/dev/null || true
endscript
}

#
#########怎么讓日志輪轉(全)

①(添加設備類型、消息級別和消息發送目錄到)/etc/rsyslog.conf
local6.info /var/log/liupeng

②刷新服務#service rsyslog restart
③日志腳本的內容:(腳本放在哪里都行)

#cat /lianxi/liupeng.sh #!/bin/bash if service mysqld status &>/dev/null thenecho "mysqld is running~"|logger -it "mysqld is started!" -p local6.info(這是輸出的內容,也會寫到日志) (這是寫到日志的內容) elseservice httpd start &>/dev/nullecho "mysqld is start"|logger -it "mysqld start for you!" -p local6.info fi
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
#bash /lianxi/liupeng.sh
  • 1

(執行腳本后,會看到在/var/log/liupeng.log文件里面生成了內容。)

④進入/etc/logrorate目錄,添加輪轉日志配置文件liupeng:

#cd /etc/logrotate.d #vim liupeng /var/log/liupeng.log { --》指定輪轉的日志文件,具體如何輪轉,看大括號里的內容! rotate 4 --》保留4個weekly --》每周輪轉一次create --》創建新的空的日志文件dateext --》以日期做后綴missingok --》日志文件不存在的時候,繼續進行,不報錯。notifempty --》若日志文件為空,不輪轉(not if empty)sharedscripts prerorate輪轉之前執行的命令endscript }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

⑤#logrotate -vf /etc/logrotate.conf (-f 強制輪轉)
–》輪轉自己寫的日志。

PS:

  • man 5 logrotate.conf –》man 5 配置文件:看這個配置文件里的所有功能
  • prerorate:輪轉前需要做的事情;
  • postrorate:輪轉后需要做的事情。

練習:自己編寫腳本實現記錄日志功能:

1.監控httpd、yum、mysql服務,如果服務正在運行寫入到日志文件,如果服務沒有運行也寫入到日志文件,然后啟動服務
2.日志文件的名字自己定義.例如:/var/log/liupeng_monitor.log
3.讓日志文件每個星期輪轉一次,保留4個文件,在輪轉之前將要刪除的日志文件復制到/backup目錄下。

[root@liupeng lianxi]# cat log_monitor.sh --》主腳本 #!/bin/bash ###########配置rsyslog文件 if ! egrep "local6" /etc/rsyslog.conf &>/dev/null thenecho "local6.* /var/log/liupeng_monitor.log" >>/etc/rsyslog/confecho "local6.alert *" >>/etc/rsyslog.conf --》如果接收到local6這種設備類型,消息級別為alert,給所有人發送(屏幕輸出)!service rsyslog restart fi ###########監控功能 monitor(){ if service $1 status &>/dev/null thenecho "$1_STATUS_CLEAR" | logger -it "$1_STATUS" -p local6.info elseecho "$1_NOT_RUNNING" | logger -it "$1_SERVICE_DOWN" -p local6.notice <span class="hljs-keyword">if</span> ! service <span class="hljs-variable">$1</span> restart &amp;&gt;/dev/null<span class="hljs-keyword">then</span><span class="hljs-built_in">echo</span> <span class="hljs-string">"<span class="hljs-variable">$1_CAN_NOT_RESTART</span>"</span> | logger -it <span class="hljs-string">"<span class="hljs-variable">$1_SERVICE_ERROR</span>"</span> -p local6.alert<span class="hljs-keyword">else</span><span class="hljs-built_in">echo</span> <span class="hljs-string">"<span class="hljs-variable">$1_RUNNING_AGAIN</span>"</span> | logger -it <span class="hljs-string">"<span class="hljs-variable">$1_STATUS_CLEAR_NOTICE</span>"</span> -p local6.notice<span class="hljs-keyword">fi</span>

fi
}
###########本地yum是否存在
local_yum_monitor(){
yum clean all &>/dev/null
if yum list &>/dev/null
then
echo “YUM_STATUS_CLEAR” | logger -it “YUM_STATUS” -p local6.info
else
echo “YUM_STATUS_ERROR” | logger -it “YUM_STATUS_WRONG” -p local6.alert
bash yum_install.sh
fi
}
###############日志輪轉
my_lograte(){ --》日志輪轉
[ -d /backup ]||mkdir /backup
if ! [ -f /etc/logrotat.d/monitor ]
then
echo
“/var/log/liupeng_monitor.log {
rotate 4
weekly
dateext
create
prerotate
/bin/cp -n /var/log/liupeng_monitor.log-* /backup/
–》-n選項:若存在,則不再覆蓋!
endscript
}”
>/etc/logrotate.d/monitor
fi
}
if [ -f ./monitor.conf ]
then
conf=(cat ./monitor.conf |egrep -v <span class="hljs-string">"#|^$|^yum"</span>)
for i in conf[@]</span><spanclass="hljs?keyword">do</span>monitor<spanclass="hljs?variable">{conf[@]}</span> <span class="hljs-keyword">do</span> monitor <span class="hljs-variable">conf[@]</span><spanclass="hljs?keyword">do</span>monitor<spanclass="hljs?variable">i &
done
if cat ./monitor.conf|egrep “^yum_check=1$” &>/dev/null
then
local_yum_monitor
fi
else
echo -e “#[SERVICE_NAME]\nhttpd\nmysqld\n#[YUM]\nyum_check=1” > monitor.conf
fi
my_lograte

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69

[root@liupeng lianxi]# cat monitor.conf --》供選擇的服務 #[SERVICE_NAME] httpd mysqld #[YUM] yum_check=1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
[root@liupeng lianxi]# cat yum_install.sh --》安裝yum服務 #!/bin/bash #local_yum_install repos="/etc/yum.repos.d"local_yum(){cat >$repos/local.repo <<EOF [local_yum] name=local_yum baseurl=file:///mnt gpgcheck=0 enabled=1 EOFread -p "請確認光盤已經放入光驅中,按任意建繼續 ..."mount /dev/cdrom /mnt &>/dev/nullcase $? in0)yum clean all &>/dev/nullyum update && echo "本地yum源配置成功!";;32)yum clean all &>/dev/nullecho "光盤已經掛載!";;*)echo "請放入光盤!";;esac } if [ -d $repos/bak ] thenif [ -f $repos/local.repo ]thenrm -f $repos/local.repolocal_yumelselocal_yumfi elsemkdir $repos/bakmv $repos/*.repo $repos/baklocal_yum fi
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
</div><div><div></div></div><link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-d7a94ec6ab.css" rel="stylesheet"><link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-49037e4d27.css" rel="stylesheet"></div>

總結

以上是生活随笔為你收集整理的Linux 学会看日志文件处理问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。