内容简介:花括号MC(huakuohao-mc):关注JAVA基础编程及大数据,注重经验分享及个人成长。
花括号MC(huakuohao-mc):关注 JAVA 基础编程及大数据,注重经验分享及个人成长。
有些事情,当我们勇敢的迈出第一步的时候,其实就已经完成了50%。 很显然,学习ELK就属于这样的事情。 很多对ELK不了解的同学,每当想学习的时候,就因为涉及的组件比较多,导致自己不知道如何开始,最后的结果就是永远没有开始,让自己一直处于临渊羡鱼的状态。
大部分 程序员 学一门新语言的时候都是从“hello world”开始的。其实ELK也有自己的“hello world”。只不过这个“hello world”需要的组件及配置有点儿多。
这边文章我会带着大家搭建一个实时的日志搜索平台。将业务系统产生的日志(模拟),源源不断的收集到 Elasticsearch
中,最后通过 Kibana
进行查询展示。
如果这篇文章中出现的一些细节使你困惑,那么就暂时放过自己,争取先把这一切都跑通,毕竟你刚开始学 Java
的时候,对"hello world"程序里面的每一行代码也不是真正的理解。
ELK是 Elasticsearch
, Logstash
, Kibana
三个组件的首字母缩写,不过这是原来的叫法,现在新的叫法是Elastic Stack,除了 Elasticsearch
、 Kibana
、 Logstash
还增加了 Beats
,主要用于数据收集。
一点点说明:
本文基于 centos7.5
的操作系统,Elastic Stack基于最新的7.6版本。
本文只涉及单点的搭建及配置,至于集群的配置及调优不在本文讨论范围内。
本文假定的业务系统产生的日志格式如下:
|07801302020021914554950568859|127.0.0.1|2020-02-19 14:55:49[INFO][Thread-4][com.hello.frank.test.TestUser]-user msg jack
Elasticsearch
介绍
Elasticsearch
是一款提供分布式数据存储,搜索及分析的数据引擎。有很多的应用场景,但是使用最多的还是存储日志信息,用于日常运维及商业分析。
安装
1#下载 2curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.1-linux-x86_64.tar.gz 3#解压 4tar -xzvf elasticsearch-7.6.1-linux-x86_64.tar.gz 5cd elasticsearch-7.6.1 6#启动 7./bin/elasticsearch
Elasticsearch
的配置文件是 config/elasticsearch.yml
。默认情况下, Elasticsearch
只允许本机访问,所以我们只需要简单的修改一下配置文件,将 network.host
前面的注释去掉,同时将值改成 0.0.0.0
,表示所有机器都可以访问,然后重启一下就OK了。
启动后,可以通过
curl http://hostIp:9200
进行测试,如果看到如下信息就证明 Elasticsearch
安装完了。
1{ 2 "name" : "localhost", 3 "cluster_name" : "elasticsearch", 4 "cluster_uuid" : "1ew0o-aXSpq8Tfv0zCWE3Q", 5 "version" : { 6 "number" : "7.6.0", 7 "build_flavor" : "default", 8 "build_type" : "tar", 9 "build_hash" : "7f634e9f44834fbc12724506cc1da681b0c3b1e3", 10 "build_date" : "2020-02-06T00:09:00.449973Z", 11 "build_snapshot" : false, 12 "lucene_version" : "8.4.0", 13 "minimum_wire_compatibility_version" : "6.8.0", 14 "minimum_index_compatibility_version" : "6.0.0-beta1" 15 }, 16 "tagline" : "You Know, for Search" 17}
注意: Elasticsearch
启动的时候,如果报错"max virtual memory areas vm.maxmapcount [65530] is too low",需要执行 $ sudo sysctl -w vm.max_map_count=262144
,来修改最大虚拟内存数。
FileBeat
介绍
ELK平台提供了很多 Beat
组件,目的是为了收集各种不同的数据源,比如有针对日志文件的 FileBeat
,也有针对系统运行信息的 MetricBeat
,还有针对网络包的 PacketBeat
。
这里我拿 FileBeat
的安装和使用来举例,演示一下如何收集应用的日志信息。
安装
1#下载 2curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.6.1-linux-x86_64.tar.gz 3#解压 4tar xzvf filebeat-7.6.1-linux-x86_64.tar.gz
配置
使用 Filebeat
进行日志收集,只需要对配置文件进行简单的修改就OK。
Filebeat
的配置文件是 filebeat.yml
。所有的配置都在这个文件下进行。
输入配置。
1filebeat.inputs: 2- type: log 3 enabled: true 4 paths: 5 - /var/log/*.log
上面这段简单的配置,表示收集 /var/log
下面的所有 .log
文件。同时还可以这样配置 /var/log/*/*.log
,来抓取 log
子目录下的所有 .log
文件。注意不会抓取 log
目录下的 .log
文件。
输出配置
Filebeat
支持很多输出配置,最常用的就是输出到 Kafka
和 logstash
,当然了也可以直接输入到 Elasticsearch
。
输出到 Elasticsearch
的配置
1output.elasticsearch: 2 hosts: ["ES-host:9200"]
输出到 Logstash
的配置。
1output.logstash: 2 hosts: ["logstash-host:5044"]
Logstash
可以对日志进行过滤和清洗,如果日志量太大,单节点的 Logstash
很可能满足不了需求。 Filebeat
支持同时输出到多个 Logstash
。
负载均衡配置
支持负载均衡的配置也很简单,配置如下。
1output.logstash: 2 hosts: ["localhost:5044", "localhost:5045"] 3 loadbalance: true
相比单节点的配置,只是增加了一个 loadbalance
的属性,同时将新增的节点加到 hosts
数组里就OK了。
注意 loadbalance
属性只对 Redis
, Logstash
,和 Elasticsearch
起作用, Kafka
自己就可以实现负载均衡,不用 Filebeat
来操心。
此外 Filebeat
还支持多个线程工作模式,默认的 work
是1,如果想增加 worker
数量,只需增加 work
属性的配置就OK。
1filebeat.inputs: 2- type: log 3 paths: 4 - /var/log/*.log 5output.logstash: 6 hosts: ["localhost:5044", "localhost:5045"] 7 loadbalance: true 8 worker: 2
上面的配置表示一共有4(host * work)个worker在工作。
启动
通过 ./filebeat -e -c filebeat.yml -d "publish"
启动 Filebeat
。
如果上面已经成功启动ES,同时你的 FileBeat
的配置又是输出到 Elasticsearch
。启动之后,你的日志就会源源不断的存储到 Elasticsearch
。
Filebeat
是通过 FileBeat
安装目录下的 data
目录进行日志文件信息管理的,如果在测试阶段,想重复收集相同的日志,需要每次把 data
目录下的信息清空然后在重新启动。
Logstash
介绍
Logstash
是一款强大的数据处理工具,可以帮助我们处理从数据源发送过来的数据。同时将加工之后的信息发送到 Elasticsearch
。在ELK里面扮演者承上启下的作用。
安装
1#下载 2curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-7.6.1.tar.gz 3#解压 4tar -xzvf logstash-7.6.1.tar.gz
配置
Logstash
提供了 input
插件,用于读取各种数据源的数据。这里配置一个接收 FileBeat
发送过来的数据,然后将数据做简单之后发送到ES进行存储的配置。
先在 Logstash
的 config
目录下,创建一个配置文件,假设叫 blog-pipeline.conf
,文件中的内容是这个样子。
1input { 2 beats{ 3 port => "5044" 4 } 5} 6 7output{ 8 #stdout { codec => rubydebug } 9 elasticsearch{ 10 hosts => [ "localhost" ] 11 index => "blog-demo" 12 } 13}
配置很简单,分为输入和输出两个部分。输入部分的 port
端口号就是上面提到的 Filebeat
的端口号。output的配置部分表示输出到ES。
配置文件中注释的那一行,是方便大家调试用的,打开那一行,可以把输出打印到控制台,方便我们调试,以免调试阶段产生的数据污染ES中生产数据。
Elasticsearch
中 index的概念可以简单的理解成关系数据库中表的概念。如果不配置index项,默认值是logstash。
启动
通过 ./bin/logstash -f ./config/blog-pipeline.conf
启动 Logstash
如果一切都正常,你可以在启动 Logstash
的控制台看到收集的日志了(记得调试的时候使用 stdout { codec => rubydebug }
)。
Grok filter
如果只是原样的将日志信息存入ES,那么就没有必要使用 Logstash
了。因为 FileBeat
也可以很好的完成相关工作。如果想对日志信息做一些处理,那么 Grok
的 filter
插件,就有必要了解一下。
grok是一款方便大家使用的正则表达式库,里面封装了很多常用的正则,当然了我们也可以自定义。具体预定义了哪些正则,我们可以去这里看(https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns),如果需要对grok进行调试,可以使用这个网址(https://grokdebug.herokuapp.com/),调试的网址需要翻强使用。
下面我们针对文章开头提到的日志样例,进行正则匹配。当然了这个过滤只是为了演示grok如何使用,并没有过滤掉日志中任何一部分信息,实际使用中可以提取感兴趣的日志信息进行入库。
Grok的插件使用很简单,只需要在 Logstash
的配置文件中增加如下信息就OK。
1filter { 2 grok { 3 match => { "message" => "\|%{GREEDYDATA:traceid}\|%{IPV4:serverip}\|%{GREEDYDATA:logdate}\[%{LOGLEVEL:loglevel}\]\[%{GREEDYDATA:thread}\]\[%{GREEDYDATA:classname}\]-%{GREEDYDATA:logmessage}" } 4 overwrite => [ "message" ] 5 remove_field => [ "host","ecs", 6 "agent","version", 7 "log", "input", "tags", 8 "@version","message" ] 9 } 10}
Logstash
的完整配置如下
1input { 2 beats{ 3 port => "5044" 4 } 5} 6 7filter { 8 grok { 9 match => { "message" => "\|%{GREEDYDATA:traceid}\|%{IPV4:serverip}\|%{GREEDYDATA:logdate}\[%{LOGLEVEL:loglevel}\]\[%{GREEDYDATA:thread}\]\[%{GREEDYDATA:classname}\]-%{GREEDYDATA:logmessage}" } 10 overwrite => [ "message" ] 11 remove_field => [ "host","ecs", 12 "agent","version", 13 "log", "input", "tags", 14 "@version","message" ] 15 } 16} 17 18output{ 19 #stdout { codec => rubydebug } 20 elasticsearch{ 21 hosts => [ "es-host" ] 22 index => "blog-demo" 23 } 24}
启动
再次启动 Logstash
。如果你使用的是 stdout { codec => rubydebug }
,那么屏幕上的输出如下。
Kibana
介绍
Kibana
是一款开源的,用于数据分析展示的平台。经常跟 ElasticSearch
配合使用。简单的说就是为 ElasticSearch
提供前端的数据搜索及分析的展示界面,功能强大,各种图表样式丰富。
安装
1#下载 2curl -L -O https://artifacts.elastic.co/downloads/kibana/kibana-7.6.1-linux-x86_64.tar.gz 3#解压 4tar xzvf kibana-7.6.1-linux-x86_64.tar.gz 5#启动 6cd kibana-7.6.1-linux-x86_64/ 7./bin/kibana
配置
Kibana
的配置文件是, config/kibana.yml
。默认端口号是 5601
。启动 Kibana
之前需要告诉 Kibana
连接哪个ES。在配置文件中修改如下配置 elasticsearch.hosts:["http://ES-host:9200"]
即可
现在你可以通过浏览器访问 Kibana
了,如果你想查询刚刚存入 Elasticsearch
的日志信息,还需要在 Kibana
的页面做如下配置。
在 Kibana
的左侧边栏找到 management
,点击进去之后,找到 kibana
的索引管理,添加 blog-demo
索引(Logstash中配置的索引名称)。添加完成后就可以搜索了。下面我放一个截图,大家感受一下,重点关注地方都用箭头标出了。
结束
这仅仅是一篇抛砖引玉的文章,Elastic Stack里面的每个组件都大有乾坤,如果各位有精力,建议深入的研究,会有颇多收获。
推荐阅读:
·END·
花括号MC
Java·大数据·个人成长
微信号:huakuohao-mc
点一下你会更好看耶
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Kibana 5.6.4 发布,高效日志搜索和分析平台
- Kibana 6.1.2 发布,高效日志搜索和分析平台
- Kibana 6.2.1 发布,高效日志搜索和分析平台
- Kibana 6.2.4 发布,高效日志搜索和分析平台
- Kibana 6.3.2 发布,高效日志搜索和分析平台
- Kibana 6.4.0 发布,高效日志搜索和分析平台
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
谁说商业直觉是天生的
[美] 戴夫·帕特奈克 (Dev Patnaik)、[美] 彼得·莫特森 (Peter Mortensen) / 马慧 / 万卷出版公司 / 2010-07 / 36.00
《Wired to Care》是帕特奈克集近年来在创新顾问公司 Jump Associates 实务经验,与史丹佛大学教学经验之大成,虽然《Wired to Care》定位为一本用设计创新方法谈企业管理的书,但本书,活像是一本近代的设计史,从以销售为设计目标的Raymond Loewy谈起,到以人为设计中心的OXO GOOD GRIPSSwivelPeeler削皮刀。由此作者向我们揭示了企业如何运......一起来看看 《谁说商业直觉是天生的》 这本书的介绍吧!