MySQL

准备

在开始之前,我们需要在本地安装并运行 GreptimeDB 和 Grafana。

这里我们使用 Docker Compose 来启动 GreptimeDB 和 Grafana。为此,创建一个 docker-compose.yml 文件,内容如下:

yaml

1. services:
2. grafana:
3. image: grafana/grafana-oss:9.5.15
4. container_name: grafana
5. ports:
6. - 3000:3000

8. greptime:
9. image: greptime/greptimedb:latest
10. container_name: greptimedb
11. ports:
12. - 4000:4000
13. - 4001:4001
14. - 4002:4002
15. - 4003:4003
16. - 4004:4004
17. - 4242:4242
18. command: "standalone start --http-addr 0.0.0.0:4000 --rpc-addr 0.0.0.0:4001 --mysql-addr 0.0.0.0:4002 --postgres-addr 0.0.0.0:4003 --opentsdb-addr 0.0.0.0:4242"
19. volumes:
20. - ./greptimedb:/tmp/greptimedb

22. networks: {}

然后执行以下命令:

shell

1. docker-compose up

注意

接下来的步骤假设你按照上面的文档安装了 GreptimeDB 和 Grafana。

尝试基本的 SQL 操作

连接

sql

1. mysql -h 127.0.0.1 -P 4002

你同样可以使用 PostgreSQL 连接到数据库

1. psql -h 127.0.0.1 -p 4003 -d public

建表

注意

注意: GreptimeDB 提供了一种 schemaless 的数据写入方法,不用像使用其他协议那样手动创建表。详情请参见 自动生成表结构。

现在我们通过 MySQL 创建一个表。先创建 system_metrics 表,其中包含系统资源指标,包括 CPU /内存/磁盘的使用,这些数据每 5 秒就会被抓取一次。

sql

1. CREATE TABLE IF NOT EXISTS system_metrics (
2. host STRING,
3. idc STRING,
4. cpu_util DOUBLE,
5. memory_util DOUBLE,
6. disk_util DOUBLE,
7. ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
8. PRIMARY KEY(host, idc),
9. TIME INDEX(ts)
10. );

Field 描述:

Field Type Description
host string The hostname
idc string The idc name where the host belongs to
cpu_util double The percent use of CPU
memory_util double The percent use of memory
disk_util double The percent use of disks
ts timestamp Timestamp column incrementing
  • 如果用户使用其他协议,该表可以自动创建。请参考 Create Table。
  • 关于创建表的 SQL 信息,请参考 CREATE。
  • 关于数据类型,请参考数据类型。

数据写入

使用 INSERT 语句是向表添加数据的一个简单方法。通过下面的语句,我们向 system_metrics 表插入了九条记录。

sql

1. INSERT INTO system_metrics
2. VALUES
3. ("host1", "idc_a", 11.8, 10.3, 10.3, 1667446797450),
4. ("host1", "idc_a", 80.1, 70.3, 90.0, 1667446797550),
5. ("host1", "idc_b", 50.0, 66.7, 40.6, 1667446797650),
6. ("host1", "idc_b", 51.0, 66.5, 39.6, 1667446797750),
7. ("host1", "idc_b", 52.0, 66.9, 70.6, 1667446797850),
8. ("host1", "idc_b", 53.0, 63.0, 50.6, 1667446797950),
9. ("host1", "idc_b", 78.0, 66.7, 20.6, 1667446798050),
10. ("host1", "idc_b", 68.0, 63.9, 50.6, 1667446798150),
11. ("host1", "idc_b", 90.0, 39.9, 60.6, 1667446798250);

关于 INSERT 语句的更多信息,请参考 INSERT。

数据查询

想要从 system_metrics 表中选择数据,可以使用 SELECT 语句:

sql

1. SELECT * FROM system_metrics;

查询结果如下:

1. +-------+-------+----------+-------------+-----------+---------------------+
2. | host  | idc   | cpu_util | memory_util | disk_util | ts                  |
3. +-------+-------+----------+-------------+-----------+---------------------+
4. | host1 | idc_a |     11.8 |        10.3 |      10.3 | 2022-11-03 03:39:57 |
5. | host1 | idc_a |     80.1 |        70.3 |        90 | 2022-11-03 03:39:57 |
6. | host1 | idc_b |       50 |        66.7 |      40.6 | 2022-11-03 03:39:57 |
7. | host1 | idc_b |       51 |        66.5 |      39.6 | 2022-11-03 03:39:57 |
8. | host1 | idc_b |       52 |        66.9 |      70.6 | 2022-11-03 03:39:57 |
9. | host1 | idc_b |       53 |          63 |      50.6 | 2022-11-03 03:39:57 |
10. | host1 | idc_b |       78 |        66.7 |      20.6 | 2022-11-03 03:39:58 |
11. | host1 | idc_b |       68 |        63.9 |      50.6 | 2022-11-03 03:39:58 |
12. | host1 | idc_b |       90 |        39.9 |      60.6 | 2022-11-03 03:39:58 |
13. +-------+-------+----------+-------------+-----------+---------------------+
14. 9 rows in set (0.00 sec)

