使用InfluxDB进行日志记录和跟踪
此页面记录了 InfluxDB OSS 的早期版本。InfluxDB OSS v2 是最新的稳定版本。请参阅 InfluxDB v2 文档。
内容
日志位置
InfluxDB 默认将日志输出写入 stderr。根据你的用例,这些日志信息可以写入另一个位置。
直接运行InfluxDB
当你直接运行 InfluxDB,使用 influxd 时,所有日志都会写入 stderr。你也可以像重定向任何输出到 stderr 一样重定向日志输出,就像在这个例子中:
influxd 2>$HOME/my_log_file
作为服务启动
系统守护进程
大多数Linux系统将日志导向systemd日志。
要访问这些日志,请使用以下命令:
sudo journalctl -u influxdb.service
有关更多信息,请参阅journald.conf手册页面。
系统初始化
在不使用 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访问日志格式
查找关于您的 GET 和 POST 请求的详细信息,位于 HTTP 访问日志中。这对识别错误查询和提高性能很有帮助。有关日志中包含的详细信息,请参阅下表。
以下示例展示了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 Service |
| 请求 ID | d4ca9a10-ab63-11e9-8942-000000000000 |
| 响应时间(微秒) | 9357049 |
| * 该字段显示正在访问的数据库和正在运行的查询。如需更多信息,请参见 InfluxDB API reference。请注意,此字段已进行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|jsonlevel:error|warn|info(默认) |debugsuppress-logo:false(默认) |true
有关这些日志配置选项及其相应的环境变量的详细信息,请参见配置文件文档中的 Logging options。
日志格式
有三种日志 format 选项可用: auto、 logfmt 和 json。 默认的日志格式设置, format = "auto", 允许 InfluxDB 自动管理日志编码格式:
- 当记录到文件时,使用
logfmt - 当记录到终端(或其他TTY设备)时,使用用户友好的控制台格式。
当指定时,json 格式可用。
日志输出示例:
日志格式
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"}
控制台/终端
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 选项来抑制程序启动时打印的 logo 输出。如果 STDOUT 不是 TTY,则始终抑制 logo。
追踪
日志记录已增强,以提供重要的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,以找到所有开始的操作日志条目。有关此的示例,请参见 Finding all starting log entries。
示例: 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 格式输出的日志文件。
实用工具
由 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:等级|完整tsm1_level:1|2|3tsm1_optimize:true|false
系列文件压缩
the series_partition_compaction 操作包括与系列文件压缩相关的所有追踪日志条目。
持续查询执行(如果启用了日志记录)
如果启用了日志记录,continuous_querier_execute 操作包括所有连续查询执行。
TSI 日志文件压缩
该 tsi1_compact_log_file
TSI水平压缩
该 tsi1_compact_to_level 操作包括所有TSI级别压缩的追踪日志条目。
追踪示例
查找InfluxDB操作的所有跟踪日志条目
在下面的示例中,您可以看到与“TSM压缩”过程相关的所有跟踪操作的日志条目。请注意,初始条目显示消息“TSM压缩(开始)”,最终条目显示消息“TSM压缩(结束)”。 [注意:使用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