ELK 是 Logstash(收集)、Elasticsearch(存储 + 搜索)、Kibana(展示),这三者的简称,以前称为 ELK Stack,现在称为 Elastic Stack,后来还加入了 Beats 来优化 Logstash。我们之前介绍了 Elasticsearch 和 Kibana 的简单使用,现在重点介绍一下 Logstash。 Logstash 是一个开源数据收集引擎,具有实时管道功能。Logstash 可以动态地将来自不同数据源的数据统一起来,并将数据标准化到你所选择的目的地。Logstash 使用 JRuby 开发,Ruby 语法兼容良好,非常简洁强大,经常与 ElasticSearch,Kibana 配置,组成著名的 ELK 技术栈,非常适合用来做日志数据的分析。当然 Logstash 也可以单独出现,作为日志收集软件,可以收集日志到多种存储系统或临时中转系统,如 MySQL,redis,kakfa,HDFS, lucene,solr 等,并不一定是 ElasticSearch。
如下图所示,Logstash 的数据处理过程主要包括:Inputs、Filters、Outputs 三部分,另外在 Inputs 和 Outputs 中可以使用 Codecs 对数据格式进行处理。这四个部分均以插件形式存在,用户通过定义 pipeline 配置文件,设置需要使用的 input、filter、output、codec 插件,以实现特定的数据采集,数据处理,数据输出等功能。
数据往往以各种各样的形式,或分散或集中地存在于很多系统中。Logstash 支持各种输入选择,可以同时从众多常用来源捕捉事件。能够以连续的流式传输方式,轻松地从您的日志、指标、Web 应用、数据存储以及各种 AWS 服务采集数据。即采集各种样式、大小和来源的数据。常见的插件如 file、syslog、redis、beats 等。
数据从源传输到存储库的过程中,Logstash 过滤器能够解析各个事件,识别已命名的字段以构建结构,并将它们转换成通用格式,以便进行更强大的分析和实现商业价值。Logstash 能够动态地转换和解析数据,不受格式或复杂度的影响:利用 Grok 从非结构化数据中派生出结构;从 IP 地址破译出地理坐标;将 PII 数据匿名化,完全排除敏感字段;简化整体处理,不受数据源、格式或架构的影响。即实时解析和转换数据。常见的插件如 grok、mutate、drop、clone、geoip 等。
尽管 Elasticsearch 是我们的首选输出方向,能够为我们的搜索和分析带来无限可能,但它并非唯一选择。Logstash 提供众多输出选择,您可以将数据发送到您要指定的地方,并且能够灵活地解锁众多下游用例。即选择您的存储库,导出您的数据。常见的插件如 elastcisearch、file、graphite、statsd 等。
Codecs Codecs(编码插件)不是一个单独的流程,而是在输入和输出等插件中用于数据转换的模块,用于对数据进行编码处理,常见的插件如 json、multiline。Logstash 不只是一个 input | filter | output 的数据流,而是一个 input | decode | filter | encode | output 的数据流!codec 就是用来 decode、encode 事件的。
起初我们是将 Logstash 部署到每一个节点上,让他采集、解析数据比较消耗 CPU 和内存资源,比较适合计算资源丰富的服务器,否则容易造成服务器性能下降,甚至可能导致无法正常工作。虽然说计算资源丰富的服务器可以提供 Logstash 所需要的资源,但是作为一个采集工具应该尽可能的降低对服务器的影响,所以又引进了 Beats,将其部署到服务器上代替 Logstash 做采集工作,再将采集到的数据发给 Logstash 解析。
Beats 是一款轻量级的数据采集器,采用 Go 语言编写。它集合了多种单一用途数据采集器。这些采集器安装后可用作轻量型代理,从成百上千或成千上万台机器向 Logstash 或 Elasticsearch 发送数据。
从源头采集,简单明了。Beats 是数据采集的得力工具。将 Beats 和您的容器一起置于服务器上,或者将 Beats 作为功能加以部署,然后便可在 Elasticsearch 中集中处理数据。Beats 能够采集符合 Elastic Common Schema (ECS) 要求的数据,如果您希望拥有更加强大的处理能力,Beats 能够将数据转发至 Logstash 进行转换和解析。
借助模块加速数据可视化体验。Filebeat 和 Metricbeat 中包含的一些模块能够简化从关键数据源(例如云平台、容器和系统,以及网络技术)采集、解析和可视化信息的过程。只需运行一行命令,即可开始探索。
跟踪数据沿袭。Beats 从您的专属环境中收集日志和指标,然后通过来自主机、诸如 Docker 和 Kubernetes 等容器平台以及云服务提供商的必要元数据对这些内容进行记录,然后再传输到 Elastic Stack 中。从监测容器到从无需服务器的架构传输数据,我们确保您拥有所需的上下文。
缺少某种采集器?别着急。您可以自行构建并分享。每款开源 Beat 都以 libbeat(转发数据时所用的通用库)为基石。需要监控某个专用协议?自行构建。我们将为您提供所需的构建基块。同时,我们的 Beats 社区正在不断壮大。
采集器 | 说明 |
---|---|
Filebeat | 轻量日志采集器;当您要面对成百上千、甚至成千上万的服务器、虚拟机和容器生成的日志时,Filebeat 将为您提供一种轻量型方法,用于转发和汇总日志与文件,让简单的事情不再繁杂。 |
Metricbeat | 轻量型指标采集器;用于从系统和服务收集指标。Metricbeat 能够以一种轻量型的方式,输送各种系统和服务统计数据,从 CPU 到内存,从 Redis 到 Nginx,不一而足。 |
Packetbead | 轻量型网络数据采集器;用于深挖网线上传输的数据,了解应用程序动态。Packetbeat 是一款轻量型网络数据包分析器,能够将数据发送至 Logstash 或 Elasticsearch。 |
Winlogbeat | 轻量型 Windows 事件日志采集器;用于密切监控基于 Windows 的基础架构上发生的事件。Winlogbeat 能够以一种轻量型的方式,将 Windows 事件日志实时地流式传输至 Elasticsearch 和 Logstash。 |
Auditbead | 轻量型审计日志采集器;收集您Linux 审计框架的数据,监控文件完整性。Auditbeat 实时采集这些事件,然后发送到 Elastic Stack 其他部分做进一步分析。 |
Headtbeat | 轻量型运行时间监控采集器;运行时间监控,通过主动探测来监控服务可用性。 |
Functionbeat | 面向云端数据的无服务器采集器;在作为一项功能部署在云服务提供商的功能即服务(FaaS)平台上后,Functionbeat 即能收集、传送并监测来自您的云服务的相关数据。 |
首先毫无疑问先去 官网下载 安装包,与 Elasticsearch、Kibana 一样解压即用。我这里选择安装 Linux 版本。将安装包上传服务器后,直接执行 tar
命名解压即可。
解压完毕后进入解压目录执行 bin/logstash -e 'input { stdin {} } output { stdout {} }'
,输入 你好
打印如下图所示说明搞定了。上述命名中参数 -e 的意思是允许你从命令行指定配置。
FileBeat 也是解压即用的,我们先去 官网下载,然后扔到服务器上解压。解压完毕后进入解压目录执行 ./filebeat version
就可以查看 Filebeat 版本信息。