linux下syslog-ng日誌集中管理服務部署記錄

 

syslog是Linux系統默認的日誌守護進程,默認的syslog配置文件是/etc/syslog.conf文件。syslog守護進程是可配置的,它容許人們爲每一種類型的系統信息精確地指定一個存放地點。比較 syslog ,syslog-ng 具備衆多高級的功能:更好的網絡支持,更加方便的配置,集中式的網絡日誌存儲,而且更具備彈性。好比,使用syslogd時,全部的iptables日誌與其餘內核日誌一塊兒所有存儲到了kern.log文件裏。Syslog-ng則可讓你有選擇性的將iptables部分分出到另外的日誌文件中。Syslogd僅能使用UDP協議,Syslog-ng 可使用UDP和TCP協議。因此咱們能夠在加密的網絡隧道中傳輸日誌到集中日誌服務器。php

syslog-ng的一個設計原則就是創建更好的消息過濾粒度。syslog-ng可以進行基於內容和優先權/facility的過濾。另外一個設計原則是更容易進行不一樣防火牆網段的信息轉發,它支持主機鏈,即便日誌消息通過了許多計算機的轉發,也能夠找出原發主機地址和整個轉發鏈。最後的一個設計原則就是儘可能使配置文件強大和簡潔。syslog-ng做爲syslog的替代工具,能夠徹底替代syslog的服務,而且經過定義規則,實現更好的過濾功能。以前介紹了Linux下rsyslog日誌收集服務環境部署記錄,下面簡單介紹下syslog-ng日誌集中管理服務部署記錄:html

下面部署實例目的:
實現接收遠程客戶端服務日誌(nginx、mysql、php、apache)保存在本地一臺日誌服務器上提供查看。
即遠程客戶機採用syslog-ng將其日誌經過管道pipe傳送到本地的日誌服務器上進行查看。

1、syslog-ng安裝(服務端和客戶端都要安裝)
[root@syslog-ng ~]# wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
[root@syslog-ng ~]# rpm -ivh epel-release-latest-6.noarch.rpm --force
[root@syslog-ng ~]# yum install syslog-ng -y

==============================================================================================
舒適提示:
因爲日誌集中管理服務syslog-ng採用的是C/S架構,因此客戶端也須要安裝syslog-ng。
若是客戶端只是傳輸系統日誌到syslog-ng服務器上,那麼客戶端就不需安裝syslog-ng了,只須要在在syslog.conf配置裏添加一條:
#vim /etc/syslog.conf                   //這是系統日誌,全部級別的全部日誌。
*.*                      @192.168.10.205        //此處IP地址爲日誌服務器IP【即客戶端的ip】
==============================================================================================

2、syslog-ng服務端配置記錄(192.168.10.205)
[root@syslog-ng ~]# cp /etc/syslog-ng/syslog-ng.conf /etc/syslog-ng/syslog-ng.conf.bak
[root@syslog-ng ~]# vim /etc/syslog-ng/syslog-ng.conf
......
options {
    flush_lines (0);
    time_reopen (10);
    log_fifo_size (1000);
    long_hostnames (off);
    use_dns (no);
    use_fqdn (no);
    create_dirs (yes);                  #此行改成yes
    keep_hostname (yes);
};
......
source s_log {
        udp(ip(0.0.0.0) port(514));
};
......
destination d_log {
        file("/data/syslog-ng/kevin.log");
};
......
log { source(s_log);  destination(d_log); };

配置說明:
options       爲全局配置參數
source        是日誌從本機的哪一個IP哪一個端口接收信息
destination   接收到信息保存在哪一個文件
log           就是未來源信息寫入到目的文件中

建立日誌存放文件
[root@syslog-ng ~]# mkdir /data/syslog-ng/
[root@syslog-ng ~]# touch /data/syslog-ng/kevin.log         #此文件其實能夠不用提早建立,會自動建立。
[root@syslog-ng ~]# chmod 600 /data/syslog-ng/kevin.log

啓動syslog-ng服務
[root@syslog-ng ~]# /etc/init.d/syslog-ng start
Plugin module not found in 'module-path'; module-path='/lib64/syslog-ng', module='afsql'
Plugin module not found in 'module-path'; module-path='/lib64/syslog-ng', module='afsql'
                                                           [  OK  ]

