logstash 日志
James Turnbull通过解释LogStash在日志项目上下文中的实现细节,为使用LogStash集中日志提供了令人信服的案例。 《 Logstash手册》通过双面案例同时针对小型公司和大型企业。 较低的进入门槛和扩展能力。 James在今年 2月初谈到了关于Hangops的书 ,“它是为从未接触过LogStash的人,系统管理员,开发人员,devops和操作人员设计的。我希望您对unix或linux有所了解。” 他继续说:“此外,它假设您没有LogStash的先验知识。”
过度简化日志管理的问题
James来自系统管理员和安全背景。 他解释了计算环境如何以无法扩展的方式发展了日志管理。
他分享说,一般来说,它是通过进化的过程而瓦解的,首先是对木材而言,对人们来说最重要,也就是说,当麻烦来临时。 那时,新管理员将开始使用经典工具cat,tail,sed,awk,perl和grep检查日志。 这种做法有助于围绕有用的工具开发一套良好的技能,但是并不能扩展到少数主机和日志文件类型。 在意识到可伸缩性问题之后,团队将发展为使用集中式日志记录以及rsyslog和syslog-ng之类的工具。
尽管这已经开始解决规模问题,但James表示这并不能真正解决日志管理问题,尽管因为现在有大量的不同日志事件类型,不同格式,不同时区,并且基本上缺乏易于理解的内容上下文。 最终,团队可以使用可以处理大量存储,搜索,过滤等操作的日志记录技术来改进其计算环境。 最后,不幸的是,这种方法包括大量的浪费并且具有相对较高的成本。 LogStash通过像传统的系统管理员工具一样满足较低的进入门槛的要求,从而节省了一天的时间,但是LogStash的架构完全适合于大规模Web部署。
LogStash体系结构概述
LogStash提供了一种用于收集,解析和存储日志的体系结构。 此外,LogStash实现的主要交叉使用案例之一是查看/搜索托管日志事件。 James建议使用开源项目Kibana搜索事件。 本月初,LogStash的创建者Jordan Sissel在推特上发布了推文,其中说“ logstash的最新每日构建都随kibana3一起发布 :java -jar logstash.jar kibana” James和Jordan都在撰写有关Kibana的文章,因为它提供了用户友好的搜索功能与用于LogStash的存储引擎Elasticstorage集成的接口。 以下Kibana的屏幕截图来自LogStash书籍的第3章,您可以在线观看其演示 :
(点击图片放大)
除了查看日志外,还有一种组件体系结构,可管理从不同服务器到代理并最终进入存储的日志流。 James为读者提供了开箱即用配置中对LogStash中每个组件的探索,该配置使用开源密钥值存储Redis来对日志进行排队以准备建立索引。 它还使用Elasticsearch来存储日志并用作查看系统的后端。 第3章中的下图显示了不同的体系结构组件类型,包括:托运人,经纪人,索引器和查看器:
在本书中,James详细介绍了LogStash实例中的三个主要功能:获取输入事件,过滤事件数据和输出事件。 LogStash的这三个功能是基于存储在易于理解的“ .conf”文件中的配置信息执行的。 “ .conf”文件包含LogStash使用的三种不同类型的插件的部分:输入,过滤器和输出。 每个LogStash实例都是经过定制的,以满足其在整个体系结构中角色的要求。 例如,托运人的这种配置(包含一个输入和两个输出)来自第3章:
input {
redis {
host => "10.0.0.1"
type => "redis-input"
data_type => "list"
key => "logstash"
}
}
output {
stdout {
debug => true
}
elasticsearch {
cluster => "logstash"
}
}
开源LogStash适合DevOps文化
LogStash是一种免费使用的开放源代码工具,已构建为可在开放源代码工具生态系统中工作,因此,James自称为“开放源极客”,因此写了一本有关此书的书很有意义。 LogStash生态系统中的所有工具均可从命令行安装,配置和管理,是自动化的理想选择。 在整本书中,James明确指出,使用自动化配置管理系统控制LogStash中每个组件的安装/配置是理想的选择。 但是,该主题超出了本书的范围,因此下一个最好的内容是了解如何安装和配置软件组件。 将了解与自动化相结合,可以无缝构建多个环境。 在项目的不同阶段,问答,故障排除以及支持持续交付方面,它可以自由地旋转无限的环境。
安装Java,LogStash,Redis和Elasticsearch
James展示了逐步安装LogStash及其相关组件的过程确实很容易。 同样,乔丹·西塞尔(Jordan Sissel)提出了LogStash项目原则之一:“社区:如果新手过得不好,那就是错误。” LogStash取决于Java,因此至少需要安装OpenJDK才能运行LogStash。 大多数Linux发行版都通过其软件包管理系统使OpenJDK易于使用。 例如,在Debian / Ubuntu上,命令是“ sudo apt-get install openjdk-7-jdk”以进行安装;在Red Hat / Centos上,命令是“ sudo yum install java-1.7.0-openjdk”。 Jordan Sissel将LogStash分发到一个Jar文件中,该文件可以从LogStash.net主页检索。 在OpenJDK上运行LogStash所需的全部是命令行上指定的Jar文件和配置文件。 与OpenJDK相似,可通过软件包管理系统轻松地安装Redis,Debian / Ubuntu上的命令为“ sudo apt-get install redis-server”,而在Red Hat / Centos上的命令为“ sudo yum install redis”。 在修改“ /etc/redis/redis.conf”中的一些配置设置并将其作为服务启动后,Redis可以开始处理事件。 像LogStash一样,Elasticsearch只需要预安装Java。 对于Debian / Ubuntu Linux, Elasticsearch可以作为“ .deb” 下载 ,对于Red Hat / Centos Linux,可以作为“ .rpm”下载。 它也需要在“ /etc/elasticsearch/elasticsearch.yml”文件中进行少量配置,因此可以开始启动了。
LogStash组件:托运人,经纪人,索引器
本书在托运人和索引器中使用了三种LogStash插件类型。 James展示了如何在LogStash中使用以下输入插件:file,stdin,syslog,伐木工人和redis。 对于无法安装LogStash的环境,还有其他用于发送与LogStash集成的事件的选项:syslog,Lumberjack,Beaver和Woodchuck。 LogStash中的输入和输出插件之间有重叠,例如,输入和输出redis插件都存在。 除了涵盖的主要两个输出(redis和elasticsearch)之外,James还包括与其他系统集成的输出,包括:Nagios,电子邮件警报,即时消息和StatsD / Graphite。 本书涵盖的过滤器包括:grok,date,grep和multiline。 James展示了过滤器插件如何能够有效地处理后缀日志和Java应用程序日志。 在某些情况下,可以在LogStash将日志用作输入之前对其进行过滤,例如Apache日志记录具有自定义格式功能,该功能允许以JSON格式进行日志记录,LogStash无需内部过滤器插件即可轻松处理。 我们将代理指定为Redis,用于管理事件流,LogStash以此角色支持以下其他队列技术:AMPQ和ZeroMQ。 LogStash的Indexer实例执行到搜索/存储的路由。
扩展LogStash
扩展LogStash可实现三个主要目标:弹性,性能和完整性。 下图来自本书的第7章,它说明了Redis,LogStash和Elasticsearch的缩放比例:
LogStash不依靠Redis本身来管理故障转移。 相反,LogStashh将事件发送到已配置的两个Redis实例之一。 然后,如果所选的Redis实例不可用,LogStash将开始将事件发送到另一个已配置的Redis实例。 作为索引器,可以通过创建多个实例来轻松扩展LogStash,这些实例不断从所有可用的Broker中拉出并输出到Elasticsearch。 在此设计事件中,仅将事件传递给一个Broker,因此不应有任何重复项通过LogStash索引器传递到Elasticsearch。 当您安装多个实例并将配置设置为具有通用设置时,Elasticsearch可以轻松地自身集群。 它使用多播,单播或EC2插件根据每个单独实例中的配置设置将自身群集。 只要网络允许实例进行通信,它们便会群集自己并开始在群集节点之间分配数据。 数据中的划分是自动进行的,以提供弹性和性能。
InfoQ还就LogStash采访了James Turnbull。
InfoQ:您认为LogStash集中式日志记录系统在成功的商业案例中会带来哪些收益和成本?
James:LogStash的优势是大多数开源系统管理工具所特有的:软件成本低廉,开源,因此具有可扩展性,快速的开发和错误修复,令人敬畏的社区开发解决方案,相互帮助以及制定路线图的能力。解决您的问题。 成本也与大多数开源工具相似:没有所需的商业支持,没有某些商业替代品提供的全部功能,并且就所需的技能和可用的文档而言,可能存在更高的准入门槛(尽管现在您可以有一本很棒的书!),以供实施。
InfoQ:为什么面向DevOps的技术团队会选择LogStash系统中的开源工具,而不是像Splunk这样的商业工具?
InfoQ:什么是最容易理解和最有用的日志用例? 如果对于企业中的不同角色而言,它们会有所不同,请您描述一下这种区别吗?
James:日志记录的最佳用例是故障排除和监视。 当基础结构出现问题时,来自应用程序的日志数据通常是最佳的信息来源。 它们还代表了一个极好的数据源,可用于监视基础结构中的状态和事件以及构建用于演示应用程序性能的指标。
话虽这么说,企业组织中的不同团队在乎那些日志记录用例的不同方面。 例如,运营团队专注于故障排除和性能数据日志可以提供。 应用程序开发人员对使用日志输出来帮助查找和修复错误非常感兴趣。 安全团队专注于确定日志数据可能突出显示的漏洞和安全事件。