📚概述

对于日志监控业界常用的有ELKLokiGraylog等系统,最近在做技术选型时,对比了各个系统的情况,Graylog的一体化方案很符合现有需求。Graylog算是轻量级的ELK,也有很多企业在使用Graylog查看日志和监控业务日志。Graylog中文资料相对较少,在技术选型和开发过程中对资料进行整理。Graylog包含了告警、归档(商业版)、面板、日志查看、Rest API、组管理等功能。本文主要介绍Graylog的相关组件和基本流程。

官方:https://docs.graylog.org/

📗Graylog简介

Graylog 开源版官网: https://www.graylog.org/Graylog 是一个开源的日志聚合、分析、审计、展现和预警工具。
在功能上来说,和 ELK 类似,但又比 ELK 要简单很多。依靠着更加简洁,高效,部署使用简单的优势很快受到许多人的青睐。
当然,在扩展性上面确实没有比 ELK 好,但是其有商业版本可以选择。

📐Graylog-工作流程

部署 graylog 最简单的架构就是单机部署,复杂的也是部署集群模式,架构图示如下所示。我们可以看到其中包含了三个组件,分别是 ElasticsearchMongoDbGraylog

其中,Elasticsearch 用来持久化存储和检索日志文件数据(IO 密集),MongoDb 用来存储关于 Graylog 的相关配置信息,而 Graylog 来提供 Web 界面和对外接口(CPU 密集)。

数据处理流程:

  1. 日志消息通过各种Input输入到Graylog中进行处理;
  2. 可以通过Extractors进行正则、Json等形式解析;
  3. 通过Streams进行规则匹配分流,对Stream可以配置Pipeline进行数据过滤,最终数据会到到不同的index中;
  4. 根据新建index时配置的策略,在elasticsearch的索引中;
  5. 告警(Alert)基于Stream进行设置。

graylog配置文件添加es密码认证 graylog api_字段

🖥Graylog部署方案

最小化单机部署:

graylog配置文件添加es密码认证 graylog api_mongodb_02

最优化集群部署:

graylog配置文件添加es密码认证 graylog api_ide_03

📘Graylog组件

配置 Graylog 的核心:

  1. 理解对应组件的功能
  2. 了解组件的运行方式

🧩Graylog组件全貌图

graylog配置文件添加es密码认证 graylog api_graylog配置文件添加es密码认证_04

💡组件简介

Input 表示日志数据的来源,对不同来源的日志可以通过 Extractors 来进行日志的字段转换,比如对Nginx 访问日志进行字段拆分,解析状态码、URL等数据。然后可以通过pipeline建立数据过滤规则。最后,通过不同的标签类型分组成不同的 Stream,并将这些日志数据存储到指定的 Index 库中进行持久化保存。Graylog的中index对应elasticsearch中的多个index(与graylogindex配置的rotation strategyretention strategy有关)。

组件名称

功能介绍

主要特点

Dashboards

数据面板固定展示

主要是用来保存特定搜索条件的数据面板

Search

日志信息条件搜索

关键字搜索、时间搜索、搜索保存、创建面板、分组查询、结果导出、查询高亮显示、自定义时间

Alerts

设置告警提示方式

支持邮件告警、HTTP回调和自定义脚本触发

Inputs

日志数据抓取接收

部署 Sidercar 主动抓取或使用其他服务被动上报

Extractors

日志数据格式转换

json 解析、k-v 解析、时间戳解析、正则解析

Streams

日志信息分类分组

设置日志分类条件并发送到不同的索引文件中去

Indices

持久化数据存储

设置数据存储性能

Outputs

日志数据的转发

解析的 Stream 发送到其他 Graylog 集群或服务

Pipelines

日志数据的过滤

建立数据清洗的过滤规则、字段添加删除、条件过滤、自定义函数等

Sidecar

轻量级的日志采集器

相当于 C/S 模式;大规模时使用

Lookup Tables

服务解析

基于 IP 的 Whois 查询和基于来源 IP 的情报监控

Geolocation

可视化地理位置

实现基于来源 IP 的情报监控

❗️注意:

  1. Extractors是基于input配置的,Pipeline基于Stream配置。
  2. 一个input可以配置多个Extractors,按照顺序依次执行;一个Stream可以配置多个Pipeline规则,可以分阶段进行处理。
  3. 一个index可以配置多个Stream,配置过多会影响查询效率。
  4. 告警是基于Stream配置。

graylog配置文件添加es密码认证 graylog api_ide_05

⛳Graylog中的核心服务组件

input

Graylog 通过 Input 搜集日志,每个Input 单独配置Extractors 用来做字段转换。
Graylog 中日志搜索的基本单位是 Stream,每个 Stream 可以有自己单独的 Index Set,也可以共享一个 Index Set