3、syslog-ng客戶端配置記錄(192.168.10.206)
   將客戶端服務器nginx日誌經過管道文件傳輸到日誌服務器上(即輸出到syslog-ng服務器端)
[root@web-node01 ~]# cp /etc/syslog-ng/syslog-ng.conf /etc/syslog-ng/syslog-ng.conf.bak
[root@web-node01 ~]# vim /etc/syslog-ng/syslog-ng.conf
......
options {
    flush_lines (0);
    time_reopen (10);
    log_fifo_size (1000);
    long_hostnames (off);
    use_dns (no);
    use_fqdn (no);
    create_dirs (yes);                 #修改成yes
    keep_hostname (yes);
};
......
source s_slog {
         pipe("/data/kevin/log.pipe");
};
......
destination d_slog { udp(192.168.10.205 port(514)); };              #ip爲syslog-ng服務端ip地址
......
log { source(s_slog); destination(d_slog); };

建立管道文件
[root@web-node01 ~]# mkdir /data/kevin
[root@web-node01 ~]# mkfifo /data/kevin/log.pipe

啓動syslog-ng服務
[root@web-node01 ~]# /etc/init.d/syslog-ng start
Plugin module not found in 'module-path'; module-path='/lib64/syslog-ng', module='afsql'
Starting syslog-ng: Plugin module not found in 'module-path'; module-path='/lib64/syslog-ng', module='afsql'
                                                           [  OK  ]
驗證測試:
好比將客戶端nginx服務日誌信息導入到管道文件中
[root@web-node01 ~]# tail -f /etc/nginx/logs/access.log >> /data/kevin/log.pipe &
[root@web-node01 ~]# ps -ef|grep -v grep|grep "tail -f /etc/nginx/logs/access.log"
root     28598 25044  0 15:08 pts/2    00:00:00 tail -f /etc/nginx/logs/access.log

接着去syslon-ng的服務端查看,發現日誌已經傳過來了。
注意這個日誌傳輸是實施在刷的,也就是說只要syslog-ng客戶端那邊的日誌實時在刷,服務端這邊就會實時地接收過來。
[root@syslog-ng ~]# tail -f /data/syslog-ng/kevin.log 
Jul  4 15:08:40 web-node01 172.17.13.18 - [04/Jul/2018:15:05:04 +0800] "GET / HTTP/1.1" 403 571 "-" Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 - 0.000 - - -
Jul  4 15:08:40 web-node01 172.17.13.18 - [04/Jul/2018:15:05:04 +0800] "GET /favicon.ico HTTP/1.1" 404 571 "http://192.168.10.206:8080/" Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 - 0.000 - - -
Jul  4 15:08:40 web-node01 172.17.13.18 - [04/Jul/2018:15:05:32 +0800] "GET /a.txt HTTP/1.1" 200 10 "-" Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 - 0.000 - - -
Jul  4 15:08:40 web-node01 172.17.13.18 - [04/Jul/2018:15:08:05 +0800] "GET /a.txt HTTP/1.1" 304 0 "-" Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 - 0.000 - - -
Jul  4 15:08:40 web-node01 172.17.13.18 - [04/Jul/2018:15:08:06 +0800] "GET /a.txt HTTP/1.1" 304 0 "-" Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 - 0.000 - - -
Jul  4 15:08:40 web-node01 172.17.13.18 - [04/Jul/2018:15:08:06 +0800] "GET /a.txt HTTP/1.1" 304 0 "-" Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 - 0.000 - - -
Jul  4 15:08:40 web-node01 172.17.13.18 - [04/Jul/2018:15:08:07 +0800] "GET /a.txt HTTP/1.1" 304 0 "-" Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 - 0.000 - - -
Jul  4 15:08:40 web-node01 172.17.13.18 - [04/Jul/2018:15:08:28 +0800] "GET /a.txt HTTP/1.1" 200 1136 "-" Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 - 0.000 - - -
Jul  4 15:08:40 web-node01 172.17.13.18 - [04/Jul/2018:15:08:29 +0800] "GET /a.txt HTTP/1.1" 304 0 "-" Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 - 0.000 - - -

到此,一個簡單的syslog-ng日誌集中管理服務環境就部署成功了。
========================================================================================
須要注意的是:
上面實驗僅僅是傳輸了客戶端的nginx日誌到遠程日誌服務器上,實際上是能夠配置傳輸多個日誌的,只須要:
1)在syslog-ng服務端和客戶端的syslog-ng.conf文件裏配置多個source及destination便可!
2)多個配置時,記住端口必定不能配置成同樣的,不然多個日誌會被傳輸到遠程服務器的同一個日誌裏!!默認端口是514,多配置的時候,能夠用好比551四、551五、5516等端口。


如在上面配置傳輸nginx日誌的基礎上,再輸出客戶機的/var/log/message日誌、/var/log/redis/redis.log日誌和/var/log/slapd/slapd.log日誌到syslog-ng服務器端,則須要添加操做:
1)在syslog-ng服務器端(192.168.10.205)須要添加配置:
[root@syslog-ng ~]# vim /etc/syslog-ng/syslog-ng.conf
......
source s_mem {
        udp(ip(0.0.0.0) port(5514));
};

source s_redis {
        udp(ip(0.0.0.0) port(5515));
};

source s_slapd {
        udp(ip(0.0.0.0) port(5516));
};

......
destination d_mem {
        file("/data/syslog-ng/mem.log");
};

destination d_redis {
        file("/data/syslog-ng/redis.log");
};

destination d_slapd {
        file("/data/syslog-ng/slapd.log");
};
......
log { source(s_mem);  destination(d_mem); };
log { source(s_redis);  destination(d_redis); };
log { source(s_slapd);  destination(d_slapd); };

建立日誌存放文件
[root@syslog-ng ~]# touch /data/syslog-ng/mem.log
[root@syslog-ng ~]# touch /data/syslog-ng/redis.log
[root@syslog-ng ~]# touch /data/syslog-ng/slapd.log
[root@syslog-ng ~]# chmod 600 /data/syslog-ng/mem.log 
[root@syslog-ng ~]# chmod 600 /data/syslog-ng/redis.log 
[root@syslog-ng ~]# chmod 600 /data/syslog-ng/slapd.log

重啓syslog-ng服務
[root@syslog-ng ~]# /etc/init.d/syslog-ng restart
Stopping syslog-ng:                                        [  OK  ]
Plugin module not found in 'module-path'; module-path='/lib64/syslog-ng', module='afsql'
Starting syslog-ng: Plugin module not found in 'module-path'; module-path='/lib64/syslog-ng', module='afsql'
                                                           [  OK  ]
[root@syslog-ng ~]# lsof -i:514
COMMAND     PID USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME
syslog-ng 32260 root   10u  IPv4 108534591      0t0  UDP *:syslog 
[root@syslog-ng ~]# lsof -i:5514
COMMAND     PID USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME
syslog-ng 32260 root   11u  IPv4 108534592      0t0  UDP *:5514 
[root@syslog-ng ~]# lsof -i:5515
COMMAND     PID USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME
syslog-ng 32260 root   12u  IPv4 108534593      0t0  UDP *:5515 
[root@syslog-ng ~]# lsof -i:5516
COMMAND     PID USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME
syslog-ng 32260 root   13u  IPv4 108534594      0t0  UDP *:5516

2)在syslog-ng客戶端(192.168.10.206)須要添加配置:
[root@web-node01 ~]# vim /etc/syslog-ng/syslog-ng.conf
......
source s_smem {
         pipe("/data/kevin/mem.pipe");
};

source s_sredis {
         pipe("/data/kevin/redis.pipe");
};

source s_slapd {
         pipe("/data/kevin/slapd.pipe");
};
......
destination d_smem { udp(192.168.10.205 port(5514)); };
destination d_sredis { udp(192.168.10.205 port(5515)); };
destination d_slapd { udp(192.168.10.205 port(5516)); };
......
log { source(s_smem); destination(d_smem); };
log { source(s_sredis); destination(d_sredis); };
log { source(s_slapd); destination(d_slapd); };

