Skip to content

MySQL

准备

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

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

yaml
services:
  grafana:
    image: grafana/grafana-oss:9.5.15
    container_name: grafana
    ports:
      - 127.0.0.1:3000:3000

  greptime:
    image: greptime/greptimedb:v0.8.2
    container_name: greptimedb
    ports:
      - 127.0.0.1:4000:4000
      - 127.0.0.1:4001:4001
      - 127.0.0.1:4002:4002
      - 127.0.0.1:4003:4003
    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"
    volumes:
      - ./greptimedb:/tmp/greptimedb

networks: {}
services:
  grafana:
    image: grafana/grafana-oss:9.5.15
    container_name: grafana
    ports:
      - 127.0.0.1:3000:3000

  greptime:
    image: greptime/greptimedb:v0.8.2
    container_name: greptimedb
    ports:
      - 127.0.0.1:4000:4000
      - 127.0.0.1:4001:4001
      - 127.0.0.1:4002:4002
      - 127.0.0.1:4003:4003
    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"
    volumes:
      - ./greptimedb:/tmp/greptimedb

networks: {}

然后执行以下命令:

shell
docker-compose up
docker-compose up

注意

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

当你成功启动 GreptimeDB 之后,可以使用以下命令验证数据库状态:

shell
curl http://127.0.0.1:4000/status
curl http://127.0.0.1:4000/status

如果数据库正在运行,你将看到类似如下的输出:

json
{
  "source_time": "2024-05-30T07:59:52Z",
  "commit": "05751084e7bbfc5e646df7f51bb7c3e5cbf16d58",
  "branch": "HEAD",
  "rustc_version": "rustc 1.79.0-nightly (f9b161492 2024-04-19)",
  "hostname": "977898bbda4f",
  "version": "0.8.1"
}
{
  "source_time": "2024-05-30T07:59:52Z",
  "commit": "05751084e7bbfc5e646df7f51bb7c3e5cbf16d58",
  "branch": "HEAD",
  "rustc_version": "rustc 1.79.0-nightly (f9b161492 2024-04-19)",
  "hostname": "977898bbda4f",
  "version": "0.8.1"
}

尝试基本的 SQL 操作

连接

sql
mysql -h 127.0.0.1 -P 4002
mysql -h 127.0.0.1 -P 4002

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

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

建表

注意

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

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

sql
CREATE TABLE IF NOT EXISTS system_metrics (
    host STRING,
    idc STRING,
    cpu_util DOUBLE,
    memory_util DOUBLE,
    disk_util DOUBLE,
    ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY(host, idc),
    TIME INDEX(ts)
);
CREATE TABLE IF NOT EXISTS system_metrics (
    host STRING,
    idc STRING,
    cpu_util DOUBLE,
    memory_util DOUBLE,
    disk_util DOUBLE,
    ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY(host, idc),
    TIME INDEX(ts)
);

Field 描述:

FieldTypeDescription
hoststringThe hostname
idcstringThe idc name where the host belongs to
cpu_utildoubleThe percent use of CPU
memory_utildoubleThe percent use of memory
disk_utildoubleThe percent use of disks
tstimestampTimestamp column incrementing
  • 如果用户使用其他协议,该表可以自动创建。请参考 Create Table
  • 关于创建表的 SQL 信息,请参考 CREATE
  • 关于数据类型,请参考数据类型

数据写入

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

sql
INSERT INTO system_metrics
VALUES
    ("host1", "idc_a", 11.8, 10.3, 10.3, 1667446797450),
    ("host1", "idc_a", 80.1, 70.3, 90.0, 1667446797550),
    ("host1", "idc_b", 50.0, 66.7, 40.6, 1667446797650),
    ("host1", "idc_b", 51.0, 66.5, 39.6, 1667446797750),
    ("host1", "idc_b", 52.0, 66.9, 70.6, 1667446797850),
    ("host1", "idc_b", 53.0, 63.0, 50.6, 1667446797950),
    ("host1", "idc_b", 78.0, 66.7, 20.6, 1667446798050),
    ("host1", "idc_b", 68.0, 63.9, 50.6, 1667446798150),
    ("host1", "idc_b", 90.0, 39.9, 60.6, 1667446798250);
INSERT INTO system_metrics
VALUES
    ("host1", "idc_a", 11.8, 10.3, 10.3, 1667446797450),
    ("host1", "idc_a", 80.1, 70.3, 90.0, 1667446797550),
    ("host1", "idc_b", 50.0, 66.7, 40.6, 1667446797650),
    ("host1", "idc_b", 51.0, 66.5, 39.6, 1667446797750),
    ("host1", "idc_b", 52.0, 66.9, 70.6, 1667446797850),
    ("host1", "idc_b", 53.0, 63.0, 50.6, 1667446797950),
    ("host1", "idc_b", 78.0, 66.7, 20.6, 1667446798050),
    ("host1", "idc_b", 68.0, 63.9, 50.6, 1667446798150),
    ("host1", "idc_b", 90.0, 39.9, 60.6, 1667446798250);

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

