Graylog: 入门指南
如何开始使用 Graylog
👋 欢迎阅读 Stackhero 文档!
Stackhero 提供现成的 Graylog 云 解决方案,具有众多优势,包括:
- 包含无限制和专用的 SMTP 电子邮件服务器。
- 只需点击即可轻松完成更新。
- 使用 HTTPS 保护的可定制域名(例如,https://logs.your-company.com)。
- 由专用私有 VM提供的最佳性能和强大安全性。
节省时间并简化您的生活:只需 5 分钟即可试用 Stackhero 的 Graylog 云托管 解决方案!
在 Graylog 中创建第一个输入(Input)
输入(Input)是 Graylog 接收日志的端点。您可以通过 TCP 或 UDP 发送日志。此外,Graylog 还可以通过 API、Kafka 队列、RabbitMQ 服务器以及其他方式收集日志。
本例中,我们将创建一个原始 UDP 输入。首先,打开 Graylog 界面,依次进入“System” > “Inputs”。选择“Raw/Plaintext UDP”,然后点击“Launch new input”。请按以下参数配置您的输入并提交表单:
- Node:选择您的节点
- Title:RAW UDP
- 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 官方文档。
Graylog 代码示例
我们在 Git 仓库 中提供了多个代码示例。该仓库包含实用实现和更多自定义内容,帮助您充分发挥 Graylog 的功能。
使用 TLS 加密将 rsyslog 日志发送到 Graylog
如果您有 rsyslog 客户端,并希望安全地将日志发送到 Graylog,请按照以下步骤操作:
请勿在 Graylog 的输入上启用任何 TLS 选项。TLS 将由您实例上的反向代理直接管理,Graylog 本身无需处理。
-
在 Stackhero 控制台的 Graylog 服务配置中,为 Syslog TCP 端口 514 启用“TLS 加密”。
-
按如下方式更新您的 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" ) -
重启您的 rsyslog 服务,并通过以下命令发送一条日志以验证配置:
logger This is a test
配置完成。您现在已通过 TLS 加密安全地将日志发送到 Graylog!
处理 "failed to parse field [XXXX] of type [YYYY]" 错误
您可能会遇到如下错误:
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 官方文档。
更新 OpenSearch 映射(mapping)
在操作前,请先在 Stackhero 控制台启用 OpenSearch 访问权限。进入您的 Graylog 服务,点击“Configure”按钮以激活 OpenSearch 访问。
请谨慎操作,错误的配置可能导致 OpenSearch 集群不可用,甚至造成数据丢失。如有疑问,请勿继续。
-
定义新的映射。本例中,我们将
time字段重新定义为 string 类型。可用类型请参考 OpenSearch 字段类型文档。 -
将以下内容保存为
graylog-custom-mapping.json文件:{ "template": "graylog_*", "mappings": { "message": { "properties": { "time": { "type": "string", "index": "not_analyzed" } } } } } -
使用以下 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 } -
最后,通过以下命令验证映射是否已更新(如有需要请替换域名):
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 即可。