ExtractorSystem/Input 中配置。Graylog 中很方便的一点就是可以加载一条日志,然后基于这个实际的例子进行配置并能直接看到结果。内置的 Extractor 基本可以完成各种字段提取和转换的任务,但是也有些限制,在应用里写日志的时候可以指定日志格式来规避这些限制。Input 可以配置多个Extractors,按照顺序依次执行。
Input的中有一个GELF形式的,在Spring Boot接入的时候在引入Maven依赖的时候也有GELF的字样。
这块在官网也有给出对应的解释:The Graylog Extended Log Format (GELF) is a log format that avoids the shortcomings of classic plain syslog
详细资料:https://docs.graylog.org/docs/gelfGELF是一种日志格式,能避免传统意义上的 syslogs的一些缺陷:

  1. 长度限制为1024字节。
  2. 数据类型无法区分,数字和字符串是无法区分的。
  3. 无压缩。

Spring Boot项目引入的Maven依赖则是把日志格式化成GELF格式然后appendGrayLog上。

graylog配置文件添加es密码认证 graylog api_graylog配置文件添加es密码认证_06

Index Set 通过菜单 System/Indices 创建。日志存储的性能,可靠性和过期策略都通过 Index Set 来配置。日志的过期策略,可以通过配置rotation strategyIndex Timeretention strategy配置为Delete index来实现按天保存日志。性能和可靠性就是配置ElasticSearch Index的一些参数,主要参数包括ShardsReplicas

graylog配置文件添加es密码认证 graylog api_mongodb_07

Stream

系统会有一个默认的 Stream,所有日志默认都会保存到这个 Stream 中,除非匹配了某个 Stream,并且这个 Stream 里配置了不保存日志到默认 Stream
可以通过菜单 Streams 创建更多的 Stream,新创建的 Stream 是默认是暂停状态,需要在配置完成后手动启动。
Stream 通过配置条件匹配日志,满足条件的日志添加 stream ID 标识字段(字段名称为streams,是一个数组)并保存到对应的 Index Set 中。

graylog配置文件添加es密码认证 graylog api_ide_08

pipeline

Graylog 还提供了 Pipeline 脚本实现更灵活的日志处理方案。
主要流程:数据采集(input) ->字段解析(extractor)->分流到 stream->pipeline 清洗 实际使用过程中,分流到Stream的规则中可能会用到pipeline清晰后的字段,那么该如何处理呢?
Graylog 接收的所有消息最初都会路由到“All messges”流中。可以将此流用作pipeline处理的入口点,从而允许将传入消息路由到更多流并随后进行处理。也就是说所有消息的过滤、字段变动可以先针对All messages进行,然后在到达其他stream时数据已经被清理一次了。
下面是丢弃 level > 6 的所有日志的 Pipeline Rule 的例子。

rule "discard debug messages"
when
  to_long($message.level) > 6
then
  drop_message();
end

Sidecar

sidecarGraylog 3.0新增的功能,依旧支持原有的System / Collectors (legacy)收集器,但是官方推荐使用sidecar
Sidecar 是一个轻量级的日志采集器,通过访问 graylog 进行集中式管理,支持 linuxwindows 系统。在主机或设备上,Sidecar 可以作为服务(Windows)或守护程序(Linux)运行。

Sidecar 守护进程会定期访问 graylogREST API 接口获取 Sidecar 配置文件,Sidecar 在首次运行或检测到配置更改时,会从 graylog 服务器拉取配置文件中的配置信息同步到本地,实现配置更新。首次配置需要在graylog上进行配置下发操作。

Sidecar 支持 NXLogFilebeatWinlogbeat。他们都通过 graylog 中的 web 界面进行统一配置,支持 BeatsCEFGelfJson APINetFlow 等输出类型。Graylog 最厉害的在于可以在配置文件中指定 Sidecar 把日志发送到哪个 graylog 群集,并对 graylog 群集中的多个 input 进行负载均衡,这样在遇到日志量非常庞大的时候,graylog 也能应付自如。

graylog配置文件添加es密码认证 graylog api_ide_09

版本选择

Sidecar version

Graylog server version

1.2.x

3.2.5 or higher

1.1.x

3.2.5 or higher

1.0.x

3.0 or higher

0.1.x

2.2.x, 2.3.x, 2.4.x, 2.5.x, 3.0.x, 4.0.x

0.0.9

2.1.x

官网:https://docs.graylog.org/docs/sidecar

Output

日志集中保存到 Graylog 后就可以方便的使用搜索了。如果需要对日志进行二次处理,主要有两个途径:

  1. 直接访问 Elastic 中保存的数据,处理数据;
  2. 通过 GraylogOutput 转发到其它服务,在进行处理。