阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Linux下syslog-ng日志集中管理服务部署记录

463次阅读
没有评论

共计 20023 个字符,预计需要花费 51 分钟才能阅读完成。

syslog 是 Linux 系统默认的日志守护进程,默认的 syslog 配置文件是 /etc/syslog.conf 文件。syslog 守护进程是可配置的,它允许人们为每一种类型的系统信息精确地指定一个存放地点。比较 syslog,syslog-ng 具有众多高级的功能:更好的网络支持,更加方便的配置,集中式的网络日志存储,并且更具有弹性。比如,使用 syslogd 时,所有的 iptables 日志与其他内核日志一起全部存储到了 kern.log 文件里。Syslog-ng 则可以让你有选择性的将 iptables 部分分出到另外的日志文件中。Syslogd 仅能使用 UDP 协议,Syslog-ng 可以使用 UDP 和 TCP 协议。所以我们可以在加密的网络隧道中传输日志到集中日志服务器。

syslog-ng 的一个设计原则就是 建立更好的消息过滤粒度。syslog-ng 能够进行基于内容和优先权 /facility 的过滤。另一个设计原则是更容易进行不同防火墙网段的信息转发,它支持主机链,即使日志消息经过了许多计算机的转发,也可以找出原发主机地址和整个转发链。最后的一个设计原则就是尽量使配置文件强大和简洁。syslog-ng 作为 syslog 的替代工具,可以完全替代 syslog 的服务,并且通过定义规则,实现更好的过滤功能。之前介绍了 Linux 下 rsyslog 日志收集服务环境部署记录,下面简单介绍下 syslog-ng 日志集中管理服务部署记录:

下面部署实例目的:
实现接收远程客户端服务日志(nginx、MySQL、php、apache)保存在本地一台日志服务器上提供查看。
即远程客户机采用 syslog-ng 将其日志通过管道 pipe 传送到本地的日志服务器上进行查看。
 
一、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】
==============================================================================================
 
二、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]
 
三、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,多配置的时候,可以用比如 5514、5515、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 服务器上后,为了方便查看日志是出于哪台客户机,需要在日志传输过程中进行打上标记。

比如在上面客户机传输 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 知识详解====================

一、syslog-ng 设计原则
syslog-ng 替代 syslog 是基于以下的设计原则的:
– 通过正规表达式协助,除支持原 facility/level 方式,还支持内容过滤等以建立更好的消息过滤机制;
– 支持主机链,即使日志消息经过多重网络转发,仍可找到原发出主机的信息和整个消息链;
– 支持强大的自定义配置,并且清晰、明了。
 
二、syslog-ng 架构
syslog-ng 的配置基于下面的架构:
LOG STATEMENTS『SOURCES - FILTERS -  DESTINATIONS』
消息路径『消息源  - 过滤器  -  目的站』
 
也就是说,通过定义多个消息源,把匹配上若干个过滤器的消息导向到指定的目的地,从而组成一个消息路径。
 
三、配置参数
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; … };
 
把消息源、过滤器、消息目的组合起来就形成一条完整的指令。日志路径中的成员是顺序执行的。凡是来源于指定的消息源,匹配所有指定的过滤器,并送到指定的地址。
 
注意:
同样的,每条日志消息都会经过所有的消息路径,并不是匹配后就不再往下执行的,请留意。
 
四、选项参数
除了上述的消息路径定义外,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);
};
 
五、部分函数的参数
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 文件。
 
六、关于垃圾收集状态
当满足一定的条件,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 就进入垃圾信息收集状态的时间。该值应该比较高,以保证正常情况下不会打断日志消息的收取。

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计20023字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7982838
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...
手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...
浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍 前言 在 AI 自动化快速发展的当下,浏览器早已不再只是...
星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛 NAS-12:开源笔记的进化之路,效率玩家的新选择 前言 如何高效管理知识与笔记,已经成为技术...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...
星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的 NAS 中! 大家对「数据安全感」的需求越来越高 ...
恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击 PHP-FPM(FastCGl Process M...
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...
浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍 前言 在 AI 自动化快速发展的当下,浏览器早已不再只是...