• logstash日志分析的配置和使用


    转自:http://yincheng.site/logstash

    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,输入以下内容:

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

    2. 定义数据的格式

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

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

    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里面定义时间戳的格式,即打日志用的格式:

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

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

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

    3. 输出配置

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

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

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

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

    二、配置Elasticsearch和kibana

    1. Elasticsearch

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

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

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

    输出

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

    29

    2. kibana

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

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

    三、可视化数据分析

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

    1. 生成索引名称

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

    30

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

    31

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

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

    点左上角的discover

    32

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

    33

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

    34

    3. 按地域访问情况

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

    35

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

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

    37

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

    38

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

    39

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

    40

    41

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

    42

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

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

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

    43

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

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

    44

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

    45

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

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

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

    46

    保存到面板

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

    6. 总点击量

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

    47

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

    7. 地图分布

    在visualize选择Title map

    48

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

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

    49

    8. Dashboard的相关联操作

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

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

    50

    9. 搜索

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

    51

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

    (1)字段名:值

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

    52

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

    53

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

    54

    (2)To 范围

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

    55

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

    56

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

  • 相关阅读:
    AX ERROR: Could not find my mock parent, most likely I am stale 不及格的程序员
    利用Segue在视图控制器间传值的问题 不及格的程序员
    Creating a Singleton Instance 不及格的程序员
    iPad 通知 UIKeyboardWillShowNotification 不会在keyBoard处在Undock状态下接到通知 不及格的程序员
    Why RootViewController's view is rotated Automatically by System when the app first loaded? 不及格的程序员
    如何弹出UIDatePicker最好 不及格的程序员
    jQuery开始做恶了 不及格的程序员
    what is the SEL,id and IMP,Class ,Method? 不及格的程序员
    Objectivec 字符串比较的陷井 不及格的程序员
    Unable to create any keyboard shortcuts after the iOS 6.1.3 update on iPad. 不及格的程序员
  • 原文地址:https://www.cnblogs.com/sachie/p/7880334.html
Copyright © 2020-2023  润新知