【ELK 实施与部署(一)】Logstash 和 Filebeat 的安装与使用

【本文目录】


【测试环境】:Ubuntu 16.04


1 ELK 概述

1.1 前言

在服务器日常运维工作中,对系统和业务日志的处理很重要。通常,日志被分散存储在不同的路径或者不同的设备上,这时候就需要集中化的日志管理。而集中化管理日志后,日志的统计和检索又是一件需要考虑的事情。对日志进行集中化管理,将所有设备上的日志信息收集并汇总,得到的完整日志数据有啥作用呢?

  • 1、信息查找:通过检索日志,可以定位bug,为找出解决方案提供帮助。
  • 2、服务诊断:通过日志统计、分析,了解服务器的负荷和运行状态,可以找出耗时耗能的请求从而进行优化等等。
  • 3、数据分析:格式化之后的日志,可以进行数据分析,得出有意义的信息。

开源的实时日志分析 ELK 平台能够完美的解决上述的痛点,ELK 是由 ElasticSearch、Logstash 和 Kiabana 三个开源工具构成,在这里我们还将用到 Filebeat 这个开源工具,这四个都是 Elastic 旗下的产品。下面简单介绍一下:

  • Filebeat:Filebeat 是一种轻量型日志采集器,用于转发和汇总日志与文件。当将数据发送到 Logstash 时,Filebeat 使用背压敏感协议,以考虑更多的数据量。如果 Logstash 正在忙于处理数据,则可以让 Filebeat 知道减慢读取速度。一旦拥堵得到解决,Filebeat 就会恢复到原来的步伐并继续运行。
  • Logstash:Logstash 是开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到“存储库”Elasticsearch 中。
  • ElasticSearch:ElasticSearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful web 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。
  • Kibana:Kibana 是一个基于浏览器页面的 Elasticsearch 前端展示工具。 它可以在 Elasticsearch 中对数据进行视觉探索和实时分析。

1.2 ELK 架构

最简单的一个安装 ELK 的架构图如下:

  • 首先使用 Filebeat 获取服务器上的日志。当启动 Filebeat 时,它将启动一个或多个 prospectors(检测者),查找服务器上指定的日志文件,作为日志的源头等待输出到 Logstash。
  • 然后 Logstash 将 Filebeat 输入的日志文件进行处理(Filebeat 其实就是Logstash 的一个输入插件 beats),接着讲处理好的日志文件输出到 Elasticsearch 进行处理。
  • 再接着 Elasticsearch 得到 Logstash 的数据之后进行相应的搜索存储操作。将写入的数据处理成可以被检索和聚合等,以便于搜索操作。
  • 最后 Kibana 通过 Elasticsearch 提供的 API 将日志信息可视化的操作。

2 Logstash

根据上边的架构图,虽然应该是先安装 Filebeat 的,但是 Filebeat 只是 Logstash的一个输入插件 beats,Logstash 具有很多输入插件,例如:标准输入插件stdin、文件输入插件 file 等等。

2.1 Logstash 安装与测试

(1)首先确保 JDK 版本为 1.8 以上,然后 下载 Logstash 并解压进入文件夹。

选择红色框中的版本,右键复制下载地址,然后使用 wget 下载。

  • wget https://artifacts.elastic.co/downloads/logstash/logstash-5.6.0.tar.gz

等待下载完成之后,使用 tar 解压,并进入文件夹内部。

主要文件夹包含 bin、data、lib、config 等。其中 bin 包含了一写可执行脚本文件,data 是用于存储数据的,lib 是一些系统所依赖的 jar 文件,config 包含一些配置文件。

(2)测试是否安装成功,运行最基本的 Logstash 管道:

  • bin/logstash -e 'input { stdin { } } output { stdout {} }'

启动成功之后,可以在控制台输入任何内容,他都会输出相同的内容。

至此,Logstash 的安装和使用完成~

2.2 Logstash 使用配置文件的方式运行

刚刚是通过命令行方式运行的,下面我们来试试通过配置文件运行 Logstash。

首先创建一个 logstash.conf 的配置文件放在 logstash-5.6.0 目录下,内容为:

input {
    stdin {
    }
}
output {
    stdout {
    }
}

然后在终端上运行,其中 -f 表示指定使用的配置文件运行:

  • bin/logstash -f logstash.conf

2.3 Logstash基本原理

Logstash 管道有两个必需的元素,输入和输出,以及一个可选元素,过滤器。输入插件从源获取数据,过滤器插件根据指定的内容修改数据,输出插件将数据写入目标。如下图:

Logstash 事件处理管道有三个阶段:输入 → 过滤器 → 输出。输入生成事件,过滤器修改它们,并将输出发送到其他地方。

输入:采集各种样式、大小和来源的数据。

  • 数据往往以各种各样的形式,或分散或集中地存在于很多系统中。 Logstash 支持 各种输入选择 ,可以在同一时间从众多常用来源捕捉事件。能够以连续的流式传输方式,轻松地从我们的日志、指标、Web 应用、数据存储以及各种 AWS 服务采集数据。

过滤器:实时解析和转换数据。

  • 数据从源传输到存储库的过程中,Logstash 过滤器能够解析各个事件,识别已命名的字段以构建结构,并将它们转换成通用格式,以便更轻松、更快速地分析和实现商业价值。

    • 利用 Grok 从非结构化数据中派生出结构
    • 从 IP 地址破译出地理坐标
    • 将 PII 数据匿名化,完全排除敏感字段
    • 简化整体处理,不受数据源、格式或架构的影响

