Graylog: 选择输入类型

如何选择合适的 Graylog 输入类型

👋 欢迎查阅 Stackhero 文档

Stackhero 提供全托管的 Graylog cloud 解决方案,专为高效与简便而设计。您可以:

  • 依赖于服务内置的无限制、专用 SMTP 邮件服务器
  • 只需一键即可轻松完成更新,无需手动操作。
  • 使用由HTTPS保护的自定义域名(例如 https://logs.your-company.com),为您的团队提供安全、直接的访问。
  • 专属私有基础设施上体验卓越的性能安全性,无共享资源,无干扰邻居。

专注于您的数据,而非工具本身:只需几分钟,即可开始使用 Stackhero 的 Graylog cloud hosting 解决方案。

Graylog 提供多种输入类型。这些输入允许您将日志发送到 Graylog 服务器,或让 Graylog 从其他来源获取日志。

在绝大多数情况下,您会希望将数据从应用程序或设备发送到 Graylog 服务器。 本文不涉及让 Graylog 主动从其他地方获取日志的高级用法。不过,如果您有此需求,也请放心,实现起来非常简单。

要选择最佳的输入类型,首先需要确定您希望发送到 Graylog 的日志格式。我们推荐使用 GELF 格式,具体内容请见下文。

接下来,您需要选择协议:UDP 或 TCP。

第一步是选择日志消息的格式。主要有三种选项:RAW/PlaintextSyslogGELF

这是最简单的格式。它适用于任何系统,因为它发送的是完整的纯文本消息。非常易于使用,非常适合初步测试,比如使用 netcat 工具发送消息。

要进行测试,您可以创建一个“Raw/Plaintext UDP”输入,然后使用以下命令之一发送测试日志:

  1. 在 macOS 上:echo "Hello Graylog from UDP" | nc -u -w1 -c <XXXXXX>.stackhero-network.com 5555
  2. 在 Linux 上:echo "Hello Graylog from UDP" | nc -u -w1 <XXXXXX>.stackhero-network.com 5555

是不是很简单?不过,由于这是基础格式,您很快会遇到功能上的限制。因此,我们不建议将其用于简单测试之外的场景。

这是服务器环境中广泛用于存储和传输日志的标准格式。它在 Linux、Windows、*BSD 及其他操作系统中都可以找到。

如果您正在使用 Syslog、Rsyslog 或其他兼容服务,并希望将日志从服务器发送到 Graylog,syslog 输入是最简单的选择。

不过,由于 GELF 更为强大,如果您可以发送 GELF 格式的消息,我们建议优先选择 GELF,具体说明见下文。

请注意,syslog 格式的消息长度限制为 1024 个字符。

GELF 是“Graylog Extended Log Format”的缩写。该格式由 Graylog 创建,现已被众多产品广泛采用,成为行业标准。

GELF 格式的优势在于它以结构化方式发送日志。结构化日志允许您传递多个字段和值,而不是单一的非结构化文本消息。这让 Graylog 更容易解析和检索信息。

例如,如果您希望发送包含 IP 地址和请求类型的日志,可以发送包含 iprequest_type 两个字段的消息。在 Graylog 端,您可以直接基于这些字段进行检索,比如通过查询:request_type: POST 查找所有 POST 请求。

GELF 基于 JSON,必须至少包含 versionhostshort_message 字段。您还可以添加其他字段,这些字段名称需以下划线(_)开头。

例如,包含额外字段 device_id 的简单消息如下:

{
  "version": "1.1",
  "host": "myIotDevice",
  "short_message": "Something is happening",
  "_device_id": "abcd"
}

随后,您可以在 Graylog 上通过查询 device_id: abcd 检索所有来自设备“abcd”的消息。

如需了解 GELF 的更多细节,请参考官方规范:https://docs.graylog.org/en/4.0/pages/gelf.html

如果您希望从服务器或应用程序发送日志,可以使用众多现成的库,这些库会自动生成并发送您的消息。相关示例可参考 Node.js.NETPython

在选择好合适的格式后(我们希望您选择了 GELF!),接下来需要在 TCP 和 UDP 之间选择通信协议。

UDP 协议非常简单。您的应用程序将消息发送到服务器,无需等待接收确认。客户端与服务器之间没有交互,也就是说服务器不会确认已收到消息。

这种方式的优点在于,如果 Graylog 服务器变慢或不可用,不会影响您的应用程序性能。缺点是无法保证应用程序发送的每条日志都能到达服务器。此外,UDP 不支持加密。

  1. 如果 Graylog 变慢或不可用,不会影响您的应用程序。
  1. 部分消息可能会丢失。
  2. 不支持加密。
  3. 消息大小限制为 8192 字节。

与 UDP 不同,TCP 协议在您的应用程序与 Graylog 之间建立信息交互。这意味着您会收到 Graylog 已收到消息的确认。

TCP 的好处在于,如果消息未被 Graylog 接收(例如服务器不可用时),您可以重新发送消息。缺点是,如果 Graylog 变慢或无响应,您的应用程序必须等待响应或超时,可能会导致应用变慢。

另一个优点是,您可以通过 TLS(也称为 SSL)加密通信。

  • 能确保消息已被接收。
  • 支持加密(TLS)。
  • 无消息大小限制。
  • 如果 Graylog 响应慢或不可用,可能会拖慢发送方。

希望本指南能为您选择发送日志到 Graylog 的最佳格式和协议提供所需信息。

请记住,您可以通过为每个输入分配不同端口,同时运行多个输入。例如,您可以在 514 端口上运行“syslog UDP”输入,同时在 12201 端口上运行“GELF TCP”输入。