怎样在 Ubuntu 20.04 上安装 InfluxDB

介绍

InfluxDB 是一个开源时间序列数据库服务器,可用于构建物联网 (IoT) 应用程序以进行数据监控。 InfluxDB 强大的生态系统专为开发人员构建,可处理传感器和应用程序生成的大量带时间戳的数据。 此外,InfluxDB 为您提供了强大的应用程序编程接口 (API) 的熟悉性和易用性,用于以更少的代码、更少的工作量和更少的配置构建应用程序。 InfluxDB 拥有许多客户端/服务器库,支持大多数现代编程语言,包括 React、Go 和 Python。

数据库服务器附带企业级安全性,使其适合在云计算基础架构中运行。 InfluxDB 可以从每秒数百万个数据点的事件和日志中摄取和处理指标。 一个充满活力的社区也支持它。 作为开发人员,您不必从头开始,因为您可以访问高质量的最终用户文档以轻松集成。

InfluxDB 是 IBM、PayPal、BBOXX 等流行公司提供的解决方案的一部分。 为了更好地看待事情,BBOXX 使用 InfluxDB 来持续监控、向客户收费并跟踪来自分散给发展中国家用户的 85,000 多个太阳能屋顶单元的电力使用警报。 每个客户单元都包含一个连接到远程 InfluxDB 的电子设备,以允许 BBOXX 远程控制它并提供对电源使用模式的洞察。

在本指南中,您将在 Ubuntu 20.04 上安装和配置 InfluxDB,并释放创建数据驱动应用程序的潜力,以加快项目的创新和决策制定。

先决条件

在开始之前,请确保您具备以下条件:

一个 Ubuntu 20.04 服务器。 一个 sudo 用户。

1. 下载并安装 InfluxDB 包

在这一步中,您将通过从维护的官方存储库中提取安装文件来安装 InfluxDB 服务器 influxdata.com. SSH 到您的服务器并使用 Linux curl 命令下载并将 InfluxDB GPG 密钥添加到您的服务器中。

$ sudo curl -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add -

上面的命令应该响应一个 OK 信息。

OK

添加一个新的 influxdb.list 通过执行以下命令将存储库文件添加到可用包列表。

$ sudo echo "deb https://repos.influxdata.com/ubuntu bionic stable" | sudo tee /etc/apt/sources.list.d/influxdb.list

然后,更新包信息索引。

$ sudo apt update

接下来,安装 influxdb 包裹。

$ sudo apt install influxdb

安装好后,启动 influxdb 服务。

$ sudo systemctl start influxdb

接下来,通过运行以下命令检查 InfluxDB 服务器的状态。

$ sudo systemctl status influxdb

InfluxDB 包现在应该处于活动状态并加载到您的服务器上。

influxdb.service - InfluxDB is an open-source, distributed, time series da>
    Loaded: loaded (/lib/systemd/system/influxdb.service; enabled; vendor p>
    Active: active (running) since Fri 2021-09-03 06:08:59 UTC; 2min 3s ago
      Docs: https://docs.influxdata.com/influxdb/

安装 InfluxDB 服务器后,您将在下一步中进行一些配置更改以保护它。

2.配置InfluxDB服务器

在这一步中,您将配置一个新的 admin 对 InfluxDB 服务器具有 root 权限的用户。 最好在对配置文件启用身份验证之前执行此操作。 为此,请执行 influx 命令。 它应该启动 influx shell 并自动连接到本地 InfluxDB 实例。

$ influx

接下来,您将收到以下响应,其中显示了您当前的连接、端口和版本号。 提示 > 表明您的 InfluxDB 服务器已准备好接受命令。

Connected to http://localhost:8086 version 1.8.9
InfluxDB shell version: 1.8.9
>

创建一个 admin 帐户,执行以下命令并替换 EXAMPLE_PASSWORD 具有很强的价值。 这 admin 用户名也很灵活,您可以用适当的名称替换它(例如, root 或者 super_user)。

> CREATE USER admin WITH PASSWORD 'EXAMPLE_PASSWORD' WITH ALL PRIVILEGES

接下来,通过执行以下命令退出 InfluxDB shell quit 命令。

> quit

下一步是通过修改主 InfluxDB 配置文件来启用身份验证。 用 nano 打开 /etc/influxdb/influxdb.conf 文件。

$ sudo nano /etc/influxdb/influxdb.conf 

找到线路 # auth-enabled = false 在下面 [http] 部分。

...
[http]
  ...
  # Determines whether user authentication is enabled over HTTP/HTTPS.
  # auth-enabled = false
...

更改值 auth-enabledfalsetrue 并删除领先 # 符号从行取消注释设置,如下所示。

...
[http]
  ...
  # Determines whether user authentication is enabled over HTTP/HTTPS.
  auth-enabled = true
...

保存并关闭文件。 接下来,重新启动 influxdb 服务加载新的安全设置。

$ sudo systemctl restart influxdb

您现在可以使用以下命令登录 InfluxDB 服务器 admin 用户名和 password 您通过执行以下命令在上面创建的。

$ influx -username 'admin' -password 'EXAMPLE_PASSWORD'

您现在已通过身份验证 influx shell 命令,一旦你得到 > 提示您可以开始执行 SQL 语句。 为了确保一切正常,运行 SHOW DATABASES 命令。

> SHOW DATABASES

你应该看到一个默认值 _internal 列表中的数据库如下所示。 InfluxDB 使用此数据库来存储用于监控服务的内部运行时指标。

name: databases
name
----
_internal

为 InfluxDB 服务器配置并启用身份验证后,您现在将在下一步中设置示例数据库。

3. 创建 InfluxDB 数据库

与其他数据库一样,InfluxDB 以 Influx Query Language (InfluxQL) 的形式支持大多数 SQL 语句。 在此步骤中,您将设置一个示例数据库,用于存储来自示例水位监控系统的指标。

创建 water_db 通过在数据库上执行以下命令 influx 贝壳。

> CREATE DATABASE water_db

一旦你按下 ENTER 你应该会得到一个新的提示 > 不会出现其他任何东西。 这意味着你已经执行了 CREATE DATABASE 命令没有任何错误。 但是,为确保您已成功设置 water_db 数据库,运行 SHOW DATABASES 命令。

> SHOW DATABASES

您应该会看到两个数据库的列表,如以下输出所示。

name: databases
name
----
_internal
water_db

您的数据库现在已准备好接受新数据。 在下一步中,您将在示例中创建和探索一些时间序列数据 water_db 数据库。

4. 编写和探索 InfluxDB 数据

从现在开始,您将执行额外的 InfluxQL 声明反对您的新 water_db 数据库。 因此,在执行更多语句之前,请运行 USE 命令切换到新的 water_db 数据库。

> USE water_db

您应该会收到以下响应,表明您已设置 water_db 作为新请求的活动数据库。

Using database water_db

您现在拥有一个可以接受写入和查询的数据库。 与其他 SQL 数据库不同,InfluxDB 中的数据被组织成一个 time series 至少需要的格式 4 主要属性详述如下:

时间: 这是一个独特的 time_stamp 当您在 InfluxDB 数据库中插入一个点时自动记录。
测量: 您要衡量的指标的名称。 例如, cpu_load, water_level, heart_rate, 或者 battery_capacity.
标签: 这些是包含有关测量的唯一元数据的键值标签。 例如, tank_location=MIAMI 或者 user=POASAX.
领域: 这是一个键值存储,用于保存您正在测量的实际数据值。 例如 value_in_ft=7.8, 或者 heart_rate_bpm=72.

简单来说, time 是 InfluxDB 上的主索引,而 measurement 就像一个 table 包含以下形式的列 fieldstags. 此外,InfluxDB 中的单个数据记录称为 point. 要在 InfluxDB 中插入记录,您应该使用以下行协议语法。

> INSERT EXAMPLE_MEASUREMENT, TAG_1=VALUE_1, TAG_2=VALUE_2, TAG_N=VALUEN FIELD_1=VALUE_1, FIELD_2=VALUE_2, FIELD_N=VALUE_N

例如,执行以下命令将一些虚构的点插入到一个 water_level 测量以阐明 InfluxDB 查询功能。

> INSERT water_level,tank_location=MIAMI value_in_ft=10.00
> INSERT water_level,tank_location=SEATTLE value_in_ft=5.4
> INSERT water_level,tank_location=ATLANTA value_in_ft=0.5
> INSERT water_level,tank_location=DALLAS value_in_ft=3.2
> INSERT water_level,tank_location=LOS-ANGELES value_in_ft=1.3

在生产环境中,上述数据应由现场水位传感器生成,并通过 API 中继到 InfluxDB 服务器。 现在,您已手动输入值以查看 InfluxDB 架构的工作方式。

确认您是否已成功将点插入到您的 water_db 服务器,运行一个 SELECT 声明反对 water_level 测量。 对于此语句,您可以定义标签(例如 tank_location) 和字段(例如 value_in_ft) 要显示。

> SELECT "tank_location", "value_in_ft" FROM "water_level"

您现在应该会收到以下显示所有点的输出。 请注意每个点是如何 时间戳 正如您在数据库中记录的那样。

name: water_level
time                tank_location value_in_ft
----                ------------- -----------
1630660024738274574 MIAMI         10
1630660033290269685 SEATTLE       5.4
1630660040820309594 ATLANTA       0.5
1630660049030041003 DALLAS        3.2
1630660096340252215 LOS-ANGELES   1.3

除了选择所有点之外,您还可以通过以下方式过滤记录 tags. 例如,运行下面的命令来检索位于 MIAMI.

> SELECT "tank_location", "value_in_ft" FROM "water_level" WHERE tank_location='MIAMI'

你现在应该看到一个 MIAMI 记录如下。

name: water_level
time                tank_location value_in_ft
----                ------------- -----------
1630660024738274574 MIAMI         10

要删除测量中的任何点,请使用 DELETE 陈述。 例如,要删除 ATLANTA 进入,运行下面的命令。

> DELETE FROM water_level WHERE tank_location='ATLANTA'

运行一个 SELECT 再次针对测量声明以检查删除是否成功。

> SELECT "tank_location", "value_in_ft" FROM "water_level"

您现在已成功删除 ATLANTA 记录,您可以从以下输出中确认。

name: water_level
time                tank_location value_in_ft
----                ------------- -----------
1630660024738274574 MIAMI         10
1630660033290269685 SEATTLE       5.4
1630660049030041003 DALLAS        3.2
1630660096340252215 LOS-ANGELES   1.3

除了 SELECT 语句,InfluxDB 支持聚合函数将数据转化为强大的洞察力。 例如,在您的样品水位应用程序中,您可以从以下位置查询水箱的最新水位 DALLAS 使用下面的语法,前提是您有几个条目流入您的数据库(例如,每 5 分钟后)。

> SELECT LAST("value_in_ft") FROM "water_level" WHERE "tank_location"='DALLAS'

上面的命令应该返回最新的值。 请注意,这是 InfluxDB 实际使用的地方。 您可以使用 LAST 值做出决定。 例如,如果水箱是空的,您可以远程打开水泵,将更多的水注入水箱。

name: water_level
time                last
----                ----
1630660049030041003 3.2

从 InfluxDB 服务器退出。

> quit

您可以创建和探索 InfluxDB 数据。 在下一步中,您将从内置的 InfluxDB API 查询相同的数据。

5. 使用 InfluxDB HTTP API

由于 InfluxDB 是为开发人员构建的,它有一个非常有用的 API,允许您使用常用工具查询指标,而无需编写额外的代码。 从数据查询 water_db 数据库,使用Linux curl 命令。 代替 EXAMPLE_PASSWORD 使用正确的密码值。

$ curl -G 'http://localhost:8086/query?pretty=true' -u admin:EXAMPLE_PASSWORD --data-urlencode "db=water_db" --data-urlencode "q=SELECT "tank_location", "value_in_ft" FROM "water_level""

您现在应该看到以下输出,所有数据点都以 JSON 格式很好地放置。

{
    "results": [
        {
            "statement_id": 0,
            "series": [
                {
                    "name": "water_level",
                    "columns": [
                        "time",
                        "tank_location",
                        "value_in_ft"
                    ],
                    "values": [
                        [
                            "2021-09-03T09:07:04.738274574Z",
                            "MIAMI",
                            10
                        ],
                        [
                            "2021-09-03T09:07:13.290269685Z",
                            "SEATTLE",
                            5.4
                        ],
                        [
                            "2021-09-03T09:07:29.030041003Z",
                            "DALLAS",
                            3.2
                        ],
                        [
                            "2021-09-03T09:08:16.340252215Z",
                            "LOS-ANGELES",
                            1.3
                        ]
                    ]
                }
            ]
        }
    ]
}

您的 InfluxDB 服务器和 API 现在按预期工作。

结论

在本教程中,您已经在 Ubuntu 20.04 服务器上安装并配置了 InfluxDB。 然后,您已经创建了一个示例数据库并使用了一些有用的 InfluxQL 将数据写入和查询到数据库的语句。 您还使用了 InfluxDB API curl 命令并从您的应用程序返回 JSON 格式的数据,而无需编写任何复杂的代码。 按照本指南中的示例在您的下一个项目中创建灵活且高度响应的时间序列应用程序。

注:本教程在Vultr VPS上测试通过,如需部署请前往Vultr.com