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

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

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

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

  1. # yum install -y logstash-5.4.1.rpm

2、导出环境变量

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

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

  1. # logstash-plugin install logstash-filter-date

4、添加一个nginx的pattern

  1. # rpm -ql logstash | grep patterns
  2. # cd /usr/share/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-4.1.0/patterns/
  3. # ll
  4. -rw-rw-r-- 1 logstash logstash 1831 May 30 00:41 aws
  5. -rw-rw-r-- 1 logstash logstash 4831 May 30 00:41 bacula
  6. -rw-rw-r-- 1 logstash logstash 260 May 30 00:41 bind
  7. -rw-rw-r-- 1 logstash logstash 2154 May 30 00:41 bro
  8. -rw-rw-r-- 1 logstash logstash 879 May 30 00:41 exim
  9. -rw-rw-r-- 1 logstash logstash 10095 May 30 00:41 firewalls
  10. -rw-rw-r-- 1 logstash logstash 5335 May 30 00:41 grok-patterns
  11. -rw-rw-r-- 1 logstash logstash 3251 May 30 00:41 haproxy
  12. -rw-rw-r-- 1 logstash logstash 980 May 30 00:41 httpd
  13. -rw-rw-r-- 1 logstash logstash 1265 May 30 00:41 java
  14. -rw-rw-r-- 1 logstash logstash 1087 May 30 00:41 junos
  15. -rw-rw-r-- 1 logstash logstash 1037 May 30 00:41 linux-syslog
  16. -rw-rw-r-- 1 logstash logstash 74 May 30 00:41 maven
  17. -rw-rw-r-- 1 logstash logstash 49 May 30 00:41 mcollective
  18. -rw-rw-r-- 1 logstash logstash 190 May 30 00:41 mcollective-patterns
  19. -rw-rw-r-- 1 logstash logstash 614 May 30 00:41 mongodb
  20. -rw-rw-r-- 1 logstash logstash 9597 May 30 00:41 nagios
  21. -rw-r--r-- 1 logstash logstash 312 Jun 23 17:47 nginx
  22. -rw-rw-r-- 1 logstash logstash 142 May 30 00:41 postgresql
  23. -rw-rw-r-- 1 logstash logstash 845 May 30 00:41 rails
  24. -rw-rw-r-- 1 logstash logstash 224 May 30 00:41 redis
  25. -rw-rw-r-- 1 logstash logstash 188 May 30 00:41 ruby
  26. -rw-rw-r-- 1 logstash logstash 404 May 30 00:41 squid

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

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

  1. 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配置

  1. # vim /etc/logstash/conf.d/nginx_access.conf
  2. input {
  3. file {
  4. path => ["/var/log/nginx/www.opgirl.cn.access.log"]
  5. start_position => "beginning"
  6. ignore_older => 0
  7. }
  8. }
  9. filter {
  10. grok {
  11. match => { "message" => "%{NGINXACCESS}" }
  12. }
  13. date {
  14. match => [ "timestamp","dd/MMM/yyyy:HH:mm:ss Z"]
  15. target => "@timestamp"
  16. }
  17. mutate {
  18. remove_field => "timestamp"
  19. }
  20. }
  21. output {
  22. elasticsearch {
  23. hosts => ["192.168.3.56:9200","192.168.3.49:9200","192.168.3.57:9200"]
  24. index => "logstash-nginx-access-%{+YYYY.MM.dd}"
  25. }
  26. #stdout {codec => rubydebug}
  27. }

6、启动logstash

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

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

