InfluxDB和Grafana入门指南

导航到

如果你正在处理数据,你可能会希望能够用不同类型的图表来可视化它,并使用仪表板来组织这些图表。你还需要一个地方来存储这些数据,以便可以有效地查询。

存储和可视化时间序列数据最流行的组合之一是Grafana和InfluxDB。InfluxDB作为数据存储,然后使用Grafana从InfluxDB(以及可能的其他数据源)中提取数据以创建仪表板来可视化数据。

在这篇文章中,你将学习如何

  • 使用Grafana安装Grafana和InfluxDB

  • 将Grafana连接到InfluxDB

  • 创建你的第一个Flux查询

  • 使用更高级的查询可视化财务数据

InfluxDB概述

InfluxDB是一个开源的时间序列数据库,针对快速和高可用性数据存储进行优化,适用于监控、应用程序度量、IoT传感器数据、实时分析等用例。

Grafana概述

Grafana是一个开源的数据可视化和监控平台。它用于创建仪表板并可视化来自Prometheus或InfluxDB等不同源的数据。

Grafana允许用户快速创建数据的可视化,例如图表、表格和热图。它还提供警报功能,允许用户在满足特定条件时收到通知。

设置InfluxDB和Grafana

现在让我们开始安装InfluxDB和Grafana。首先,你需要在电脑上确保以下内容

Docker设置

本教程将使用docker-compose来管理Grafana和InfluxDB。在运行以下脚本之前,请确保您已导航到您希望项目所在的目录。

进入目标文件夹后,请在命令行中运行以下脚本

mkdir influxdb-getting-started-with-grafana
cd influxdb-getting-started-with-grafana
cat > ./docker-compose.yml <<EOF
version: "3"

networks:
  monitoring:

services:
  influxdb:
    image: influxdb:2.3.0
    ports:
      - 8086:8086
    networks:
      - monitoring

  grafana:
    image: grafana/grafana:9.0.4
    ports:
      - 3000:3000
    networks:
      - monitoring
EOF

此脚本将创建一个docker-compose.yml文件,该文件定义了用于InfluxDB和Grafana的网络和镜像。要启动容器,只需运行以下命令

docker-compose up -d

InfluxDB设置

初始化连接到InfluxDB所需的凭据设置如下。

创建初始的超级管理员凭据、组织全访问安全令牌。运行influx setup命令

influx setup --name myinfluxdb2 --host https://127.0.0.1:8086 \
  -u admin -p admin54321 -o my-org \
  -b my-bucket -t my-token -r 0 -f

已创建超级用户、组织、桶和访问令牌。此外,influx命令创建了一个新的服务器配置对象,并将其存储在名为myinfluxdb的活动配置中。

注意:您可以定义任意数量的配置,以便轻松地与多个InfluxDB2服务器一起工作。配置对象存储在您的计算机上本地的$HOME/.influxdbv2/configs文件中。要列出所有可用的服务器配置,请使用命令influx config ls

Grafana和InfluxDB连接设置

在Grafana UI中添加数据源

  1. 在浏览器中打开https://127.0.0.1:3000/datasources

  2. 以用户admin和密码admin登录。

  3. 点击跳过以跳过关于新密码的问题。

  4. 在左侧菜单中,点击图标为Gear的齿轮图标,以打开数据源。

  5. 点击添加数据源

  6. 选择InfluxDB

  7. 在名为Query Language的下拉菜单中将InfluxQL替换为Flux

  8. HTTP部分的URL字段中输入http://influxdb:8086/

  9. InfluxDB Details部分的Organization字段中输入my-org

  10. Token字段中输入my-token。(点击保存并测试按钮后,密码将隐藏并替换为配置的。)

  11. 保存 & 测试:成功将显示两个绿色通知(3个桶找到 + 数据源更新)。请参见下文。

Grafana and InfluxDB connection setup

注意:地址http://influxdb:8086/是从docker-compose内部网络中Grafana容器可见的地址。

从Grafana执行您的第一个Flux查询

(更新InfluxDB 3.0已从Flux和内置任务引擎中移除。用户可以使用基于Python的Quix等外部工具在InfluxDB 3.0中创建任务。)

在Grafana GUI的左侧菜单中找到并打开位于Compass图标的Grafana Explorer

在Explorers的第1行中输入以下简单查询

buckets()

点击位于右上角的运行查询按钮。结果是一个列出3个桶的表格。

_monitoring_tasks是内部InfluxDB桶。桶名为my-bucket,它是由之前运行的influx setup命令创建的。

InfluxDB还在https://127.0.0.1:8086运行。您可以使用以下凭据登录InfluxDB UI

  • 用户:admin

  • 密码:admin54321

使用Flux和Grafana进行更多操作

在本节中,您将学习如何使用Flux以及如何使用Grafana仪表板创建更高级的可视化。

重点内容

  • 将金融数据CSV文件导入InfluxDB

  • 使用简单的Flux查询提取时间序列数据

  • 在Grafana仪表板中保存为面板的K线图数据可视化

这些数据代表从选定公司选择的每日股票价格的历史时间序列,时间范围为2010年至2016年。

以下图像显示了CSV文件的开头,以预览电子表格的外观

数据集是一个50MB的文件,包含2010年至2016年间的每日数据,所有数据都是双精度数字,包括__开盘价、最低价、最高价和收盘价__以及交易量,涉及502家公司。

analyze data in spreadsheet processor

在电子表格处理程序中分析如此大量的数据是一项繁琐的过程。

将数据导入InfluxDB

首先,您需要将金融数据CSV下载到您的计算机上。打开您的终端,导航到已下载CSV文件的文件夹。在开始使用influx CLI之前,请确保您正在使用正确的活动配置。

使用以下命令查看可用的配置

influx config ls

输出应产生一条包含InfluxDB设置配置的行

Active  Name         URL                       Org
*       myinfluxdb2  https://127.0.0.1:8086     my-org

注意:星号表示活动配置,这意味着在每次使用influx命令时,不需要在CLI中重复输入–host和–org参数。

将CSV数据导入InfluxDB

运行此influx CLI数据导入与注释CMD

influx write -b my-bucket -f ./stock-prices-example.csv \
  --header "#constant measurement,stocks" \
  --header "#datatype dateTime:2006-01-02,tag,double,double,double,double,double"

注意:此influx写入命令大约需要12-15秒才能完成。要在导入数据的输出结果中打印运行时间,请将此“dry run”脚本添加到查询中:time influx write -b my-bucket

在Grafana探索器中可视化时间序列数据

要开始创建仪表板,请使用下拉选择器选择InfluxDB作为您的数据源

Visualize time series data in Grafana Explorer

查询和可视化

运行以下Flux查询

from(bucket: "my-bucket")
  |> range(start: 2016-01-01T00:00:00Z, stop: 2016-01-31T00:00:00Z)
  |> filter(fn: (r) => r["_measurement"] == "stocks")
  |> filter(fn: (r) => r["symbol"] == "AAPL")
  |> aggregateWindow(every: 1d, fn: mean, createEmpty: false)
  |> yield(name: "mean")

Simple query

图形区域仍然是空的,因为结果超出了数据范围。单击Zoom to data按钮以查看2016年1月的AAPL原始数据。

Adapting time frame of queries to user needs

注意:在Grafana UI中调整查询的时间范围以满足用户需求是简化的。在Grafana UI中调整数据时间范围是交互式的,调整简单(参见下方的图)。

Setting time range in Grafana UI

创建您的第一个Grafana仪表板

单击页面顶部的Add to Dashboard按钮。

Add to dashboard

消息框出现选项。选择新建仪表板,并在新窗口中打开Grafana仪表板,以免丢失探索器标签页。

在新浏览器标签页打开后

  1. 在键盘上输入e,等待几秒钟,页面上将出现面板的编辑模式。

  2. 在右侧选择K线图类型。

Select Candlestick type on the right side

然后

  1. 修改之前的Flux命令,并将第2行的时间范围从2010-01-01扩展到2016-12-31

  2. 单击应用按钮。

要缩放,您可以使用Grafana工具栏上的带有减号的放大镜按钮。键盘快捷键是Ctrl+Z

要放大,请使用鼠标选择更大的时间范围或只需使用时间范围选择器(下拉控件)。

To zoom in - select a bigger time range with your mouse

进入编辑模式并尝试其他可能性。享受您的新仪表板。

Enter edit mode to try out other possibilities

使用Grafana仪表板和Flux做更多的事情

使用Flux与Grafana结合,提供了一些其他查询语言无法实现的功能和选项,例如从多个数据源联合数据,以及在返回查询之前对数据进行高级操作和转换。

  • 联合查询 - 创建跨越多个桶的图表。例如,您可能需要一个Grafana图表来显示已传输的字节数和每秒请求数;Flux允许您查询这两个度量并将它们联合成一个单一表格。

  • 多个数据源 - 使用来自MySQL、MariaDB、Postgres、Microsoft SQL Server、Snowflake、SQLite、AWS Athena和Google BigTable等关系型数据库的元数据丰富时间序列数据;或者来自CSV文件。当您的时间序列数据包含客户编号字段但不包含客户名称时,这非常有用。Flux允许您拉取客户名称,以便在Grafana仪表板上显示。

一些可能对您有用的Flux附加功能

关于使用InfluxDB和Grafana的更多资源: 如何将Grafana与Home Assistant集成