InfluxDB V1 Shell 的回归

导航至

社区的声音很明确,需求也很清晰

“请把 1.X 中使用的交互式 Shell 还回来”

所以它又回来了……它现在与 InfluxDB V2 兼容……并且还有一些改进。

交互式 Shell 允许用户使用 InfluxQL 编写数据和交互式查询数据。对于新用户来说,InfluxQL 是 InfluxDB 首个主要版本中本地的类似 SQL 的查询引擎。

新改进的

因此,我们 Edge 团队的一位新开发人员 Andrew Lee 担起了挑战,在新的 InfluxDB CLI 中恢复交互式 Shell。他还对整体体验做出了一些出色的改进

让我们分析一下视频中我们看到的内容。

如何访问新的 Shell?

在您进入新的 Shell 之前,有一些事情需要您处理(这是我们正在研究的,看看我们是否可以进一步自动化)

  1. 您可以通过建立连接配置来完成此操作
    influx config create -u <IP/URL>:8086 -t <All-ACCESS-TOKEN> -o <ORGANISATION> -a
    注意:如果您使用 InfluxDB OSS 并使用 Influx setup 命令进行设置,则会为您预先创建一个连接配置。
  2. 由于 InfluxDB V2 现在默认使用 Flux 并使用桶而不是数据库的表示法,我们需要进行一些映射。您可以在此处找到执行此操作的说明 这里

现在我们可以使用以下命令进入 InfluxQL 交互式 Shell

influx v1 shell

自动完成

您首先会注意到的是自动完成功能的引入。交互式 Shell 现在将提供命令建议。

让我们看看

autocompletion

如你所见,我有一个名为 generators 的桶已被映射到数据库。当我输入命令 use 时,你可以看到自动完成会自动建议我可以完成命令的数据库。

您可以看到,当构建您的 InfluxQL 查询时,这一主题也得到了延续,提供我可以选择的测量建议

Providing-suggestions

这个功能是交互式 Shell 体验中的一个受欢迎的补充,因为它改善了初学者学习如何使用 InfluxQL 构建查询的采用率。

之前的命令和历史记录

交互式壳还允许您使用上下键像在基本壳中一样导航到以前的命令。它还有一个巧妙的功能,可以通过运行以下命令来显示所有命令历史。

> history

history

改进的表格视图

交互式壳还提供了一种新的表格视图来显示返回的查询数据。

Interactive-table-view-img10

我可以使用上下箭头导航返回的数据。然后按 q 键退出表格视图。观察上面的表格,我看到一个问题:时间格式不太适合人类阅读。因此,我们接下来讨论格式更改。

如果您的表格太大,您也可以使用箭头键水平滚动。

scroll-table-horizontally

时间精度 + 数据格式

所以,假设我想以以下特性返回我的数据:

  • 人类可读的时间戳
  • JSON 格式

让我们分阶段看看我们如何做。从时间戳开始。

  1. 我们可以使用以下命令定义时间戳的精度:
    > precision rfc3339
  2. 再次运行我们的查询
    > SELECT * FROM "genData"

现在您可以看到我们有一个漂亮的表格格式,时间值已转换为 rfc339 格式。

table wiht converted value

现在让我们将其转换为 JSON。

  1. 要选择新的数据输出格式,我们可以使用以下命令:
    > format json
    注意:CSV、列和表格视图也可用。
  2. 再次运行查询(这次使用 LIMIT 限制返回的指标数量)
    > SELECT * FROM "genData" LIMIT 1

以下是返回的 JSON。

{"results":[{"series":[{"columns":["time","fuel","generatorID","host","lat","load","lon","power","temperature","topic"],"name":"genData","values":[["2022-06-23T09:17:27.871988172Z",825,"generator3","9ec0ed8427de",33.92946,63,-116.97725,1759,207,"emergency_generator/generator3"]]}],"statement_id":0}]}

现在您可能正在想: 我现在需要运行这个通过 JSON 格式化器。我们已为您做好准备。如果您运行以下命令:

>pretty

重新运行查询,壳将格式化和自动缩进您的 JSON。

{
    "results": [
        {
            "series": [
                {
                    "columns": [
                        "time",
                        "fuel",
                        "generatorID",
                        "host",
                        "lat",
                        "load",
                        "lon",
                        "power",
                        "temperature",
                        "topic"
                    ],
                    "name": "genData",
                    "values": [
                        [
                            "2022-06-23T09:17:27.871988172Z",
                            825,
                            "generator3",
                            "9ec0ed8427de",
                            33.92946,
                            63,
                            -116.97725,
                            1759,
                            207,
                            "emergency_generator/generator3"
                        ]
                    ]
                }
            ],
            "statement_id": 0
        }
    ]
}

如果您想查看当前启用的设置,可以运行以下命令:

> settings

列出这些设置。

Settings-value

写入数据

最后,让我们谈谈如何通过交互式壳将指标写入 InfluxDB。假设我们有一些风力发电场数据需要手动上传。

>windfarm,location=UK,zone=A rotation_speed=400 1655991838619
  1. 我们需要再次设置精度参数以匹配行协议的时间戳格式。在我们的例子中,是毫秒。
    > precision ms
  2. 接下来,我们可以使用以下命令插入行协议:
    > INSERT windfarm,location=UK,zone=A rotation_speed=400 1655991838619

现在我们可以看到我们的指标已存储在 InfluxDB 中。

metric stored within InfluxDB

由于数据库已映射到存储桶,我们还可以使用 UI 和 Flux 与数据交互。

Interact with the data using the UI and Flux

一些注意事项

所以在您自己跳入 v1 壳之前,有一些注意事项:

您目前无法在壳内创建数据库。这主要是由于 InfluxDB 存储桶在 2.x 版本中充当核心存储机制(不用担心——已经有一些计划在运动中改变这一点,使用自动 dprp 映射)。目前,用户仍需要创建存储桶并将它们映射到数据库。

尽管如此,Gopher 命令仍然完好无损!

gopher

结论

Influx v1 壳很快就会发布到 CLI。Andrew 所做的的大部分工作现在已经合并。因此,您完全可以从源代码构建 CLI 并告诉我们您的想法。

仓库可以在 这里 找到。

我们所有人都为围绕 InfluxDB 建立起来的社区感到自豪。请继续分享您的反馈和功能请求,因为我们正在倾听。正是通过您的反馈,这个伟大的功能得以恢复,Gopher 也得以免于被遗忘!