ELK不香了!我用Graylog

本文介绍了使用Filebeat和Graylog进行日志收集、处理及分析的方法。Filebeat负责监控和发送日志,Graylog则提供日志存储、查询等功能。通过部署这些工具,可以轻松实现对多个环境的日志统一管理。

点击上方“芋道源码”,选择“设为星标

管她前浪,还是后浪?

能浪的浪,才是好浪!

每天 10:33 更新文章,每天掉亿点点头发...

源码精品专栏

 

来源:www.escapelife.site/

posts/38c81b25.html

5dd00790956aa0298837a3ffa0a86720.png


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

097d56494edb3d85731277ae179d1d20.png
使用Graylog来收集日志

1. Filebeat 工具介绍

  • [1] Filebeat - 日志文件托运服务

Filebeat 是一个日志文件托运工具,在你的服务器上安装客户端后,filebeat 会自动监控给定的日志目录或者指定的日志文件,追踪读取这些文件,不停的读取,并且转发这些信息到 elasticsearch 或者 logstarsh 或者 graylog 中存放。

  • [2] Filebeat - 工作流程介绍

当你安装并启用 filebeat 程序的时候,它会启动一个或多个探测器(prospectors)去检测你指定的日志目录或文件,对于探测器找出的每一个日志文件,filebeat 都会启动一个收割进程(harvester),每一个收割进程读取一个日志文件的最新内容,并发送这些新的日志数据到处理程序(spooler),处理程序会集合这些事件,最后 filebeat 会发送集合的数据到你指定的地址上去(我们这里就是发送给graylog服务了)。

  • [3] Filebeat - 图示理解记忆

我们这里不适用 logstash 服务,主要是因为 filebeat 相比于 logstash 更加轻量级。当我们需要收集信息的机器配置或资源并不是特别多时,且并没有那么复杂的时候,还是建议使用 filebeat 来收集日志。日常使用中,filebeat 的安装部署方式多样且运行十分稳定。

736d132d17fa49e7a33e93070257419c.png
图示服务架构理解记忆

推荐下自己做的 Spring Boot 的实战项目:

https://github.com/YunaiV/ruoyi-vue-pro

2. Filebeat 配置文件

配置 Filebeat 工具的核心就是如何编写其对应的配置文件!

对应 Filebeat 工具的配置主要是通过编写其配置文件来控制的,对于通过 rpm 或者 deb 包来安装的情况,配置文件默认会存储在,/etc/filebeat/filebeat.yml 这个路径下面。而对于,对于 MAC 或者 Win 系统来说,请查看解压文件中相关文件,其中都有涉及。

下面展示了 Filebeat 工具的主配置文件,注释信息中都对其各个字段含义进行了详细的解释,我这里就不再赘述了。需要注意的是,我们将日志的输入来源统统定义去读取 inputs.d 目录下的所有 yml 配置。所以,我们可以更加不用的服务(测试、正式服务)来定义不同的配置文件,根据物理机部署的实际情况具体配置。

yaml

> 推荐下自己做的 Spring Cloud 的实战项目:
>
> <https://github.com/YunaiV/onemall>

# 配置输入来源的日志信息
# 我们合理将其配置到了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: false

setup.template.settings:
  index.number_of_shards: 1

# 配置将日志信息发送那个地址上面
output.logstash:
  hosts: ["11.22.33.44:5500"]

# output.file:
#   enable: true

processors:
  - add_host_metadata: ~
  - rename:
      fields:
        - from: "log"
          to: "message"
  - add_fields:
      target: ""
      fields:
        # 加token是为了防止无认证的服务上Graylog服务发送数据
        token: "0uxxxxaM-1111-2222-3333-VQZJxxxxxwgX "

下面展示一个简单的 inputs.d 目录下面的 yml 配置文件的具体内容,其主要作用就是配置单独服务的独立日志数据,以及追加不同的数据 tag 类型。

yaml

# 收集的数据类型
- 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 还提供了不同了模块来配置不同的服务日志以及其不同的模块特性,比如我们常见的 PostgreSQlRedisIptables 等。

yaml

# 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 服务介绍

  • [1] Graylog - 日志监控系统

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

  • [2] Graylog - 工作流程介绍

