关于收集日志的方式,最简单性能最好的应该是修改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的时间

安装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. HTML文件转Word文件格式

    这是我需要转换的HTML文件 第一步~ 使用我们的福昕阅读器将我们.html文件打开,如下图 第二步: 点击“文件”——“另存为”——选择一个你自己喜欢的位置存放文件,此时的文件已经被转换成了.pdf ...

  2. 解决k8s出现pod服务一直处于ContainerCreating状态的问题的过程

    参考于: https://blog.csdn.net/learner198461/article/details/78036854 https://liyang.pro/solve-k8s-pod-c ...

  3. SharpDevelop 笔记

    1. 下载地址: http://jaist.dl.sourceforge.net/project/sharpdevelop/ 2. 使用 VS2012 去掉编译不通过的 Test ,其它可以运行调试. ...

  4. Spring Cloud限流思路及解决方案

    转自: http://blog.csdn.net/zl1zl2zl3/article/details/78683855 在高并发的应用中,限流往往是一个绕不开的话题.本文详细探讨在Spring Clo ...

  5. Python之并发编程-concurrent

    方法介绍 #1 介绍 concurrent.futures模块提供了高度封装的异步调用接口 ThreadPoolExecutor:线程池,提供异步调用 ProcessPoolExecutor: 进程池 ...

  6. 让CentOS在同一个窗口打开文件夹

    http://www.linuxidc.com/Linux/2010-04/25756.htm

  7. Classifier

    1.视频:https://morvanzhou.github.io/tutorials/machine-learning/keras/2-2-classifier/ 2.敲了代码,但是运行结果不懂,明 ...

  8. BugPhobia开发篇章:绩效管理的层次优化

    0x00 :用0x00去书写一段故事 If you weeped for the missing sunset, you would miss all the shining stars 绩效管理,恐 ...

  9. ### Error building SqlSession.

    org.apache.ibatis.exceptions.PersistenceException: ### Error building SqlSession.### The error may e ...

  10. golang数据类型转换

    int--string //string到int value_int,err:=strconv.Atoi(string) //int到string str:=strconv.Itoa(value_in ...