版权声明:本文为博主原创文章,转载请注明出处:https://twocups.cn/index.php/2021/03/06/29/

Beats 官方网站:https://www.elastic.co/cn/beats/

部署 Nginx

首先,我们之前说过 Beats 在 Elastic Stack 中的功能是采集数据。他不仅可以采集系统中的指标或者日志,还可以采集系统中的软件的相关信息,就比如 Nginx。那我们就在部署 Beats 之前,先来部署一下 Nginx。

Nginx 官方网站:http://nginx.org/

Nginx 官方下载地址:http://nginx.org/en/download.html

各位可以从官网下载,也可以直接用我们提供的整合包中的安装包,版本是 1.11.6。我们首先把 Nginx 的安装文件解压到根目录的 /soft 文件夹下。

# 移动到根目录下的 /soft 文件夹下
cd /soft
# 解压 Nginx 安装包
tar -zxvf nginx-1.11.6.tar.gz

在配置和启动 Nginx 之前,我们还需要安装 Nginx 所需的环境

# 安装 gcc 环境
yum install gcc-c++
# 安装第三方开发包
# 安装 PCRE 库
yum install -y pcre pcre-devel
# 安装 zlib 库
yum install -y zlib zlib-devel
# 安装 OpenSSL
yum install -y openssl openssl-devel

简单说一下,gcc 是一个编译器包,原来指 GNU C Compiler,后来由于包含了很多种语言的编译器,所以改为 GNU Compiler Collection;PCRE(Perl Compatible Regular Expressions)是一个 Perl 库,包括 perl 兼容的正则表达式库,被 nginx 的 http 模块用来解析正则表达式的;zlib 库提供了很多种压缩和解压缩的方式,被 nginx 用来对 http 包的内容进行压缩和解压缩;OpenSSL 是一个强大的安全套接字层密码库,由于 Nginx 同时支持 http 协议和 https 协议,所以也要用到它。

安装完环境后进入 Nginx 文件夹,进行配置编译安装

# 进入 Nginx 文件夹
cd /soft/nginx-1.11.6
# 配置
./configure
# 编译
make
# 安装
make install

安装完之后就可以启动了。

# 进入 /usr/local/nginx/sbin 文件夹
cd /usr/local/nginx/sbin/
# 启动 Nginx
./nginx

之后访问主机的80端口:http://192.168.56.101:80,或者不加“:80”,也是默认访问80端口的。看到以下界面,说明 Nginx 启动成功了。

部署 Filebeat

Beats 是一系列轻量级数据采集工具,开源的力量创造出的 Beats 已有上千种。而比较常见的 Beats 有以下七种。

  • Filebeat:采集日志文件
  • Metricbeat:采集指标
  • Packetbeat:采集网络数据
  • Winlogbeat:采集 Windows 事件日志
  • Auditbeat:采集审计数据
  • Heartbeat:监控运行时间
  • Functionbeat:无需服务器的采集器

我们先说 Filebeat。Filebeat 是一个轻量级的日志采集系统,相当于做了一个批量的 tail 操作,通常用来配合 Elasticsearch 用以追踪全部日志中的异常行为。通俗点说,我们可以用 Filebeat 来监控、收集日志文件中的数据,然后将这些数据存入Elasticsearch,之后通过 Kibana 做一个可视化,从而让系统或者软件的情况更加直观,也更加容易地找到数据异常的地方。

关于 Filebeat 的运行流程。我们先通过 input 输入来指定多个数据源,匹配到相应的日志后,Filebeat会使用 Harvest(收割) 将日志文件的内容不断地“收割”进来,最后将这些信息传递到 Spooler(卷宗、卷轴),Spooler 又会将这些信息传递到指定的地方。

Filebeat 主要由三个组件组成:采集器 harvester、查找器 prospector、输入 input。

采集器 harvester 的功能是读取单个文件的内容。harvester 对每个文件都是采取逐行读取的操作,并把这些内容发送到输出。并且,每个指定的文件都会启动一个 harvester,并由 harvester 来负责打开和关闭这些文件,这也意味着 harvester 运行时文件描述符保持着打开的状态。

