logstash是一个数据分析软件,主要目的是分析log日志。整一套软件可以当作一个MVC模型,logstash是controller层,Elasticsearch是一个model层,kibana是view层。

首先将数据传给logstash,它将数据进行过滤和格式化(转成JSON格式),然后传给Elasticsearch进行存储、建搜索的索引,kibana提供前端的页面再进行搜索和图表可视化,它是调用Elasticsearch的接口返回的数据进行可视化。logstash和Elasticsearch是用Java写的,kibana使用node.js框架。

这个软件官网有很详细的使用说明,https://www.elastic.co/,除了docs之外,还有视频教程。这篇博客集合了docs和视频里面一些比较重要的设置和使用。

一、logstash的配置

1. 定义数据源

写一个配置文件,可命名为logstash.conf,输入以下内容:

input {
file {
path => "/data/web/logstash/logFile/*/*"
start_position => "beginning" #从文件开始处读写
}
# stdin {} #可以从标准输入读数据
}

定义的数据源,支持从文件、stdin、kafka、twitter等来源,甚至可以自己写一个input plugin。如果像上面那样用通配符写file,如果有新日志文件拷进来,它会自动去扫描。

2. 定义数据的格式

根据打日志的格式,用正则表达式进行匹配

filter {

  #定义数据的格式
grok {
match => { "message" => "%{DATA:timestamp}\|%{IP:serverIp}\|%{IP:clientIp}\|%{DATA:logSource}\|%{DATA:userId}\|%{DATA:reqUrl}\|%{DATA:reqUri}\|%{DATA:refer}\|%{DATA:device}\|%{DATA:textDuring}\|%{DATA:duringTime:int}\|\|"}
} }

由于打日志的格式是这样的:

2015-05-07-16:03:04|10.4.29.158|120.131.74.116|WEB|11299073|http://quxue.renren.com/shareApp?isappinstalled=0&userId=11299073&from=groupmessage|/shareApp|null|Mozilla/5.0 (iPhone; CPU iPhone OS 8_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12D508 MicroMessenger/6.1.5 NetType/WIFI|duringTime|98||

以|符号隔开,第一个是访问时间,timestamp,作为logstash的时间戳,接下来的依次为:服务端IP,客户端的IP,机器类型(WEB/APP/ADMIN),用户的ID(没有用0表示),请求的完整网址,请求的控制器路径,reference,设备的信息,duringTime,请求所花的时间。

如上面代码,依次定义字段,用一个正则表达式进行匹配,DATA是logstash定义好的正则,其实就是(.*?),并且定义字段名。

我们将访问时间作为logstash的时间戳,有了这个,我们就可以以时间为区分,查看分析某段时间的请求是怎样的,如果没有匹配到这个时间的话,logstash将以当前时间作为该条记录的时间戳。需要再filter里面定义时间戳的格式,即打日志用的格式:

