文档文档

使用 InfluxDB 进行日志和跟踪

此页面记录了 InfluxDB OSS 的早期版本。 InfluxDB OSS v2 是最新的稳定版本。请参阅 InfluxDB v2 文档

内容

日志位置

默认情况下,InfluxDB 将日志输出写入 stderr。根据您的用例,此日志信息可以写入到其他位置。

直接运行 InfluxDB

当您直接运行 InfluxDB 时,使用 influxd,所有日志都会写入 stderr。您也可以像重定向任何到 stderr 的输出一样重定向日志输出,例如在此示例中

influxd 2>$HOME/my_log_file

作为服务启动

systemd

大多数 Linux 系统将日志定向到 systemd 日志。要访问这些日志,请使用此命令

sudo journalctl -u influxdb.service

有关更多信息,请参阅 journald.conf 手册页

sysvinit

在不使用 systemd 的 Linux 系统上,InfluxDB 将所有日志数据和 stderr 写入 /var/log/influxdb/influxd.log。您可以通过在 /etc/default/influxdb 的启动脚本中设置环境变量 STDERR 来覆盖此位置。(如果此文件不存在,您需要创建它。)

例如,如果 /etc/default/influxdb 包含

STDERR=/dev/null

所有日志数据都将被丢弃。同样,您可以通过在同一文件中设置 STDOUT 将输出定向到 stdout。当 InfluxDB 作为服务启动时,stdout 默认发送到 /dev/null

必须重启 InfluxDB 才能使用对 /etc/default/influxdb 的任何更改。

macOS 上的日志位置

在 macOS 上,默认情况下,InfluxDB 将日志存储在 /usr/local/var/log/influxdb.log

使用 logrotate

您可以使用 logrotate 在日志写入平面文件的系统上轮换 InfluxDB 生成的日志文件。如果在 sysvinit 系统上使用软件包安装,则 logrotate 的配置文件安装在 /etc/logrotate.d 中。您可以在此处查看该文件。

HTTP 访问日志记录

使用 HTTP 访问日志将 HTTP 请求流量与其他 InfluxDB 日志输出分开记录。

HTTP 访问日志格式

在 HTTP 访问日志中查找有关您的 GET 和 POST 请求的详细信息。有助于识别不良查询并提高性能。有关日志中包含的详细信息,请参阅下表。

以下示例显示了 HTTP 访问日志格式

GET 请求格式

[httpd] 172.13.8.13,172.39.5.169 - - [21/Jul/2019:03:01:27 +0000] "GET /query?db=metrics&q=SELECT+MEAN%28value%29+as+average_cpu%2C+MAX%28value%29+as+peak_cpu+FROM+%22foo.load%22+WHERE+time+%3E%3D+now%28%29+-+1m+AND+org_id+%21%3D+%27%27+AND+group_id+%21%3D+%27%27+GROUP+BY+org_id%2Cgroup_id HTTP/1.0" 200 11450 "-" "Baz Service" d6ca5a13-at63-11o9-8942-000000000000 9337349

POST 请求格式

[httpd] 127.0.0.1 - - [19/Mar/2021:14:09:51 -0700] "POST /query?pretty=true HTTP/1.1 {'db': 'TestData', 'BadDataBase'}, {'q': 'SELECT * FROM a'}, {'p': '[REDACTED]'}" 200 1217 "-" "curl/7.68.0" 71dcf8eb-88f7-11eb-8003-002b67685b12 1300

注意:一个或多个密码 p 值被替换为单个 [已编辑]

HTTP 访问日志

HTTP 访问日志示例
主机172.13.8.13,172.39.5.169
日志事件时间[21/Jul/2019:03:01:27 +0000]
请求方法GETPOST
用户名user
正在进行的 HTTP API 调用*/query?db=metrics%26q=SELECT%20used_percent%20FROM%20%22telegraf.autogen.mem%22%20WHERE%20time%20%3E=%20now()%20-%201m%20
请求协议HTTP/1.0
HTTP 响应代码200
响应大小(字节)11450
引用者-
用户代理Baz 服务
请求 IDd4ca9a10-ab63-11e9-8942-000000000000
响应时间(微秒)9357049
* 此字段显示正在访问的数据库和正在运行的查询。有关更多详细信息,请参阅 InfluxDB API 参考。请注意,此字段是 URL 编码的。

重定向 HTTP 访问日志记录

启用 HTTP 请求日志记录后,默认情况下 HTTP 日志与内部 InfluxDB 日志混合在一起。通过将 HTTP 请求日志条目重定向到单独的文件,两个日志文件都更易于阅读、监控和调试。

要重定向 HTTP 请求日志记录

找到 InfluxDB 配置文件的 [http] 部分,并将 access-log-path 选项设置为指定应写入 HTTP 日志条目的路径。

注意

  • 如果 influxd 无法访问指定的路径,它将记录错误并回退到将请求日志写入 stderr
  • 当 HTTP 请求日志记录被重定向到单独的文件时,[httpd] 前缀会被剥离,从而允许访问日志解析工具(如 lnav)无需额外修改即可呈现文件。
  • 要轮换 HTTP 请求日志文件,请使用 logrotatecopytruncate 方法或类似方法将原始文件保留在原位。

结构化日志记录

结构化日志记录启用机器可读且对开发人员更友好的日志输出格式。两种结构化日志格式 logfmtjson 提供使用外部工具进行更轻松的过滤和搜索,并简化了 InfluxDB 日志与 Splunk、Papertrail、Elasticsearch 和其他第三方工具的集成。

InfluxDB 日志记录配置选项(在 [logging] 部分中)现在包括以下选项

  • formatauto(默认)| logfmt | json
  • levelerror | warn | info(默认)| debug
  • suppress-logofalse(默认)| true

有关这些日志记录配置选项及其相应的环境变量的详细信息,请参阅配置文件文档中的日志记录选项

日志记录格式

有三种日志记录 format 选项可用:autologfmtjson。默认日志记录格式设置 format = "auto" 让 InfluxDB 自动管理日志编码格式

  • 当记录到文件时,使用 logfmt
  • 当记录到终端(或其他 TTY 设备)时,使用用户友好的控制台格式。

json 格式在指定时可用。

日志输出示例

Logfmt

ts=2018-02-20T22:48:11.291815Z lvl=info msg="InfluxDB starting" version=unknown branch=unknown commit=unknown
ts=2018-02-20T22:48:11.291858Z lvl=info msg="Go runtime" version=go1.10 maxprocs=8
ts=2018-02-20T22:48:11.291875Z lvl=info msg="Loading configuration file" path=/Users/user_name/.influxdb/influxdb.conf

JSON

{"lvl":"info","ts":"2018-02-20T22:46:35Z","msg":"InfluxDB starting, version unknown, branch unknown, commit unknown"}
{"lvl":"info","ts":"2018-02-20T22:46:35Z","msg":"Go version go1.10, GOMAXPROCS set to 8"}
{"lvl":"info","ts":"2018-02-20T22:46:35Z","msg":"Using configuration at: /Users/user_name/.influxdb/influxdb.conf"}

控制台/TTY

2018-02-20T22:55:34.246997Z     info    InfluxDB starting       {"version": "unknown", "branch": "unknown", "commit": "unknown"}
2018-02-20T22:55:34.247042Z     info    Go runtime      {"version": "go1.10", "maxprocs": 8}
2018-02-20T22:55:34.247059Z     info    Loading configuration file      {"path": "/Users/user_name/.influxdb/influxdb.conf"}

日志记录级别

level 选项设置要发出的日志级别。有效的日志记录级别设置为 errorwarninfo(默认)和 debug。将发出等于或高于指定级别的日志。

徽标抑制

suppress-logo 选项可用于抑制程序启动时打印的徽标输出。如果 STDOUT 不是 TTY,则始终抑制徽标。

跟踪

日志记录已得到增强,以提供对重要 InfluxDB 操作的跟踪。跟踪对于错误报告和发现性能瓶颈非常有用。

跟踪中使用的日志记录键

跟踪标识符键

trace_id 键指定跟踪特定实例的唯一标识符。您可以使用此键来过滤和关联操作的所有相关日志条目。

所有操作跟踪都包括一致的开始和结束日志条目,消息 (msg) 相同,描述操作(例如,“TSM 压缩”),但添加了适当的 op_event 上下文(startend)。有关示例,请参阅查找 InfluxDB 操作的所有跟踪日志条目

示例: trace_id=06R0P94G000

操作键

以下操作键标识操作的名称、开始和结束时间戳以及经过的执行时间。

op_name

操作的唯一标识符。您可以按特定名称的所有操作进行过滤。

示例: op_name=tsm1_compact_group

op_event

指定事件的开始和结束。两个可能的值,(start)(end),用于指示操作何时开始或结束。例如,您可以按 op_nameop_event 中的值进行 grep,以查找所有起始操作日志条目。有关此示例,请参阅查找所有起始日志条目

示例: op_event=start

op_elapsed

操作花费的执行时间量。与结束跟踪日志条目一起记录。显示的时间单位取决于经过的时间量 – 如果是秒,则将后缀 s。有效的时间单位为 nsµsmss

示例: op_elapsed=0.352ms

日志标识符上下文键

日志标识符键 (log_id) 使您可以轻松识别 influxd 进程单次执行的每个日志条目。日志文件可能通过单次执行进行拆分的其他方法,但一致的 log_id 简化了日志聚合服务的搜索。

示例: log_id=06QknqtW000

数据库上下文键

db_instance:数据库名称

db_rp:保留策略名称

db_shard_id:分片标识符

db_shard_group 分片组标识符

工具

以下是几个流行的工具,可用于处理和过滤以 logfmtjson 格式输出的日志文件。

hutils

hutils 由 Heroku 提供,是用于处理具有 logfmt 编码的日志的命令行实用程序集合,包括

  • lcut:根据指定的字段名称从 logfmt 跟踪中提取值。
  • lfmt:美化从流中出现的 logfmt 行,并突出显示其关键部分。
  • ltap:以一致的方式访问来自日志提供程序的邮件,以便其他处理 logfmt 跟踪的实用程序可以轻松解析。
  • lviz:通过从数据集构建树来可视化 logfmt 输出,该数据集将常见的键值对集合组合到共享的父节点中。

lnav(日志文件导航器)是一个高级日志文件查看器,可用于从终端监视和分析日志文件。lnav 查看器提供单个日志视图、自动日志格式检测、过滤、时间线视图、美观打印视图以及使用 SQL 查询日志。

操作

以下操作,按其操作名称 (op_name) 列出,在 InfluxDB 内部日志中进行跟踪,并且无需更改日志记录级别即可使用。

数据文件的初始打开

tsdb_open 操作跟踪包括与 tsdb_store 初始打开相关的所有事件。

保留策略分片删除

retention.delete_check 操作包括与保留策略相关的所有分片删除。

TSM 快照内存缓存到磁盘

tsm1_cache_snapshot 操作表示将 TSM 内存缓存快照到磁盘。

TSM 压缩策略

tsm1_compact_group 操作包括与 TSM 压缩策略相关的所有跟踪日志条目,并显示相关的 TSM 压缩策略键

  • tsm1_strategylevel | full
  • tsm1_level1 | 2 | 3
  • tsm1_optimizetrue | false

序列文件压缩

series_partition_compaction 操作包括与序列文件压缩相关的所有跟踪日志条目。

连续查询执行(如果启用日志记录)

continuous_querier_execute 操作包括所有连续查询执行(如果启用日志记录)。

TSI 日志文件压缩

tsi1_compact_log_file

TSI 级别压缩

tsi1_compact_to_level 操作包括 TSI 级别压缩的所有跟踪日志条目。

跟踪示例

查找 InfluxDB 操作的所有跟踪日志条目

在下面的示例中,您可以看到与“TSM 压缩”过程相关的所有跟踪操作的日志条目。请注意,初始条目显示消息“TSM 压缩 (start)”,最终条目显示消息“TSM 压缩 (end)”。[注意:日志条目是使用 trace_id 值进行 grep 的,然后使用 lcut(hutils 工具)显示指定的键值。]

$ grep "06QW92x0000" influxd.log | lcut ts lvl msg strategy level
2018-02-21T20:18:56.880065Z	info	TSM compaction (start)	full
2018-02-21T20:18:56.880162Z	info	Beginning compaction	full
2018-02-21T20:18:56.880185Z	info	Compacting file	full
2018-02-21T20:18:56.880211Z	info	Compacting file	full
2018-02-21T20:18:56.880226Z	info	Compacting file	full
2018-02-21T20:18:56.880254Z	info	Compacting file	full
2018-02-21T20:19:03.928640Z	info	Compacted file	full
2018-02-21T20:19:03.928687Z	info	Finished compacting files	full
2018-02-21T20:19:03.928707Z	info	TSM compaction (end)	full

查找所有起始操作日志条目

要查找所有起始操作日志条目,您可以按 op_nameop_event 中的值进行 grep。在以下示例中,grep 返回了 101 个条目,因此下面的结果仅显示第一个条目。在示例结果条目中,包括时间戳、级别、策略、trace_idop_nameop_event 值。

$ grep -F 'op_name=tsm1_compact_group' influxd.log | grep -F 'op_event=start'
ts=2018-02-21T20:16:16.709953Z lvl=info msg="TSM compaction" log_id=06QVNNCG000 engine=tsm1 level=1 strategy=level trace_id=06QV~HHG000 op_name=tsm1_compact_group op_event=start
...

使用 lcut 实用程序(在 hutils 中),以下命令使用之前的 grep 命令,但添加了 lcut 命令以仅显示在所有条目中不相同的键的键及其值。以下示例包括 19 个唯一日志条目的示例,显示选定的键:tsstrategyleveltrace_id

$ grep -F 'op_name=tsm1_compact_group' influxd.log | grep -F 'op_event=start' | lcut ts strategy level trace_id | sort -u
2018-02-21T20:16:16.709953Z	level	1	06QV~HHG000
2018-02-21T20:16:40.707452Z	level	1	06QW0k0l000
2018-02-21T20:17:04.711519Z	level	1	06QW2Cml000
2018-02-21T20:17:05.708227Z	level	2	06QW2Gg0000
2018-02-21T20:17:29.707245Z	level	1	06QW3jQl000
2018-02-21T20:17:53.711948Z	level	1	06QW5CBl000
2018-02-21T20:18:17.711688Z	level	1	06QW6ewl000
2018-02-21T20:18:56.880065Z	full		06QW92x0000
2018-02-21T20:20:46.202368Z	level	3	06QWFizW000
2018-02-21T20:21:25.292557Z	level	1	06QWI6g0000
2018-02-21T20:21:49.294272Z	level	1	06QWJ_RW000
2018-02-21T20:22:13.292489Z	level	1	06QWL2B0000
2018-02-21T20:22:37.292431Z	level	1	06QWMVw0000
2018-02-21T20:22:38.293320Z	level	2	06QWMZqG000
2018-02-21T20:23:01.293690Z	level	1	06QWNygG000
2018-02-21T20:23:25.292956Z	level	1	06QWPRR0000
2018-02-21T20:24:33.291664Z	full		06QWTa2l000
2018-02-21T21:12:08.017055Z	full		06QZBpKG000
2018-02-21T21:12:08.478200Z	full		06QZBr7W000

此页面是否对您有帮助?

感谢您的反馈!


Flux 的未来

Flux 即将进入维护模式。您可以继续像现在这样使用它,而无需对代码进行任何更改。

阅读更多

InfluxDB 3 开源版现已公开发布 Alpha 版本

InfluxDB 3 开源版现已可用于 Alpha 测试,根据 MIT 或 Apache 2 许可获得许可。

我们正在发布两个作为 Alpha 版本一部分的产品。

InfluxDB 3 Core 是我们新的开源产品。它是用于时间序列和事件数据的最新数据引擎。InfluxDB 3 企业版是基于 Core 基础构建的商业版本,增加了历史查询功能、读取副本、高可用性、可扩展性和细粒度安全性。

有关如何开始使用的更多信息,请查看