建立管道文件
[root@web-node01 ~]# mkfifo /data/kevin/mem.pipe
[root@web-node01 ~]# mkfifo /data/kevin/redis.pipe
[root@web-node01 ~]# mkfifo /data/kevin/slapd.pipe

重啓syslog-ng服務
[root@web-node01 ~]# /etc/init.d/syslog-ng restart
Stopping syslog-ng:                                        [  OK  ]
Plugin module not found in 'module-path'; module-path='/lib64/syslog-ng', module='afsql'
Starting syslog-ng: Plugin module not found in 'module-path'; module-path='/lib64/syslog-ng', module='afsql'
                                                           [  OK  ]
而後進行日誌傳輸
[root@web-node01 ~]# tail -f /var/log/messages >> /data/kevin/mem.pipe &
[root@web-node01 ~]# tail -f /var/log/redis/redis.log >> /data/kevin/redis.pipe &
[root@web-node01 ~]# tail -f /var/log/slapd/slapd.log >> /data/kevin/slapd.pipe &

[root@web-node01 kevin]# ps -ef|grep "tail -f"
root      4296  4295  0 15:53 ?        00:00:00 tail -f /var/log/messages
root      4302 25044  0 15:54 pts/2    00:00:00 tail -f /etc/nginx/logs/access.log
root      4360 25044  0 15:54 pts/2    00:00:00 tail -f /var/log/redis/redis.log
root      4431 25044  0 15:54 pts/2    00:00:00 tail -f /var/log/slapd/slapd.log


3)最後去syslog-ng服務器查看,發現日誌已經成功傳輸過來了!
[root@syslog-ng ~]# ll /data/syslog-ng
total 48
-rw-------. 1 root root  5062 Jul  4 15:54 kevin.log
-rw-------. 1 root root 30279 Jul  4 15:55 mem.log
-rw-------. 1 root root   984 Jul  4 15:54 redis.log
-rw-------. 1 root root  1049 Jul  4 15:54 slapd.log

[root@syslog-ng ~]# tail -f /data/syslog-ng/mem.log          #以下日誌的前面能夠判斷這些日誌是從哪臺客戶機傳過來的(web-node01這是客戶機的主機名)
Jul  4 15:29:59 web-node01 openldap-slave Keepalived_vrrp[2637]: VRRP_Instance(VI_1) ignoring received advertisment...
Jul  4 15:30:01 web-node01 openldap-slave Keepalived_vrrp[2637]: (VI_1): ip address associated with VRID 51 not present in MASTER advert : 192.168.10.208
Jul  4 15:30:01 web-node01 openldap-slave Keepalived_vrrp[2637]: bogus VRRP packet received on eth0 !!!
Jul  4 15:30:01 web-node01 openldap-slave Keepalived_vrrp[2637]: VRRP_Instance(VI_1) ignoring received advertisment...
Jul  4 15:30:07 web-node01 openldap-slave Keepalived_vrrp[2637]: (VI_1): ip address associated with VRID 51 not present in MASTER advert : 192.168.10.208

[root@syslog-ng ~]# tail -f /data/syslog-ng/redis.log 
Jul  4 15:54:19 web-node01 25274:S 07 May 10:37:15.851 * Background append only file rewriting started by pid 25277
Jul  4 15:54:19 web-node01 25274:S 07 May 10:37:15.910 * AOF rewrite child asks to stop sending diffs.
Jul  4 15:54:19 web-node01 25277:C 07 May 10:37:15.910 * Parent agreed to stop sending diffs. Finalizing AOF...
Jul  4 15:54:19 web-node01 25277:C 07 May 10:37:15.910 * Concatenating 0.00 MB of AOF diff received from parent.
Jul  4 15:54:19 web-node01 25277:C 07 May 10:37:15.910 * SYNC append only file rewrite performed
Jul  4 15:54:19 web-node01 25277:C 07 May 10:37:15.910 * AOF rewrite: 6 MB of memory used by copy-on-write

[root@syslog-ng syslog-ng]# tail -f slapd.log 
May 22 16:20:13 web-node01 openldap-slave slapd[30022]: conn=1017 op=1 SRCH base="dc=kevin,dc=com" scope=2 deref=0 filter="(objectClass=*)"
May 22 16:20:13 web-node01 openldap-slave slapd[30022]: conn=1017 op=1 SRCH attr=* +
May 22 16:38:00 web-node01 openldap-slave slapd[30022]: conn=1018 fd=24 ACCEPT from IP=[::1]:60196 (IP=[::]:389)
May 22 16:38:00 web-node01 openldap-slave slapd[30022]: conn=1018 op=0 BIND dn="cn=Manager,dc=kevin,dc=com" method=128
May 22 16:38:00 web-node01 openldap-slave slapd[30022]: conn=1018 op=0 BIND dn="cn=Manager,dc=kevin,dc=com" mech=SIMPLE ssf=0

=======================舒適提示========================
在將客戶機日誌傳輸到遠程syslog-ng服務器上後,爲了方便查看日誌是出於哪臺客戶機,須要在日誌傳輸過程當中進行打上標記。node

好比在上面客戶機傳輸nginx日誌時打上標記,好比:
1)若是標記爲web-node01-nginx.log,作法爲:
在客戶機上先建立管道文件,接着重啓syslo-ng服務,而後再打標記,最後進行文件傳輸
[root@web-node01 ~]# mkfifo /data/kevin/log.pipe
[root@web-node01 ~]# /etc/init.d/syslog-ng start
[root@web-node01 ~]# sed -ri 's/(^.)/web-node01-nginx.log--\1/' /etc/nginx/logs/access.log 
[root@web-node01 ~]# tail -f /etc/nginx/logs/access.log >> /data/kevin/log.pipe &

查看客戶機的/etc/nginx/logs/access.log日誌,發現標記已經打上了
[root@web-node01 ~]# tail -f /etc/nginx/logs/access.log 
web-node01-nginx.log--172.16.42.183 - [04/Jul/2018:16:52:10 +0800] "GET /a.txt HTTP/1.1" 200 1136 "-" Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 - 0.000 - - -
web-node01-nginx.log--172.16.42.183 - [04/Jul/2018:16:52:10 +0800] "GET /favicon.ico HTTP/1.1" 404 571 "http://192.168.10.206:8080/a.txt" Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 - 0.000 - - -
web-node01-nginx.log--172.16.42.183 - [04/Jul/2018:16:52:10 +0800] "GET /a.txt HTTP/1.1" 200 1136 "-" Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 - 0.000 - - -

而後去syslong-ng服務器端,查看傳輸過來的nginx日誌,發現也打上了標記
[root@syslog-ng ~]# tail -f /data/syslog-ng/kevin.log
Jul  4 17:47:27 web-node01 web-node01-nginx.log--172.16.42.183 - [04/Jul/2018:16:52:10 +0800] "GET /a.txt HTTP/1.1" 200 1136 "-" Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 - 0.000 - - -
Jul  4 17:47:27 web-node01 web-node01-nginx.log--172.16.42.183 - [04/Jul/2018:16:52:10 +0800] "GET /favicon.ico HTTP/1.1" 404 571 "http://192.168.10.206:8080/a.txt" Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 - 0.000 - - -
Jul  4 17:47:27 web-node01 web-node01-nginx.log--172.16.42.183 - [04/Jul/2018:16:52:10 +0800] "GET /a.txt HTTP/1.1" 200 1136 "-" Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 - 0.000 - - -

2)標記爲kevin-test-haha,作法爲:
[root@web-node01 ~]# sed -ri 's/(^.)/kevin-test-haha--\1/' /etc/nginx/logs/access.log 
[root@web-node01 ~]# tail -f /etc/nginx/logs/access.log >> /data/kevin/log.pipe &

查看客戶機的/etc/nginx/logs/access.log日誌,發現標記已經打上了
[root@web-node01 ~]# tail -f /etc/nginx/logs/access.log 
kevin-test-haha--172.16.42.183 - [04/Jul/2018:16:54:22 +0800] "GET /a.txt HTTP/1.1" 304 0 "-" Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 - 0.000 - - -
kevin-test-haha--172.16.42.183 - [04/Jul/2018:16:54:23 +0800] "GET /a.txt HTTP/1.1" 304 0 "-" Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 - 0.000 - - -
kevin-test-haha--172.16.42.183 - [04/Jul/2018:17:50:43 +0800] "GET /a.txt HTTP/1.1" 304 0 "-" Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 - 0.000 - - -

