3、如何多维度查询;
因此,需要对日志进行集中化管理,收集所有服务器上的日志信息。常见的解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集、管理、访问。
一般大型系统是一个分布式部署的架构,不同的服务器模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志管理系统,可以提高定位问题的效率。
一个完整的集中式日志管理系统,需要包括以下几个主要特点:
1、收集--能够采集多种来源的日志信息;
2、传输--能够稳定的把日志数据传输到中央系统;
3、存储--如何存储日志数据;
4、分析--可以支持UI分析;
5、警告--能够提供错误报告,监控机制。
ELK提供了一套解决方案,并且都是开源软件,之间相互配合使用,高效地满足了很多场景的应用。目前主流的一种日志系统。
ELK具体介绍:
ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。日志监控和分析在保障业务稳定运行时,起到了很重要的作用,不过一般情况下日志都分散在各个生产服务器,且开发人员无法登陆生产服务器,这时候就需要一个集中式的日志收集装置,对日志中的关键字进行监控,触发异常时进行报警,并且开发人员能够查看相关日志。elasticsearch+logstash+kibana就是实现这样功能的一套系统,并且功能更强大。
elasticsearch:基于lucene的开源搜索引擎,是一个分布式的搜索分析系统,提供搜集、分析、存储数据三大功能。主要特点有:realtime data、real time analytics、distributed、high availability、multi-tenancy、fulltext search、document oriented、conflict management、schema free、restful api等等。
logstash是一个管理日志和事件的工具,你可以收集它们,解析它们,并存储它们以供以后使用(例如日志搜索),logstash有一个内置的web界面,用来搜索你的所有日志。logstash在部署时有两种运行模式:standalone和centralized:
* standalone:standalone的意思是所有的事情都在一台服务器上运行,包括日志收集、日志索引、前端WEB界面都部署在一台机器上。
* centralized:就是多服务器模式,从很多服务器运输(ship)日志到一台总的日志(collector)服务器上用来索引和查找。
需要注意的是logstash本身并没有什么shipper和collector这种说法,因为不论是运输日志的进程还是汇集总的日志的进程运行的都是同一个程序,只是使用的配置文件不同而已。
kibana:可视化日志和数据系统,作为WEB前端可以很容易的和elasticsearch系统结合。kibana有版本2和版本3的区分,版本2采用ruby编写,部署起来很麻烦,需要安装很多ruby依赖包(目前网上多是这个版本的部署),版本3采用纯html+css编写,因此部署起来很方便,解压即用。
Filebeat隶属于Beats。目前Beats包含四种工具:
-
- Packetbeat(搜集网络流量数据)
- Topbeat(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据)
- Filebeat(搜集文件数据)
- Winlogbeat(搜集 Windows 事件日志数据)