elk系列3之通过json格式采集Nginx日志
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的日志方式
- Nginx日志改成json输出。
- 直接获取nginx的访问日志,放入redis里面。
- 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日志的更多相关文章
- elk系列3之通过json格式采集Nginx日志【转】
转自 elk系列3之通过json格式采集Nginx日志 - 温柔易淡 - 博客园http://www.cnblogs.com/liaojiafa/p/6158245.html preface 公司采用 ...
- [日志分析]Graylog2采集Nginx日志 被动方式
graylog可以通过两种方式采集nginx日志,一种是通过Graylog Collector Sidecar进行采集(主动方式),另外是通过修改nginx配置文件的方式进行收集(被动方式). 这次说 ...
- 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 ...
- [日志分析]Graylog2采集Nginx日志 主动方式
这次聊一下Graylog如何主动采集Nginx日志,分成两部分: 介绍一下 Graylog Collector Sidecar 是什么 如何配置 Graylog Collector Sidecar 采 ...
- ELK 之三:Kibana 使用与Tomcat、Nginx 日志格式处理
一:kibana安装: kibana主要是搜索elasticsearch的数据,并进行数据可视化的展现,新版使用nodejs. 1.下载地址: https://www.elastic.co/downl ...
- 通过filebeat、logstash、rsyslog采集nginx日志的几种方式
由于nginx功能强大,性能突出,越来越多的web应用采用nginx作为http和反向代理的web服务器.而nginx的访问日志不管是做用户行为分析还是安全分析都是非常重要的数据源之一.如何有效便捷的 ...
- Flume采集Nginx日志到HDFS
下载apache-flume-1.7.0-bin.tar.gz,用 tar -zxvf 解压,在/etc/profile文件中增加设置: export FLUME_HOME=/opt/apache-f ...
- ELK学习实验014:Nginx日志JSON格式收集
1 Kibana的显示配置 https://demo.elastic.co/app/kibana#/dashboard/welcome_dashboard 环境先处理干净 安装nginx和httpd- ...
- nginx日志输出配置json格式
修改nginx配置文件 http { include mime.types; default_type application/octet-stream; charset utf-8; # 原有日志格 ...
随机推荐
- 深入理解计算机系统(2.4)---C语言的有符号与无符号、二进制整数的扩展与截断
开篇请各位猿友允许LZ啰嗦几句,最近一直在写计算机系统原理这系列文章,也已经下定决心要把这本书的内容写完.主要目的其实是为了巩固LZ的理解,另外也想把这些内容分享给猿友们,毕竟LZ觉得这些内容对程序猿 ...
- offsetleft、offsetTop、offsetParent的兼容性问题
先来看看offsetParent返回的是什么值 ele.offsetParent返回的是ele元素最近的并且是定位过(relative,absolute)的父元素,如果没有父元素或者是父元素中没有一个 ...
- 3n+1b 备忘录方法
题目详情 对任何一个自然数n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把(3n+1)砍掉一半.这样一直反复砍下去,最后一定在某一步得到n=1.卡拉兹在1950年的世界数学家大会上公布了这个猜 ...
- Intel系列CPU的流水线技术的发展
Intel系列CPU的流水线技术的发展 CPU(Central processing Unit),又称“微处理器(Microprocessor)”,是现代计算机的核心部件.对于PC而言,CPU的规格与 ...
- CSS中margin与padding的区别
CSS边距属性定义元素周围的空间.通过使用单独的属性,可以对上.右.下.左的外边距进行设置.也可以使用简写的外边距属性同时改变所有的外边距.——W3School 边界(margin):元素周围生成额外 ...
- restFull常用注解
@GET.@POST.@PUT.@DELETE.@HEAD您可以使用它们来绑定根资源或子资源内的 Java 方法与 HTTP 请求方法.HTTP GET 请求被映射到由 @GET 注释的方法,以此类推 ...
- nginx 编译参数详解(运维不得不看)
nginx参数: --prefix= 指向安装目录 --sbin-path 指向(执行)程序文件(nginx) --conf-path= 指向配置文件(nginx.conf) --error-log- ...
- python之旅2
python基础 1整数 查看整数类型的方法 >>> a = 1 >>> dir(a) ['__abs__', '__add__', '__and__', '__c ...
- 问题-栈S最多能容纳4个元素,现有6个元素按A、B、C、D、E、F顺序进栈,问可能的出栈顺序。
住栈的特性:对于取出栈内元素每次只能从栈顶开始取(后进先出(栈满时,只能先出后进)) 由于栈内只能容纳4个元素: 所以 E F不可能第一个出栈: 当栈内少于四个元素时 既可以选择进栈,也可以选择出栈 ...
- jquery-ui-处理拖动位置Droppable,Draggable
一.效果.如下图中,各途中可相互拖拉,右下角可删除.注意图1和图2对比区别 图1 图2 二.源码详解 html源码 <!DOCTYPE html> <html> <hea ...