版权声明:本文为博主原创文章,转载请注明出处: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篇