部署 graylog 最简单的架构就是单机部署,复杂的也是部署集群模式,架构图示如下所示。我们可以看到其中包含了三个组件,分别是 ElasticsearchMongoDbGraylog。其中,Elasticsearch 用来持久化存储和检索日志文件数据(IO 密集),MongoDb 用来存储关于 Graylog 的相关配置,而 Graylog 来提供 Web 界面和对外接口的(CPU 密集)。

0dd63fe1ad5fcc331b6de874da16270e.png
最小化单机部署
64f7ed8084923f479914a24a11143d0e.png
最优化集群部署

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 的情报监控
64a10fd935a9d6702d384bc6d8832ae6.png
Graylog中的核心服务组件

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

ExtractorSystem/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 的一些参数,主要参数包括,ShardsReplicas

除了上面提到的日志处理流程,Graylog 还提供了 Pipeline 脚本实现更灵活的日志处理方案。这里不详细阐述,只介绍如果使用 Pipelines 来过滤不需要的日志。下面是丢弃 level > 6 的所有日志的 Pipeline Rule 的例子。从数据采集(input),字段解析(extractor),分流到 stream,再到 pipeline 的清洗,一气呵成,无需在通过其他方式进行二次加工。

Sidecar 是一个轻量级的日志采集器,通过访问 graylog 进行集中式管理,支持 linuxwindows 系统。Sidecar 守护进程会定期访问 graylogREST API 接口获取 Sidecar 配置文件中定义的标签(tag) ,Sidecar 在首次运行时会从 graylog 服务器拉取配置文件中指定标签(tag) 的配置信息同步到本地。目前 Sidecar 支持 NXLogFilebeatWinlogbeat。他们都通过 graylog 中的 web 界面进行统一配置,支持 BeatsCEFGelfJson APINetFlow 等输出类型。Graylog 最厉害的在于可以在配置文件中指定 Sidecar 把日志发送到哪个 graylog 群集,并对 graylog 群集中的多个 input 进行负载均衡,这样在遇到日志量非常庞大的时候,graylog 也能应付自如。

bash

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

日志集中保存到 Graylog 后就可以方便的使用搜索了。不过有时候还是需要对数据进行近一步的处理。主要有两个途径,分别是直接访问 Elastic 中保存的数据,或者通过 GraylogOutput 转发到其它服务。


5. 服务安装和部署

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

9c6831477c71b9696abf63cbc1cfbf84.png
使用Graylog来收集日志
  • [1] 部署 Filebeat 工具

官方提供了多种的部署方式,包括通过 rpmdeb 包安装服务,以及源代码编译的方式安装服务,同时包括了使用 Docker 或者 kubernetes 的方式安装服务。我们根据自己的实际需要,进行安装即可。

bash

# 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

bash

# 使用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"]
c12ec3e85f0df67430783046a824a4e6.png
使用Graylog来收集日志
  • [2] 部署 Graylog 服务

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

bash

# 生成password_secret密码(最少16位)
$ sudo apt install -y pwgen
$ pwgen -N 1 -s 16
zscMb65...FxR9ag

# 生成后续Web登录时所需要使用的密码
$ echo -n "Enter Password: " && head -1 </dev/stdin | tr -d '\n' | sha256sum | cut -d" " -f1
Enter Password: zscMb65...FxR9ag
77e29e0f...557515f

生成所需密码信息之后,我们将如下 yml 信息保存到 docker-comopse.yml 文件中,使用 docker-compose 命令启动该服务,即可完成部署。之后,通过浏览器访问对应服务器地址的 9000 端口,即可登录主页 。

yaml

version: "3"

