关于收集日志的方式,最简单性能最好的应该是修改nginx的日志存储格式为json,然后直接采集就可以了。

但是实际上会有一个问题,就是如果你之前有很多旧的日志需要全部导入elk上查看,这时就有两个问题,一是原始日志不是json格式,二是原始日志的时间戳不能识别,如果时间不处理,导入之后所有日志的时间戳将全部是导入时间。

下面说一下用grok的方式导入原始日志,当然你也可以直接使用这种方式收集nginx日志,这种方式可以保留nginx的原始日志格式。

1、在官网下载rpm包或者按照guide设置官方repo,安装logstash

# yum install -y logstash-5.4.1.rpm

2、导出环境变量

# vim /etc/bashrc
export PATH=$PATH:/usr/share/logstash/bin

3、安装 logstash-filter-date 插件,这个date插件用来读取原始日志的时间,并存到ES的@timestamp字段

# logstash-plugin install logstash-filter-date

4、添加一个nginx的pattern

# rpm -ql logstash | grep patterns
# cd /usr/share/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-4.1.0/patterns/
# ll
-rw-rw-r-- 1 logstash logstash 1831 May 30 00:41 aws
-rw-rw-r-- 1 logstash logstash 4831 May 30 00:41 bacula
-rw-rw-r-- 1 logstash logstash 260 May 30 00:41 bind
-rw-rw-r-- 1 logstash logstash 2154 May 30 00:41 bro
-rw-rw-r-- 1 logstash logstash 879 May 30 00:41 exim
-rw-rw-r-- 1 logstash logstash 10095 May 30 00:41 firewalls
-rw-rw-r-- 1 logstash logstash 5335 May 30 00:41 grok-patterns
-rw-rw-r-- 1 logstash logstash 3251 May 30 00:41 haproxy
-rw-rw-r-- 1 logstash logstash 980 May 30 00:41 httpd
-rw-rw-r-- 1 logstash logstash 1265 May 30 00:41 java
-rw-rw-r-- 1 logstash logstash 1087 May 30 00:41 junos
-rw-rw-r-- 1 logstash logstash 1037 May 30 00:41 linux-syslog
-rw-rw-r-- 1 logstash logstash 74 May 30 00:41 maven
-rw-rw-r-- 1 logstash logstash 49 May 30 00:41 mcollective
-rw-rw-r-- 1 logstash logstash 190 May 30 00:41 mcollective-patterns
-rw-rw-r-- 1 logstash logstash 614 May 30 00:41 mongodb
-rw-rw-r-- 1 logstash logstash 9597 May 30 00:41 nagios
-rw-r--r-- 1 logstash logstash 312 Jun 23 17:47 nginx
-rw-rw-r-- 1 logstash logstash 142 May 30 00:41 postgresql
-rw-rw-r-- 1 logstash logstash 845 May 30 00:41 rails
-rw-rw-r-- 1 logstash logstash 224 May 30 00:41 redis
-rw-rw-r-- 1 logstash logstash 188 May 30 00:41 ruby
-rw-rw-r-- 1 logstash logstash 404 May 30 00:41 squid

logstash安装包自带了一些应用的pattern示例,但是没有nginx的,上面那个是我加上去的。

这是我针对我自己的线上日志格式调试好的grok表达式:

NGINXACCESS %{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] "%{WORD:verb} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}" "%{DATA:request_body}" %{INT:status} %{INT:body_bytes_sent} "%{DATA:referer}" "%{DATA:agent}" %{DATA:xforwardedfor} %{NUMBER:request_time}  %{NUMBER:upstream_response_time}

这里有一个调试网站:https://grokdebug.herokuapp.com/

5、添加一个logstash配置

# vim /etc/logstash/conf.d/nginx_access.conf
input {
file {
path => ["/var/log/nginx/www.opgirl.cn.access.log"]
start_position => "beginning"
ignore_older => 0
}
} filter {
grok {
match => { "message" => "%{NGINXACCESS}" }
}
date {
match => [ "timestamp","dd/MMM/yyyy:HH:mm:ss Z"]
target => "@timestamp"
}
mutate {
remove_field => "timestamp"
}
} output {
elasticsearch {
hosts => ["192.168.3.56:9200","192.168.3.49:9200","192.168.3.57:9200"]
index => "logstash-nginx-access-%{+YYYY.MM.dd}"
}
#stdout {codec => rubydebug}
}

6、启动logstash

# nohup logstash -f /etc/logstash/conf.d/nginx_acces.conf &

7、添加到kibana查看,这时看到的就是日志本身的生成时间,而不是导入ES的时间

最新文章

  1. 关于app隐私设置跳转
  2. SharePoint Online 创建门户网站系列之定制栏目
  3. PHP之MVC学习
  4. Python 安装mysqldb
  5. 入門必學NO.1 Android 初學特訓班(第四版) 目錄
  6. ZSDR101-跑成品MRP
  7. 在Windows下编译FFmpeg详细说明
  8. iOS 9 关键字的简单使用
  9. AzCopy – 上传/下载 Windows Azure Blob 文件
  10. ASP.NET Core MVC Tag Helpers 介绍
  11. iOS中 为 iOS 建立 Travis CI 韩俊强的博客
  12. 【SQL学习笔记】一、select语句
  13. argument 1 must be 2-item sequence, not int
  14. public private protected default
  15. Java 异常 重写抛出异常限制
  16. java之数据库连接池-dbcp&c3p0&dbutils
  17. BZOJ4990 [Usaco2017 Feb]Why Did the Cow Cross the Road II 动态规划 树状数组
  18. ros pluginlib 段错误
  19. [转]webpack4.0.1安装问题和webpack.config.js的配置变化
  20. AutoFac简单入门

热门文章

  1. thymeleaf 使用javascript定义数组报错
  2. Oracle之带参存储过程(存储过程中for循环调用存储过程)
  3. Dede织梦验证码不显示,织梦后台登陆验证码不显示解决方法
  4. spring boot+mybatis+swagger搭建
  5. groupadd命令详解
  6. 使用sass与compass合并雪碧图(二)
  7. 树莓派 Raspberry-Pi 折腾系列:系统安装及一些必要的配置
  8. web12 使用map型的request、session、application
  9. NABCD模型分析
  10. python字符串操作、文件操作,英文词频统计预处理