ELK 不香了!我用 Graylog,轻量多了...

打印 上一主题 下一主题

主题 880|帖子 880|积分 2640

作者:Escape
来源:https://www.escapelife.site/posts/38c81b25.html
服务日志收集方案:Filebeat + Graylog!
当我们公司内部部署很多服务以及测试、正式环境的时候,查看日志就变成了一个非常刚需的需求了。是多个环境的日志统一收集,然后使用 Nginx 对外提供服务,还是使用专用的日志收集服务 ELK 呢?
这就变成了一个问题!而 Graylog 作为整合方案,使用 elasticsearch 来存储,使用 mongodb 来缓存,并且还有带流量控制的 (throttling),同时其界面查询简单易用且易于扩展。
所以,使用 Graylog 成为了不二之选,为我们省了不少心。

1. Filebeat 工具介绍

服务日志收集方案:Filebeat + Graylog!
[1] Filebeat - 日志文件托运服务
Filebeat 是一个日志文件托运工具,在你的服务器上安装客户端后,filebeat 会自动监控给定的日志目录或者指定的日志文件,追踪读取这些文件,不停的读取,并且转发这些信息到 elasticsearch 或者 logstarsh 或者 graylog 中存放。
[2] Filebeat - 工作流程介绍
当你安装并启用 filebeat 程序的时候,它会启动一个或多个探测器(prospectors)去检测你指定的日志目录或文件,对于探测器找出的每一个日志文件,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 配置。所以,我们可以更加不用的服务(测试、正式服务)来定义不同的配置文件,根据物理机部署的实际情况具体配置。
  1. # 配置输入来源的日志信息
  2. # 我们合理将其配置到了inputs.d目录下的所有yml文件
  3. filebeat.config.inputs:
  4.   enabled: true
  5.   path: ${path.config}/inputs.d/*.yml
  6.   # 若收取日志格式为json的log请开启此配置
  7.   # json.keys_under_root: true
  8. # 配置filebeat需要加载的模块
  9. filebeat.config.modules:
  10.   path: ${path.config}/modules.d/*.yml
  11.   reload.enabled: false
  12. setup.template.settings:
  13.   index.number_of_shards: 1
  14. # 配置将日志信息发送那个地址上面
  15. output.logstash:
  16.   hosts: ["11.22.33.44:5500"]
  17. # output.file:
  18. #   enable: true
  19. processors:
  20.   - add_host_metadata: ~
  21.   - rename:
  22.       fields:
  23.         - from: "log"
  24.           to: "message"
  25.   - add_fields:
  26.       target: ""
  27.       fields:
  28.         # 加token是为了防止无认证的服务上Graylog服务发送数据
  29.         token: "0uxxxxaM-1111-2222-3333-VQZJxxxxxwgX "
复制代码
下面展示一个简单的 inputs.d 目录下面的 yml 配置文件的具体内容,其主要作用就是配置单独服务的独立日志数据,以及追加不同的数据 tag 类型。
  1. # 收集的数据类型
  2. - type: log
  3.   enabled: true
  4.   # 日志文件的路径地址
  5.   paths:
  6.     - /var/log/supervisor/app_escape_worker-stderr.log
  7.     - /var/log/supervisor/app_escape_prod-stderr.log
  8.   symlinks: true
  9.   # 包含的关键字信息
  10.   include_lines: ["WARNING", "ERROR"]
  11.   # 打上数据标签
  12.   tags: ["app", "escape", "test"]
  13.   # 防止程序堆栈信息被分行识别
  14.   multiline.pattern: '^\[?[0-9]...{3}'
  15.   multiline.negate: true
  16.   multiline.match: after
  17. # 需要配置多个日志时可加多个type字段
  18. - type: log
  19.   enabled: true
  20.   ......
复制代码
需要注意的是,针对于不同的日志类型,filebeat 还提供了不同了模块来配置不同的服务日志以及其不同的模块特性,比如我们常见的 PostgreSQl、Redis、Iptables 等。
  1. # iptables
  2. - module: iptables
  3.   log:
  4.     enabled: true
  5.     var.paths: ["/var/log/iptables.log"]
  6.     var.input: "file"
  7. # postgres
  8. - module: postgresql
  9.   log:
  10.     enabled: true
  11.     var.paths: ["/path/to/log/postgres/*.log*"]
  12. # nginx
  13. - module: nginx
  14.   access:
  15.     enabled: true
  16.     var.paths: ["/path/to/log/nginx/access.log*"]
  17.   error:
  18.     enabled: true
  19.     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 的状态码变成对应的英文表述等。然后,通过不同的标签类型分组成不用的 Stream,并将这些日志数据存储到指定的 Index 库中进行持久化保存。
编号组件名称功能介绍主要特点1Dashboards数据面板固定展示主要是用来保存特定搜索条件的数据面板2Searching日志信息条件搜索关键字搜索、时间搜索、搜索保存、创建面板、分组查询、结果导出、查询高亮显示、自定义时间3Alert设置告警提示方式支持邮件告警、HTTP 回调和自定义脚本触发4Inputs日志数据抓取接收部署 Sidercar 主动抓取或使用其他服务被动上报5Extractors日志数据格式转换json 解析、kv 解析、时间戳解析、正则解析6Streams日志信息分类分组设置日志分类条件并发送到不同的索引文件中去7Indices持久化数据存储设置数据存储性能8Outputs日志数据的转发解析的 Stream 发送到其他 Graylog 集群或服务9Pipelines日志数据的过滤建立数据清洗的过滤规则、字段添加删除、条件过滤、自定义函数等10Sidecar轻量级的日志采集器相当于 C/S 模式;大规模时使用11Lookup Tables服务解析基于 IP 的 Whois 查询和基于来源 IP 的情报监控12Geolocation可视化地理位置实现基于来源 IP 的情报监控
Graylog中的核心服务组件
Graylog 通过 Input 搜集日志,每个 Input 单独配置 Extractors 用来做字段转换。Graylog 中日志搜索的基本单位是 Stream,每个 Stream 可以有自己单独的 Elastic Index Set,也可以共享一个 Index Set。
Extractor 在 System/Input 中配置。Graylog 中很方便的一点就是可以加载一条日志,然后基于这个实际的例子进行配置并能直接看到结果。内置的 Extractor 基本可以完成各种字段提取和转换的任务,但是也有些限制,在应用里写日志的时候就需要考虑到这些限制。Input 可以配置多个 Extractors,按照顺序依次执行。
系统会有一个默认的 Stream,所有日志默认都会保存到这个 Stream 中,除非匹配了某个 Stream,并且这个 Stream 里配置了不保存日志到默认 Stream。可以通过菜单 Streams 创建更多的 Stream,新创建的 Stream 是暂停状态,需要在配置完成后手动启动。Stream 通过配置条件匹配日志,满足条件的日志添加 stream ID 标识字段并保存到对应的 Elastic Index Set 中。
Index Set 通过菜单 System/Indices 创建。日志存储的性能,可靠性和过期策略都通过 Index Set 来配置。性能和可靠性就是配置 Elastic Index 的一些参数,主要参数包括,Shards 和 Replicas。
除了上面提到的日志处理流程,Graylog 还提供了 Pipeline 脚本实现更灵活的日志处理方案。这里不详细阐述,只介绍如果使用 Pipelines 来过滤不需要的日志。下面是丢弃 level > 6 的所有日志的 Pipeline Rule 的例子。从数据采集(input),字段解析(extractor),分流到 stream,再到 pipeline 的清洗,一气呵成,无需在通过其他方式进行二次加工。
Sidecar 是一个轻量级的日志采集器,通过访问 graylog 进行集中式管理,支持 linux 和 windows 系统。Sidecar 守护进程会定期访问 graylog 的 REST API 接口获取 Sidecar 配置文件中定义的标签(tag) ,Sidecar 在首次运行时会从 graylog 服务器拉取配置文件中指定标签(tag) 的配置信息同步到本地。
目前 Sidecar 支持 NXLog,Filebeat 和 Winlogbeat。他们都通过 graylog 中的 web 界面进行统一配置,支持 Beats、CEF、Gelf、Json API、NetFlow 等输出类型。Graylog 最厉害的在于可以在配置文件中指定 Sidecar 把日志发送到哪个 graylog 群集,并对 graylog 群集中的多个 input 进行负载均衡,这样在遇到日志量非常庞大的时候,graylog 也能应付自如。
  1. rule "discard debug messages"
  2. when
  3.   to_long($message.level) > 6
  4. then
  5.   drop_message();
  6. end
复制代码
日志集中保存到 Graylog 后就可以方便的使用搜索了。不过有时候还是需要对数据进行近一步的处理。主要有两个途径,分别是直接访问 Elastic 中保存的数据,或者通过 Graylog 的 Output 转发到其它服务。
5. 服务安装和部署

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

[1] 部署 Filebeat 工具
官方提供了多种的部署方式,包括通过 rpm 和 deb 包安装服务,以及源代码编译的方式安装服务,同时包括了使用 Docker 或者 kubernetes 的方式安装服务。我们根据自己的实际需要,进行安装即可。
  1. # Ubuntu(deb)
  2. $ curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.8.1-amd64.deb
  3. $ sudo dpkg -i filebeat-7.8.1-amd64.deb
  4. $ sudo systemctl enable filebeat
  5. $ sudo service filebeat start
复制代码
  1. # 使用docker启动
  2. docker run -d --name=filebeat --user=root \
  3.   --volume="./filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro" \
  4.   --volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" \
  5.   --volume="/var/run/docker.sock:/var/run/docker.sock:ro" \
  6.   docker.elastic.co/beats/filebeat:7.8.1 filebeat -e -strict.perms=false \
  7.   -E output.elasticsearch.hosts=["elasticsearch:9200"]
复制代码

[2] 部署 Graylog 服务
我们这里主要介绍使用 Docker 容器来部署服务,如果你需要使用其他方式来部署的话,请自行查看官方文档对应章节的安装部署步骤。在服务部署之前,我们需要给 Graylog 服务生成等相关信息,生成部署如下所示:
[code]# 生成password_secret密码(最少16位)$ sudo apt install -y pwgen$ pwgen -N 1 -s 16zscMb65...FxR9ag# 生成后续Web登录时所需要使用的密码$ echo -n "Enter Password: " && head -1

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

农妇山泉一亩田

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表