使用 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] |
请求方法 | GET 或 POST |
用户名 | 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 服务 |
请求 ID | d4ca9a10-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 请求日志文件,请使用
logrotate
的copytruncate
方法或类似方法将原始文件保留在原位。
结构化日志记录
结构化日志记录启用机器可读且对开发人员更友好的日志输出格式。两种结构化日志格式 logfmt
和 json
提供使用外部工具进行更轻松的过滤和搜索,并简化了 InfluxDB 日志与 Splunk、Papertrail、Elasticsearch 和其他第三方工具的集成。
InfluxDB 日志记录配置选项(在 [logging]
部分中)现在包括以下选项
format
:auto
(默认)|logfmt
|json
level
:error
|warn
|info
(默认)|debug
suppress-logo
:false
(默认)|true
有关这些日志记录配置选项及其相应的环境变量的详细信息,请参阅配置文件文档中的日志记录选项。
日志记录格式
有三种日志记录 format
选项可用:auto
、logfmt
和 json
。默认日志记录格式设置 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
选项设置要发出的日志级别。有效的日志记录级别设置为 error
、warn
、info
(默认)和 debug
。将发出等于或高于指定级别的日志。
徽标抑制
suppress-logo
选项可用于抑制程序启动时打印的徽标输出。如果 STDOUT
不是 TTY,则始终抑制徽标。
跟踪
日志记录已得到增强,以提供对重要 InfluxDB 操作的跟踪。跟踪对于错误报告和发现性能瓶颈非常有用。
跟踪中使用的日志记录键
跟踪标识符键
trace_id
键指定跟踪特定实例的唯一标识符。您可以使用此键来过滤和关联操作的所有相关日志条目。
所有操作跟踪都包括一致的开始和结束日志条目,消息 (msg
) 相同,描述操作(例如,“TSM 压缩”),但添加了适当的 op_event
上下文(start
或 end
)。有关示例,请参阅查找 InfluxDB 操作的所有跟踪日志条目。
示例: trace_id=06R0P94G000
操作键
以下操作键标识操作的名称、开始和结束时间戳以及经过的执行时间。
op_name
操作的唯一标识符。您可以按特定名称的所有操作进行过滤。
示例: op_name=tsm1_compact_group
op_event
指定事件的开始和结束。两个可能的值,(start)
或 (end)
,用于指示操作何时开始或结束。例如,您可以按 op_name
和 op_event
中的值进行 grep,以查找所有起始操作日志条目。有关此示例,请参阅查找所有起始日志条目。
示例: op_event=start
op_elapsed
操作花费的执行时间量。与结束跟踪日志条目一起记录。显示的时间单位取决于经过的时间量 – 如果是秒,则将后缀 s
。有效的时间单位为 ns
、µs
、ms
和 s
。
示例: op_elapsed=0.352ms
日志标识符上下文键
日志标识符键 (log_id
) 使您可以轻松识别 influxd
进程单次执行的每个日志条目。日志文件可能通过单次执行进行拆分的其他方法,但一致的 log_id
简化了日志聚合服务的搜索。
示例: log_id=06QknqtW000
数据库上下文键
db_instance
:数据库名称
db_rp
:保留策略名称
db_shard_id
:分片标识符
db_shard_group
分片组标识符
工具
以下是几个流行的工具,可用于处理和过滤以 logfmt
或 json
格式输出的日志文件。
hutils
hutils 由 Heroku 提供,是用于处理具有 logfmt
编码的日志的命令行实用程序集合,包括
lcut
:根据指定的字段名称从logfmt
跟踪中提取值。lfmt
:美化从流中出现的logfmt
行,并突出显示其关键部分。ltap
:以一致的方式访问来自日志提供程序的邮件,以便其他处理logfmt
跟踪的实用程序可以轻松解析。lviz
:通过从数据集构建树来可视化logfmt
输出,该数据集将常见的键值对集合组合到共享的父节点中。
lnav (日志文件导航器)
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_strategy
:level
|full
tsm1_level
:1
|2
|3
tsm1_optimize
:true
|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_name
和 op_event
中的值进行 grep。在以下示例中,grep 返回了 101 个条目,因此下面的结果仅显示第一个条目。在示例结果条目中,包括时间戳、级别、策略、trace_id
、op_name
和 op_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 个唯一日志条目的示例,显示选定的键:ts
、strategy
、level
和 trace_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
此页面是否对您有帮助?
感谢您的反馈!