安装logstash5.4.1,并使用grok表达式收集nginx日志的更多相关文章

  1. ELK 二进制安装并收集nginx日志

    对于日志来说,最常见的需求就是收集.存储.查询.展示,开源社区正好有相对应的开源项目:logstash(收集).elasticsearch(存储+搜索).kibana(展示),我们将这三个组合起来的技 ...

  2. Logstash使用grok插件解析Nginx日志

    grok表达式的打印复制格式的完整语法是下面这样的: %{PATTERN_NAME:capture_name:data_type}data_type 目前只支持两个值:int 和 float. 在线g ...

  3. Logstash收集nginx日志之使用grok过滤插件解析日志

    grok作为一个logstash的过滤插件,支持根据模式解析文本日志行,拆成字段. nginx日志的配置: log_format main '$remote_addr - $remote_user [ ...

  4. logstash实战filter插件之grok(收集apache日志)

    有些日志(比如apache)不像nginx那样支持json可以使用grok插件 grok利用正则表达式就行匹配拆分 预定义的位置在 /opt/logstash/vendor/bundle/jruby/ ...

  5. debian安装filebeat5.5收集nginx日志

    先贴一下我的BELK架构 1.Download and install the Public Signing Key: # wget -qO - https://artifacts.elastic.c ...

  6. ELK 6安装配置 nginx日志收集 kabana汉化

    #ELK 6安装配置 nginx日志收集 kabana汉化 #环境 centos 7.4 ,ELK 6 ,单节点 #服务端 Logstash 收集,过滤 Elasticsearch 存储,索引日志 K ...

  7. ELK——为调试 Logstash Grok 表达式,安装 GrokDebuger 环境

      内容 安装 RVM 安装 Ruby 和 Gems 安装 Rails 安装 jls-grok Ruby grok 解析 调试 grok 注意:不要用 root 执行以下操作. 用 logstash ...

  8. grok表达式

    grok表达式 grok其实就是封装了各种常用的正则表达式,屏蔽了直接写正则的复杂性:通过它可以提取日志内容,按照自己指定的格式输出到kibana. http://udn.yyuap.com/doc/ ...

  9. ELK安装配置及nginx日志分析

    一.ELK简介1.组成ELK是Elasticsearch.Logstash.Kibana三个开源软件的组合.在实时数据检索和分析场合,三者通常是配合使用,而且又都先后归于 Elastic.co 公司名 ...

随机推荐

  1. birt 访问频繁报错Cannot create JDBC driver of class '' for connect URL 'null' java.sql.SQLException: No suitable driver

    一般birt项目都是部署tomcat启动.这个问题大概率是因为没有配置JNDI数据源的原因. 参考链接: https://www.cnblogs.com/xdp-gacl/p/3951952.html

  2. linux的date命令使用指定时间的加减方法与异常

    在一般网页里,date命令减时间方法为: date -d '-100 days' 我的需求是,在指定时间上减8小时.按一般理解来看,命令写成如下样子(有异常错误的写法): date -d " ...

  3. 服务器与Linux操作系统基础原理

    1.服务器 2.Linux操作系统 1. 服务器 服务器定义与分类: 定义:一个管理资源并为用户提供服务的计算机软件. 按应用分类:通常分为文件服务器(能使用户在其它计算机访问文件),数据库服务器和应 ...

  4. 半年收入超2亿RMB 独立游戏开发者的艰苦创业路

    一款叫做<监狱建筑师>的模拟经营游戏,目前在Steam平台获得了3000万美元(近2亿元)以上的收入.这款游戏由英国独立工作室Introversion Software发布,而团队最困难的 ...

  5. 点斜杠 & 如何查看linux程序安装位置 dpkg -L yyy

    方法1: sudo find / -name ssh 方法2: Ubuntu下 看应用程序安装路径的方法 ubuntu下dpkg -L xxx看应用程序安装路径 1.点斜杠 “./”就代表在当前目录下 ...

  6. Daily Scrumming 2015.10.21(Day 2)

    今明两天任务表 Member Today’s Task Tomorrow’s Task 江昊 配置ruby与rails环境 配置mysql与数据库用户管理 配置apache2环境 学习rails Ac ...

  7. 20162319 实验四 Android程序设计

    Android Stuidio的安装测试: 完成Hello World, 要求修改res目录中的内容,Hello World后要显示自己的学号 ·实验过程 完成任务一,只需在Android应用程序文件 ...

  8. 每日scrum(1)

    今天又正式开始了第二个冲刺周期,计划十天,主要需要改进的地方包括UI界面,还有一些细节的把握. 今天出现的主要问题有:在讨论UI界面风格的时候,小组内部意见不统一,对UI界面的创作流程不熟悉,以及难度 ...

  9. C++自学笔记(3)

    类和对象 对象 具体指代一个事物 类 为了便于管理,将信息抽象. 目的不同,抽象的信息也不同(选择性暴露),也就是封装. 通过访问限定符,选择想要暴露和隐藏的信息. 对象实例化 计算机根据一个类的设计 ...

  10. 小学四则运算结对项目报告【GUI】

    写在前面 这次的结对项目我做了很长时间,感触也很多.在这次项目中我使用了Java GUI作为和用户的交互方式,但是在上Java课的时候我对GUI和事件驱动这里并没有学的多好,可能是当时对编程还没有什么 ...