ELK
ELK(Elasticsearch, Logstash, Kibana)是什么?网上很多,本文就不赘述了,这里推荐IBM的一篇文章:ELK+Filebeat 集中式日志解决方案详解,感觉图文并茂,讲的挺不错,而且里面也对Beat做了简单的说明。
Logstash vs Filebeat
这里也推荐一篇文章:Filebeat vs. Logstash — The Evolution of a Log Shipper.
如果你觉得上面的文章有些长,那我总结一下。
先看下二者的历史:
- 把Logstash和FileBeat放在一起比较其实不是非常合适,因为二者往往是互补的关系,可以配合使用,但这里放在一起比较的原因主要是说明他们的关系。
- Logstash是由Jordan Sissel(链接是Twitter的)这个大牛开发的,后来这个人加入了Elastic公司,Logstash也就由一个单独的软件变成了ELK技术栈内的一员。Logstash是由Jruby写的,运行依赖于JVM,所以它的突出问题就是性能不是很好,尤其是对内存消耗比较高。
- 同时,有人用Go语言开发了Lumberjack,刚开始的初衷是实现一个轻量级的日志收集系统,而日志分析则转交给其他软件去做,比如Logstash。Lumberjack背后的核心思想就是开发一套高效、可处理大量数据、内存消耗低、支持加密的网络协议。后来Lumberjack更名为Logstash-Forwarder,从此以后,Lumberjack单纯的指网络协议,而Logstash-Forwarder则成为基于Lumberjack的日志系统。
- 等到Lumberjack协议出了第二个版本以后(新版本的主要改变是支持嵌套JSON和一些流控机制),Logstash-Forwarder也被废弃了,出现了基于第二版Lumberjack的日志收集系统Beats。Beats是一个家族,里面包含Filebeat、Packetbeat、Winlogbeat等,用于收集不用数据源的日志,比如Filebeat用于收集文件式的日志。其中第一个出现的是Packetbeat,用于分析网络数据,后来其开发者也加入了Elastic公司,进而就有了后来其他的Beat。详情参见:https://www.elastic.co/downloads/beats。
所以从二者的发展过程中我们就能看出来,最初的Logstash是既可以做日志收集,又可以做一些复杂分析的,但缺点是性能差,特别是运行依赖于JVM,作为Agent部署到每个节点上去的时候显得有些太重。于是乎就出现了基于更高效的编译型语言Go开发的Beat系列,它们很好的替代了Logstash收集日志的那一部分功能(当然也可以做一些简单的分析),但目前还做不了复杂的分析,特别是聚集类的分析。所以在实际使用中,如果我们不需要对日志做复杂的分析,那基本上选择Beat+ES+Kibana就可以了。但如果需要做复杂的分析,往往就是Beat+Logstash+ES+Kibana。这些软件都是Elastic公司开发的,所以可以无缝配合使用。
最后附张图(图片来源于上面的文章):
Filebeat+ES+Kibana实例
该例子来源于:https://github.com/elastic/examples
当然第一步得安装对应的软件,这些软件都可以在https://www.elastic.co/downloads下载。需要说明的是目前主要有两种安装方式:一种是tar.gz包;一种是对应平台的包,比如rmp、deb等。二者各有利弊:
- 通过tar.gz的好处是用户可以自定义安装目录,所有东西都安装在该目录下,不好处是软件没有自动纳入到系统管理里面,简单说就是你不能通过
systemctl
(对于upstart系统是service
)命令去对软件的开机自动启动、软件启停等去管理,如果需要这样,需要自己手动去加service文件。 - 通过rpm、deb等包安装的好处就是安装完成之后你就可以使用
systemctl
命令去管理软件了,不好处就是安装目录无法指定,而且配置文件和其他文件是分开在不同地方的。默认安装在/usr/share/
目录下,配置文件在/etc
目录下。
萝卜白菜,各有所爱。我个人推荐至少使用tar.gz安装一次,看看里面的目录等长啥样,如果第一次就通过rpm、deb包安装,安装完后,你可能连安装到哪里了都不知道。对于下面的例子,Filebeat要使用tar.gz的方式安装。
具体的安装过程就不赘述了,官网写的比较详细,网上教程也很多。这里说几个注意点(我是基于Ubuntu 16.04的):
- 通过tar.gz包安装的话,就是解压,设置环境变量,配置等;通过rpm、deb包安装的话,一条命令就搞定了。
对于ES,
- 需要修改一下系统允许的最大虚拟内存,否则启动会失败,报错信息类似
[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
。修改方法为,在/etc/sysctl.conf
文件中增加(如果有,则修改)vm.max_map_count=262144
,需重启才可生效。 - ES不允许以root用户运行,需要使用其他用户。所以要注意其他用户一定要有权限访问和执行ES安装目录以及对应的文件。
- 需要后台运行的话,在elasticsearch启动的时候加上
-d
参数即可。 - ES的配置需要修改一下监听地址
network.host
(默认值是192.168.0.1),可修改为具体的IP或者0.0.0.0
,端口号默认9200,可以不用修改。同时建议设置一下监听数据目录path.data
,要注意修改的目录一定要是运行ES的用户可读可写的。 - 安装例子需要的ES插件:
<path_to_elasticsearch_root_dir>/bin/elasticsearch-plugin install ingest-user-agent <path_to_elasticsearch_root_dir>/bin/elasticsearch-plugin install ingest-geoip
- 安装好ES之后,在浏览器中输入(或者curl等)
http://<your_ip>:9200/
,可看到类似如下结果则表示安装成功:
{ "name" : "i-gOkTs", "cluster_name" : "elasticsearch", "cluster_uuid" : "kmCU4GOqQteFbR4CekK6dA", "version" : { "number" : "6.2.1", "build_hash" : "7299dc3", "build_date" : "2018-02-07T19:34:26.990113Z", "build_snapshot" : false, "lucene_version" : "7.2.1", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" }
- 需要修改一下系统允许的最大虚拟内存,否则启动会失败,报错信息类似
- 对于Kibana,需要设置监听IP
server.host
、ES地址elasticsearch.url
,默认端口是5601,可以不修改。装完之后,如果http://<your_ip>:5601/
能打开,则表示安装成功。
安装完之后,启动ES和Kibana。下载日志文件:apache_logs,假设下载的文件放在/root/temp目录
。然后在Filebeat安装目录执行以下命令:
./filebeat modules enable apache2
./filebeat modules list
./filebeat -e --modules apache2 --setup -M "apache2.access.var.paths=[/root/temp/*]"
如果运行正常的话,日志数据就会经Filebeat采集到ES里面(这里不需要复杂分析,所以没有使用Logstash)。在浏览器输入http://<your_ip>:9200/filebeat-*/_count
,如果看到"count":10000
字样,表示数据已经全部进入ES。
然后打开Kibana界面,选择Management
-Index Patterns
,在里面输入filebeat-*
,下一步可选择I don't want to use Time Filter
。然后打开Dashboard
,选择[Filebeat Apache2] Access and error logs
。然后在右上角选择2015-05-17 00:00:00.000
到2015-05-21 12:00:00.000
时间段,就可以看到如下分析图了:
ELK Stack作为一套开源的日志分析系统,已经被很多企业所采用,现在Beat家族加入后,相信前途会更好。
And, I love Go and Python. And, Happy Lunar New Year!
评论已关闭