logstash通过rsyslog对nginx的日志收集和分析

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

logstash通过rsyslog对nginx的日志收集和分析

http://bbotte.blog.51cto.com/6205307/1613571 logstash&elasticsearch&kibana的安装和配置

http://bbotte.blog.51cto.com/6205307/1614453  这一篇文章里面是以nginx打补丁的方式实现rsyslog把nginx的日志同步到logstash做分析,不过线上环境种种不一样,下面是把nginx的日志直接通过rsyslog同步到logstash服务器上,不用对nginx做更改,相对来说更简单明了。

nginx服务器端

nginx的配置文件不用改动,例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[root@db2 ~] # grep -v ^.*# /usr/local/nginx/conf/nginx.conf|sed '/^$/d'
worker_processes  1;
events {
     worker_connections  1024;
}
http {
     include       mime.types;
     default_type  application /octet-stream ;
     log_format  main   '$remote_addr - $remote_user [$time_local] "$request" '
                       '$status $body_bytes_sent "$http_referer" '
                       '"$http_user_agent" "$http_x_forwarded_for"' ;
     sendfile        on;
     keepalive_timeout  65;
     server {
         listen       80;
         server_name  localhost;
index index.html;                                     #默认配置,修改了下面几行
root  /var/www ;
access_log  /var/log/nginx/access .log main;
error_log  /var/log/nginx/error .log;
         error_page   500 502 503 504   /50x .html;
         location =  /50x .html {
             root   html;
         }
     }
}

rsyslog的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[root@db2 ~] # grep -v ^# /etc/rsyslog.conf|sed '/^$/d'
$ModLoad imuxsock  # provides support for local system logging (e.g. via logger command)
$ModLoad imklog    # provides kernel logging support (previously done by rklogd)
$ModLoad imfile    # imfile模块必须启用 Load the imfile input module 
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$IncludeConfig  /etc/rsyslog .d/*.conf
*.info;mail.none;authpriv.none; cron .none                 /var/log/messages
authpriv.*                                               /var/log/secure
mail.*                                                  - /var/log/maillog
cron .*                                                   /var/log/cron
*.emerg                                                 *
uucp,news.crit                                           /var/log/spooler
local7.*                                                 /var/log/boot .log
#下面是nginx的设置
$InputFileName  /var/log/nginx/error .log
$InputFileTag kibana-nginx-errorlog:
$InputFileStateFile state-kibana-nginx-errorlog
$InputRunFileMonitor
$InputFileName  /var/log/nginx/access .log
$InputFileTag kibana-nginx-accesslog:
$InputFileStateFile state-kibana-nginx-accesslog
$InputRunFileMonitor
$InputFilePollInterval 10                  #等待10秒钟发送一次
if  $programname ==  'kibana-nginx-errorlog'  then  @192.168.10.1:514
if  $programname ==  'kibana-nginx-errorlog'  then  ~
if  $programname ==  'kibana-nginx-accesslog'  then  @192.168.10.1:514
if  $programname ==  'kibana-nginx-accesslog'  then  ~
*.* @192.168.10.1:514

配置说明:

$InputFileTag定义的NAME必须唯一,同一台主机上不同的应用应当使用不同的NAME,否则会导致新定义的TAG不生效;

$InputFileStateFile定义的StateFile必须唯一,它被rsyslog用于记录文件上传进度,否则会导致混乱;


@192.168.10.1:514用于指定接收日志的服务器域名或者主机名;

有需要的话,$InputFileSeverity info 也添加上


再把rsyslog服务重启

1
2
3
[root@db2 ~] # service rsyslog restart
Shutting down system logger:                               [  OK  ]
Starting system logger:                                    [  OK  ]

现在nginx的日志,已经同步到logstash服务器的/var/log/messages,如下图

wKiom1TuxnSzHoFiAAr9mfojxVU826.jpg


logstash.conf 配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
input {
  file  {
     type  =>  "syslog"
#    path => [ "/var/log/*.log", "/var/log/messages", "/var/log/syslog" ]
     path => [  "/var/log/messages"  ]
     sincedb_path =>  "/var/sincedb"
   }
   redis {
     host =>  "192.168.10.1"
     type  =>  "redis-input"
     data_type =>  "list"
     key =>  "logstash"
   }
   syslog {
     type  =>  "syslog"
     port =>  "5544"
   }
}
 
filter {
   grok {
     type  =>  "syslog"
     match => [  "message" "%{SYSLOGBASE2}"  ]
     add_tag => [  "syslog" "grokked"  ]
   }
}
 
output {
  elasticsearch { host =>  "192.168.10.1"  }
}


nginx的日志:

Feb 26 14:41:47 db2 kibana-nginx-accesslog: 192.168.10.50 - - [26/Feb/2015:14:41:42 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64; Trident/7.0; rv:11.0) like Gecko LBBROWSER" "-"

logstash界面:

wKioL1Tu2tKDORaIAAMFp3-KEZ4374.jpg










本文转自 bbotte 51CTO博客,原文链接:http://blog.51cto.com/bbotte/1615477,如需转载请自行联系原作者
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
14天前
|
存储 SQL 监控
|
14天前
|
运维 监控 安全
|
17天前
|
监控 关系型数据库 MySQL
分析慢查询日志
【10月更文挑战第29天】分析慢查询日志
35 3
|
17天前
|
监控 关系型数据库 数据库
怎样分析慢查询日志?
【10月更文挑战第29天】怎样分析慢查询日志?
32 2
|
1月前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1635 14
|
1月前
|
存储 消息中间件 大数据
大数据-69 Kafka 高级特性 物理存储 实机查看分析 日志存储一篇详解
大数据-69 Kafka 高级特性 物理存储 实机查看分析 日志存储一篇详解
35 4
|
1月前
|
SQL 分布式计算 Hadoop
Hadoop-19 Flume Agent批量采集数据到HDFS集群 监听Hive的日志 操作则把记录写入到HDFS 方便后续分析
Hadoop-19 Flume Agent批量采集数据到HDFS集群 监听Hive的日志 操作则把记录写入到HDFS 方便后续分析
45 2
|
应用服务中间件 nginx 网络协议
Nginx使用Rsyslog记录日志
直接使用Nginx记录日志,在多台服务器的情况下日志会过于分散不容易管理,不过nginx在1.7.1版本以后,可以使用Rsyslog来记录日志。 Rsyslog可以作为集中日志服务器。
|
26天前
|
应用服务中间件 BI nginx
Nginx的location配置详解
【10月更文挑战第16天】Nginx的location配置详解
|
1月前
|
缓存 负载均衡 安全
Nginx常用基本配置总结:从入门到实战的全方位指南
Nginx常用基本配置总结:从入门到实战的全方位指南
256 0