Centos7搭建集中式日志系統


在CentOS7中,Rsyslong是一個集中式的日志收集系統,可以運行在TCP或者UDP的514端口上。

 

目錄

開始之前

配置接收日志的主機

配置發送日志的主機

日志回滾

附件:創建日志接收模板

排錯

 

開始之前

本文的配置環境如下

系統:CentOS7

主機數量:2

接收日志的主機ip:192.168.1.112;主機名:server112

發送日志的主機ip:192.168.1.204;主機名:server204

rsyslog版本號:rsyslog-7.4.7-7.el7_0.x86_64

目的:把server204上產生的所有日志信息和所有的操作命令都發送到server112主機上,以便集中監控和分析日志

 

如果你的主機名在安裝系統時沒有修改,默認為localhost.domain,如果不修改主機名,那么所有的日志集中在一個服務器上時就會互相覆蓋。

查看當前的主機名:hostname

修改主機名流程:

在文件/etc/hostname中添加新的主機名

圖片1

在文件/etc/hosts的第一行的兩個地方添加新的主機名

圖片2

注意:一定要在localhost.domain的前面添加{主機名}.domain,否則不能在/var/log目錄下產生以主機名命名的目錄

 

github項目:https://github.com/Kylinlin/logsystem

在該項目下的scripts目錄下有兩個文件,configure_rsyslog_for_client.sh是用來配置發送日志的客戶端腳本,configure_rsyslog_for_server.sh是用來配置接收日志的服務器端腳本。往后會在該項目中添加日志分析系統和更為全面的日志管理方法。

 

聲明:本文大量引用了Linux.cn開源中文社區的一篇博客內容:https://linux.cn/article-5023-1.html

 

配置接收日志的主機

查看你的系統上是否安裝了rsyslog系統

rpm -qa | grep rsyslog

在主機上安裝rsyslog

yum install rsyslog* -y

安裝完成后,打開文件/etc/rsyslog.conf進行配置,主要是把下面的注釋去掉,並添加三行字符

$template RemoteLogs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log" * 
*.* ?RemoteLogs 
& ~

如下圖所示:

圖片1

       在此對該模板進行簡單解釋,$template RemoteLogs(這里“RemoteLogs” 字符串可以為任何其他的描述性的名稱)指令使rsyslog后台進程將日志消息寫到/var/log下的單獨的本地日志文件中,其中日志文件的名稱是基於遠程日志發送機器的主機名以及生成該日志的應用程序名進行定義的。其中第二行暗示了我們將RemoteLogs模板應用到所有接收到的日志上。

       符號"& ~"表示了一個重定向規則,被用來告知rsyslog守護進程停止對日志消息的進一步處理,並且不要在本地寫入。如果沒有使用該重定向規則,那么所有的遠程消息都會在寫入上述描述的日志文件之外同時被寫入到本地日志文件,這就意味着日志消息實際上被寫了兩次。使用該規則的另外一個結果就是syslog服務器本身的日志消息只會被以該機器主機名命名的專有文件中

如果想配置特定的模板,參考本文最后的附件

 

rsyslog進程的控制命令為

查看進程運行情況(Status) :systemctl status rsyslog

停止(Stop)                         :systemctl stop rsyslog

重啟(Restart)                     :systemctl restart rsyslog

啟動(Start)                         :systemctl start rsyslog

查看514端口是否啟動             :netstat -antup | grep 514

 

配置發送日志的主機

如果沒有安裝rsyslog,則安裝

yum install rsyslog -y

安裝完成后,同樣配置/etc/rsyslog.conf文件,在文件的最后一行添加如下字符

*.* @192.168.1.112:514

如果用的是TCP協議,則要多加一個@:*.* @@192.168.1.112:514

把該主機上的所有操作命令同時發送到日志主機去,打開配置文件/etc/bashrc

在文件的最后一行添加以下內容:

export PROMPT_COMMAND='{ msg=$(history 1 | { read x y; echo $y; });logger "[euid=$(whoami)]":$(who am i):[`pwd`]"$msg"; }'

圖片2

重新加載bash配置文件:

source /etc/bashrc

打開防火牆的514端口

firewall-cmd --add-port=514/udp --permanent

firewall-cmd --add-port=514/tcp --permanent

firewall-cmd --reload

重啟rsyslog

systemctl restart rsyslog

至此,基本配置完成

 

日志回滾

在接收日志的主機上,進入目錄/var/log,可以看到生成了兩個文件夾server112和server204(根據兩台主機名生成的),在server204文件夾中的一個名為root.log文件就是該主機上執行過的所有命令,其他文件都是根據進程名生成的。

設置日志回滾,編輯文件/etc/logrotate.d/syslog

把記錄日志的兩個路徑添加進去,記得把server112和server204替換為你的主機名

圖片3

這樣就能自動回滾這兩個目錄下的所有日志

 

附件:創建日志接收模板

可以使用下面的模式對特定的設備或嚴重性級別使用新的模板直接來記錄日志消息。

[facility-level].[severity-level] ?RemoteLogs

serverity-level table(服務級別列表)

serverity-level table(服務級別列表

數字代碼

服務級別

描述

0

emerg

系統不可用

1

alert

必須馬上采取救援行動

2

crit

嚴重錯誤信息

3

error

錯誤信息

4

warning

警告信息

5

notice

普通但是值得注意的信息

6

info

一般信息

7

debug

調試信息

 

facility-level table(設備級別列表),如下圖

圖片4

例如:

將全部優先級別的所有內部用戶驗證消息指定為RemoteLogs模板:

authpriv.* ?RemoteLogs

將所有系統進程中除開mail、用戶驗證和cron消息之外的進程產生的消息級別的日志指定為RemoteLogs模板:

*.info,mail.none,authpriv.none,cron.none ?RemoteLogs

如果我們想要將所有從遠程客戶端接受到的消息寫入到一個以它們的IP地址命名的單個文件中,可以使用以下的模板。在此我們為該模板賦予了“IpTemplate”名稱。

$template IpTemplate,"/var/log/%FROMHOST-IP%.log"

 *.* ?IpTemplate

 & ~

 

排錯

上面的配置很簡單,但是有時候服務端就是很詭異地接收不到客戶端發送的日志(在服務端的/var/log目錄下沒有以客戶端主機名命名的文件夾),此時就要逐一檢查以下問題:

1.檢查配置文件是否有錯

2.兩台機器之間是否能ping通

3.查看服務端是否已經在監控514端口:netstat -lnutp

4.注意服務端監控的514端口究竟是udp還是tcp協議,而客戶端也必須使用一致的協議


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM