直接将日志写入 InfluxDB

导航到

在六月份,我们发布了一篇关于我们“以度量指标优先”日志分析方法的博客;我们发现,超过四分之一的用户已经在使用 InfluxData 平台存储日志和非数值事件。我们认为日志只是时序数据的一种形式,因此我们希望为这些用户提供更好的工具来导入和查看这些数据。最终,日志对于调试和故障排除至关重要;它们提供了对系统运行情况的深入了解,并允许您以预定义仪表板不允许的方式探索问题。

我们发布了一个 Telegraf 插件,允许您使用 syslog 协议导入日志,该协议基于我们内部的工作,然后在七月份,我们在 Chronograf 中添加了日志查看功能

如果您对在 macOS 或 Linux 上运行 rsyslog 和 Telegraf 插件感兴趣,您应该查看Get Your Syslog On博客文章。一旦开始写入数据,您就能通过 Chronograf 中的日志查看面板来探索这些数据。

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

好消息!这是完全可能的!

首先,让我们深入了解一下实现细节,以便我们了解真正的情况。首先,我们需要了解的是,syslog 是一种协议;它描述了消息应该如何格式化和传输。这可以在RFC5424 - Syslog 协议中找到。该规范的一部分包括了如何使用结构化数据在你的日志中的详细说明,我们强烈建议这么做!

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

一旦数据已写入数据库,其模式如下

标签

  • appname
  • facility
  • host
  • hostname
  • severity (需要匹配syslog的严重性级别关键字才能在Chronograf中正确显示)

字段

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

但是,您没有理由不能直接以这种方式将数据写入数据库!您所需要做的就是向InfluxDB写入符合此模式的点,并将其存储在syslog数据库中。一旦它们在那里,它们就会在Chronograf的日志查看器中显示。

以下是行协议中日志的几个示例

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维基百科页面上找到有关严重性代码和设施的更多信息。

使用这种方法,您可以从任何可以与InfluxDB建立HTTP连接的应用程序创建日志条目。我们已经有几位用户已经在野外使用这种技术,所以如果它适合您的用例,不妨试一试!要记住的一件事是,InfluxDB在批量发送大量点(5,000-10,000)到数据库时表现最佳,所以如果您正在发送大量的单个日志行,您可能会用HTTP请求压垮数据库。

如果您直接将日志写入InfluxDB,或者如果您有其他关于集成指标和日志的成功故事,我们非常愿意了解!在Twitter上关注我们@InfluxDB!