使用InfluxDB进行日志和跟踪
本页面记录了InfluxDB OSS的早期版本。 InfluxDB OSS v2 是最新稳定版本。
内容
日志位置
InfluxDB默认将日志输出到stderr
。根据您的使用情况,这些日志信息可以写入其他位置。
直接运行InfluxDB
当您直接使用influxd
运行InfluxDB时,所有日志都写入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请求流量。
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
值被单个[REDACTED]
替换。
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
。将输出等于或高于指定级别的日志。
Logo 抑制
可以使用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
由Heroku提供的hutils是一组用于处理以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 压缩(开始)”和最终条目显示消息“TSM 压缩(结束)”。[注意:日志条目使用 trace_id
值进行 grepped,然后使用 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
这个页面有帮助吗?
感谢您的反馈!