Try Out GreptimeDB
Begin to explore GreptimeDB's powerful core features.
Installation
You can try out GreptimeDB with our test builds released on the Download page.
We use the simplest configuration for you to get started. For a comprehensive list of configurations available in GreptimeDB, see the configuration documentation.
Binary
For Linux and macOS users, you can download the latest build of the greptime
binary by using the following commands:
curl -fsSL \
https://raw.githubusercontent.com/greptimeteam/greptimedb/develop/scripts/install.sh | sh
Once the download is completed, the binary file greptime
will be stored in your current directory.
You can run GreptimeDB in the standalone mode:
./greptime standalone start
Docker
Make sure the Docker is already installed. If not, you can follow the official documents to install Docker.
docker run -p 4000-4003:4000-4003 \
-p 4242:4242 -v "$(pwd)/greptimedb:/tmp/greptimedb" \
--name greptime --rm \
greptime/greptimedb 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
The data will be stored in the greptimedb/
directory in your current directory.
If you want to use another version of GreptimeDB's image, you can download it from our GreptimeDB Dockerhub. In particular, we support GreptimeDB based on CentOS, and you can try image greptime/greptimedb-centos
.
NOTE
If you are using a Docker version lower than v23.0, you may experience problems with insufficient permissions when trying to run the command above, due to a bug in the older version of Docker Engine.
You can:
Set
--security-opt seccomp=unconfined
, for example:shelldocker run --security-opt seccomp=unconfined -p 4000-4003:4000-4003 \ -p 4242:4242 -v "$(pwd)/greptimedb:/tmp/greptimedb" \ --name greptime --rm \ greptime/greptimedb 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
Upgrade the Docker version to v23.0.0 or higher;
Connect
GreptimeDB supports multiple protocols. We use MySQL client here for simplicity.
mysql -h 127.0.0.1 -P 4002
Also, you can use PostgreSQL to connect the database:
psql -h 127.0.0.1 -p 4003 -d public
Create table
Note: GreptimeDB offers a schemaless approach to writing data that eliminates the need to manually create tables using additional protocols. See Automatic Schema Generation.
Now we create a table via MySQL. Let's start by creating the system_metrics
table which contains system resource metrics, including CPU/memory/disk usage. The data is scraped every 5 seconds.
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 descriptions:
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 |
- The table can be created automatically if you are using other protocols. See Create Table.
- For more information about creating table SQL, please refer to CREATE.
- For data types, please check data types.
Insert data
Using the INSERT
statement is an easy way to add data to your table. The following statement allows us to insert several rows into the system_metrics
table.
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);
For more information about the INSERT
statement, please refer to INSERT.
Query data
To select all the data from the system_metrics
table, use the SELECT
statement:
SELECT * FROM system_metrics;
The query result looks like the following:
+-------+-------+----------+-------------+-----------+---------------------+
| 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)
You can use the count()
function to get the number of all rows in the table:
SELECT count(*) FROM system_metrics;
+-----------------+
| COUNT(UInt8(1)) |
+-----------------+
| 9 |
+-----------------+
The avg()
function returns the average value of a certain field:
SELECT avg(cpu_util) FROM system_metrics;
+------------------------------+
| AVG(system_metrics.cpu_util) |
+------------------------------+
| 59.32222222222222 |
+------------------------------+
You can use the GROUP BY
clause to group rows that have the same values into summary rows. The average memory usage grouped 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)
For more information about the SELECT
statement, please refer to SELECT.
Visualize data
Visualization plays a crucial role in effectively utilizing time series data. To help users leverage the various features of GreptimeDB, Greptime offers a simple dashboard.
The Dashboard is embedded into GreptimeDB's binary since GreptimeDB v0.2.0. After starting GreptimeDB, the dashboard can be visited via HTTP endpoint http://localhost:4000/dashboard
. The current version of the dashboard supports MySQL and Python queries, with support for PromQL coming soon.
Write SQL into the command text, then click Run All
. We'll got all data in system_metrics table.
SELECT * FROM system_metrics;
We offer various chart types to choose from based on different scenarios. The content of the charts will be richer when you have enough data.
We are committed to the ongoing development and iteration of this open source project, and we plan to expand the application of time series data in monitoring, analysis, and other relevant fields in the future.
Next steps
Congratulations you have learned the basic features of GreptimeDB. You are ready for the User Guide chapter.