syslog-ng实践
一、数据流图
二、基本流程
1、syslog-ng-agent 在节点端生成fifo文件(Xapp.log)。 2、app生成log内容写入到指定的文件(Xapp.log)中。 3、syslog-ng-agent实时的读取日志文件(Xapp.log),并根据定义的规则将文件中的内容进行解析和过滤。 4、syslog-ng-agent会将解析和过滤的文件按照配置存储规则发送到本地和远端center指定位置生成文件存储。
三、安装syslog-ng
1、所需下载文件
syslog-ng-3.8.1.tar.gz eventlog-0.2.13.tar.gz
下载地址链接:https://pan.baidu.com/s/1xVtvC0Qu_TyTEevXxqK4_Q 提取码:z5td
将下载的文件存放在 /usr/local/src/
2、开始安装
安装其他依赖软件包 yum install libesmtp libesmtp-devel yum install libgnomeui-devel yum install pcre pcre-devel yum install json-c json-c-devel 安装eventlog cd /usr/local/src/ tar -zxvf eventlog-0.2.13.tar.gz cd eventlog-0.2.13 ./configure --prefix=/usr/local/eventlog-0.2.13 make && make install ln -s /usr/local/eventlog-0.2.13 /usr/local/eventlog export PKG_CONFIG_PATH=/usr/local/eventlog/lib/pkgconfig/ 安装 syslog-ng tar -zxvf syslog-ng-3.8.1.tar.gz cd syslog-ng-3.8.1 ./configure --prefix=/usr/local/syslog-ng-3.8.1 --enable-ssl --enable-smtp --enable-pcre --enable-json make && make install ln -s /usr/local/syslog-ng-3.8.1 /usr/local/syslog-ng
四、配置syslog-ng-center
1、下载参考配置文件,(仅是用于参考使用)
链接:https://pan.baidu.com/s/1l-_jvCgI4d2jTkWfkUYyww 提取码:2dmg
2、参考内容
tree . ├── conf │ ├── history-center.conf │ ├── history-cmd.conf │ ├── internal.conf │ ├── local.conf │ ├── nginx-center.conf │ ├── nginx.conf │ ├── project-center.conf │ └── project.conf ├── global.conf ├── include ├── init.sh ├── patterndb.d │ └── nginx.xml ├── scl.conf ├── syslog-ng ├── syslog-ng.conf ├── syslog-ng.logrotate ├── syslog-ng.logrotate.V6 ├── syslog-ng.logrotate.V7 ├── syslog-ng.rsyslog └── syslog-ng.service 3 directories, 19 files
3、相关说明
conf 目录下的文件如 history-center.conf 指定开启命令执行的收集 history 指定center和本地的位置以及过滤和解析 patterndb.d 目录下文件 nginx.xml 是用于nginx日志的解析使用 syslog-ng.con 配置加载conf 目录中的配置文件 安装启停脚本 # ./init.sh install 是安装syslog-ng启停服务和指定conf的配置文件
4、本参考文件 开启nginx 的center解析。
egrep -v '^#|^$' syslog-ng.conf @version: 3.8 include "global.conf"; include "conf/nginx-center.conf"; include "include/*.conf"; ./init.sh install syslog-ng install Created symlink from /etc/systemd/system/multi-user.target.wants/syslog-ng.service to /etc/systemd/system/syslog-ng.service
nginx-center.conf文件内容
## nginx logs template nginx_format_center { template("$PROGRAM $MSG $SOURCEIP "); template_escape(no); }; parser nginx_center { db_parser(file("/home/server_config/syslog-ng/patterndb.d/nginx.xml")); }; include "include/*.ngxc"; source s_nginx_access_center { tcp(ip(0.0.0.0) port(51451) max-connections(10240) log_iw_size(1024000) keep_hostname(no)); }; destination d_nginx_access_center {file("/home/logs/logcenter/nginx/${N.vhost}/$YEAR/$MONTH/$DAY/access_$HOUR.log" perm(0644) dir_perm(0755) create_dirs(yes) template(nginx_format_center));}; log {source(s_nginx_access_center);parser(nginx_center);destination(d_nginx_access_center);flags(final);}; source s_nginx_error_center { tcp(ip(0.0.0.0) port(51452) max-connections(10240) log_iw_size(1024000) keep_hostname(no));}; destination p_nginx_error_center {file("/home/logs/logcenter/nginx/${N.vhost}/$YEAR/$MONTH/$DAY/error_$HOUR.log" perm(0644) dir_perm(0755) create_dirs(yes) template(nginx_format_center));}; destination d_nginx_error_center {file("/home/logs/logcenter/nginx/$YEAR/$MONTH/$DAY/error_$HOUR.log" perm(0644) dir_perm(0755) create_dirs(yes) template(nginx_format_center));}; log {source(s_nginx_error_center);parser(nginx_center);destination(p_nginx_error_center);destination(d_nginx_error_center);flags(final);};
nginx.xml文件内容
<?xml version='1.0' encoding='UTF-8'?> <patterndb version="4" pub_date="2014-03-13"> <ruleset name="Nginx log"> <rules> <rule id="nginx_access" provider="lucky"> <description>Nginx / Http Access Log /</description> <patterns> <pattern>@ESTRING:N.identd: @@ESTRING:N.username: @@QSTRING:N.timestamp:[]@ @QSTRING:N.query:"@ @NUMBER:N.statusCode@ @NUMBER:N.bytesOut@ @QSTRING:N.referer:"@ @QSTRING:N.requestClientApplication:"@ @QSTRING:N.forwardedfor:"@ "@HOSTNAME:N.vhost@" @QSTRING:N.vport:"@@ANYSTRING@</pattern> </patterns> <values> </values> <examples> <example> <test_message>- - [13/Mar/2014:15:32:05 +0800] "GET /favicon.ico HTTP/1.1" 200 99999 "http://www.hw801.com/" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)" "-" "www.hw801.com" "80" 0.000</test_message> <test_values> <test_value name="N.identd">-</test_value> <test_value name="N.username">-</test_value> <test_value name="N.timestamp">13/Mar/2014:15:32:05 +0800</test_value> <test_value name="N.query">GET /favicon.ico HTTP/1.1</test_value> <test_value name="N.statusCode">200</test_value> <test_value name="N.bytesOut">99999</test_value> <test_value name="N.referer">http://www.hw801.com/</test_value> <test_value name="N.requestClientApplication">Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)</test_value> <test_value name="N.forwardedfor">-</test_value> <test_value name="N.vhost">www.hw801.com</test_value> <test_value name="N.vport">80</test_value> </test_values> </example> </examples> </rule> <rule id="nginx_error" provider="hw801"> <description>Nginx / Http error Log /</description> <patterns> <pattern>@ESTRING::,@ @ESTRING::,@ server: @ESTRING:N.vhost:,@@ANYSTRING@</pattern> </patterns> <values> </values> </rule> </rules> </ruleset> </patterndb>
5、启动syslog-ng-center
systemctl start syslog-ng.service
6、查看syslog-ng nginx的center接收端口是否开启
netstat -natp|grep 51451 tcp 0 0 0.0.0.0:51451 0.0.0.0:* LISTEN 31111/syslog-ng
五、配置syslog-ng-anent
过程同配置syslog-ng-center中1、2、3 相同
1、下载参考配置文件,(仅是用于参考使用)
链接:https://pan.baidu.com/s/1l-_jvCgI4d2jTkWfkUYyww 提取码:2dmg
2、参考内容
tree . ├── conf │ ├── history-center.conf │ ├── history-cmd.conf │ ├── internal.conf │ ├── local.conf │ ├── nginx-center.conf │ ├── nginx.conf │ ├── project-center.conf │ └── project.conf ├── global.conf ├── include ├── init.sh ├── patterndb.d │ └── nginx.xml ├── scl.conf ├── syslog-ng ├── syslog-ng.conf ├── syslog-ng.logrotate ├── syslog-ng.logrotate.V6 ├── syslog-ng.logrotate.V7 ├── syslog-ng.rsyslog └── syslog-ng.service 3 directories, 19 files
3、相关说明
conf 目录下的文件如 history-center.conf 指定开启命令执行的收集 history 指定center和本地的位置以及过滤和解析 patterndb.d 目录下文件 nginx.xml 是用于nginx日志的解析使用 syslog-ng.con 配置加载conf 目录中的配置文件 安装启停脚本 # ./init.sh install 是安装syslog-ng启停服务和指定conf的配置文件
4、本参考文件 开启nginx 的解析。
egrep -v '^#|^$' syslog-ng.conf @version: 3.8 include "global.conf"; include "conf/nginx.conf"; include "include/*.conf"; ./init.sh install syslog-ng install Created symlink from /etc/systemd/system/multi-user.target.wants/syslog-ng.service to /etc/systemd/system/syslog-ng.service
nginx.conf文件内容,192.168.1.200 为center的地址,51451端口是center的端口。hw801是match的域名。
## nginx logs template nginx_format { template("$PROGRAM $MSG "); template_escape(no); }; parser nginx { db_parser(file("/home/server_config/syslog-ng/patterndb.d/nginx.xml")); }; include "include/*.ngx"; source s_nginx_access { #file("/home/logs/nginx/access_log" follow_freq(1)); pipe("/home/logs/nginx/access_log"); }; destination d_nginx_access_local {file("/home/logs/nginx/${N.vhost}/$YEAR/$MONTH/$DAY/access_$HOUR.log" perm(0644) dir_perm(0755) create_dirs(yes) template(nginx_format));}; destination d_nginx_access_remote {tcp('192.168.1.200' port(51451));}; filter f_nginx_access {match(".hw801.(com|net|cn|org|com.cn|net.cn)$" value("N.vhost"));}; log {source(s_nginx_access);parser(nginx);filter(f_nginx_access);destination(d_nginx_access_local);dest ination(d_nginx_access_remote);flags(final);}; destination d_nginx_oth_access {file("/home/logs/nginx/$YEAR/$MONTH/$DAY/access_$HOUR.log" perm(0644) dir_perm(0755) create_dirs(yes) template(nginx_format));}; log {source(s_nginx_access);destination(d_nginx_oth_access);flags(final);}; source s_nginx_error { #file("/home/logs/nginx/error_log" follow_freq(1)); pipe("/home/logs/nginx/error_log"); }; destination p_nginx_error_local {file("/home/logs/nginx/${N.vhost}/$YEAR/$MONTH/$DAY/error_$HOUR.log" perm(0644) dir_perm(0755) create_dirs(yes) template(nginx_format));}; destination d_nginx_error_local {file("/home/logs/nginx/$YEAR/$MONTH/$DAY/error_$HOUR.log" perm(0644) dir_perm(0755) create_dirs(yes) template(nginx_format));}; destination d_nginx_error_remote {tcp('192.168.1.200' port(51452));} ; filter f_nginx_error {match(".hw801.(com|net|cn|org|com.cn|net.cn)$" value("N.vhost"));}; log {source(s_nginx_error);parser(nginx);filter(f_nginx_error);destination(p_nginx_error_local);destination(d_nginx_error_local);destination(d_nginx_error_remote);flags(final);};
nginx.xml文件内容
<?xml version='1.0' encoding='UTF-8'?> <patterndb version="4" pub_date="2014-03-13"> <ruleset name="Nginx log"> <rules> <rule id="nginx_access" provider="lucky"> <description>Nginx / Http Access Log /</description> <patterns> <pattern>@ESTRING:N.identd: @@ESTRING:N.username: @@QSTRING:N.timestamp:[]@ @QSTRING:N.query:"@ @NUMBER:N.statusCode@ @NUMBER:N.bytesOut@ @QSTRING:N.referer:"@ @QSTRING:N.requestClientApplication:"@ @QSTRING:N.forwardedfor:"@ "@HOSTNAME:N.vhost@" @QSTRING:N.vport:"@@ANYSTRING@</pattern> </patterns> <values> </values> <examples> <example> <test_message>- - [13/Mar/2014:15:32:05 +0800] "GET /favicon.ico HTTP/1.1" 200 99999 "http://www.hw801.com/" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)" "-" "www.hw801.com" "80" 0.000</test_message> <test_values> <test_value name="N.identd">-</test_value> <test_value name="N.username">-</test_value> <test_value name="N.timestamp">13/Mar/2014:15:32:05 +0800</test_value> <test_value name="N.query">GET /favicon.ico HTTP/1.1</test_value> <test_value name="N.statusCode">200</test_value> <test_value name="N.bytesOut">99999</test_value> <test_value name="N.referer">http://www.hw801.com/</test_value> <test_value name="N.requestClientApplication">Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)</test_value> <test_value name="N.forwardedfor">-</test_value> <test_value name="N.vhost">www.hw801.com</test_value> <test_value name="N.vport">80</test_value> </test_values> </example> </examples> </rule> <rule id="nginx_error" provider="hw801"> <description>Nginx / Http error Log /</description> <patterns> <pattern>@ESTRING::,@ @ESTRING::,@ server: @ESTRING:N.vhost:,@@ANYSTRING@</pattern> </patterns> <values> </values> </rule> </rules> </ruleset> </patterndb>
5、启动syslog-ng-agent
systemctl start syslog-ng.service
6、查看syslog-ng nginx是否开启
ps -ef|grep syslog-ng|grep -v grep root 31111 1 0 16:55 ? 00:00:00 /usr/local/syslog-ng/sbin/syslog-ng -F -p /var/run/syslog-ng.pid
7、查看是否生成nginx的fifo文件
ll /home/logs/nginx/ total 2 prw------- 1 root root 0 Aug 7 17:12 access_log prw------- 1 root root 0 Jun 22 19:00 error_log
六、配置nginx
1、配置nginx的日志格式和日志路径,日志路径为上面的fifo文件
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" ' '"$host" "$server_port" $request_time'; access_log /home/logs/nginx/access_log main; error_log /home/logs/nginx/error_log;
2、启动nginx,后访问nginx即可获取到日志信息。
值得注意的地方:
1、访问如果上syslog-ng.conf中匹配到的域名,会依据匹配规则在本地和center生成对应目录及按照小时切割日志内容。
2、若没有匹配到规则,会在本地和center的生成没有匹配到的目录,同样也是按照小时切割的日志内容。
3、syslog-ng-agent可以部署到多台服务器上,指定同一个center即可。
至此我们实现了app.log的收集到center中。
下一次,在写下 center的日志如何收集到es中。