解决方案:ELK 不香了?试试接入这款更轻量的日志框架,真的很省心!

优采云 发布时间: 2022-10-17 12:26

  解决方案:ELK 不香了?试试接入这款更轻量的日志框架,真的很省心!

  每日英语

  不要让任何人偷走你的梦想。随心所欲,无所不能。

  不管你做什么,相信自己,不要让别人的话把你击倒。

  每日心连心

  把握三件事:机会、生活、婚姻;交朋友三件事:正直、敬业、无私;三样东西毁了一个人:愤怒、小气、傲慢。

  责任编辑:乐乐 | 来自:escapelife.site/posts/38c81b25.html

  回顾过去:

  文本

  大家好,我叫小乐。当我们公司内部部署了很多服务和测试以及正式环境时,查看日志已经成为一个非常刚硬的要求。是统一采集多个环境的日志,然后使用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配置。因此,我们可以针对不同的服务(测试、正式服务)定义不同的配置文件,根据物理机部署的实际情况进行配置。

  # 配置输入来源的日志信息# 我们合理将其配置到了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: falsesetup.template.settings:  index.number_of_shards: 1# 配置将日志信息发送那个地址上面output.logstash:  hosts: ["11.22.33.44:5500"]# output.file:#   enable: trueprocessors:  - 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*"]

  

  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库中进行持久化存储。

  <p mp-original-font-size="17" mp-original-line-height="25.600000381469727" style="margin-right: 8px;margin-left: 8px;outline: 0px;color: rgb(34, 34, 34);font-family: -apple-system, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;visibility: visible;text-align: center;line-height: 25.6px;">牛逼啊!接私活必备的 N 个开源项目!赶快收藏</p>

  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"when  to_long($message.level) > 6then  drop_message();end

  日志集中保存到 Graylog 后,可以方便地进行搜索。但是,有时需要进一步处理数据。主要有两种方式,一种是直接访问存储在 Elastic 中的数据,或者通过 Graylog 的 Output 转发给其他服务。

  5. 服务安装部署

  主要介绍了部署Filebeat + Graylog的安装步骤和注意事项!

  使用 Graylog 采集日志[1] 部署 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"]

  [2] 部署 Graylog 服务

  这里主要介绍使用Docker容器部署服务。如需使用其他方式部署,请查看官方文档相应章节的安装部署步骤。在部署服务之前,我们需要为 Graylog 服务生成等相关信息。生成的部署如下:

<p># 生成password_secret密码(最少16位)$ sudo apt install -y pwgen$ pwgen -N 1 -s 16zscMb65...FxR9ag# 生成后续Web登录时所需要使用的密码$ echo -n "Enter Password: " && head -1 

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线