logstash經過rsyslog對nginx的日誌收集和分析html
http://bbotte.blog.51cto.com/6205307/1613571 logstash&elasticsearch&kibana的安裝和配置nginx
http://bbotte.blog.51cto.com/6205307/1614453 這一篇文章裏面是以nginx打補丁的方式實現rsyslog把nginx的日誌同步到logstash作分析,不過線上環境種種不同,下面是把nginx的日誌直接經過rsyslog同步到logstash服務器上,不用對nginx作更改,相對來講更簡單明瞭。git
nginx服務器端github
nginx的配置文件不用改動,例子:redis
[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的配置
bash
[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不生效;app
$InputFileStateFile
定義的StateFile必須惟一,它被rsyslog用於記錄文件上傳進度,不然會致使混亂;elasticsearch
@192.168.10.1:514用於指定接收日誌的服務器域名或者主機名;ide
有須要的話,$InputFileSeverity info 也添加上
再把rsyslog服務重啓
[root@db2 ~]# service rsyslog restart Shutting down system logger: [ OK ] Starting system logger: [ OK ]
如今nginx的日誌,已經同步到logstash服務器的/var/log/messages,以下圖
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界面:
參考:
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/