您好,登錄后才能下訂單哦!
一臺正常提供服務Linux服務器,每時每刻都在產生著大量的日志信息,若生產環境中,有幾十臺甚至上百臺服務器,那么一臺一臺的去查看系統的日志是非常麻煩的。
在技術不斷更新的今天,有很多可以技術可以對日志進行集中管理,最普遍的操作還是要屬ELK日志分析系統了,不過這些日志是如何產生的?是由哪個服務來進行統一管理的呢?這篇文章就圍繞著系統日志的服務——rsyslog這個服務來敘述一下。
Linux系統中有很多日志類型,如下是一些系統本身產生的日志文件:
/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/*
若想詳細了解日志文件記錄的是什么信息,可以參考這篇博文:Linux中常見日志文件的介紹,里面還包括了7個報錯等級的介紹!這里不啰嗦了就。
系統中的日志大多數都是由rsyslog這個服務來管理的,這個服務的主配置文件如下:
[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
上面行開頭的星號表示所有服務,點號后面的等級表示那些等級記錄下來,/var/lo....表示記錄到哪里
authpriv.* /var/log/secure #表示authpriv所有等級的信息都記錄到secure文件中
mail.* /var/log/maillog #表示mail服務的所有級別信息都記錄到/var/log/maillog中
cron.* /var/log/cron
*.emerg :omusrmsg:*
uucp,news.crit /var/log/spooler
local7.* /var/log/boot.log
#由上面幾行注釋可以看出,第一段中的點號前面表示某個服務,點號后面表示哪些報錯等級要記錄。
#點號前后都可以使用通配符星號來表示,如第一列為“*.*”,則表示所有服務的所有等級
#若為“*.info”,則表示所有服務的info等級及比info更嚴重的等級都記錄起來。
在上面的配置文件中,日志存放的位置是可以改動的,也可以更改哪些日志的等級要記錄下來,但是一般不建議改動。
其實,依靠/etc/rsyslog.conf這個配置文件,也是可以將其日志發送到另一臺服務器上,然后再另一臺服務器上進行統一管理,如果生產環境較小,服務器不多的情況下,可以采用這種情況,但是如果生產環境的服務器數量比較多,則推薦部署ELK日志分析系統。
我這里有兩臺服務器,主機名分別是aaa和bbb(IP地址分別是192.168.1.1和1.2),現在就來實現以下需求:
- 1、將aaa服務器的所有系統服務日志的info級別以上的同步發送到bbb服務器上進行統一管理;
- 2、將編譯安裝的Nginx的日志發送到bbb服務器上進行管理;
- 3、將編譯安裝的apache的日志也發送到bbb服務器上進行管理(由于和默認端口和Nginx的沖突,所以在實現了第二個需求后,就將Nginx服務停止,再啟動apache服務);
開始配置:
1、將aaa服務器的所有系統服務日志的info級別以上的同步發送到bbb服務器上進行統一管理
(1)在aaa服務器上進行以下操作:
[root@aaa ~]# vim /etc/rsyslog.conf #編輯日志服務的配置文件
#..............省略部分內容
$ModLoad imudp #將該行開頭的注釋符號“#”去掉,以便開啟udp協議
$UDPServerRun 514 #將該行開頭的注釋符號“#”去掉,以便開啟udp的514端口
# Provides TCP syslog reception
$ModLoad imtcp #將該行開頭的注釋符號“#”去掉,以便開啟tcp協議
$InputTCPServerRun 514 #將該行開頭的注釋符號“#”去掉,以便開啟tcp的514端口
#..............省略部分內容
*.info;mail.none;authpriv.none;cron.none /var/log/messages
*.info @@192.168.1.2 #星號表示所有服務“*.info”表示info等級及以上的信息
#@@表示使用tcp協議傳輸,192.168.1.2是指定要發送到哪臺服務器
#若使用一個@符號,則表示使用udp協議傳輸
#..............省略部分內容
#編輯完成后,保存退出即可。
[root@aaa ~]# systemctl restart rsyslog #重啟rsyslog服務,以便更改生效
(2)在bbb服務器上進行以下操作:
[root@bbb ~]# vim /etc/rsyslog.conf #編輯日志服務的配置文件,開啟udp和tcp的514端口
#..............省略部分內容
$ModLoad imudp #去掉該行開頭的“#”注釋符號
$UDPServerRun 514 #去掉該行開頭的“#”注釋符號
# Provides TCP syslog reception
$ModLoad imtcp #去掉該行開頭的“#”注釋符號
$InputTCPServerRun 514 #去掉該行開頭的“#”注釋符號
#..............省略部分內容
[root@bbb ~]# systemctl restart rsyslog #重啟服務,使更改生效
[root@bbb ~]# tailf /var/log/secure #動態監控著本機的日志文件
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....
#..............省略部分內容
(3)在aaa服務器上進行以下操作(主要是為了產生日志信息):
[root@aaa ~]# useradd admini
[root@aaa ~]# echo '123.com' | passwd --stdin admini
更改用戶 admini 的密碼 。
passwd:所有的身份驗證令牌已經成功更新。
(4)查看bbb產生的新日志如下:
2、將編譯安裝的Nginx的日志發送到bbb服務器上進行管理;
(1)在aaa服務器上進行以下操作:
[root@aaa ~]# vim /etc/yum.repos.d/epel.repo #寫入以下文件,指定阿里鏡像站
[epel]
name=epel
baseurl=https://mirrors.aliyun.com/epel/7/x86_64/
gpgcheck=0
#必須保證系統默認自帶的yum文件也存在/etc/yum.repos.d/目錄下,寫入后保存退出即可。
[root@aaa ~]# yum repolist #最好執行一下該命令
#..............省略部分內容
(7/7): base/7/x86_64/primary_db | 6.0 MB 00:01
源標識 源名稱 狀態
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執行后沒有顯示出上述內容,排除配置文件的錯誤后,可以執行以下命令
[root@aaa ~]# yum makecache #用來建立元數據緩存的
#..............省略部分內容
元數據緩存已建立
[root@aaa ~]# yum -y install nginx #安裝nginx服務
[root@aaa ~]# systemctl start nginx #啟動Nginx服務
[root@aaa ~]# netstat -anpt | grep nginx #確定Nginx服務已啟動
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兩個日志文件的存放位置
access.log error.log
#記住Nginx日志的存放路徑,一會要用到,若采用的是編譯安裝,請自行找到Nginx日志存放路徑記下來
[root@aaa ~]# vim /etc/rsyslog.conf #編輯rsyslog服務的配置文件
#..............省略部分內容
#在配置文件末尾寫入以下內容
$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 #重啟服務以便生效
關于上面寫入的配置項解釋如下:
$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
#以下是指定將采集的日志發送到哪里,同理,一個@符號表示使用的udp協議,兩個表示tcp協議
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服務器上進行日志的監控:
(3)客戶端訪問aaa的Nginx服務,以便產生日志。
(4)再回到bbb服務器上,查看是否有關于aaa服務器的Nginx訪問日志產生(如果沒有新的日志產生,在排除配置錯誤的前提下,客戶端可以多刷新幾次):
可以看出來,Nginx的日志信息簡直不要太詳細,對么?日志信息中包含了該日志產生的時間?是哪臺服務器產生的?標簽名是什么?哪個IP地址訪問的?訪問時間是什么時候?訪問的狀態碼是什么?客戶端訪問時使用的是什么系統、系統的位數是多少?如(Windows NT 10.0; Win64; x64,表示是64為的win10系統),用的是什么瀏覽器進行訪問的?我這里使用谷歌訪問的,它竟然還記錄了我客戶端谷歌瀏覽器的版本號。
至此,Nginx的日志文件采集就完成了,那么現在進行apache的日志采集,有了前面的鋪墊,這就簡單多了,簡單改一下配置項就可以了。
3、將編譯安裝的apache的日志也發送到bbb服務器上進行管理
(1)在aaa服務器上進行以下操作:
[root@aaa ~]# yum -y install httpd #安裝apache服務
[root@aaa ~]# systemctl stop nginx #為了避免端口沖突,停止Nginx服務
[root@aaa ~]# systemctl start httpd #啟動apache服務
[root@aaa ~]# vim /etc/rsyslog.conf #更改rsyslog配置文件,主要是更改采集日志的路徑
#..............省略部分內容
$ModLoad imfile
$InputFilePollInterval 1
$InputFileName /var/log/httpd/access_log #主要是改這個
$InputFileTag httpd-info-access;
$InputFilestateFile state-httpd-info-accesslog
$InputRunFileMonitor
$InputFileName /var/log/httpd/error_log #還要改這個
#其余配置項可不改,但是建議改一下,以免看起來日志不太直觀。
$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 #重啟服務,使更改生效
(2)在bbb服務器上進行日志的監控:
(3)客戶端訪問aaa的Nginx服務,以便產生日志(多刷新幾次)。
(4)再回到bbb服務器上,查看是否有關于aaa服務器的httpd訪問日志產生。
OK!沒問題,采集到了。。。
———————— 本文至此結束,感謝閱讀 ————————
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。