查找器 prospector 负责管理 harvester,并找到所有要读取的文件来源。如果输入类型为日志,则 prospector 将查找路径匹配的所有文件,并为每个文件启动一个 harvester。Filebeat 目前支持两种 prospector 类型:log(日志)和 stdin(控制台)。

还有一个问题,就是 Filebeat 如何保持读取文件状态的问题。首先,Filebeat 会保存每个文件的状态并经常将状态刷新到磁盘上的注册文件中,文件状态会被记录在 /data/registry 文件中。这个状态的作用是记住harvester正在读取的最后偏移量,并确保发送所有日志行。如果 Filebeat 的输出无法使用,Filebeat 会跟踪最后发送的行,并在输出再次可以用时继续读取文件。在 Filebeat 运行时,每个 prospector 内存中也会保存的文件状态信息,当重新启动 Filebeat 时,将使用注册文件的数量来重建文件状态,Filebeat 将每个 harvester 在从保存的最后偏移量的位置继续读取数据。

输入 input 和 prospector 有点像,也是负责管理 harvester,并找到所有要读取的源。如果 input 的类型是 log,那么 input 查找驱动器上与已定义的 glob 路径匹配的所有文件,并为每个文件启动一个 harvester。每个 input 都在自己的 Go 例程中运行。

下面开始安装并配置 Filebeat

# 创建 beats 文件夹
mkdir /soft/beats
# 把 Filebeat 解压进去
cd /soft/beats
tar -zxvf filebeat-6.5.4-linux-x86_64.tar.gz
# 进入 Filebeat 根目录并创建配置文件
cd ./filebeat-6.5.4-linux-x86_64
vim testConfig.yml

可以在这个配置文件中,将 Filebeat 的输入和输出都指定到控制台(stdin),我就不举例了。我直接举例一个读取 Nginx 日志,并且输出到 Elasticsearch 的配置文件。我们创建一个配置文件 testConfig-nginx.yml,并写入:

filebeat.inputs: # 输入信息
- type: log # 输入类型是 log(日志)
  enabled: true # 启用日志输入
  paths: # 日志的路径
    - /usr/local/nginx/logs/*.log
  tags: ["nginx"] # 添加自定义字段,方便后续处理
  fields_under_root: false 
setup.template.settings:
  index.number_of_shards: 1 # 指定下载数
output.elasticsearch:
  hosts: ["127.0.0.1:9200"] # 输出到本机的 Elasticsearch

以上这种方法是录入 Nginx 日志的原数据。由于这些数据并没有经过处理,所以后期操作起来会很麻烦,适合一般的日志收集。其实,在 Filebeat 中有很多现成的 Module,可以理解为模板,直接就能拿来用的,而且会帮你把日志原数据处理好。

首先,我们需要看 Filebeat 中 Module 有哪些。

# 查看 Filebeat 所有支持的 Module
./filebeat modules list

常用的软件,甚至操作系统,都是有 Module 的,这里就不一一列举了。如果我们要使用 Nginx 的 Module,是需要手动开启一下的。

#启动
./filebeat modules enable nginx 
#禁用
./filebeat modules disable nginx 

开启了 Nginx 的 Module 之后,我们就可以进去配置了。我们只需要在 Module 中添加 Nginx 日志的路径就可以了,很方便。

# 进入 Filebeat 中 Module 的配置文件夹 modules.d
cd modules.d/
# 进入 Nginx 的配置文件
vim nginx.yml

- module: nginx
  # Access logs
  access:
    enabled: true
    var.paths: ["/usr/local/nginx/logs/access.log*"]
    # Set custom paths for the log files. If left empty,
    # Filebeat will choose the paths depending on your OS.
    #var.paths:

  # Error logs
  error:
    enabled: true
    var.paths: ["/usr/local/nginx/logs/error.log*"]
    # Set custom paths for the log files. If left empty,
    # Filebeat will choose the paths depending on your OS.
    #var.paths:

其中,aceess.log 和 error.log 都带了“*”。这是因为 Nginx 的日志是以天数划分的,所以带了“*”就可以收集到所有的日志了。之后,我们修改一下配置文件 testConfig-nginx.yml

filebeat.inputs:
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml # 输入读取 Module 的配置
  reload.enabled: false
setup.template.settings:
  index.number_of_shards: 1 # 下载数
output.elasticsearch:
  hosts: ["127.0.0.1:9200"] # 输出到本机的 Elasticsearch

最后,启动我们设置好的 Filebeat。

# 按照配置启动 Filebeat
./filebeat -e -c testConfig-nginx.yml
# 参数说明
# -e:输出到标准输出
# -c:指定配置文件
# -d:输出 debug 信息
# -d "publish":显示所有"publish"相关的调试信息

部署 Metricbeat

Metricbeat 的功能是收集指标数据。Metricbeat 由两部分组成:Module 和 Metricset。Module 指的是 Metricbeat 收集的对象,例如 MySQL、Redis、Nginx、操作系统等;而 Metricset 指的是收集指标的集合,例如 CPU、Memory、Network 等。

首先,我们需要将 Metricbeat 安装包的内容解压出来。安装包可以直接用我们提供的整合包里的,也可以去官网下载,注意要版本一致即可。

# 解压 Metricbeat
cd /soft/beats
tar -zxvf metricbeat-6.5.4-linux-x86_64.tar.gz

之后,修改 Metricbeat 根目录下的配置文件 metricbeat.yml,并添加以下内容。

metricbeat.config.modules: # 这里直接读取 Module 的内容了
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false
setup.template.settings:
  index.number_of_shards: 1
  index.codec: best_compression
setup.kibana: # kibana 还没部署,所以可以先空着
output.elasticsearch:
  hosts: [""127.0.0.1:9200"] # 输出到本地的 Elasticsearch
processors:
  - add_host_metadata: ~
  - add_cloud_metadata: ~

在设置好之后,Metricbeat 会直接读取 Module 里面的设置。Module 中默认开启的是 system.yml,也就是操作系统的指标。

除了采集操作系统的指标以外,我们还可以采集很多软件的指标。我们这里拿 Nginx 举例。在 Nginx 中,我们需要先开启状态查询,才能查询到指标数据。

# 重新编译 Nginx
# 配置
cd /soft/nginx-1.11.6
# 编译
make
# 安装
make install

之后,我们再配置一下 Nginx。此时,我们需要打开 /usr/local/nginx/conf 目录下的配置文件 nginx.conf,并在 http 的 server 下添加如下内容。

location /nginx-status {
    stub_status on;
    access_log off;
}

之后,我们重启 Nginx。

# 重启 Nginx
cd /usr/local/nginx/sbin/
./nginx -s reload

下一步,我们配置 Metricbeat 中的 Nginx Module

# 启动 Nginx Module
cd /soft/beats/metricbeat-6.5.4-linux-x86_64
./metricbeat modules enable nginx
# 修改 Nginx Module 的配置
vim modules.d/nginx.yml

我们将 Nginx Module 的配置修改如下。

# Module: nginx
# Docs: https://www.elastic.co/guide/en/beats/metricbeat/6.5/metricbeat-modulenginx.html

- module: nginx
  #metricsets:
  # - stubstatus
  period: 10s

  # Nginx hosts  
  hosts: ["http://192.168.56.101"]

  # Path to server status. Default server-status
  server_status_path: "nginx-status"

  #username: "user"
  #password: "secret"

最后,我们启动 Metricbeat。

# 启动 Metricbeat
cd /soft/beats/metricbeat-6.5.4-linux-x86_64
./metricbeat -e

下篇继续

【Elastic Stack系列】第三章:实际部署(五) Kibana篇

林皓伟

发表回复

您的电子邮箱地址不会被公开。