而後去syslong-ng服務器端,查看傳輸過來的nginx日誌,發現也打上了標記
[root@syslog-ng ~]# tail -f /data/syslog-ng/kevin.log
Jul  4 17:54:03 web-node01 kevin-test-haha--172.16.42.183 - [04/Jul/2018:16:54:22 +0800] "GET /a.txt HTTP/1.1" 304 0 "-" Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 - 0.000 - - -
Jul  4 17:54:03 web-node01 kevin-test-haha--172.16.42.183 - [04/Jul/2018:16:54:23 +0800] "GET /a.txt HTTP/1.1" 304 0 "-" Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 - 0.000 - - -
Jul  4 17:54:03 web-node01 kevin-test-haha--172.16.42.183 - [04/Jul/2018:17:50:43 +0800] "GET /a.txt HTTP/1.1" 304 0 "-" Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 - 0.000 - - -

3)其餘日誌打標記,作法和上面相似。
   注意:最好不要打屢次標記,不然日誌裏就會顯示屢次標記!

=====================補充擴展:syslog-ng知識詳解====================mysql

1、syslog-ng設計原則
syslog-ng替代syslog是基於如下的設計原則的:
- 經過正規表達式協助,除支持原facility/level方式,還支持內容過濾等以創建更好的消息過濾機制;
- 支持主機鏈,即便日誌消息通過多重網絡轉發,仍可找到原發出主機的信息和整個消息鏈;
- 支持強大的自定義配置,而且清晰、明瞭。

2、syslog-ng架構
syslog-ng的配置基於下面的架構:
LOG STATEMENTS  『SOURCES - FILTERS -   DESTINATIONS』
消息路徑         『消息源  - 過濾器   -   目的站』

也就是說,經過定義多個消息源,把匹配上若干個過濾器的消息導向到指定的目的地,從而組成一個消息路徑。

3、配置參數
1)消息源SOURCES
定義格式爲:
source { sourcedriverparams; sourcedriverparams; ... };

含義:一個消息源的標識
sourcedriver:消息源驅動器,能夠支持若干參數,並使用分號「;」隔離多個消息源驅動器

消息源驅動器有:
file (filename) :從指定的文件讀取日誌信息
unix-dgram  (filename) :打開指定的SOCK_DGRAM模式的unix套接字,接收日誌消息
unix-stream (filename) :打開指定的SOCK_STREAM模式的unix套接字,接收日誌消息
udp ( (ip),(port) ) :在指定的UDP端口接收日誌消息
tcp ( (ip),(port) ) :在指定的TCP端口接收日誌消息
sun-streams (filename) :在solaris系統中,打開一個(多個)指定的STREAM設備,從其中讀取日誌消息
internal() : syslog-ng內部產生的消息
pipe(filename),fifo(filename) :從指定的管道或者FIFO設備,讀取日誌信息

例如:
source s_sys {
   file ("/proc/kmsg" log_prefix("kernel: "));
   unix-stream ("/dev/log");
   internal();
   # udp(ip(0.0.0.0) port(514));     #若是取消註釋,則能夠從udp的514端口獲取消息
};

注意:
linux使用/dev/log做爲SOCK_STREAM unix的套接字,BSD使用/var/run/log;參數須要使用括號括住。

2)過濾器 FILTERS
定義格式爲:
filter { expression; };

含義:一個過濾器標識
expression:表達式

表達式支持:
邏輯操做符:and(和)、or(或)、not(非);
函數:可以使用正規表達式描述內容

過濾函數有:
引用
facility(,):根據facility(設備)選擇日誌消息,使用逗號分割多個facility
level(,):根據level(優先級)選擇日誌消息,使用逗號分割多個level,或使用「..」表示一個範圍
program(regexp):日誌消息的程序名是否匹配一個正則表達式
host(regexp):日誌消息的主機名是否和一個正則表達式匹配
match(regexp):對日誌消息的內容進行正則匹配
filter():調用另外一條過濾規則並判斷它的值

