Centos 7 部署ELK Stack+beats+kafka
整体的架构如下图:
介绍篇:
日志的定义:
日志是带时间戳的基于时间序列的机器运行数据,包括硬件(服务器,网络设备,存储设备,IOT设备),系统(Linux&windows&docker&*bsd),数据库(Mysql&Oracle&SQL server..),应用程序(nginx,tomcat,Apache...)。日志是反映设备运行真是数据,也是系统运行情况,故障分析,性能分析,安全问题追踪等问题的重要依据。
为啥要有集中的日志管理平台?
你公司对服务端日志你有多重视,包括web日志、应用程序日志、服务器,网络设备,存储设备,IOT设备日志等等?
-- 有日志,基本不控制日志需要输出的内容,也很少去查看日志信息;
--调整日志的格式,按照要求只输出我们想看和有用的;
--经常监控日志,一方面格式化输出日志,一方面及早通过日志中的错误信息发现程序的问题;
--高度依赖日志,做服务可用性监控,故障排查,程序性能监控等等;
--开发人员不能登录线上服务器查看日志,经过运维周转费时费力,影响排错的效率,增加程序员和运维的工作量;
日志里边包含着非常多的重要信息,是硬件设备和应用程序给出我们最直观的信息反馈,可以通过日志做到设备问题的预警,做到对应用程序的问题定位,做到对用户的行为分析等,总而言之只要你有心就能通过日志挖掘到你想要的信息;
日志怎么看?
--线上日志逐个查看
--tail+grep,可以应付不多的主机和不多的应用部署场景。但对于多机多应用部署就不合适了。这里的多机多应用指的是同一种应用被部署到几台服务器上,每台服务器上又部署着不同的多个用。可以想象,这种场景下,为了监控或者搜索某段日志,需要登陆多台服务器,执行多个tail -f和grep,sed,awk等命令。一方面这很被动。另一方面,效率非常低。
--日志统一管理,所有日志集中到一起,能够提供可视化查看日志,然后能够对日志做实时分析;比如web访问状态码统计,当有很多5xx的状态码时,所以服务已经出现有不可用现象,数据库慢查询日志统计,应用程序执行慢的日志统计等等。
利用日志还能做些什么?
--统计分析,比如接口的调用次数、执行时间、成功率等
--异常数据自动触发消息通知
--基于日志的数据挖掘
--日志数据量大,查询速度慢
--一个调用会涉及多个系统,难以在这些系统的日志中快速定位数据
--数据不够实时
Why ELK Stack ?
基于上述问题,于是许多产品或方案就应运而生了。比如,简单的 Rsyslog,Syslog-ng;商业化的 Splunk ;开源的有 FaceBook 公司的 Scribe,Apache 的 Chukwa,Linkedin 的 Kafak,Cloudera 的 Fluentd,ELK 等等。在上述产品中,Splunk 是一款非常优秀的产品,但是它是商业产品,价格昂贵,让许多人望而却步。直到 ELK 的出现,让大家又多了一种选择。相对于其他几款开源软件来说,本文重点介绍 ELK。
What is ELK Stack?
ELK Stack是Elasticsearch,Logstash,Kibana,beats,这四个开源软件的组合。在实时数据检索和分析场合,四者通常是配合共用,而且又都先后归于Elastic.co公司名下,故有此简称。
可视化 Kibana
日志存储 Elasticsearch
日志解析 Logstash
日志收集 Beat 家族
Kibana、 Elasticsearch、Logstash、beats 组合工作原理如下所示:
Kibana 是一款基于 Apache 开源协议,使用 JavaScript 语言编写,为 Elasticsearch 提供分析和可视化的 Web 平台。它可以在 Elasticsearch 的索引中查找,交互数据,并生成各种维度的表图。
主要特点:
Kibana 核心搭载了一批经典功能:柱状图、线状图、饼图、环形图,等等。它们充分利用了 Elasticsearch 的聚合功能。
Elasticsearch 是一个分布式的 RESTful 风格实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。它是一个建立在全文搜索引擎 Apache Lucene 基础上的搜索引擎,使用 Java 语言编写。
主要特点:
实时分析
快到不可思议,但是要达到这样的速度并非易事。我们通过有限状态机实现了用于全文检索的倒排索引,实现了用于存储数值数据和位置数据的 BKD 树, 以及用于分析的列存储。
分布式实时文件存储,并将每一个字段都编入索引
文档导向,所有的对象全部是文档
高可用性,易扩展,支持集群(Cluster)、分片和复制(Shards 和 Replicas)。见图 2 和图 3
接口友好,支持 JSON
Logstash 是开源的服务器端数据处理管道,能够同时 从多个来源采集数据、转换数据,然后将数据发送到您最喜欢的 “存储库” ElasticSearch中。
采集各种样式、大小和来源的数据
数据往往以各种各样的形式,或分散或集中地存在于很多系统中。Logstash 支持各种输入选择 ,可以在同一时间从众多常用来源捕捉事件。能够以连续的流式传输方式,轻松地从您的日志、指标、Web 应用、数据存储以及各种 AWS 服务采集数据。
实时解析和转换数据
数据从源传输到存储库的过程中,Logstash 过滤器能够解析各个事件,识别已命名的字段以构建结构,并将它们转换成通用格式,以便更轻松、更快速地分析和实现商业价值。
Logstash 能够动态地转换和解析数据,不受格式或复杂度的影响:
利用 Grok 从非结构化数据中派生出结构
从 IP 地址破译出地理坐标
将 PII 数据匿名化,完全排除敏感字段
整体处理不受数据源、格式或架构的影响
选择您的存储库,导出您的数据
尽管 Elasticsearch 是我们的首选输出方向,能够为我们的搜索和分析带来无限可能,但它并非唯一选择。
Logstash 提供众多输出选择,您可以将数据发送到您要指定的地方,并且能够灵活地解锁众多下游用例。
Beats 平台集合了多种单一用途数据采集器。这些采集器安装后可用作轻量型代理,从成百上千或成千上万台机器向 Logstash 或 Elasticsearch 发送数据。之前都是使用logstash 来做日志的收集,搬运等工作,但是因为logstash 占用cpu和内存资源过大,所以才有了Go 语言开发的Beats 家族;
Filebeat 和 Metricbeat 内部集成了一系列模块,用以简化收集、解析和可视化常见日志格式,诸如: NGINX、Apache 或系统指标,如:Redis或Docker
包含如下几个模块:
Filebeat 日志文件、
Metricbeat 指标
Packetbeat 网络数据
Winlogbeat Windows 事件日志
Auditbeat 审计数据
Heartbeat 运行时间监控
下一篇主要介绍Kafka 的相关信息及如何配置整套系统。
原文地址:http://blog.51cto.com/seekerwolf/2085891