filter {

  #定义数据的格式
grok {#同上... } #定义时间戳的格式
date {
match => [ "timestamp", "yyyy-MM-dd-HH:mm:ss" ]
locale => "cn"

}
}

在上面的字段里面需要跟logstash指出哪个是客户端IP,logstash会自动去抓取该IP的相关位置信息:

filter {

  #定义数据的格式
grok {#同上} #定义时间戳的格式
date {#同上} #定义客户端的IP是哪个字段(上面定义的数据格式)
geoip {
source => "clientIp"
}
}

同样地还有客户端的UA,由于UA的格式比较多,logstash也会自动去分析,提取操作系统等相关信息

  #定义客户端设备是哪一个字段
useragent {
source => "device"
target => "userDevice"
}

哪些字段是整型的,也需要告诉logstash,为了后面分析时可进行排序,使用的数据里面只有一个时间

  #需要进行转换的字段,这里是将访问的时间转成int,再传给Elasticsearch
mutate {
convert => ["duringTime", "integer"]
}

3. 输出配置

最后就是输出的配置,将过滤扣的数据输出到elasticsearch

output {
#将输出保存到elasticsearch,如果没有匹配到时间就不保存,因为日志里的网址参数有些带有换行
if [timestamp] =~ /^\d{4}-\d{2}-\d{2}/ {
elasticsearch { host => localhost }
} #输出到stdout
# stdout { codec => rubydebug } #定义访问数据的用户名和密码
# user => webService
# password => 1q2w3e4r
}

我们将上述配置,保存到logstash.conf,然后运行logstash

在logstash启动完成之后,输入上面的那条访问记录,logstash将输出过滤后的数据:

可以看到logstash,自动去查询IP的归属地,并将请求里面的device字段进行分析。

二、配置Elasticsearch和kibana

1. Elasticsearch

这个不需要怎么配,使用默认的配置即可。配置是: config/elasticsearch.yml

如果需要设置数据的过期时间,可以加上这两行(目测是这样配的,没有验证过,读者可以试一下):

#设置为30天过期

indices.cache.filter.expire: 30d

index.cache.filter: 30d

Elasticsearch默认监听在9200端口,可对其进行查询和管理,例如看索引的健康状态:

curl 'localhost:9200/_cluster/health?level=indices&pretty'

输出

{
"cluster_name" : "elasticsearch",
"status" : "yellow",
"timed_out" : false,
"number_of_nodes" : 2,
"number_of_data_nodes" : 1,
"active_primary_shards" : 161,
"active_shards" : 161,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 161,
"number_of_pending_tasks" : 0,
"indices" : {
"logstash-2015.05.05" : {
"status" : "yellow", #有三级,green, yellow和red
"number_of_shards" : 5,
"number_of_replicas" : 1,
"active_primary_shards" : 5,
"active_shards" : 5,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 5
}
}

可在浏览器进行访问,例如查询一下使用chrome浏览器情况:

2. kibana

这个也不用配置,默认监听在5601端口。

#让它运行在后台
localhost# nohup bin/kibana &

注意以上两个要使用Java 7以上版本,还有小版本要求,下一个最新的Java 8即可,然后在启动脚本里export JAVA_HOME;

三、可视化数据分析

访问5601端口,如localhost:5601,打开kibana

1. 生成索引名称

第一次访问kibana会重定向到设置索引的页面:

在蓝色方框里输入要进行探索的索引,如果输入logstash-*就是匹配所有的索引,还可以指定日期,logstash的索引是按日期区分的,一个日期一个文件夹

因此也可以输入logstash-2015.05*,那么如果用这个索引名称,在接下来的操作都是针对5月份的记录。也可以再一个六月份的,在接下来的过程中在网页左上角索引那里随时进行切换。

2. 按天查看上月份的访问量

点左上角的discover

再点右上角的时钟,选时间

有三种格式的时间可以选择,我们选择上一个月,就可以看到上月份的访问情况:

3. 按地域访问情况

点击上面菜单栏的visualize,选择最后一个条形图,再选择from a new search

在左边的窗口里选择X-Axis,然后,Aggregation选择Date Histogram,Interval选择Daily,以天为单位

再点击上图的绿色箭头,右边出来日访问量:

接着点击左边的Add Sub-buckets,选择split bars,然后Sub Aggression选择Terms,相应的Field选择city_name,如下图:

点绿色的播放按钮,右边出来按照每天最高访问量的5个城市:

然后把它保存到Dashboard里,等会还要进行比较,点击右上角的save按钮,再起个名字

点击上面菜单栏的Dashboard,将刚刚保存的加进去。

接下来我们看一下,这几个城市的人分别访问的哪些接口比较多,可能可以看出不同地域的人对什么感兴趣

4. 查看不同城市的人访问接口的异同

点击Visulize(点两次),选择倒数第三个的饼图,接下来的操作类型于上面,按回车:

可以看出五月份的访问量,北京最多,然后就是长沙、天津、河北。

接着,Add sub-buckets,如下配置

可以看出,北京访问的接口从高到低今次是getdataversion、getthomeinfo、getactivitys等。然后继续保存到Dashboard。

再看下访问比较活跃的是哪几个IP

5. 查看访问量最高的几个IP

继续点visualize,选择data table,相应的配置类似于上面,返回一个前20个最活跃的IP的表格:

保存到面板

然后再看下5月份,总的访问量

6. 总点击量

在visualize那里选择metric,总的访问量为:

还可以看下在地图上的分布

7. 地图分布

在visualize选择Title map

可以看出访问量主要集中在北京一带。

同样保存到面板,现在在面板保存了5张图:

8. Dashboard的相关联操作

Dashboard的一个强大之处是可以进行关联查看。例如说要看一下最活跃的IP,是什么时候访问的,访问了哪些接口。

只需要在上图左下角的clientIP点一下相应的IP即可,面板里的其它各图都会相应地变化。

9. 搜索

kibana每个页面都有一个搜索的输入框,进行的任何可视化都可以通过搜索动态地改变.

kibana的搜索使用Luence语法,常用的可能就以下几个

(1)字段名:值

点击上面菜单的Discover,在搜索那里输入: clientIp:123.125.40.1,就可以调出这个IP,该段时间内所进行的所有访问,然后再进行后续其它的各种操作。

例如再看下他使用什么设备访问,在左边侧栏点击userDevice.os_name,再点Visualize

      可以看出他使用的是ios系统比较多:

(2)To 范围

字段是Number型的支持范围搜索,例如看下响应时间在1000ms以上的。搜索duringTime:[1000 TO 1000000000]

看下是哪些接口,设置y轴为平均响应时间,就可以看出哪些接口的调用比较耗时:

(3)支持and or ()的组合,这里不再说明。

这里只是根据自已的日志进行一个分析,读者可根据自己的数据内容做相关的挖掘

个人博客:http://yincheng.site/logstash

参考:

1. https://www.elastic.co/ logstash官网

logstash日志分析的配置和使用(转)的更多相关文章

  1. logstash日志分析的配置和使用

    logstash是一个数据分析软件,主要目的是分析log日志.整一套软件可以当作一个MVC模型,logstash是controller层,Elasticsearch是一个model层,kibana是v ...

  2. filebeat + logstash 日志采集链路配置

    1. 概述 一个完整的采集链路的流程如下: 所以要进行采集链路的部署需要以下几个步聚: nginx的配置 filebeat部署 logstash部署 kafka部署 kudu部署 下面将详细说明各个部 ...

  3. Linux服务器access_log日志分析及配置详解(二)

    默认nginx / Linux日志在哪个文件夹? 一般在 xxx.xxx.xxxx.com/home/admin 路径下面的error.log文件和access.log文件error_log logs ...

  4. LogStash日志分析系统

    简介 通常日志管理是逐渐崩溃的——当日志对于人们最重要的时候,也就是出现问题的时候,这个渐进的过程就开始了.日志管理一般会经历一下3个阶段: 初级管理员将通过一些传统工具(如cat.tail.sed. ...

  5. Linux服务器access_log日志分析及配置详解(一)

    nginx的log日志分为access log 和 error log 其中access log 记录了哪些用户,哪些页面以及用户浏览器.ip和其他的访问信息 error log 则是记录服务器错误日 ...

  6. Elasticsearch、Logstash、Kibana搭建统一日志分析平台

    // // ELKstack是Elasticsearch.Logstash.Kibana三个开源软件的组合.目前都在Elastic.co公司名下.ELK是一套常用的开源日志监控和分析系统,包括一个分布 ...

  7. 【转】ELK(ElasticSearch, Logstash, Kibana)搭建实时日志分析平台

    [转自]https://my.oschina.net/itblog/blog/547250 摘要: 前段时间研究的Log4j+Kafka中,有人建议把Kafka收集到的日志存放于ES(ElasticS ...

  8. ELK_日志分析系统Logstash+ElasticSearch+Kibana4

    elk 日志分析系统 Logstash+ElasticSearch+Kibana4 logstash 管理日志和事件的工具 ElasticSearch 搜索 Kibana4 功能强大的数据显示客户端 ...

  9. 日志分析工具ELK配置详解

    日志分析工具ELK配置详解 一.ELK介绍 1.1 elasticsearch 1.1.1 elasticsearch介绍 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分 ...

随机推荐

  1. PYQT实现简单的浏览器功能

    主要的类 QMainWindow 提供一个有菜单条.锚接窗口(例如工具条)和一个状态条的主应用程序窗口. http://www.kuqin.com/qtdocument/qmainwindow.htm ...

  2. 使用C语言操作InfluxDB

    环境: CentOS6.5_x64 InfluxDB版本:1.1.0 InfluxDB官网暂未提供C语言开发库,但github提供的有: https://github.com/influxdata/i ...

  3. weblogic部署存在中文乱码导致部署失败

    问题描述: weblogic控制台显示错误,是受管节点console日志 <-- 下午10时19分16秒 CST> <Info> <Security> <BE ...

  4. QQ 互联认证 回调地址提示说要http :// 但是事实不用

    真奇怪 腾讯最近人手不够吧 这样的错误也会犯错....

  5. 【linux】系统初始化的shell脚本

    根据参考网上的一些文章,总结出来一个系统初始化的shell脚本 1.初始化脚本 #!/bin/bash cat << EOF +------------------------------ ...

  6. TensorFlow 基本概念

    一.概述 使用图(graph)来表示计算任务 在会话(Session)的上下文(context)中执行图(graph) 使用tensor表示数据 通过 变量(Variable)维护状态 使用 feed ...

  7. 【HTML】网页中如何让DIV在网页滚动到特定位置时出现

    用js或者jquery比较好实现.但你要知道,滚动到哪个特定位置,例如滚动到一个标题h3那显示这个div,那么可以用jquery算这个h3距离网页顶部的距离:$("h3").off ...

  8. 【java】详解集合

    目录结构: contents structure [-] 集合概述 什么是集合 Collection和Map的区别 List和Set的区别 ArrayList和LinkedList的区别 HashSe ...

  9. 【MySQL】MySQL之MySQL常用的函数方法

    MySQL常用函数 本篇主要总结了一些在使用MySQL数据库中常用的函数,本篇大部分都是以实例作为讲解,如果有什么建议或者意见欢迎前来打扰. limit Select * from table ord ...

  10. Linux下通过关键字模糊查找搜索文件

    [背景] 想要在Linux下面,找之前不知道放到哪里的一个tomcat的文件. [折腾过程] 1.最后是参考: linux查找文件命令find – 发芽的石头 – 博客频道 – CSDN.NET 去搜 ...