例如:
filter f_filter2   { level(info..emerg) and
                    not facility(mail,authpriv,cron); };

注意:
這裏的level定義info,至關於syslog的.=info,並不包括更低的等級;
若須要包括更低的等級,請使用「..」表示一個等級範圍;
另外,filter(DEFAULT),用於捕獲全部沒有匹配上的日誌消息。filter(*)是無效的。

3)目的地DESTINATIONS
定義格式爲:
destination { destdriverparams; destdriverparams;  ...  ;};

含義:一個目的地的標識
destdriver:目的地驅動器

目的地驅動器有:
file (filename) :把日誌消息寫入指定的文件
unix-dgram  (filename) :把日誌消息寫入指定的SOCK_DGRAM模式的unix套接字
unix-stream (filename) :把日誌消息寫入指定的SOCK_STREAM模式的unix套接字
udp  (ip),(port) :把日誌消息發送到指定的UDP端口
tcp (ip),(port) :把日誌消息發送到指定的TCP端口
usertty(username) :把日誌消息發送到已經登錄的指定用戶終端窗口
pipe(filename),fifo(filename) :把日誌消息發送到指定的管道或者FIFO設備
program(parm) :啓動指定的程序,並把日誌消息發送到該進程的標準輸入


舉例:
destination d_mesg { file("/var/log/messages"); };
destination d_syslog { udp ("192.168.228.225" port(514)); };

注意:
配合使用udp或tcp便可實現集中的日誌服務器。注意,udp函數的寫法上和消息源驅動器中的定義不一樣。

4)消息路徑LOG STATEMENTS
定義格式爲:
log  { source S1; source S2; ... filter F1; filter F2; ... destination
      D1; destination D2; ... };

把消息源、過濾器、消息目的組合起來就造成一條完整的指令。日誌路徑中的成員是順序執行的。凡是來源於指定的消息源,匹配全部指定的過濾器,並送到指定的地址。

注意:
一樣的,每條日誌消息都會通過全部的消息路徑,並非匹配後就再也不往下執行的,請留意。

4、選項參數
除了上述的消息路徑定義外,syslog-ng還能夠設定一些選項參數以優化其操做。
全局的選項參數,定義在配置文件的開頭位置(yum install -y man):
# man syslog-ng.conf
# man 8 syslog-ng

options { opt1; opt2; ... };
選項有:
chain_hostnames(yes|no) :是否打開主機名鏈功能,打開後可在多網絡段轉發日誌時有效
long_hostnames(yes|no) : 是chain_hostnames的別名,已不建議使用
keep_hostname(yes|no) :  是否保留日誌消息中保存的主機名稱,否時,老是使用來源主機來做重寫日誌的主機名
use_dns(yes|no) :  是否打開DNS查詢功能,應使用防火牆保護使用syslog-ng的節點安全,並確認全部主機都是能夠經過dns解釋的,不然請關閉該選項。
use_fqdn(yes|no) :  是否使用完整的域名
check_hostname(yes|no) :  是否檢查主機名有沒有包含不合法的字符
bad_hostname(regexp) :  可經過正規表達式指定某主機的信息不被接受
dns_cache(yes|no) :  是否打開DNS緩存功能
dns_cache_expire(n) :  DNS緩存功能打開時,一個成功緩存的過時時間
dns_cache_expire_failed(n) :  DNS緩存功能打開時,一個失敗緩存的過時時間
dns_cache_size(n) :  DNS緩存保留的主機名數量
create_dirs(yes|no) :  當指定的目標目錄不存在時,是否建立該目錄
dir_owner(uid) :  目錄的UID
dir_group(gid) :  目錄的GID
dir_perm(perm) :  目錄的權限,使用八進制方式標註,例如0644
owner(uid) :  文件的UID
group(gid) :  文件的GID
perm(perm) :  文件的權限,一樣,使用八進制方式標註
gc_busy_threshold(n) : 當syslog-ng忙時,其進入垃圾信息收集狀態的時間。一旦分派的對象達到這個數字,syslog-ng就啓動垃圾信息收集狀態。默認值是:3000。
gc_idle_threshold(n) : 當syslog-ng空閒時,其進入垃圾信息收集狀態的時間。一旦被分派的對象到達這個數字,syslog-ng就會啓動垃圾信息收集狀態,默認值是:100
log_fifo_size(n) : 輸出隊列的行數
log_msg_size(n) : 消息日誌的最大值(bytes)
mark(n) : 多少時間(秒)寫入兩行MARK信息供參考,目前沒有實現
stats(n) : 多少時間(秒)寫入兩行STATUS信息供,默認值是:600
sync(n) : 緩存多少行的信息再寫入文件中,0爲不緩存,局部參數能夠覆蓋該值。
time_reap(n) : 在沒有消息前,到達多少秒,即關閉該文件的鏈接
time_reopen(n) : 對於死鏈接,到達多少秒,會從新鏈接
use_time_recvd(yes|no) : 宏產生的時間是使用接受到的時間,仍是日誌中記錄的時間;建議使用R_的宏代替接收時間,S_的宏代替日誌記錄的時間,而不要依靠該值定義。