services:
  mongo:
    restart: on-failure
    container_name: graylog_mongo
    image: "mongo:3"
    volumes:
      - "./mongodb:/data/db"
    networks:
      - graylog_network

  elasticsearch:
    restart: on-failure
    container_name: graylog_es
    image: "elasticsearch:6.8.5"
    volumes:
      - "./es_data:/usr/share/elasticsearch/data"
    environment:
      - http.host=0.0.0.0
      - transport.host=localhost
      - network.host=0.0.0.0
      - "ES_JAVA_OPTS=-Xms512m -Xmx5120m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    deploy:
      resources:
        limits:
          memory: 12g
    networks:
      - graylog_network

  graylog:
    restart: on-failure
    container_name: graylog_web
    image: "graylog/graylog:3.3"
    ports:
      - 9000:9000 # Web服务提供的访问端口
      - 5044:5044 # Filebeat工具提供端口
      - 12201:12201 # GELF TCP
      - 12201:12201/udp # GELF UDP
      - 1514:1514 # Syslog TCP
      - 1514:1514/udp # Syslog UDP
    volumes:
      - "./graylog_journal:/usr/share/graylog/data/journal"
    environment:
      - GRAYLOG_PASSWORD_SECRET=zscMb65...FxR9ag
      - GRAYLOG_ROOT_PASSWORD_SHA2=77e29e0f...557515f
      - GRAYLOG_HTTP_EXTERNAL_URI=http://11.22.33.44:9000/
      - GRAYLOG_TIMEZONE=Asia/Shanghai
      - GRAYLOG_ROOT_TIMEZONE=Asia/Shanghai
    networks:
      - graylog
    depends_on:
      - mongo
      - elasticsearch

networks:
  graylog_network:
    driver: bridge

需要注意的是,GELF(Graylog Extended Log Format) 的 input 模式可以接受结构化的事件,支持压缩和分块。恰好,Docker 服务的 log-driver 驱动原生提供了 GELF 的支持。只需要我们在 Graylogsystem/inputs 下面创建对应的 input 之后,启动容器时候指定 log-driver,就可以将容器内的输出都会发送到 Graylog 里面了。

6eaba35ba0ab0baa0e80ab99ae50fc26.png
使用Graylog来收集日志

bash

# [docker] 启动容器指定地址和driver
docker run --rm=true \
    --log-driver=gelf \
    --log-opt gelf-address=udp://11.22.33.44:12201 \
    --log-opt tag=myapp \
    myapp:0.0.1

yaml

# [docker-compose] 启动使用方式
version: "3"
services:
  redis:
    restart: always
    image: redis
    container_name: "redis"
    logging:
      driver: gelf
      options:
        gelf-address: udp://11.22.33.44:12201
        tag: "redis"
  ......

6. Graylog 界面功能

主要介绍 Graylog 界面的相关功能和对应特点!

47fa0e19f097650ea8c7ef52d6ccfe5e.png
Graylog界面功能
273c67b72005ec6e97c438606a3952bb.png
Graylog界面功能
acc398339eb58a509132fe495aca3918.png
Graylog界面功能
7804f7d05c58512dd037b2152348c1cf.png
Graylog界面功能
948914ad1974662405277e326e582e80.png
Graylog界面功能
- END -

欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢

a89ba0f74e4cd26e2d055ace8817d42b.png

已在知识星球更新源码解析如下:

2364d408838f43c116bd219bc7f10c2d.png

9610dabc346162b7068271169a263d39.png

b3060dfec7d26af6ef6f3d0d006b409a.png

1829a645b06be5654aee37884fc213df.png

最近更新《芋道 SpringBoot 2.X 入门》系列,已经 101 余篇,覆盖了 MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。

