汇总:ELK 不香了?试试接入这款更轻量的日志框架,真的很省心!
优采云 发布时间: 2022-10-16 17:23汇总:ELK 不香了?试试接入这款更轻量的日志框架,真的很省心!
当我们公司内部部署了很多服务和测试和正式环境时,查看日志就成了一个非常刚硬的要求。是统一采集多个环境的日志,然后使用Nginx对外提供服务,还是使用专门的日志采集服务ELK?这成为一个问题!
作为一种集成解决方案,Graylog 使用 elasticsearch 进行存储,使用 mongodb 进行缓存,并使用流量控制进行节流。同时,其界面查询使用方便,易于扩展。因此,使用 Graylog 成为了最好的选择,为我们省了很多心。
一、Filebeat工具介绍
服务日志采集方案:Filebeat + Graylog!
[1] Filebeat - 日志文件传送服务
Filebeat 是一个日志文件传送工具。在你的服务器上安装客户端后,filebeat会自动监控给定的日志目录或指定的日志文件,跟踪并读取这些文件,不断地读取它们,并将信息转发到存储在elasticsearch或logsarsh或graylog中。
[2] Filebeat - 工作流程介绍
当您安装并启用 filebeat 程序时,它将启动一个或多个探测器来检测您指定的日志目录或文件。对于probe发现的每一个日志文件,filebeat都会启动一个收获进程(harvester),每个收获进程读取一个日志文件的最新内容,并将这些新的日志数据发送给处理程序(spooler),处理程序会采集这些事件,最后filebeat会将采集到的数据发送到你指定的地址。(我们在这里发送到 graylog 服务)。
[3] Filebeat——图形理解内存
我们这里没有应用logstash服务,主要是因为filebeat比logstash更轻量。当我们需要采集信息的机器配置或者资源不是特别大,也没有那么复杂的时候,推荐使用filebeat来采集日志。在日常使用中,filebeat有多种安装部署方式,运行非常稳定。
图形化服务架构理解内存2.Filebeat配置文件
配置Filebeat工具的核心是如何编写其对应的配置文件!
对应的Filebeat工具的配置主要是通过编写其配置文件来控制的。对于rpm或deb包安装,配置文件默认存放在路径/etc/filebeat/filebeat.yml下。MAC或Win系统请查看解压文件中的相关文件,均涉及。
Filebeat工具的主要配置文件如下图所示。每个字段的含义在评论信息中有详细解释,这里不再赘述。需要注意的是,我们定义了日志的所有输入源来读取inputs.d目录下的所有yml配置。因此,我们可以针对不同的服务(测试、正式服务)定义不同的配置文件,根据物理机部署的实际情况进行配置。
# 配置输入来源的日志信息<br /># 我们合理将其配置到了inputs.d目录下的所有yml文件<br />filebeat.config.inputs:<br /> enabled: true<br /> path: ${path.config}/inputs.d/*.yml<br /> # 若收取日志格式为json的log请开启此配置<br /> # json.keys_under_root: true<br /><br /># 配置filebeat需要加载的模块<br />filebeat.config.modules:<br /> path: ${path.config}/modules.d/*.yml<br /> reload.enabled: false<br /><br />setup.template.settings:<br /> index.number_of_shards: 1<br /><br /># 配置将日志信息发送那个地址上面<br />output.logstash:<br /> hosts: ["11.22.33.44:5500"]<br /><br /># output.file:<br /># enable: true<br /><br />processors:<br /> - add_host_metadata: ~<br /> - rename:<br /> fields:<br /> - from: "log"<br /> to: "message"<br /> - add_fields:<br /> target: ""<br /> fields:<br /> # 加token是为了防止无认证的服务上Graylog服务发送数据<br /> token: "0uxxxxaM-1111-2222-3333-VQZJxxxxxwgX "<br />
下面展示了inputs.d目录下一个简单的yml配置文件的具体内容。它的主要功能是配置独立服务的独立日志数据,并附加不同的数据标签类型。
# 收集的数据类型<br />- type: log<br /> enabled: true<br /> # 日志文件的路径地址<br /> paths:<br /> - /var/log/supervisor/app_escape_worker-stderr.log<br /> - /var/log/supervisor/app_escape_prod-stderr.log<br /> symlinks: true<br /> # 包含的关键字信息<br /> include_lines: ["WARNING", "ERROR"]<br /> # 打上数据标签<br /> tags: ["app", "escape", "test"]<br /> # 防止程序堆栈信息被分行识别<br /> multiline.pattern: '^\[?[0-9]...{3}'<br /> multiline.negate: true<br /> multiline.match: after<br /><br /># 需要配置多个日志时可加多个type字段<br />- type: log<br /> enabled: true<br /> ......<br />
需要注意的是,针对不同的日志类型,filebeat还提供了不同的模块来配置不同的服务日志及其不同的模块特性,比如我们常见的PostgreSQl、Redis、Iptables等。
# iptables<br />- module: iptables<br /> log:<br /> enabled: true<br /> var.paths: ["/var/log/iptables.log"]<br /> var.input: "file"<br /><br /># postgres<br />- module: postgresql<br /> log:<br /> enabled: true<br /> var.paths: ["/path/to/log/postgres/*.log*"]<br /><br /># nginx<br />- module: nginx<br /> access:<br /> enabled: true<br /> var.paths: ["/path/to/log/nginx/access.log*"]<br /> error:<br /> enabled: true<br /> var.paths: ["/path/to/log/nginx/error.log*"]<br />
3. Graylog服务介绍
服务日志采集方案:Filebeat + Graylog!
[1] Graylog——日志监控系统
Graylog 是一个开源的日志聚合、分析、审计、展示和预警工具。在功能上,它与 ELK 类似,但比 ELK 简单得多。凭借更加简洁、高效、易于部署和使用的优势,迅速受到了很多人的青睐。当然,在扩展性方面并不比 ELK 好,但也有商业版本可供选择。
[2] Graylog - 工作流简介
部署graylog最简单的架构是单机部署,更复杂的部署是集群模式。架构图如下所示。我们可以看到它收录三个组件,分别是 Elasticsearch、MongoDb 和 Graylog。其中,Elasticsearch 用于持久存储和检索日志文件数据(IO 密集型),MongoDb 用于存储有关 Graylog 的相关配置,Graylog 用于提供 Web 接口和外部接口(CPU 密集型)。
最小的独立部署
优化集群部署 4. 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服务器拉取配置文件中指定tag的配置信息,同步到本地。
目前 Sidecar 支持 NXLog、Filebeat 和 Winlogbeat。它们都是在graylog中通过web界面统一配置,支持Beats、CEF、Gelf、Json API、NetFlow等输出类型。 Graylog最强大的地方在于可以在Sidecar中指定向哪个graylog集群Sidecar发送日志配置文件,并对graylog集群中的多个输入进行负载均衡,这样当日志量很大的时候,graylog也能从容应对。
rule "discard debug messages"<br />when<br /> to_long($message.level) > 6<br />then<br /> drop_message();<br />end<br />
日志集中保存到 Graylog 后,可以方便地进行搜索。但是,有时需要进一步处理数据。主要有两种方式,一种是直接访问存储在 Elastic 中的数据,或者通过 Graylog 的 Output 转发给其他服务。
5. 服务安装部署
主要介绍了部署Filebeat + Graylog的安装步骤和注意事项!
使用 Graylog 采集日志[1] 部署 Filebeat 工具
官方提供了多种部署方式,包括通过rpm和deb包安装服务,以及通过源码编译安装服务,还包括使用Docker或者kubernetes安装服务。我们可以根据自己的实际需要进行安装。
# Ubuntu(deb)<br />$ curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.8.1-amd64.deb<br />$ sudo dpkg -i filebeat-7.8.1-amd64.deb<br />$ sudo systemctl enable filebeat<br />$ sudo service filebeat start<br />
# 使用docker启动<br />docker run -d --name=filebeat --user=root \<br /> --volume="./filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro" \<br /> --volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" \<br /> --volume="/var/run/docker.sock:/var/run/docker.sock:ro" \<br /> docker.elastic.co/beats/filebeat:7.8.1 filebeat -e -strict.perms=false \<br /> -E output.elasticsearch.hosts=["elasticsearch:9200"]<br />
[2] 部署 Graylog 服务
这里主要介绍使用Docker容器部署服务。如需使用其他方式部署,请查看官方文档相应章节的安装部署步骤。在部署服务之前,我们需要为 Graylog 服务生成等相关信息。生成的部署如下:
<p># 生成password_secret密码(最少16位)<br />$ sudo apt install -y pwgen<br />$ pwgen -N 1 -s 16<br />zscMb65...FxR9ag<br /><br /># 生成后续Web登录时所需要使用的密码<br />$ echo -n "Enter Password: " && head -1