数据查询

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

sql
SELECT * FROM system_metrics;
SELECT * FROM system_metrics;

查询结果如下:

+-------+-------+----------+-------------+-----------+---------------------+
| host  | idc   | cpu_util | memory_util | disk_util | ts                  |
+-------+-------+----------+-------------+-----------+---------------------+
| host1 | idc_a |     11.8 |        10.3 |      10.3 | 2022-11-03 03:39:57 |
| host1 | idc_a |     80.1 |        70.3 |        90 | 2022-11-03 03:39:57 |
| host1 | idc_b |       50 |        66.7 |      40.6 | 2022-11-03 03:39:57 |
| host1 | idc_b |       51 |        66.5 |      39.6 | 2022-11-03 03:39:57 |
| host1 | idc_b |       52 |        66.9 |      70.6 | 2022-11-03 03:39:57 |
| host1 | idc_b |       53 |          63 |      50.6 | 2022-11-03 03:39:57 |
| host1 | idc_b |       78 |        66.7 |      20.6 | 2022-11-03 03:39:58 |
| host1 | idc_b |       68 |        63.9 |      50.6 | 2022-11-03 03:39:58 |
| host1 | idc_b |       90 |        39.9 |      60.6 | 2022-11-03 03:39:58 |
+-------+-------+----------+-------------+-----------+---------------------+
9 rows in set (0.00 sec)
+-------+-------+----------+-------------+-----------+---------------------+
| host  | idc   | cpu_util | memory_util | disk_util | ts                  |
+-------+-------+----------+-------------+-----------+---------------------+
| host1 | idc_a |     11.8 |        10.3 |      10.3 | 2022-11-03 03:39:57 |
| host1 | idc_a |     80.1 |        70.3 |        90 | 2022-11-03 03:39:57 |
| host1 | idc_b |       50 |        66.7 |      40.6 | 2022-11-03 03:39:57 |
| host1 | idc_b |       51 |        66.5 |      39.6 | 2022-11-03 03:39:57 |
| host1 | idc_b |       52 |        66.9 |      70.6 | 2022-11-03 03:39:57 |
| host1 | idc_b |       53 |          63 |      50.6 | 2022-11-03 03:39:57 |
| host1 | idc_b |       78 |        66.7 |      20.6 | 2022-11-03 03:39:58 |
| host1 | idc_b |       68 |        63.9 |      50.6 | 2022-11-03 03:39:58 |
| host1 | idc_b |       90 |        39.9 |      60.6 | 2022-11-03 03:39:58 |
+-------+-------+----------+-------------+-----------+---------------------+
9 rows in set (0.00 sec)

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

sql
SELECT count(*) FROM system_metrics;
SELECT count(*) FROM system_metrics;
+-----------------+
| COUNT(UInt8(1)) |
+-----------------+
|               9 |
+-----------------+
+-----------------+
| COUNT(UInt8(1)) |
+-----------------+
|               9 |
+-----------------+

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

sql
SELECT avg(cpu_util) FROM system_metrics;
SELECT avg(cpu_util) FROM system_metrics;
+------------------------------+
| AVG(system_metrics.cpu_util) |
+------------------------------+
|            59.32222222222222 |
+------------------------------+
+------------------------------+
| AVG(system_metrics.cpu_util) |
+------------------------------+
|            59.32222222222222 |
+------------------------------+

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

sql
SELECT idc, avg(memory_util) FROM system_metrics GROUP BY idc;
SELECT idc, avg(memory_util) FROM system_metrics GROUP BY idc;
+-------+---------------------------------+
| idc   | AVG(system_metrics.memory_util) |
+-------+---------------------------------+
| idc_a |                            40.3 |
| idc_b |              61.942857142857136 |
+-------+---------------------------------+
2 rows in set (0.03 sec)
+-------+---------------------------------+
| idc   | AVG(system_metrics.memory_util) |
+-------+---------------------------------+
| idc_a |                            40.3 |
| idc_b |              61.942857142857136 |
+-------+---------------------------------+
2 rows in set (0.03 sec)

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

采集主机指标

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

shell
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
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 按照上文的准备环节启动后,你可以通过 URL http://localhost:4000/dashboard 访问控制台。

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

SELECT * FROM system_metrics;
SELECT * FROM system_metrics;

dashboard-select

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
SELECT ts AS "time", idle_cpu, sys_cpu FROM public.monitor
SELECT ts AS "time", idle_cpu, sys_cpu FROM public.monitor

grafana-mysql-query-code

点击 Run query 查看指标数据。

grafana-mysql-run-query

下一步

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