汇总: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 过滤不需要的日志。下面是一个管道规则的示例,它丢弃所有级别&gt; 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 

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线