溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Linux系統(tǒng)日志遠(yuǎn)程采集

發(fā)布時(shí)間:2020-06-29 19:38:03 來源:網(wǎng)絡(luò) 閱讀:953 作者:warrent 欄目:系統(tǒng)運(yùn)維

一臺(tái)正常提供服務(wù)Linux服務(wù)器,每時(shí)每刻都在產(chǎn)生著大量的日志信息,若生產(chǎn)環(huán)境中,有幾十臺(tái)甚至上百臺(tái)服務(wù)器,那么一臺(tái)一臺(tái)的去查看系統(tǒng)的日志是非常麻煩的。

在技術(shù)不斷更新的今天,有很多可以技術(shù)可以對日志進(jìn)行集中管理,最普遍的操作還是要屬ELK日志分析系統(tǒng)了,不過這些日志是如何產(chǎn)生的?是由哪個(gè)服務(wù)來進(jìn)行統(tǒng)一管理的呢?這篇文章就圍繞著系統(tǒng)日志的服務(wù)——rsyslog這個(gè)服務(wù)來敘述一下。

Linux系統(tǒng)中有很多日志類型,如下是一些系統(tǒng)本身產(chǎn)生的日志文件:

/var/log/boot.log
/var/log/cron
/var/log/dmesg
/var/log/lastlog
/var/log/maillog或/var/log/mail/*
/var/log/messages
/var/log/secure
/var/log/wtmp,/var/log/faillog
/var/log/httpd/* , /var/log/samba/*

若想詳細(xì)了解日志文件記錄的是什么信息,可以參考這篇博文:Linux中常見日志文件的介紹,里面還包括了7個(gè)報(bào)錯(cuò)等級的介紹!這里不啰嗦了就。

系統(tǒng)中的日志大多數(shù)都是由rsyslog這個(gè)服務(wù)來管理的,這個(gè)服務(wù)的主配置文件如下:

[root@aaa ~]# grep -v "^$" /etc/rsyslog.conf | grep -v "^#"    #過濾配置文件中的空行和注釋行
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imjournal # provides access to the systemd journal
$WorkDirectory /var/lib/rsyslog
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$IncludeConfig /etc/rsyslog.d/*.conf
$OmitLocalLogging on
$IMJournalStateFile imjournal.state
*.info;mail.none;authpriv.none;cron.none                /var/log/messages  
上面行開頭的星號表示所有服務(wù),點(diǎn)號后面的等級表示那些等級記錄下來,/var/lo....表示記錄到哪里
authpriv.*                /var/log/secure   #表示authpriv所有等級的信息都記錄到secure文件中
mail.*              /var/log/maillog   #表示mail服務(wù)的所有級別信息都記錄到/var/log/maillog中
cron.*                                /var/log/cron
*.emerg                            :omusrmsg:*
uucp,news.crit                 /var/log/spooler
local7.*                            /var/log/boot.log
#由上面幾行注釋可以看出,第一段中的點(diǎn)號前面表示某個(gè)服務(wù),點(diǎn)號后面表示哪些報(bào)錯(cuò)等級要記錄。
#點(diǎn)號前后都可以使用通配符星號來表示,如第一列為“*.*”,則表示所有服務(wù)的所有等級
#若為“*.info”,則表示所有服務(wù)的info等級及比info更嚴(yán)重的等級都記錄起來。

在上面的配置文件中,日志存放的位置是可以改動(dòng)的,也可以更改哪些日志的等級要記錄下來,但是一般不建議改動(dòng)。

其實(shí),依靠/etc/rsyslog.conf這個(gè)配置文件,也是可以將其日志發(fā)送到另一臺(tái)服務(wù)器上,然后再另一臺(tái)服務(wù)器上進(jìn)行統(tǒng)一管理,如果生產(chǎn)環(huán)境較小,服務(wù)器不多的情況下,可以采用這種情況,但是如果生產(chǎn)環(huán)境的服務(wù)器數(shù)量比較多,則推薦部署ELK日志分析系統(tǒng)。

配置rsyslog服務(wù)實(shí)例

我這里有兩臺(tái)服務(wù)器,主機(jī)名分別是aaa和bbb(IP地址分別是192.168.1.1和1.2),現(xiàn)在就來實(shí)現(xiàn)以下需求:

  • 1、將aaa服務(wù)器的所有系統(tǒng)服務(wù)日志的info級別以上的同步發(fā)送到bbb服務(wù)器上進(jìn)行統(tǒng)一管理;
  • 2、將編譯安裝的Nginx的日志發(fā)送到bbb服務(wù)器上進(jìn)行管理;
  • 3、將編譯安裝的apache的日志也發(fā)送到bbb服務(wù)器上進(jìn)行管理(由于和默認(rèn)端口和Nginx的沖突,所以在實(shí)現(xiàn)了第二個(gè)需求后,就將Nginx服務(wù)停止,再啟動(dòng)apache服務(wù));

開始配置:

1、將aaa服務(wù)器的所有系統(tǒng)服務(wù)日志的info級別以上的同步發(fā)送到bbb服務(wù)器上進(jìn)行統(tǒng)一管理

(1)在aaa服務(wù)器上進(jìn)行以下操作:

[root@aaa ~]# vim /etc/rsyslog.conf     #編輯日志服務(wù)的配置文件
             #..............省略部分內(nèi)容
$ModLoad imudp             #將該行開頭的注釋符號“#”去掉,以便開啟udp協(xié)議
$UDPServerRun 514     #將該行開頭的注釋符號“#”去掉,以便開啟udp的514端口

# Provides TCP syslog reception
$ModLoad imtcp         #將該行開頭的注釋符號“#”去掉,以便開啟tcp協(xié)議
$InputTCPServerRun 514    #將該行開頭的注釋符號“#”去掉,以便開啟tcp的514端口
             #..............省略部分內(nèi)容
*.info;mail.none;authpriv.none;cron.none         /var/log/messages
*.info                @@192.168.1.2  #星號表示所有服務(wù)“*.info”表示info等級及以上的信息
#@@表示使用tcp協(xié)議傳輸,192.168.1.2是指定要發(fā)送到哪臺(tái)服務(wù)器
#若使用一個(gè)@符號,則表示使用udp協(xié)議傳輸
             #..............省略部分內(nèi)容
#編輯完成后,保存退出即可。
[root@aaa ~]# systemctl restart rsyslog           #重啟rsyslog服務(wù),以便更改生效

(2)在bbb服務(wù)器上進(jìn)行以下操作:

[root@bbb ~]# vim /etc/rsyslog.conf        #編輯日志服務(wù)的配置文件,開啟udp和tcp的514端口
             #..............省略部分內(nèi)容
$ModLoad imudp                #去掉該行開頭的“#”注釋符號
$UDPServerRun 514                #去掉該行開頭的“#”注釋符號

# Provides TCP syslog reception 
$ModLoad imtcp               #去掉該行開頭的“#”注釋符號
$InputTCPServerRun 514               #去掉該行開頭的“#”注釋符號
             #..............省略部分內(nèi)容
[root@bbb ~]# systemctl restart rsyslog        #重啟服務(wù),使更改生效
[root@bbb ~]# tailf /var/log/secure     #動(dòng)態(tài)監(jiān)控著本機(jī)的日志文件
Sep 19 15:00:32 aaa useradd[5998]: new group: name=lvjianzh, GID=1003
Sep 19 15:00:32 aaa useradd[5998]: new user: name=lvjianzh, UID=1003, GID=1003....
             #..............省略部分內(nèi)容

(3)在aaa服務(wù)器上進(jìn)行以下操作(主要是為了產(chǎn)生日志信息):

[root@aaa ~]# useradd admini
[root@aaa ~]# echo '123.com' | passwd --stdin admini
更改用戶 admini 的密碼 。
passwd:所有的身份驗(yàn)證令牌已經(jīng)成功更新。

(4)查看bbb產(chǎn)生的新日志如下:

Linux系統(tǒng)日志遠(yuǎn)程采集

2、將編譯安裝的Nginx的日志發(fā)送到bbb服務(wù)器上進(jìn)行管理;

(1)在aaa服務(wù)器上進(jìn)行以下操作:

[root@aaa ~]# vim /etc/yum.repos.d/epel.repo     #寫入以下文件,指定阿里鏡像站

[epel]
name=epel
baseurl=https://mirrors.aliyun.com/epel/7/x86_64/
gpgcheck=0
#必須保證系統(tǒng)默認(rèn)自帶的yum文件也存在/etc/yum.repos.d/目錄下,寫入后保存退出即可。
[root@aaa ~]# yum repolist             #最好執(zhí)行一下該命令
             #..............省略部分內(nèi)容
(7/7): base/7/x86_64/primary_db                    | 6.0 MB   00:01     
源標(biāo)識                          源名稱                            狀態(tài)
base/7/x86_64                   CentOS-7 - Base                   10,097
epel                            epel                              13,384     
#上面一行就是我們剛寫入的文件生效的,表示沒問題
extras/7/x86_64                 CentOS-7 - Extras                    304
updates/7/x86_64                CentOS-7 - Updates                   311
repolist: 24,096
#若命令yum  repolist執(zhí)行后沒有顯示出上述內(nèi)容,排除配置文件的錯(cuò)誤后,可以執(zhí)行以下命令
[root@aaa ~]# yum makecache          #用來建立元數(shù)據(jù)緩存的
             #..............省略部分內(nèi)容
元數(shù)據(jù)緩存已建立
[root@aaa ~]# yum -y install nginx                 #安裝nginx服務(wù)
[root@aaa ~]# systemctl start nginx     #啟動(dòng)Nginx服務(wù)
[root@aaa ~]# netstat -anpt | grep nginx              #確定Nginx服務(wù)已啟動(dòng)
tcp        0      0 0.0.0.0:80      0.0.0.0:* LISTEN      6609/nginx: master  
tcp6       0      0 :::80       :::*         LISTEN      6609/nginx: master  
[root@aaa ~]# ls /var/log/nginx/   #以下是yum安裝Nginx后,Nginx兩個(gè)日志文件的存放位置
access.log  error.log
#記住Nginx日志的存放路徑,一會(huì)要用到,若采用的是編譯安裝,請自行找到Nginx日志存放路徑記下來
[root@aaa ~]# vim /etc/rsyslog.conf           #編輯rsyslog服務(wù)的配置文件
             #..............省略部分內(nèi)容
#在配置文件末尾寫入以下內(nèi)容
$ModLoad imfile
$InputFilePollInterval 1
$InputFileName /var/log/nginx/access.log
$InputFileTag nginx-info-access;
$InputFilestateFile state-nginx-info-accesslog
$InputRunFileMonitor
$InputFileName /var/log/nginx/error.log
$InputFileTag nginx-info-error;
$InputFilestateFile state-nginx-info-errorlog
$InputRunFileMonitor
$InputFilePollInterval 10
if $programname == 'nginx-info-access' then @192.168.1.2:514
if $programname == 'nginx-info-access' then ~
if $programname == 'nginx-info-error' then @192.168.1.2:514
if $programname == 'nginx-info-error' then ~
[root@aaa ~]# systemctl restart rsyslog               #重啟服務(wù)以便生效

關(guān)于上面寫入的配置項(xiàng)解釋如下:

$ModLoad imfile         #加載模塊
$InputFilePollInterval 1    #間隔多久采集次,默認(rèn)單位是秒
$InputFileName /var/log/nginx/access.log    #指定要采集的日志文件
$InputFileTag nginx-info-access;           #給對應(yīng)的日志打一個(gè)標(biāo)簽
$InputFilestateFile state-nginx-info-accesslog    #給這個(gè)日志命名
$InputRunFileMonitor        #啟動(dòng)監(jiān)控
#以下的配置和上面類似,因?yàn)橐杉瘍蓚€(gè)日志文件嘛!
$InputFileName /var/log/nginx/error.log
$InputFileTag nginx-info-error;
$InputFilestateFile state-nginx-info-errorlog
$InputRunFileMonitor
$InputFilePollInterval 10
#以下是指定將采集的日志發(fā)送到哪里,同理,一個(gè)@符號表示使用的udp協(xié)議,兩個(gè)表示tcp協(xié)議
if $programname == 'nginx-info-access' then @192.168.1.2:514  
if $programname == 'nginx-info-access' then ~   #這的~,表示本地的意思
if $programname == 'nginx-info-error' then @192.168.1.2:514
if $programname == 'nginx-info-error' then ~

(2)在bbb服務(wù)器上進(jìn)行日志的監(jiān)控:

Linux系統(tǒng)日志遠(yuǎn)程采集

(3)客戶端訪問aaa的Nginx服務(wù),以便產(chǎn)生日志。

Linux系統(tǒng)日志遠(yuǎn)程采集

(4)再回到bbb服務(wù)器上,查看是否有關(guān)于aaa服務(wù)器的Nginx訪問日志產(chǎn)生(如果沒有新的日志產(chǎn)生,在排除配置錯(cuò)誤的前提下,客戶端可以多刷新幾次):
Linux系統(tǒng)日志遠(yuǎn)程采集

可以看出來,Nginx的日志信息簡直不要太詳細(xì),對么?日志信息中包含了該日志產(chǎn)生的時(shí)間?是哪臺(tái)服務(wù)器產(chǎn)生的?標(biāo)簽名是什么?哪個(gè)IP地址訪問的?訪問時(shí)間是什么時(shí)候?訪問的狀態(tài)碼是什么?客戶端訪問時(shí)使用的是什么系統(tǒng)、系統(tǒng)的位數(shù)是多少?如(Windows NT 10.0; Win64; x64,表示是64為的win10系統(tǒng)),用的是什么瀏覽器進(jìn)行訪問的?我這里使用谷歌訪問的,它竟然還記錄了我客戶端谷歌瀏覽器的版本號。

至此,Nginx的日志文件采集就完成了,那么現(xiàn)在進(jìn)行apache的日志采集,有了前面的鋪墊,這就簡單多了,簡單改一下配置項(xiàng)就可以了。

3、將編譯安裝的apache的日志也發(fā)送到bbb服務(wù)器上進(jìn)行管理

(1)在aaa服務(wù)器上進(jìn)行以下操作:

[root@aaa ~]# yum -y install httpd            #安裝apache服務(wù)
[root@aaa ~]# systemctl stop nginx      #為了避免端口沖突,停止Nginx服務(wù)
[root@aaa ~]# systemctl start httpd      #啟動(dòng)apache服務(wù)
[root@aaa ~]# vim /etc/rsyslog.conf          #更改rsyslog配置文件,主要是更改采集日志的路徑
             #..............省略部分內(nèi)容
$ModLoad imfile
$InputFilePollInterval 1
$InputFileName /var/log/httpd/access_log      #主要是改這個(gè)
$InputFileTag httpd-info-access;
$InputFilestateFile state-httpd-info-accesslog
$InputRunFileMonitor
$InputFileName /var/log/httpd/error_log #還要改這個(gè)
#其余配置項(xiàng)可不改,但是建議改一下,以免看起來日志不太直觀。
$InputFileTag httpd-info-error;
$InputFilestateFile state-httpd-info-errorlog
$InputRunFileMonitor
$InputFilePollInterval 10
if $programname == 'httpd-info-access' then @192.168.1.2:514
if $programname == 'httpd-info-access' then ~
if $programname == 'httpd-info-error' then @192.168.1.2:514
if $programname == 'httpd-info-error' then ~
#主要就是將上面配置中的Nginx都換成了httpd。
[root@aaa ~]# systemctl restart rsyslog                 #重啟服務(wù),使更改生效

(2)在bbb服務(wù)器上進(jìn)行日志的監(jiān)控:

Linux系統(tǒng)日志遠(yuǎn)程采集

(3)客戶端訪問aaa的Nginx服務(wù),以便產(chǎn)生日志(多刷新幾次)。

Linux系統(tǒng)日志遠(yuǎn)程采集

(4)再回到bbb服務(wù)器上,查看是否有關(guān)于aaa服務(wù)器的httpd訪問日志產(chǎn)生。

Linux系統(tǒng)日志遠(yuǎn)程采集

OK!沒問題,采集到了。。。

———————— 本文至此結(jié)束,感謝閱讀 ————————

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI