您的位置:首页 > 运维架构

全方位立体监控之日志解决方案ELK(3)

2016-06-06 14:46 162 查看
在实际生产环境中,除了框架本身的特性,还需要考虑更多符合自身硬件条件以及业务需求来进行大量的改造优化工作,而这一步往往是最重要。

下面是搭建生产环境过程中,可能遇到的问题以及解决方案:

Logstash作为远程Agent,需要占用服务器太多资源,并且必须依赖Java环境。每增加一台服务器,部署成本相比较大。

解决方案:

使用Filebeat作为远程agent,Filebeat使用当前流行高效率go语言开发,客户端采集日志无需安装JDK。Filebeat安装包十分小,同样使用配置文件的方式进行日志收集传输,相比Logstash更加轻量级和易部署,对系统资源开销更小。Filebeat还拥有更高的安全性,可以采用设置SSL证书的方式来进行管控。

ELK官方推荐Redis作为中间缓冲池,但是Redis并不是专业的消息队列处理工具,Redis的集群解决方案3.0版本还处于试用版,不太稳定,主备结构不够灵活。

解决方案:

使用kafka取代redis。Kafka是分布式的消息系统,以可水平拓展和高吞吐率为广泛使用。以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上的数据也能保持数据常数时间复杂度的访问性能。并且即使在廉价的商用机上也能做到单机支持100K/s以上的数据传输。并且能够做到消息分区以及分布式消费,同时保证每个分区内的消息顺序传输等功能。能够很好的满足当前微服务框架的数据量。

对于未来数据量的预估情况,Elasticsearch单机模式无法承受如此多的数据量。 如何进行扩容优化?

解决方案:

首先Elasticsearch可以通过创建一个或多个节点,组成集群的概念。默认情况下,每个索引在Elasticsearch节点中有5个分片,一个副本。这意味着,至少需要2个节点在集群中,否则集群会出现黄色警告,告诉你有未被分配的节点。每个分片其实就是一个lucene索引,每个分片最大索引数量是Integer.MaxValue。所以,我们完全可以通过判断数据量的情况,增加节点,增加分片来进行扩容。

Kibana中记录了大量的数据,登录访问都没有任何限制,容易造成数据泄露的危险。

解决方案:

首先,Kibana4相比较Kibana3,并不是纯静态文本的单页应用,在用户量较多的情况下,可以进行多点部署,使用Ngnix做一层代理。Ngnix中可以进行简单的权限控制。

根据以上的问题点,以及自身实际情况,我们对日志系统的基本架构有了一些修改,并且明确了ELK所处的各个阶段。



如上图所示,我们将使用Filebeat作为远程Agent端,安装在系统服务器上进行日志收集,然后将其转发到shipper端的Logstash中,由Logstash对数据进行初步分类和格式化,再发送到kafka中进行数据缓冲。Indexer端的Logstash从kafka中取出数据,并进行一系列filter处理成最终的数据格式,然后存储到Elasticsearch集群。最后由用户通过Kibana进行数据搜索统计等一系列操作,完成整个日志系统的流程。

性能测试以及优化

系统部署实践的可行性中,性能是非常重要的考虑点。为了系统的高可用性以及可靠性,我们可以在这些数据中清楚的看到可优化的地方以及未来可以改善的方向。

其中Elasticsearch的优化主要在于集群节点以及分片副本的设置,Kibana4的性能官方基本已经优化到很好的地步,所以性能测试主要在于logstash的Input,filter,output的类型选择方面。我们可以使用PV管道命令来进行以下测试:

机器: Intel Core i5,4核,8G内存,OS X10.11.4

logstash版本:2.3.1

例:数据空转

利用generator Input和codec => dots插件,凭空generator查件用来凭空生成数据,codec用来将输出转化为一个”.”,一个点代表1B数据量。

命令:

./logstash –f generator.conf | pv –Wabt > /dev/null

input {
generator {
count => 10000000
}
}
output{
stdout{
codec => dots
}
}


结果:1event输出1B数据,平均57.6KiB/s,所以logstash空转数据能达到大概59K event/s.

9.54MiB 0:02:48 [58KiB/s] [58KiB/s]
9.54MiB 0:02:46 [58.5KiB/s] [58.5KiB/s]
9.54MiB 0:02:53 [56.3KiB/s] [56.3KiB/s]


下图是对各个不同的Input进行性能测试的结果,我们可以明显看到,利用其它传输缓冲池的传输速率会明显下降,但是同一时间至少写入速度能达到3.4 k event/s,输出速率最少能达到1.65k event/s,并且可以通过修改线程数量以及线程大小的方式使速率得到数量级的提升。从这当中,可以根据实际情况选择适合自身系统的插件。



未来展望

ELK作为轻量级的日志收集系统,在做为监控平台中数据收集分析阶段能起到巨大的作用,开发人员可以对数据进行各种分析使用,并且可以与报表、系统报警等各方面结合起来,轻松解决运维难题。后期数据可以保存到各个不同的领域,例如数据库、HDFS等方面,起到更多的作用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: