logstash通過rsyslog對nginx的日誌收集和分析

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的配置文件不用改動,例子:

[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的配置

[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服務重啓

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

現在nginx的日誌,已經同步到logstash服務器的/var/log/messages,如下圖

wKiom1TuxnSzHoFiAAr9mfojxVU826.jpg


logstash.conf 配置

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


參考:

https://medium.com/@thomasdecaux/exploit-nginx-access-log-with-rsyslog-logstash-elasticsearch-and-kibana-48ab5c71b42d 

https://blog.basefarm.com/blog/how-to-install-logstash-with-kibana-interface-on-rhel/

http://ialloc.org/posts/2014/07/06/nginx-notes-log-syslog/

http://w.gdu.me/wiki/Linux/rsyslog_logrotate.html 

http://xstarcd.github.io/wiki/Linux/rsyslog_logrotate.html 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章