Logstash 的 过滤器库 丰富多样,拥有无限可能。

输出:选择存储库,导出数据。

  • 尽管 Elasticsearch 是我们的首选输出方向,能够为我们的搜索和分析带来无限可能,但它并非唯一选择。Logstash 提供 众多输出选择,我们可以将数据发送到指定的地方,并且能够灵活地解锁众多下游用例。

另外,Logstash 的输入和输出支持编解码器,使我们能够在数据进入或退出流水线时对其进行编码或解码,而无需使用单独的过滤器。也就是说,其实 Logstash 是一个 input–decode –filter–encode–output 的数据流!


3 Filebeat

在创建 Logstash 管道之前,可以配置 Filebeat 以将日志行发送到 Logstash(当然也可以发送到 Elasticsearch )。Filebeat 是一个轻量型日志采集器,他可以从服务器上的文件中收集日志,并将这些日志转发到 Logstash 实例进行处理。

3.1 为什么使用 Filebeat

  • 性能稳健,不错过任何检测信号
    • 无论在任何环境中,随时都潜伏着应用程序中断的风险。Filebeat 能够读取并转发日志行,如果出现中断,还会在一切恢复正常后,从中断前停止的位置继续开始。
  • 让复杂的事情简单化
    • Filebeat 内置的多种模块(auditd、Apache、NGINX、System 和 MySQL)可实现对常见日志格式的一键收集、解析和可视化,并自带了常见的 Kibana 仪表板。
  • 部署到容器
    • 部署 Filebeat 在独立的容器或是同一个宿主机上,都可收集宿主机上面所有容器的日志。
    • 通过挂载共享的磁盘卷,Filebeat 即可读取所有的这些日志文件。
    • 或是借助 Docker JSON 驱动,Filebeat 即可通过 Docker prospector 来收集您容器的日志。
    • 如果还要更简单?为 Docker 准备的 Autodiscovery 可以让我们根据一个条件来开启 Filebeat 的特定模块,或是收集指定目录的日志。
  • 防止管道过载
    • 当将数据发送到 Logstash 或 Elasticsearch 时,Filebeat 使用背压敏感协议,以考虑更多的数据量。
    • 如果 Logstash 正在忙于处理数据,则可以让 Filebeat 知道减慢读取速度。一旦拥堵得到解决,Filebeat 就会恢复到原来的步伐并继续运行。

3.2 Filebeat 安装与使用

注意:在实际开发和生产环境中,Filebeat 一般和 Logstash 运行在不同的机器上,本文中 Logstash 和 Filebeat 在同一台机器上运行。

(1)下载Filebeat,并解压进入文件夹。

右键红色框复制下载地址,通过 wget 下载:

  • wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.6.0-linux-x86_64.tar.gz

接着使用 tar 解压并进入文件夹:

  • tar -xvf filebeat-5.6.0-linux-x86_64.tar.gz

(2)修改配置文件,将要收集日志的服务器(这里是本机)和 Filebeat 连接起来。位于 Filebeat 安装目录中的 filebeat.yml 文件,修改需要检测的服务器的日志文件位置(改完先别退出 vim)。

PS:如果要想收集 Tomcat 的日志文件,修改检测路径为 Tomcat 的日志文件位置即可,注意要开启 Tomcat

(3)修改配置文件将 Filebeat 和 Logstash 连接起来。同样是修改 filebeat.yml 文件,将 output.elasticsearch 注释掉,并打开 Logstash 的注释,修改之后内容如下:

(4)启动 Filebeat。在数据源机器上使用以下命令运行 Filebeat:

  • ./filebeat -e -c filebeat.yml -d "publish"

Filebeat 将尝试在端口 5044 上连接。直到 Logstash 探测到活动的 Beats 插件开始,该端口将不会有任何内容(会显示拒绝 connection refused)。因此,您看到的有关无法在该端口上连接的任何消息是正常的。如果配置成功的话,就会去读取你指定的日志文件,如下:

(5)修改 Logstash 的配置文件,将 Filebeat 设置为输入。修改前边创建的 logstash.conf 文件(新建一个终端,Filebeat 启动的终端不要关),修改后的配置文件如下:

input {
 beats {
    port => "5044"
 }
}

output {
  stdout {
    codec => rubydebug
  }
}

这里将 beats(就是Filebeat)插件作为输入插件,端口号为 5044。通过标准输出插件将数据显示在控制台中,其中 rubydebug 就是一种 Codec,一般也只用在 stdout 插件中,作为配置测试或者调试的工具。

验证配置是否正确,运行以下命令:

  • bin/logstash -f logstash.conf --config.test_and_exit
  • --config.test_and_exit 选项将解析配置文件并报告任何出现错误的错误。

配置文件通过后,使用以下命令启动 Logstash:

  • bin/logstash -f logstash.conf --config.reload.automatic
  • --config.reload.automatic 选项启用自动配置重新加载,这样就不必在每次修改配置文件时停止和重新启动 Logstash。

配置成功之后,如果 Tomcat 服务器有日志更新,在 Logstash 和 Filebeat 都会显示出来。这个时候 Filebeat 也不会在报错,因为已经在 5044 端口和 Logstash 建立了连接。

Logstash:

Filebeat:

至此,Logstash 和 Filebeat 的安装与使用,以及他们的连接已经完成!


参考链接:Linux操作系统安装ELK stack日志管理系统--(1)Logstash和Filebeat的安装与使用