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 ()的组合,这里不再说明。
这里只是根据自已的日志进行一个分析,读者可根据自己的数据内容做相关的挖掘
参考:
1. https://www.elastic.co/ logstash官网
相关推荐
综上所述,`logstash.json`模板是Logstash数据处理流程中的关键组成部分,通过合理的模板设计,我们可以有效地管理和分析来自不同来源的数据,提升数据的可读性和分析效率。在实际操作中,应根据具体需求进行定制和...
Logstash是一款开源的日志管理系统,由 Elastic 公司开发,...通过这个Logstash日志管理系统v7.17.18的压缩包,无论是初学者还是经验丰富的开发者,都可以深入学习和实践,提升自己在日志管理和大数据分析领域的技能。
此外,Logstash作为一个系统软件工具,可以与其他建站模板或解决方案结合使用,形成完整的监控和日志分析体系。例如,配合Elasticsearch用于存储和搜索日志,Kibana进行可视化展示,可以构建出一套强大的日志分析...
对于计算机科学的毕业设计或论文而言,Logstash提供了一个理想的平台来研究日志管理、数据分析和实时监控。通过深入研究Logstash的配置和插件,学生可以了解如何有效地管理和处理大规模日志数据,这对于理解大数据...
8. **最佳实践**:为了提高性能和可维护性,建议遵循一些最佳实践,比如使用单独的配置文件管理不同功能,使用模板配置动态解析日志格式,以及定期监控和优化 Logstash 性能。 9. **版本升级**:随着时间推移,新...
在实际使用中,用户通常会根据需求自定义配置文件,配置 Logstash 从特定数据源收集数据,应用适当的过滤器和转换,然后将处理结果发送到指定的存储或分析系统。Logstash 的强大之处在于其高度可扩展性和灵活性,...
Logstash 是一个开源的数据收集和传输工具,广泛用于日志管理...总的来说,Logstash-7.10.1是一个强大的日志处理工具,适用于Windows 64位环境,通过合理的配置和插件选择,可以构建起高效、灵活的日志管理和分析系统。
提供以下配置文件集: Logstash数据收集和处理Filebeat模板,可将您的日志转移到logstash设计实际使用的最佳实践按虚拟机0 /源重新分区安装: filebeat,系统日志(UDP),JSON / TCP 内容:数据源来自/来自的专用...
这可能涉及设置日志服务器、配置日志源以发送日志信息,或者使用日志管理工具(如Logstash)自动抓取和传输日志。 2. **数据预处理**:日志数据往往包含噪声和不一致性,预处理阶段会清洗数据,去除无用信息,统一...
压缩包中的“项目源码”可能包含了使用ELK Stack搭建的具体应用示例或模板,这些源码可能涉及到配置文件、脚本、代码片段等,可以帮助用户更好地理解和实践ELK Stack的使用,例如日志收集的配置、Elasticsearch索引...
这对于后期分析和可视化非常有用。 3. **Output**:定义FileBeat将日志发送到何处。在本例中,输出应该是Elasticsearch。你需要配置Elasticsearch的URL、索引名和可能的认证信息。 4. **TLS/SSL**:如果Elastic...
3. **Logstash**:Logstash 是一个数据收集、转换和分发系统,专为日志管理和日志聚合设计。7.8.0版本的 Logstash 支持多种输入插件,可以收集来自各种源的日志数据,如文件、网络、数据库等。经过收集后,数据会...
- **日志框架**:如Java的Log4j、Logback,Python的logging等,提供灵活的日志配置和处理能力。 - **日志滚动**:系统自动根据设定的策略(如日期、文件大小)创建新的日志文件,避免单个文件过大难以管理。 - **...
ELK是三个开源工具的缩写,分别代表Elasticsearch、Logstash和Kibana,它们共同构建了一个强大的日志分析和可视化平台。这个"ELK-7.5.0-windows-x86_64"压缩包是为Windows操作系统设计的,包含了这三个组件的7.5.0...
**Elasticsearch** 是一个分布式、RESTful风格的搜索和数据分析引擎,用于实时的日志分析和数据检索。它的主要特点包括: 1. **分布式**:Elasticsearch可以在多节点集群上运行,自动处理数据分片和复制,确保高...
B站为了规范业务日志的输出和便于后续的日志分析与管理,制定了统一的日志规范。规范中明确了日志的格式和包含的元信息,例如: - 时间(time):日志产生的时间,遵循ISO8601格式; - 等级(level):日志的严重性...
ELK(Elasticsearch, Logstash, Kibana)是一个流行的开源日志分析和可视化解决方案,广泛应用于系统监控、日志管理和数据洞察。本ELK课程教案将带你深入理解这一强大的技术栈,帮助你掌握其核心概念和实际应用。 ...
Elasticsearch用于存储和搜索日志,Logstash负责日志收集和预处理,而Kibana提供友好的界面,帮助开发者分析和理解日志信息。掌握ELK的使用,可以帮助我们更好地监控系统状态,及时发现和解决问题。 Layui是一个轻...
**Python-Django中间件与Kibana集成** 在Python Web开发领域,Django是一个非常...在实践中,还可以根据具体需求进一步定制中间件的功能,或者使用其他工具如Grafana替代Kibana,以满足更复杂的数据分析和展示需求。