转自

elk系列3之通过json格式采集Nginx日志 - 温柔易淡 - 博客园
http://www.cnblogs.com/liaojiafa/p/6158245.html

preface

公司采用的LNMP平台,跑着挺多nginx,所以可以利用elk好好分析nginx的日志。下面就聊聊它吧。

下面的所有操作都在linux-node2上操作

安装Nginx

nginx是开始,所以你得安装一个Nginx,安装方法采用yum安装,yum源:http://mirrors.aliyun.com/epel/epel-release-latest-6.noarch.rpm
下面的所有操作都在linux-node2上操作

[root@linux-node2 ~]# rpm -vhi http://mirrors.aliyun.com/epel/epel-release-latest-6.noarch.rpm
[root@linux-node2 ~]# yum -y install nginx

安装完以后,我们进行通过ab访问,以此来产生日志:

[root@linux-node2 nginx]# ab -n 1000 -c 20 http://192.168.141.4/
[root@linux-node2 nginx]# cd /var/log/nginx/
[root@linux-node2 nginx]# cat access.log

学习json模块

我们在官网上学习json模块: https://www.elastic.co/guide/en/logstash/2.3/plugins-codecs-json.html

获取Nginx的日志方式

  1. Nginx日志改成json输出。
  2. 直接获取nginx的访问日志,放入redis里面。
  3. Python脚本读取redis,写成json,写入ES。

我们这次主要是讲第一种方式:Nginx日志改成json输出。

配置nginx

我们需要更改nginx的配置文件,在http模块下面,添加一个log_format字段即可,配置文件如下:

http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
log_format access_log_json '{"user_ip":"$http_x_real_ip","lan_ip":"$remote_addr","log_time":"$time_iso8601","user_req":"$request","http_code":"$status","body_bytes_sents":"$body_bytes_sent","req_time":"$request_time","user_ua":"$http_user_agent"}'; # 这行是新添加的,指定为json格式,键值对的格式 access_log /var/log/nginx/access.log access_log_json; # 使用刚才定义的日志格式

确认无误后,重启服务:

[root@linux-node2 nginx]# service  nginx reload
配置logstash

确定nginx正常工作 ,那么我们就开始配置logstash,对于logstash,我们应该在output上面首先配置一个屏幕输出,在确认屏幕输出没有问题后,我们在把output输入到elasticsearch上。

[root@linux-node2 ~]# cat /etc/logstash/conf.d/nginx.conf
input{
file {
path => "/var/log/nginx/access.log"
codec => "json"
}
}
filter{
}
output{
stdout{
codec => rubydebug
}
}

确认无误后,启动logstash

[root@linux-node2 ~]# /opt/logstash/bin/logstash -f /etc/logstash/conf.d/nginx.conf

此时我们通过再打开一个终端,通过ab来发起5个请求,来看看logstash的输出是否有误:

[root@linux-node2 nginx]# ab -n 4 -c 1 http://192.168.141.4/

我们切回到启动logstash的终端,然后看看输出。

{
"user_ip" => "-",
"lan_ip" => "192.168.141.4",
"log_time" => "2016-12-10T16:04:46+08:00",
"user_req" => "GET / HTTP/1.0",
"http_code" => "200",
"body_bytes_sents" => "3698",
"req_time" => "0.000",
"user_ua" => "ApacheBench/2.3",
"@version" => "1",
"@timestamp" => "2016-12-10T08:04:47.705Z",
"path" => "/var/log/nginx/access.log",
"host" => "linux-node2"
}

显然,目前logstash是工作没有问题的,那么就可以把ouput配置到elasticsearch上了,下面更改下配置logstash的文件

[root@linux-node2 nginx]# cat /etc/logstash/conf.d/nginx.conf
input{
file {
path => "/var/log/nginx/access.log"
codec => "json"
type => "nginx-access-log"
}
}
filter{
}
output{
elasticsearch {
hosts => ["192.168.141.3:9200"]
index => "nginx-access-log-%{+YYYY.MM.dd}"
}
}

确定没有问题后,重新启动logstash

[root@linux-node2 logstash]# /opt/logstash/bin/logstash -f /etc/logstash/conf.d/nginx.conf

Notice
如果logstash启动后,我们访问192.168.141.3上的head模块,找不到nginx-access-log的话,那么就删除sincedb,删除以后,重新启动logstash就能访问到了。是因为我们刚才使用logstash的时候,通过rubydebug进行了stdout,导致sincedb文件记录了相关的信息,删除sincedb文件后让elasticsearch重新记录即可。

[root@linux-node2 logstash]# rm -f /var/lib/logstash/.sincedb_d883144359d3b4f516b37dba51fab2a2
/root/.sincedb_ssdafdsafsfasdf

kibana上配置。

我们可以访问http://192.168.141.3:9200/_plugin/head/,可以看到nginx-access-log,如下图所示

