GRAYLOG 的架构方向
Graylog 是最接近 Splunk 架构的:
- Graylog 是从第一行代码单独构建的日志管理系统。 这使得它非常高效且易于使用。
- 该
graylog-server
组件位于中间,解决了 Elasticsearch(全文搜索引擎,而不是日志管理系统)在日志管理方面的缺点。它还在其之上构建了一个抽象层,以使数据访问尽可能容易,而无需选择索引和编写繁琐的时间范围选择过滤器等 - 只需提交搜索查询,Graylog 将为您处理剩下的事情。 - 系统的所有部分都紧密集成,许多部分相互通信,使您的工作更轻松。
- 就像 WordPress 使 MySQL 成为一个很好的博客解决方案一样,Graylog 使 Elasticsearch 成为一个很好的日志记录解决方案。您永远不应该直接使用系统或前端查询 Elasticsearch 来进行日志管理,因此我们将其放在
graylog-server
前面。
Graylog的部署图
最低部署图:
生产集群部署图
Graylog 的部署步骤
graylog 包括四部分:
- mongodb
- elasticsearch
- graylog-server
- graylog-web
1. 环境准备
我这里采用的是docker-compose
的方式启动
官方提供了多个版本的 docker-compose.yml文件可供选择。
官方连接:https://docs.graylog.org/en/3.3/pages/installation/docker.html
version: '3'
services:
# MongoDB: https://hub.docker.com/_/mongo/
mongo:
image: mongo:4.2
networks:
- graylog
# Elasticsearch: https://www.elastic.co/guide/en/elasticsearch/reference/7.10/docker.html
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch-oss:7.10.2
environment:
- http.host=0.0.0.0
- transport.host=localhost
- network.host=0.0.0.0
- "ES_JAVA_OPTS=-Dlog4j2.formatMsgNoLookups=true -Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
deploy:
resources:
limits:
memory: 1g
networks:
- graylog
# Graylog: https://hub.docker.com/r/graylog/graylog/
graylog:
image: graylog/graylog:4.2
environment:
# CHANGE ME (must be at least 16 characters)!
- GRAYLOG_PASSWORD_SECRET=somepasswordpepper
# Password: admin
- GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
- GRAYLOG_HTTP_EXTERNAL_URI=http://127.0.0.1:9000/
entrypoint: /usr/bin/tini -- wait-for-it elasticsearch:9200 -- /docker-entrypoint.sh
networks:
- graylog
restart: always
depends_on:
- mongo
- elasticsearch
ports:
# Graylog web interface and REST API
- 9000:9000
# Syslog TCP
- 1514:1514
# Syslog UDP
- 1514:1514/udp
# GELF TCP
- 12201:12201
# GELF UDP
- 12201:12201/udp
networks:
graylog:
driver: bridge
这里需要注意GRAYLOG_HTTP_EXTERNAL_URI 这个配置项是web页面的路径,如果是本地可以指定localhost或者127.0.0.1。如果是远程访问这里则需要填写外网ip。
2. 启动容器
通过 docker-compose up 启动容器
3.登录控制台
通过前面配置文件中 GRAYLOG_HTTP_EXTERNAL_URI 指定的路径登录页面
springboot 集成Graylog
1. 添加pom 依赖
<!-- 提供logback传输日志到graylog的依赖 -->
<dependency>
<groupId>de.siegmar</groupId>
<artifactId>logback-gelf</artifactId>
<version>2.0.0</version>
</dependency>
2. 修改logback.xml
支持tcp 和 udp 两种方式,这里采用udp示例
具体描述信息见官网:https://github.com/osiegmar/logback-gelf
<!-- graylog 日志收集 -->
<appender name="GELF" class="de.siegmar.logbackgelf.GelfUdpAppender">
<graylogHost>localhost</graylogHost>
<graylogPort>12201</graylogPort>
<maxChunkSize>508</maxChunkSize>
<useCompression>true</useCompression>
<encoder class="de.siegmar.logbackgelf.GelfEncoder">
<includeRawMessage>true</includeRawMessage>
<includeMarker>true</includeMarker>
<includeMdcData>true</includeMdcData>
<includeCallerData>false</includeCallerData>
<includeRootCauseData>false</includeRootCauseData>
<includeLevelName>true</includeLevelName>
<shortPatternLayout class="ch.qos.logback.classic.PatternLayout">
<pattern>${GRAY_LOG_SHORT_PATTERN}</pattern>
</shortPatternLayout>
<fullPatternLayout class="ch.qos.logback.classic.PatternLayout">
<pattern>${GRAY_LOG_FULL_PATTERN}</pattern>
</fullPatternLayout>
<staticField>app_name:${APP_NAME}</staticField>
<staticField>os_arch:${os.arch}</staticField>
<staticField>os_name:${os.name}</staticField>
<staticField>os_version:${os.version}</staticField>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="GELF" />
</root>
3 . 设置来源信息
4. 启动项目
Graylog与ELK之间的主要区别
- ELK stack;它使用弹性搜索收集、索引和存储数据;logstash 是分析存储在弹性搜索中的所有信息的工具;此信息可能是日志数据。他们所做的所有推论和观察都由 kibana 使用其交互式仪表板进行可视化。ELK stack主要专注于大数据分析,而 Graylog 则专门用于日志分析。与 ELK 不同,它只处理日志数据。
- 可视化由 ELK 中的 kibana 完成;kibana 必须与其他人一起单独设置。Graylog 是处理和可视化的完整包。它的 GUI 比 kibana 更具交互性和用户友好性。在日志分析方面,Graylog 非常强大。
- ELK stack和Graylog在一定程度上都是开源工具,用户可以亲身体验,持续支持,所有高级功能都是授权的。
- Graylog 用于许多安全应用程序中,并且是集中式的。由于所有数据都是集中的,因此可以从多个日志源以及多个地理位置分析大规模(TB)的数据,因此可以在任何地方访问。
ELK中的日志分析流程:
- 在大多数对日志分析感兴趣的情况下,ELK stack使用 filebeat(一种用于集中所有日志的轻量级工具)将所有日志定向到特定服务器。
- filebeat正在推送的所有数据都被推送到logstash进行处理。Logstash 非常轻巧且灵活。它可以与多个插件集成,但要以性能为代价。
- 虽然 logstash 很容易使用,但由于其局限性,处理高流量数据变得困难。
- 所有logstash处理的数据都会发送到kibana进行可视化。它非常具有交互性,让用户可以定义他们选择的可视化类型。除了数据表示之外,它还提供了一些有关应用程序在生产环境中的行为的统计信息。
Graylog中的日志分析流程:
- Graylog主要由三个组件组成,分别是MongoDB、Graylog主服务器和Graylog Web界面。
- Graylog 客户端设置有特定的配置,可以实现服务器-客户端通信。客户端将日志数据推送到服务器,服务器分析并存储在 mongoDB 中。
- Graylog Web UI 非常用户友好;它提供对用户权限的控制。它使用 RESTful API。
- Web UI 可以支持多种数据类型,而 Graylog 不支持系统日志。数据应直接发送到 Graylog。这使得仪表板中的日志管理变得困难。
Graylog vs ELK对比表
Graylog | ELK |
不接受系统日志文件。数据应直接发送。 | ELK 支持所有大多数数据类型,如 json 等。可以使用第三方插件进行数据转换。 |
专为日志管理和日志分析而开发。 | ELK 支持日志管理和日志分析以及其他功能。它是一个多用途的工具。 |
Graylog 在处理日志方面非常强大。 | Logstash 是 ELK 的一部分,它进行处理的速度不如 Graylog 快,并且在存在高流量数据时会出现问题。 |
用java开发,支持GLEF(Graylog扩展日志格式) | ELK也是用java开发的,支持json格式。 |
支持实时 UDP 日志记录/GLEF 日志记录以及直观的搜索。 | 支持弹性搜索的全文查询搜索分析。 |
使用 Lucene 语法作为其搜索语言 | 使用基于 Lucene 作为其搜索语言的 Query DSL。 |
内置警报可用。警报基于流数据。可以在 Graylog Web 界面中配置自定义警报过滤器。 | 内置警报不可用,但可以使用 X-pack 等第三方插件向用户发送警报。 |