例如:
options {
   sync (0);
   time_reopen (10);
   log_fifo_size (1000);
   long_hostnames (off);
   use_dns (no);
   use_fqdn (no);
   create_dirs (no);
   keep_hostname (yes);
};

5、部分函數的參數
syslog-ng除了有全局選項參數外,不一樣的函數還能夠定義其參數,其中包括:

1)擴展file的宏
HOST: 日誌消息的源發主機名。若是日誌消息穿過幾個主機,而且chain_hostname()功能已經打開,就使用第一個主機名。
FACILITY : 日誌消息來自的日誌設備
PRIOPRITY/LEVEL : 日誌消息的優先級
PROGRAM : 發送日誌消息的程序
YEAR : 發送日誌消息的年份,這個宏既能夠指定日誌消息送出的時間,也能夠指定日誌消息收到的時間。這由use_time_recvd()選項控制
MONTH : 發送日誌消息的月份
DAY : 發送日誌消息的日子
HOUR : 小時
MIN : 分鐘
SEC : 秒

2)file的參數
例如:log_file_size()、sync()、owner()、perm()等,請參考上面的全局設定

3)tcp和upd的參數
ip(xxx.xxx.xxx.xxx):定義綁定的IP地址
port(n):定義綁定的端口
max-connections(n):定義最大鏈接數

注意:
TCP基於鏈接方式傳輸,不會形成日誌丟失,而UDP則不一樣。但由於傳統的syslog基於UDP的514端口,因此,UDP方式也常常會使用到。
另外,514也是rshell的默認端口,請注意衝突。

舉例:
destination d_mail { file("/var/log/maillog" sync(10)); };

這裏定義的sync(10)會覆蓋全局配置,表示若寫入的日誌數量達到10,才寫入maillog文件。

6、關於垃圾收集狀態
當知足必定的條件,syslog-ng即會進入垃圾收集狀態,而暫時再也不接受日誌信息。這時,會形成非鏈接的傳輸協議的日誌丟失(例如UDP)。

選項能夠控制:
gc_idle_threshold(n) :
意思是,一旦被分派的對象到達這個數字,而且當 syslog-ng空閒時(100微秒內沒有日誌消息到達)。此時,syslog-ng就會啓動垃圾信息收集狀態。
已分配的對象可經過-v命令行參數指定其的最小值。而syslog-ng這個值應該比較小,但比已分配的對象要大便可。

例如,空閒狀態,syslog-ng會顯示:
Nov 13 16:35:35 syslogng syslog-ng[4510]: STATS: dropped 0
Nov 13 16:45:35 syslogng syslog-ng[4510]: STATS: dropped 0

當忙時:
gc_busy_threshold(n) :當syslog-ng忙時,一旦分派的對象達到這個數字,syslog-ng就進入垃圾信息收集狀態的時間。該值應該比較高,以保證正常狀況下不會打斷日誌消息的收取。
相關文章
相關標籤/搜索