Looyao's Blog

记录一些点滴

ELK使用笔记

| Comments

ELK即为Elasticsearch\Logstash\Kibana组合的简称,可以做日志收集,索引,查询,生成图表。

先说下我对这个组合的使用场景的理解:基本就是可以迅速查找,可以自定义图表来实时分析数据的趋势,然而并不是很适合数据统计和生成报表。比如收集WEB服务器日志,服务器应用逻辑的日志,可以迅速查找和定位问题,包括一些简单计数,可以通过自定义图表(柱状图,饼图等)来直观的展现。

Elasticsearch

这个是做数据存储和索引的,Java实现,是基于Lucence开发的,部署和简单,不管是单机还是集群。部署完成后可以安装一个head插件,可以通过WEB页面来查看和管理,部署WEB访问建议绑定到内网,然后通过nginx反代,因为nginx可以方便做一些安全访问限制和配置Virtual Host。对服务器的要求就是尽量大的内存和磁盘,然后配置选项把JVM的内存调大些,不过这样启动会很慢,本人不了解Java,不知道是否可以优化速度。

补充:Elasticsearch并不一定非要配合Kibana和Logstash来使用,很多公司用它来提供索引和搜索服务。

Kibana

这个是一个查询UI工具,用来访问Elastcisearch,它提供一些图表模板,可以自定义数据源和条件,来生成图表,本身的一些配置数据也是存贮在Elasticsearch中。Kibana3是全部都是静态文件,通过AJAX来请求ELashticsearch接口,需要配置nginx来访问。Kibana4是基于Node.js开发的,直接提供WEB服务,不过部署还是建议绑定内网IP,通过nginx反代来访问,和Elasticsearch一样。

Logstash

这个是做日志收集,指定数据源和数据格式,然后插入到Elasticsearch中。这个是Ruby开发的,这个我们并没有用,而是自己来写,更可控并且也不复杂,我们使用PHP来实现的,实现tail -f这种方式来实时获取日志信息,然后插入到Elasticsearch中,目前每天上百万数据没什么压力。Elashticsearch官方提供了PHP的库,通过Composer很方便的引入。需要注意的就是时间格式,@timestamp这个是特殊字段,Kibana用这个来做时间索引,这个字段不是int的时间戳,而是ISO8601格式,PHP使用date('c', $timestamp)来生成,不然会不识别,Kibana无法使用。在说下日志集中化收集,目前是日志写入到Beanstalk队列服务,然后统一写入日志。

最后

通过目前使用来看,还是比较方便,出问题迅速查找日志,实时的通过自定义图表来查看数据趋势,提高了很多工作效率。

Comments