用户可以使用 count() 函数获取表格中所有行的数量:

sql

1. SELECT count(*) FROM system_metrics;
1. +-----------------+
2. | COUNT(UInt8(1)) |
3. +-----------------+
4. |               9 |
5. +-----------------+

avg() 函数返回特定字段的平均值:

sql

1. SELECT avg(cpu_util) FROM system_metrics;
1. +------------------------------+
2. | AVG(system_metrics.cpu_util) |
3. +------------------------------+
4. |            59.32222222222222 |
5. +------------------------------+

使用 GROUP BY 子句,将具有相同数值的行分组为汇总行。例如按 idc 分组的平均内存使用量:

sql

1. SELECT idc, avg(memory_util) FROM system_metrics GROUP BY idc;
1. +-------+---------------------------------+
2. | idc   | AVG(system_metrics.memory_util) |
3. +-------+---------------------------------+
4. | idc_a |                            40.3 |
5. | idc_b |              61.942857142857136 |
6. +-------+---------------------------------+
7. 2 rows in set (0.03 sec)

关于 SELECT 语句的更多信息,请查看 SELECT 文档。

采集主机指标

为了通过 MySQL 快速开始,我们可以使用 Bash 脚本收集系统指标,例如 CPU 和内存使用情况,并通过 MySQL CLI 将数据发送到 GreptimeCloud。 源代码位于 GitHub.

shell

1. curl -L https://raw.githubusercontent.com/GreptimeCloudStarters/quick-start-mysql/main/quick-start.sh | bash -s -- -h 127.0.0.1 -d public -s DISABLED -P 4002

数据可视化

GreptimeDB 控制台

可视化在有效利用时间序列数据方面发挥着关键作用。为了帮助用户充分利用 GreptimeDB 的各种功能,GreptimeDB 提供了一个简单的 dashboard。

Dashboard 自 GreptimeDB v0.2.0 版本以来已经嵌入到 GreptimeDB 的 binary 文件中。在启动 GreptimeDB后,可以通过 HTTP 端点 http://localhost:4000/dashboard 访问 dashboard。当前版本的 dashboard 支持 MySQL、Python 查询和 PromQL 查询。

将 SQL 写入命令文本,然后单击 RUN ALL,我们将获取 system_metrics 中的所有数据。

1. SELECT * FROM system_metrics;

dashboard-select

我们提供不同种类的图表,可以根据不同的场景进行选择。当用户有足够的数据时,图表的内容将更加丰富。

linescatter

我们将持续开发和迭代这个开源项目,并计划将时间序列数据应用于监测、分析和其他相关领域的扩展。

Grafana

添加数据源

你可以通过 http://localhost:3000 访问到 Grafana,并使用 admin 作为用户名和密码登录。

GreptimeDB 可以作为 MySQL 数据源配置在 Grafana 中。 点击 Add data source 按钮,选择 MySQL 作为类型。

add-mysql-data-source

填写以下信息:

  • Name: GreptimeDB
  • Host: greptimedb:4002. The host greptimedb is the name of GreptimeDB container
  • Database: public
  • SessionTimezone: UTC

grafana-mysql-config

点击 Save & Test 按钮,确保数据源配置成功。

有关使用 MySQL 作为 GreptimeDB 数据源的更多信息,请参考 Grafana-MySQL。

创建仪表盘

在 Grafana 中创建一个新的仪表盘,点击 Create your first dashboard 按钮。 然后,点击 Add visualization,选择 GreptimeDB 作为数据源。

在 Query 标签页中,确保你选择了 GreptimeDB 作为数据源,接下来选择 Time series 作为格式, 切换到 Code 标签页,写入以下 SQL 语句。注意我们使用了 ts 列作为时间列。

sql

1. SELECT ts AS "time", idle_cpu, sys_cpu FROM public.monitor

grafana-mysql-query-code

点击 Run query 查看指标数据。

grafana-mysql-run-query

下一步

恭喜你已经快速体验了 GreptimeDB 的基础功能! 现在,你可以通过访问 用户指南文档 来探索更多 GreptimeDB 的功能。