Graylog: 入门指南

如何开始使用 Graylog

👋 欢迎使用 Stackhero 文档!

Stackhero 提供即用型 Graylog 云 解决方案,具有众多优势,包括:

  • 包含无限制和专用的 SMTP 电子邮件服务器
  • 只需点击即可轻松完成更新
  • 使用 HTTPS 保护的可定制域名(例如,https://logs.your-company.com)。
  • 专用私有 VM提供的最佳性能和强大安全性

节省时间简化您的生活:只需 5 分钟即可试用 Stackhero 的 Graylog 云托管 解决方案!

输入是 Graylog 接收日志的端点。您可以使用 TCP 或 UDP 发送日志。此外,Graylog 还可以从 API、Kafka 队列、RabbitMQ 服务器和其他方法收集日志条目。

在此示例中,我们将创建一个原始 UDP 输入。首先,打开 Graylog 界面,导航到“System”,然后选择“Inputs”。选择“Raw/Plaintext UDP”并点击“Launch new input”。使用以下值配置您的输入并验证表单:

  1. Node: 选择您的节点
  2. Title: RAW UDP
  3. Port: 5555

接下来,在您的计算机上打开终端并向 Graylog 服务器发送 UDP 消息。记得将 XXXXXX 替换为您的服务域名:

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

发送消息后,返回 Graylog 并点击“Search”。您应该会看到您的消息 🎉

恭喜,您现在已成功向 Graylog 发送了第一条消息!您可以根据需要创建其他输入和仪表板。如需进一步指导,您可以查阅 Graylog 的官方文档

我们的 Git 仓库 中提供了多个代码示例。此仓库提供实用的实现和额外的自定义,以帮助您充分利用 Graylog。

如果您有一个 rsyslog 客户端并希望安全地将日志发送到 Graylog,请按照以下步骤操作:

警告 不要在 Graylog 的输入上激活任何 TLS 选项。TLS 将由实例上的反向代理直接管理,因此 Graylog 不会处理它。

  1. 在 Stackhero 仪表板中进入您的 Graylog 服务配置,并为 Syslog TCP 端口 514 启用“TLS encryption”。

  2. 按如下所示更新您的 rsyslog 配置。将 <XXXXXX>.stackhero-network.com 替换为您的实例主机名:

    # 定义 TLS CA 证书
    global(
      DefaultNetstreamDriver="gtls"
      DefaultNetstreamDriverCAFile="/etc/ssl/certs/ca-certificates.crt"
    )
    
    # 将所有日志发送到远程服务器
    # 为此操作创建一个磁盘队列。如果远程主机
    # 离线,消息将排队到磁盘并在其重新可用时发送
    # 参见 https://www.rsyslog.com/doc/v8-stable/configuration/actions.html
    # 和 https://www.rsyslog.com/doc/v8-stable/configuration/modules/omfwd.html
    *.* action(
      type="omfwd"
      target="<XXXXXX>.stackhero-network.com"
      port="514"
      protocol="tcp"
      KeepAlive="on"
      KeepAlive.Interval="30"
      StreamDriver="gtls"
      StreamDriverMode="1"
      StreamDriverAuthMode="x509/name"
      ResendLastMSGOnReconnect="on"
      queue.filename="fwdRule1"  # 唯一的名称前缀用于 spool 文件
      queue.type="LinkedList"
      queue.maxDiskSpace="256m"
      queue.saveOnShutdown="on"
      action.resumeRetryCount="-1"
      action.resumeInterval="30"
    )
    
  3. 重启您的 rsyslog 服务,并通过以下命令发送日志来验证配置:

    logger This is a test
    

这就完成了设置。您现在正在使用 TLS 加密安全地将日志发送到 Graylog!

您可能会遇到如下错误:

org.opensearch.index.mapper.MapperParsingException: failed to parse field [time] of type [long] in document with id 'xxxx'

您可以在 Stackhero 仪表板提供的日志中或在 Graylog 管理面板的 System > Overview > Indexer failures 下查看此错误。

此错误表明发送的日志中字段 time 的值与预期类型不匹配(在此情况下为“long”类型的数值)。Graylog 利用 OpenSearch 的动态映射功能。当首次发送日志时,OpenSearch 会尝试猜测字段类型。例如,如果日志包含字段 time 且数值为 1234,OpenSearch 会将其定义为数值字段。如果另一个日志发送的字段 time 设置为 "abcd",字符串,OpenSearch 将拒绝它,因为它期望数值。

请记住,字段名 time 仅用于说明。它可以是任何字段名和类型。

要解决此问题,您需要重新定义 OpenSearch 期望的类型。有关更多信息,请参阅官方 Graylog 文档

在继续之前,请在 Stackhero 仪表板中启用 OpenSearch 访问。导航到您的 Graylog 服务并点击“Configure”按钮以激活 OpenSearch 访问。

警告 请谨慎进行这些更改,因为不正确的配置可能会阻止您的 OpenSearch 集群并可能导致数据丢失。如果不确定,请不要继续。

  1. 定义您的新映射。在此示例中,我们将字段 time 重新定义为字符串类型。您可以在 OpenSearch 字段数据类型文档中找到可用类型。

  2. 将以下内容保存到名为 graylog-custom-mapping.json 的文件中:

    {
      "template": "graylog_*",
      "mappings": {
        "message": {
          "properties": {
            "time": {
              "type": "string",
              "index": "not_analyzed"
            }
          }
        }
      }
    }
    
  3. 使用以下 curl 命令发送此文件(将 <XXXXXX>.stackhero-network.com 替换为您的实例域名):

    curl -u 'admin' -X PUT -d @'graylog-custom-mapping.json' -H 'Content-Type: application/json' 'https://<XXXXXX>.stackhero-network.com/opensearch/_template/graylog-custom-mapping?pretty'
    

    您应该收到如下响应:

    {
      "acknowledged": true
    }
    
  4. 最后,使用此命令验证映射是否已更新(根据需要替换域名):

    curl -u 'admin' -X GET 'https://<XXXXXX>.stackhero-network.com/opensearch/graylog_deflector/_mapping?pretty'
    

处理错误 "Unable to write audit log entry"

如果您看到如下错误:

Unable to write audit log entry because there is no valid license

Not running cleanup for auditlog entries in MongoDB because there is no valid license

这是因为 Graylog Enterprise 已激活但没有有效许可证。如果您有许可证,可以在 Graylog 界面中输入。如果没有许可证,只需在 Stackhero 仪表板中禁用 Graylog Enterprise。