直接将日志写入 InfluxDB
作者:Noah Crowley / 产品, 用例, 开发者
2018年10月12日
导航至
早在六月份,我们就发布了一篇关于我们“指标优先”的日志分析方法的博客;我们发现,超过四分之一的用户已经在使用 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!