直接将日志写入 InfluxDB

导航至

早在六月份,我们就发布了一篇关于我们“指标优先”的日志分析方法的博客;我们发现,超过四分之一的用户已经在使用 InfluxData 平台来存储日志和非数值事件。我们认为日志只是另一种形式的时序数据,因此我们希望为这些用户提供更好的工具来摄取和查看这些数据。归根结底,日志对于调试和故障排除非常宝贵;它们提供了对系统运行情况的详细洞察,并让您以预定义仪表板不允许的方式探索问题。

我们发布了一个 Telegraf 插件,允许您使用 syslog 协议摄取日志,这是基于我们内部正在进行的工作,然后在七月份,我们向 Chronograf 添加了日志查看功能

如果您有兴趣在 macOS 或 Linux 上启动并运行 rsyslog 和 Telegraf 插件,您应该查看Get Your Syslog On博客文章。一旦您开始写入数据,您就可以通过 Chronograf 中的 Log Viewer 面板来探索它。

然而,并非每个人都想运行 syslog 实例,并且我们在这里和那里收到了一些关于如何直接将日志写入 InfluxDB 以便可以在 Chronograf 中查看,但无需使用 syslog 或 Telegraf 插件的问题。

好消息!这完全有可能!

首先,让我们深入研究一下实现,以便我们可以了解真正发生了什么。首先要理解的是 syslog 是一种协议;它描述了消息应如何格式化和传输。这在 RFC5424 - Syslog 协议中进行了描述。该规范的一部分包括关于如何在日志中使用结构化数据的详细信息,我们强烈建议这样做!

当您使用 syslog 和 Telegraf 时,后者负责接受 syslog 格式的消息并将其转换为要写入 InfluxDB 的行协议。它将所有 syslog 消息插入一个名为 syslog 的度量中,Chronograf 在使用数据填充日志查看器时会查找该度量。由于 syslog 协议是明确定义的,我们知道我们始终会在数据中存在某些字段和标签,这就是 Chronograf 知道如何格式化所有内容的方式。查看器右上角有下拉菜单,用于选择要使用的 InfluxDB 实例和数据库。

一旦数据被写入数据库,模式看起来像这样

标签

  • appname
  • facility
  • host
  • hostname
  • severity (需要匹配 syslog severity level keyword 才能在 Chronograf 中正确显示)

字段

  • facility_code (整数)
  • message (字符串)
  • procid (字符串)
  • severity_code (整数)
  • timestamp (整数)
  • version (整数)

但是没有理由您不能像这样直接将数据写入数据库!您所要做的就是将点写入 InfluxDB,使其遵循此模式,并落入 syslog 数据库。一旦它们在那里,它们就会出现在 Chronograf 的 Log Viewer 中。

以下是一些行协议日志示例

syslog,appname=myapp,facility=console,host=myhost,hostname=myhost,severity=warning facility_code=14i,message="warning message here",severity_code=4i,procid="12345",timestamp=1534418426076077000i,version=1i
syslog,appname=mysecondapp,facility=console,host=myhost,hostname=myhost,severity=crit facility_code=14i,message="critical message here",severity_code=2i,procid="12346",timestamp=1534418426076078000i,version=1i

如果您愿意,您可以打开 Influx CLI 并使用 insert 命令直接写入这些点;只需确保您将时间戳更新为最近的时间,这样您就不必在历史记录中搜索来查找数据。

上面模式中的某些字段特定于 syslog 格式,并帮助您识别日志的严重性(它们是信息性的还是严重错误),以及编写它们的应用程序。这对于故障排除非常有帮助,所以不要遗漏它!您可以在 syslog Wikipedia 页面上获得有关严重性代码和工具的更多信息。

使用这种方法,您可以从任何可以与 InfluxDB 建立 HTTP 连接的应用程序创建日志条目。我们甚至已经有一些用户在实际中使用这项技术,所以如果它适合您的用例,请尝试一下!需要记住的一件事是,当您在将大量点批量发送到数据库(5,000-10,000)之前,InfluxDB 效果最佳,因此如果您发送大量单个日志行,您可能会用 HTTP 请求淹没数据库。

如果您最终直接将日志写入 InfluxDB,或者如果您有其他关于集成指标和日志的成功案例,我们很乐意听到!在 Twitter 上给我们发推文 @InfluxDB!