到了这里,我想你就明白为啥我们要把nginx的日志配制成json数据格式,没错,就是为了方便我们在head和kibana里面处理。
下面在kibana里添加的时候,我们在Time-field 字段选择的log_time,这样以nginx的log_time字段作为时间戳。

好了到此,简单的nginx日志收集到此结束。

elk系列3之通过json格式采集Nginx日志【转】的更多相关文章

  1. elk系列3之通过json格式采集Nginx日志

    preface 公司采用的LNMP平台,跑着挺多nginx,所以可以利用elk好好分析nginx的日志.下面就聊聊它吧. 下面的所有操作都在linux-node2上操作 安装Nginx nginx是开 ...

  2. [日志分析]Graylog2采集Nginx日志 被动方式

    graylog可以通过两种方式采集nginx日志,一种是通过Graylog Collector Sidecar进行采集(主动方式),另外是通过修改nginx配置文件的方式进行收集(被动方式). 这次说 ...

  3. Centos7 搭建 Flume 采集 Nginx 日志

    版本信息 CentOS: Linux localhost.localdomain 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x ...

  4. [日志分析]Graylog2采集Nginx日志 主动方式

    这次聊一下Graylog如何主动采集Nginx日志,分成两部分: 介绍一下 Graylog Collector Sidecar 是什么 如何配置 Graylog Collector Sidecar 采 ...

  5. ELK 之三:Kibana 使用与Tomcat、Nginx 日志格式处理

    一:kibana安装: kibana主要是搜索elasticsearch的数据,并进行数据可视化的展现,新版使用nodejs. 1.下载地址: https://www.elastic.co/downl ...

  6. 通过filebeat、logstash、rsyslog采集nginx日志的几种方式

    由于nginx功能强大,性能突出,越来越多的web应用采用nginx作为http和反向代理的web服务器.而nginx的访问日志不管是做用户行为分析还是安全分析都是非常重要的数据源之一.如何有效便捷的 ...

  7. Flume采集Nginx日志到HDFS

    下载apache-flume-1.7.0-bin.tar.gz,用 tar -zxvf 解压,在/etc/profile文件中增加设置: export FLUME_HOME=/opt/apache-f ...

  8. ELK学习实验014:Nginx日志JSON格式收集

    1 Kibana的显示配置 https://demo.elastic.co/app/kibana#/dashboard/welcome_dashboard 环境先处理干净 安装nginx和httpd- ...

  9. nginx日志输出配置json格式

    修改nginx配置文件 http { include mime.types; default_type application/octet-stream; charset utf-8; # 原有日志格 ...

随机推荐

  1. Kafka及Spring Cloud Stream

    安装 下载kafka http://mirrors.hust.edu.cn/apache/kafka/2.0.0/kafka_2.11-2.0.0.tgz kafka最为重要三个配置依次为:broke ...

  2. BZOJ 2152 聪聪可可(树形DP)

    给出一颗n个点带边权的树(n<=20000),求随机选择两个点,使得它们之间的路径边权是3的倍数的概率是多少. 首先总的对数是n*n,那么只需要统计路径边权是3的倍数的点对数量就行了. 考虑将无 ...

  3. [十六]SpringBoot 之 读取环境变量和绑定属性对象

    1.读取环境变量 凡是被spring管理的类,实现接口EnvironmentAware 重写方法 setEnvironment 可以在工程启动时,获取到系统环境变量和application配置文件中的 ...

  4. P2475 [SCOI2008]斜堆

    题目背景 四川2008NOI省选 题目描述 斜堆(skew heap)是一种常用的数据结构.它也是二叉树,且满足与二叉堆相 同的堆性质:每个非根结点的值都比它父亲大.因此在整棵斜堆中,根的值最小. 但 ...

  5. 51NOD 1559:车和矩形——题解

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1559 波雷卡普有一个n×m,大小的棋盘,上面有k个车.他又放了q个矩形在 ...

  6. BZOJ 1070 修车 【费用流】

    Description 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同 的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序, ...

  7. 【Python3的进制扫盲】

    一.进制 1.进制简介 进制就是进位制,是人们规定的一种进位方法.计算机底层的数据运算和存储都是二进制数据.计算机语言就是二进制,计算机能直接识别二进制数据,其它数据都不能直接识别. 2.常用进制 对 ...

  8. Lipshitz

    Portal --> broken qwq Description 大M正在学习函数的光滑性并对Lipschitz常数非常感兴趣:当一个定义域为\([l,r]\)的函数\(f\),对于定义域内的 ...

  9. atom插件安装引发的nodejs和npm安装血案

    最近在写前端网页,学习就要从高大上的地方开始,于是我打算装一个atom编辑器. 本来就是由github客户端的,再装个atom也算是配套了吧,其实本白也是蛮费心思的,技术不怎么地,什么神器都再努力地使 ...

  10. Codeforces 894.D Ralph And His Tour in Binary Country

    D. Ralph And His Tour in Binary Country time limit per test 2.5 seconds memory limit per test 512 me ...