内容采集器(服务架构理解记忆Filebeat配置文件工具介绍-Filebeat日志文件托运服务 )
优采云 发布时间: 2022-02-16 05:19内容采集器(服务架构理解记忆Filebeat配置文件工具介绍-Filebeat日志文件托运服务
)
当我们公司内部部署了很多服务和测试以及正式环境时,查看日志已经成为一个非常刚硬的要求。
图片来自趵突网
是统一采集多个环境的日志,然后使用Nginx对外提供服务,还是使用专门的日志采集服务ELK?这成为一个问题!
作为一种集成解决方案,Graylog 使用 Elasticsearch 进行存储,使用 MongoDB 进行缓存,并通过流量控制进行节流。同时,其界面查询使用方便,易于扩展。因此,使用 Graylog 成为了最好的选择,为我们省了很多心。
Filebeat工具介绍 ①Filebeat日志文件投递服务
Filebeat 是一个日志文件传送工具。在您的服务器上安装客户端后,Filebeat 会自动监控给定的日志目录或指定的日志文件,跟踪并读取这些文件,不断地读取它们,并将信息转发到存储在 Elasticsearch 或 Logstarsh 或 Graylog 中。
②Filebeat工作流程介绍
当您安装并启用 Filebeat 程序时,它将启动一个或多个探测器(prospectors)来检测您指定的日志目录或文件。
对于探测器找到的每个日志文件,Filebeat 都会启动一个收割机进程。
每个收获进程读取日志文件的最新内容并将这些新日志数据发送到处理程序(假脱机程序),后者聚合这些事件。
最后,Filebeat 会将采集数据发送到您指定的地址(我们这里发送到 Graylog 服务)。
③Filebeat图标了解内存
我们这里没有应用 Logstash 服务,主要是因为 Filebeat 比 Logstash 更轻量级。
当我们需要采集信息的机器配置或者资源不是特别大,也没有那么复杂的时候,推荐使用Filebeat来采集日志。
在日常使用中,Filebeat有多种安装部署方式,运行非常稳定。
图形化服务架构理解内存
文件节拍配置文件
配置Filebeat工具的核心是如何编写其对应的配置文件!
对应的Filebeat工具的配置主要是通过编写其配置文件来控制的。对于通过 rpm 或 deb 包安装,配置文件默认存放在路径 /etc/filebeat/filebeat.yml 下。
Mac或Win系统请查看解压后的相关文件,均涉及。
Filebeat工具的主要配置文件如下图所示。每个字段的含义在评论信息中有详细解释,这里不再赘述。
需要注意的是,我们定义了日志的所有输入源来读取inputs.d目录下的所有yml配置。
因此,我们可以针对不同的服务(测试、正式服务)定义不同的配置文件,根据物理机部署的实际情况进行配置。
# 配置输入来源的日志信息
# 我们合理将其配置到了 inputs.d 目录下的所有 yml 文件
filebeat.config.inputs:
enabled: true
path: ${path.config}/inputs.d/*.yml
# 若收取日志格式为 json 的 log 请开启此配置
# json.keys_under_root: true
# 配置 Filebeat 需要加载的模块
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
setup.template.settings:
index.number_of_shards: 1
# 配置将日志信息发送那个地址上面
output.logstash:
hosts: ["11.22.33.44:5500"]
# output.file:
# enable: true
processors:
- add_host_metadata: ~
- rename:
fields:
- from: "log"
to: "message"
- add_fields:
target: ""
fields:
# 加 Token 是为了防止无认证的服务上 Graylog 服务发送数据
token: "0uxxxxaM-1111-2222-3333-VQZJxxxxxwgX "
下面展示了inputs.d目录下一个简单的yml配置文件的具体内容。它的主要功能是配置独立服务的独立日志数据,并附加不同的数据标签类型。
# 收集的数据类型
- type: log
enabled: true
# 日志文件的路径地址
paths:
- /var/log/supervisor/app_escape_worker-stderr.log
- /var/log/supervisor/app_escape_prod-stderr.log
symlinks: true
# 包含的关键字信息
include_lines: ["WARNING", "ERROR"]
# 打上数据标签
tags: ["app", "escape", "test"]
# 防止程序堆栈信息被分行识别
multiline.pattern: '^\[?[0-9]...{3}'
multiline.negate: true
multiline.match: after
# 需要配置多个日志时可加多个 type 字段
- type: log
enabled: true
需要注意的是,针对不同的日志类型,filebeat还提供了不同的模块来配置不同的服务日志及其不同的模块特性,比如我们常见的PostgreSQl、Redis、Iptables等。
# iptables
- module: iptables
log:
enabled: true
var.paths: ["/var/log/iptables.log"]
var.input: "file"
# postgres
- module: postgresql
log:
enabled: true
var.paths: ["/path/to/log/postgres/*.log*"]
# nginx
- module: nginx
access:
enabled: true
var.paths: ["/path/to/log/nginx/access.log*"]
error:
enabled: true
var.paths: ["/path/to/log/nginx/error.log*"]
Graylog服务介绍①Graylog日志监控系统
Graylog 是一个开源的日志聚合、分析、审计、展示和预警工具。在功能上,它与 ELK 类似,但比 ELK 简单得多。
凭借更加简洁、高效、易于部署和使用的优势,迅速受到了很多人的青睐。当然,在扩展性方面并不比 ELK 好,但也有商业版本可供选择。
②Graylog工作流程介绍
部署 Graylog 最简单的架构是单机部署,更复杂的部署是集群模式。架构图如下所示。
我们可以看到它收录三个组件,分别是 Elasticsearch、MongoDB 和 Graylog。
其中,Elasticsearch 用于持久存储和检索日志文件数据(IO 密集型),MongoDB 用于存储有关 Graylog 的相关配置,Graylog 用于提供 Web 接口和外部接口(CPU 密集型)。
最小的独立部署
优化集群部署
Graylog 组件特性
配置一个 Graylog 服务的核心是了解对应的组件是做什么的以及它是如何工作的!
简单来说,Input 代表日志数据的来源。对于不同来源的日志,可以使用Extractors对日志的字段进行转换,比如将Nginx的状态码改成对应的英文表达。
然后,将不同类型的标签分组到不同的流中,将这些日志数据存储在指定的Index库中进行持久化存储。
Graylog 中的核心服务组件
Graylog 通过 Input 采集日志,每个 Input 都配置了 Extractors 进行字段转换。
Graylog中日志搜索的基本单位是Stream。每个 Stream 可以有自己的 Elastic Index Set 或共享一个 Index Set。
提取器在系统/输入中配置。Graylog 的一个方便之处是您可以加载日志,根据这个实际示例对其进行配置,并直接查看结果。
内置的Extractor基本可以完成各种字段的提取和转换任务,但也有一定的局限性,需要在应用程序中写日志时加以考虑。Input可以配置多个Extractor,依次执行。
系统会有一个默认的Stream,所有的日志都会默认保存到这个Stream,除非匹配到了一个Stream,并且这个Stream被配置为不保存日志到默认的Stream。
可以通过菜单 Streams 创建更多 Streams。新创建的 Stream 处于暂停状态,需要在配置完成后手动启动。
Stream通过配置条件匹配日志,满足条件的日志添加stream ID标识字段,保存到对应的Elastic Index Set中。
索引集是通过菜单系统/索引创建的。日志存储的性能、可靠性和过期策略都是通过Index Set来配置的。
性能和可靠性是配置 Elastic Index 的一些参数。主要参数包括 Shards 和 Replica。
除了上面提到的日志处理流程,Graylog 还提供了一个 Pipeline 脚本来实现更灵活的日志处理方案。
此处不赘述,仅介绍是否使用 Pipelines 过滤不需要的日志。以下是丢弃所有级别 > 6 的日志的管道规则示例。
从数据采集(输入),现场分析(提取器),分流到流,再到流水线清洗,一气呵成,其他方式无需二次处理。
Sidecar 是一个轻量级的日志采集器,通过访问 Graylog 进行集中管理,支持 Linux 和 Windows 系统。
Sidecar 守护进程会定期访问 Graylog REST API 以获取 sidecar 配置文件中定义的标签。Sidecar 首次运行时,会从 Graylog 服务器拉取配置文件中指定标签的配置信息,并同步到本地。
目前 Sidecar 支持 NXLog、Filebeat 和 Winlogbeat。它们都是通过 Graylog 中的 web 界面统一配置,支持 Beats、CEF、Gelf、Json API、NetFlow 等输出类型。
Graylog 最强大的地方在于,可以在配置文件中指定 Sidecar 将日志发送到哪个 Graylog 集群,并对 Graylog 集群中的多个输入进行负载均衡,让 Graylog 可以应对非常大量的日志。
rule "discard debug messages"
when
to_long($message.level) > 6
then
drop_message();
end
日志集中保存到 Graylog 后,可以方便地进行搜索。但是,有时需要进一步处理数据。
主要有两种方式,一种是直接访问存储在 Elastic 中的数据,或者通过 Graylog 的 Output 转发给其他服务。
服务安装部署
主要介绍了部署Filebeat+Graylog的安装步骤和注意事项!
使用 Graylog 采集日志
①部署Filebeat工具
官方提供了多种部署方式,包括通过rpm和deb包安装服务,以及通过源码编译安装服务,还包括使用Docker或者kubernetes安装服务。
我们可以根据自己的实际需要进行安装:
# Ubuntu(deb)
$ curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.8.1-amd64.deb
$ sudo dpkg -i filebeat-7.8.1-amd64.deb
$ sudo systemctl enable filebeat
$ sudo service filebeat start
# 使用 Docker 启动
docker run -d --name=filebeat --user=root \
--volume="./filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro" \
--volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" \
--volume="/var/run/docker.sock:/var/run/docker.sock:ro" \
docker.elastic.co/beats/filebeat:7.8.1 filebeat -e -strict.perms=false \
-E output.elasticsearch.hosts=["elasticsearch:9200"]
②部署 Graylog 服务
这里主要介绍使用Docker容器部署服务。如需使用其他方式部署,请查看官方文档相应章节的安装部署步骤。
在部署服务之前,我们需要为 Graylog 服务生成等相关信息。生成的部署如下:
<p># 生成 password_secret 密码(最少 16 位)
$ sudo apt install -y pwgen
$ pwgen -N 1 -s 16
zscMb65...FxR9ag
# 生成后续 Web 登录时所需要使用的密码
$ echo -n "Enter Password: " && head -1