提供近 3W 行代码的 SpringBoot 示例,以及超 4W 行代码的电商微服务项目。

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
<think>好的,现在用户的问题是询问Graylog是否属于类ELK工具,以及两者的关系对比。之前我已经给出过GraylogELK的功能对比,但现在用户提供了新的引用内容,需要结合这些引用来调整回答。 首先,我需要仔细阅读用户提供的引用内容。引用1提到Loki是ELK的替代方案,通过索引部分字段来优化架构,这让我想到Graylog可能也有类似的优化策略。引用3中的对比表格显示,GraylogELK都被归类为具有强大搜索和实时可视化的工具,但各自的优缺点同。引用4提到Filebeat作为日志收集工具,与ELKGraylog都有关联,比如将数据转发到Elasticsearch或Logstash。 用户之前的问题是关于GraylogELK的关系,现在需要明确Graylog是否属于类ELK工具。根据之前的回答,GraylogELK都使用Elasticsearch作为存储,但核心定位同。Graylog是集成化的日志管理方案,而ELK是大数据分析平台。结合引用3中的对比,两者都被列为同的中间件,各有适用场景,因此Graylog属于ELK的同类,而是替代方案。 接下来需要确认用户提供的引用是否影响之前的结论。引用3中提到Graylog的优缺点,比如学习曲线陡峭和资源消耗大,这与ELK类似,但用户的问题是关于分类而非优缺点。引用1中的Loki作为ELK替代,同样,Graylog也是替代品,但有自己的架构设计。 需要将GraylogELK的关系明确,指出虽然它们有部分技术栈重叠(如Elasticsearch),但定位和架构同。因此,Graylog属于类ELK工具,而是独立的日志管理方案。同时,引用3的对比表格支持这一点,因为它们被列为同的选项。 最后,确保回答结构清晰,引用用户提供的资料,并生成相关问题。用户可能想知道如何选择两者,或者它们的具体技术差异,所以相关问题可以围绕这些点展开。</think>### GraylogELK的关系解析:是否属于类ELK工具? #### 一、核心定位对比 1. **技术架构的异同** - **共同点**:两者均依赖Elasticsearch(ES)作为核心存储引擎,支持分布式日志存储与检索[^3][^4]。 - **差异点**: - Graylog是**集成化日志管理平台**,内置数据收集(Input)、解析、告警和权限管理,开箱即用[^3] - ELK是**松耦合工具链**,需组合Logstash/Kibana/Beats等组件实现完整功能[^4] 2. **设计目标差异** - Graylog:专为**日志全生命周期管理**设计,强调操作便捷性(如原生支持Syslog协议) - ELK:定位**通用数据分析平台**,支持日志、指标、业务数据等多种数据类型[^1][^4] #### 二、是否属于“类ELK工具”? **结论:Graylog属于类ELK工具,而是独立的日志管理方案** - **关键依据**: 1. **功能完整性** Graylog直接整合了ELK中需多个组件协作的功能(如数据收集≈Logstash+Filebeat,可视化≈Kibana),形成统一管理界面 2. **技术独立性** 虽然共享Elasticsearch存储层,但Graylog的日志解析引擎、告警系统、权限控制均为自主研发模块[^4] 3. **生态定位** 根据引用[3]的中间件对比表,GraylogELK并列作为独立选项,而非衍生工具 #### 三、关键能力差异对照表 | 维度 | Graylog | ELK Stack | |--------------------|----------------------------------|--------------------------------| | **核心价值** | 端到端日志管理解决方案 | 可扩展的数据分析工具链 | | **部署模式** | 一体化服务(Graylog Server) | 多组件协作(Logstash+ES+Kibana)| | **数据处理流程** | 自动结构化(GELF协议) | 需手动配置Logstash Grok规则 | | **资源消耗** | 内存占用较高(集成化功能代价)[^3]| 分散消耗但总量更大 | | **学习成本** | 图形化配置为主 | 需掌握多种组件API和DSL语法 | #### 四、典型技术关联场景 1. **混合架构实践** ```mermaid graph TD A[应用日志] -->|Filebeat| B(Graylog) A -->|Logstash| C(Elasticsearch) B --> C C --> D{可视化} D --> E(Graylog Web) D --> F(Kibana) ``` - 说明:可通过共享Elasticsearch集群实现数据互通,但需注意索引命名冲突问题[^3] 2. **功能替代关系** - 当企业已部署ELK时,**仅需Graylog替代Logstash+Kibana**即可获得完整日志管理能力 - 反之若已有Graylog,仍需保留Elasticsearch作为存储引擎[^4] #### 五、选型建议 - **选择Graylog** ✅ 中小团队快速搭建日志系统 ✅ 需要开箱即用的告警/权限功能[^3] ✅ 处理结构化日志(如JSON格式) **典型场景**:Kubernetes容器日志监控[^1] - **选择ELK** ✅ 需自定义日志解析规则(如原始文本日志) ✅ 超大规模日志集群(PB级数据) ✅ 与APM、业务指标分析深度整合 #### 六、演进趋势 Graylog 5.0已支持OpenTelemetry协议,逐步向可观测性平台演进,但核心仍保持**日志领域专业化工具**定位,与ELK的通用数据分析路径形成差异化竞争[^3][^4] --- ### 相关问题 1. Graylog如何优化Elasticsearch索引策略以提升性能? 2. 在混合使用Graylog和Kibana时如何避免可视化冲突? 3. 如何评估日志管理工具的总拥有成本(TCO)?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值