Skip to content

Commit c0b9095

Browse files
Merge pull request #2930 from madeline-underwood/suse
Suse_reviewed
2 parents dfcf701 + c9e2ee2 commit c0b9095

8 files changed

Lines changed: 123 additions & 175 deletions

File tree

content/learning-paths/servers-and-cloud-computing/timescaledb-on-gcp/_index.md

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
11
---
22
title: Deploy a live sensor dashboard with TimescaleDB and Grafana on Google Cloud C4A
3-
4-
draft: true
5-
cascade:
6-
draft: true
73

84
minutes_to_complete: 45
95

10-
who_is_this_for: This learning path is for DevOps engineers, database engineers, and software developers who want to deploy and operate TimescaleDB on SUSE Linux Enterprise Server (SLES) Arm64, ingest live time-series sensor data, and visualize it in Grafana.
6+
who_is_this_for: This is an introductory topic for DevOps engineers, database engineers, and software developers who want to deploy and operate TimescaleDB on SUSE Linux Enterprise Server (SLES) Arm64, ingest live time-series sensor data, and visualize it in Grafana.
117

128
learning_objectives:
139
- Install and configure TimescaleDB on Google Cloud C4A Axion processors by building from source for Arm64
@@ -70,5 +66,4 @@ layout: "learningpathall"
7066
learning_path_main_page: yes
7167
---
7268

73-
TimescaleDB is a high-performance, open-source time-series database built on PostgreSQL that provides powerful features for storing, querying, and analyzing time-series data efficiently. When you deploy TimescaleDB on Google Cloud C4A Axion Arm-based processors, you can achieve high-throughput time-series ingestion and query processing with optimized performance per watt and lower infrastructure costs. This Learning Path shows you how to build a complete time-series data pipeline with live sensor ingestion and real-time visualization using Grafana.
7469

content/learning-paths/servers-and-cloud-computing/timescaledb-on-gcp/background.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,10 @@ To learn more, visit the [TimescaleDB website](https://www.timescale.com/) and e
2929

3030
## What you've accomplished and what's next
3131

32-
In this section, you learned about:
32+
In this section, you:
3333

34-
* Google Axion C4A Arm-based VMs and their performance advantages for time-series workloads
35-
* TimescaleDB and its key features, including hypertables, continuous aggregates, and retention policies
36-
* How Arm architecture enables cost-efficient, high-throughput ingestion and query processing for time-series data
34+
- Explored Google Axion C4A Arm-based VMs and their performance advantages for time-series workloads
35+
- Reviewed TimescaleDB key features, including hypertables, continuous aggregates, and retention policies
36+
- Understood how Arm architecture enables cost-efficient, high-throughput ingestion and query processing
3737

38-
Next, you'll create firewall rules to enable remote access to the Grafana dashboard that you'll build later in this Learning Path.
38+
Next, you'll create a firewall rule to enable remote access to the Grafana dashboard you'll build later in this Learning Path.

content/learning-paths/servers-and-cloud-computing/timescaledb-on-gcp/firewall-setup.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,31 +9,31 @@ layout: learningpathall
99
Create a firewall rule in Google Cloud Console to expose TCP port 3000 for the TimescaleDB (Grafana) management interface.
1010

1111
{{% notice Note %}}
12-
For support on GCP setup, see the Learning Path [Getting started with Google Cloud Platform](/learning-paths/servers-and-cloud-computing/csp/google/).
12+
For help with GCP setup, see the Learning Path [Getting started with Google Cloud Platform](/learning-paths/servers-and-cloud-computing/csp/google/).
1313
{{% /notice %}}
1414

1515
## Configure the firewall rule
1616

1717
Navigate to the [Google Cloud Console](https://console.cloud.google.com/), go to **VPC Network > Firewall**, and select **Create firewall rule**.
1818

19-
![Create a firewall rule](images/firewall-rule.png "Create a firewall rule")
19+
![Google Cloud Console VPC Network Firewall page showing the Create firewall rule button in the top menu bar alt-txt#center](images/firewall-rule.png "Create a firewall rule in Google Cloud Console")
2020

2121
Next, create the firewall rule that exposes TCP port 3000.
2222
Set the **Name** of the new rule to "allow-tcp-3000". Select your network that you intend to bind to your VM (default is "autoscaling-net" but your organization might have others).
2323

2424
Set **Direction of traffic** to "Ingress". Set **Allow on match** to "Allow" and **Targets** to "Specified target tags". Enter "allow-tcp-3000" in the **Target tags** text field. Set **Source IPv4 ranges** to "0.0.0.0/0".
2525

26-
![Create a firewall rule](images/network-rule.png "Creating the TCP/3000 firewall rule")
26+
![Google Cloud Console Create firewall rule form with Name set to allow-tcp-3000, Direction of traffic set to Ingress, and Target tags field showing allow-tcp-3000 alt-txt#center](images/network-rule.png "Configuring the allow-tcp-3000 firewall rule")
2727

2828
Finally, select **Specified protocols and ports** under the **Protocols and ports** section. Select the **TCP** checkbox, enter "3000" in the **Ports** text field, and select **Create**.
2929

30-
![Specifying the TCP port to expose](images/network-port.png "Specifying the TCP port to expose")
30+
![Google Cloud Console Protocols and ports section with the TCP checkbox selected and port 3000 entered in the Ports text field alt-txt#center](images/network-port.png "Setting TCP port 3000 in the firewall rule")
3131

3232
## What you've accomplished and what's next
3333

34-
You've successfully:
34+
In this section, you:
3535

36-
* Created a firewall rule in Google Cloud to expose port 3000 for Grafana web interface access
37-
* Configured network ingress rules to allow remote connections to your dashboard
36+
- Created a firewall rule to expose TCP port 3000 for Grafana web interface access
37+
- Configured network ingress rules to allow remote connections from any source IP
3838

3939
Next, you'll provision a Google Axion C4A Arm virtual machine and apply this firewall rule to enable external access to Grafana.
Lines changed: 22 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,16 @@
11
---
2-
title: Grafana Setup & TimescaleDB Data Source Configuration
2+
title: Install Grafana and configure the TimescaleDB data source
33
weight: 7
44

55
### FIXED, DO NOT MODIFY
66
layout: learningpathall
77
---
88

9-
## Grafana Setup & TimescaleDB Data Source
9+
## Install and configure Grafana
1010

1111
In this section, you install Grafana on a SUSE Arm64 virtual machine, access its web interface, and connect it to TimescaleDB. Grafana acts as the visualization layer that queries TimescaleDB and displays time-series data in dashboards.
1212

13-
This setup enables real-time monitoring and analytics of sensor or application data stored in TimescaleDB.
14-
15-
## Architecture (At This Stage)
13+
This setup enables real-time monitoring and analytics of sensor data stored in TimescaleDB.
1614

1715
```text
1816
Python Sensor Ingest Script
@@ -24,7 +22,7 @@ TimescaleDB (PostgreSQL)
2422
Grafana Dashboard
2523
```
2624

27-
## Install Grafana on SUSE (Arm64)
25+
## Install Grafana on SUSE
2826

2927
Grafana is available via RPM packages and works natively on Arm64.
3028

@@ -42,7 +40,7 @@ sudo systemctl start grafana-server
4240
sudo systemctl enable grafana-server
4341
```
4442

45-
**Verify status:**
43+
Verify the service is running:
4644

4745
```bash
4846
sudo systemctl status grafana-server
@@ -56,15 +54,15 @@ The output is similar to:
5654
Active: active (running) since Tue 2026-02-17 08:57:45 UTC; 1h 31min ago
5755
````
5856
59-
## Access Grafana Web UI
57+
## Access the Grafana web UI
6058
6159
Open your browser and navigate to:
6260
6361
```bash
6462
http://<VM-PUBLIC-IP>:3000
6563
```
6664

67-
### Default Login Credentials
65+
### Default login credentials
6866

6967
| Field | Value |
7068
| -------- | ----- |
@@ -73,21 +71,17 @@ http://<VM-PUBLIC-IP>:3000
7371

7472
You will be prompted to change the password on first login. Provide and save off a new password. Re-login if needed using the new password:
7573

76-
![Grafana login page#center](images/grafana-login-page.webp "Grafana login page")
74+
![Grafana login page showing username and password fields with a Sign In button alt-txt#center](images/grafana-login-page.webp "Grafana login page")
7775

7876
You will be presented with the main dashboard for Grafana:
7977

80-
![Grafana dashboard#center](images/grafana-dashboard.webp "Grafana dashboard")
81-
82-
## Add TimescaleDB as a Data Source
78+
![Grafana main dashboard showing the Home screen with sidebar navigation including Dashboards, Explore, and Connections menu items alt-txt#center](images/grafana-dashboard.webp "Grafana main dashboard")
8379

84-
### Step 1: Open Data Sources
80+
## Add TimescaleDB as a data source
8581

86-
From the Grafana sidebar:
82+
### Step 1: Open data sources
8783

88-
```bash
89-
Connections → Data sources → Add data source
90-
```
84+
From the Grafana sidebar, navigate to **Connections****Data sources****Add data source**.
9185

9286
### Step 2: Choose PostgreSQL
9387

@@ -96,7 +90,7 @@ Select PostgreSQL (TimescaleDB is PostgreSQL-compatible).
9690
![Add PostgreSQL data source in Grafana#center](images/psql-data-source.png "Add PostgreSQL data source")
9791

9892

99-
### Step 3: Configure Connection Settings
93+
### Step 3: Configure connection settings
10094

10195
Fill the form exactly as below:
10296

@@ -108,24 +102,20 @@ Fill the form exactly as below:
108102
| Password | `<postgres password saved>` |
109103
| TLS/SSL Mode | `disable` |
110104

111-
![PostgreSQL data source connection settings#center](images/data-source-details.png "PostgreSQL data source settings")
105+
![PostgreSQL data source connection settings alt-txt#center](images/data-source-details.png "PostgreSQL data source settings")
112106

113-
**Scroll down and click:**
114-
115-
```text
116-
Save & Test
117-
```
107+
Scroll down and select **Save & Test**.
118108

119109
You should see "Database connection OK."
120110

121-
![Grafana PostgreSQL data source save and test success#center](images/data-source-save-test.png "Grafana PostgreSQL data source save and test")
111+
![Grafana PostgreSQL data source save and test success alt-txt#center](images/data-source-save-test.png "Grafana PostgreSQL data source save and test")
122112

123-
## What You Have Accomplished
113+
## What you've accomplished and what's next
124114

125-
- Installed Grafana on SUSE Arm64
126-
- Logged into Grafana UI
127-
- Connected Grafana to TimescaleDB successfully
115+
In this section, you:
128116

129-
## What’s Next
117+
- Installed Grafana on SUSE Arm64 and started the service
118+
- Accessed the Grafana web UI and updated the default password
119+
- Connected Grafana to TimescaleDB as a PostgreSQL data source
130120

131-
In the next section, you will create a live dashboard to visualize real-time sensor temperature data.
121+
In the next section, you'll create a live dashboard to visualize real-time sensor temperature data.

content/learning-paths/servers-and-cloud-computing/timescaledb-on-gcp/instance.md

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,26 +18,26 @@ For help with GCP setup, see the Learning Path [Getting started with Google Clou
1818

1919
To create a virtual machine based on the C4A instance type:
2020

21-
* Navigate to the [Google Cloud Console](https://console.cloud.google.com/).
22-
* Go to **Compute Engine > VM Instances** and select **Create Instance**.
23-
* Under **Machine configuration**:
24-
* Populate fields such as **Instance name**, **Region**, and **Zone**.
25-
* Set **Series** to `C4A`.
26-
* Select `c4a-standard-4` for machine type.
21+
- Navigate to the [Google Cloud Console](https://console.cloud.google.com/).
22+
- Go to **Compute Engine** > **VM Instances** and select **Create Instance**.
23+
- Under **Machine configuration**:
24+
- Populate fields such as **Instance name**, **Region**, and **Zone**.
25+
- Set **Series** to `C4A`.
26+
- Select `c4a-standard-4` for machine type.
2727

2828
![Screenshot of the Google Cloud Console showing the Machine configuration section. The Series dropdown is set to C4A and the machine type c4a-standard-4 is selected#center](images/gcp-vm.png "Configuring machine type to C4A in Google Cloud Console")
2929

30-
* Under **OS and storage**, select **Change**, and then choose an Arm64-based operating system image.
31-
* For this Learning Path, select **SUSE Linux Enterprise Server**.
32-
* For the license type, choose **Pay as you go**.
33-
* Increase **Size (GB)** from **10** to **100** to allocate sufficient disk space.
34-
* Select **Choose** to apply the changes.
35-
* Under **Networking**, enable **Allow HTTP traffic** and **Allow HTTPS traffic**. Also, add the following tag "allow-tcp-3000" to enable remote grafana access.
36-
* Select **Create** to launch the virtual machine.
30+
- Under **OS and storage**, select **Change**, and then choose an Arm64-based operating system image.
31+
- For this Learning Path, select **SUSE Linux Enterprise Server**.
32+
- For the license type, choose **Pay as you go**.
33+
- Increase **Size (GB)** from **10** to **100** to allocate sufficient disk space.
34+
- Select **Choose** to apply the changes.
35+
- Under **Networking**, enable **Allow HTTP traffic** and **Allow HTTPS traffic**. Also add the tag `allow-tcp-3000` to enable remote Grafana access.
36+
- Select **Create** to launch the virtual machine.
3737

38-
After the instance starts, click **SSH** next to the VM in the instance list to open a browser-based terminal session.
38+
After the instance starts, select **SSH** next to the VM in the instance list to open a browser-based terminal session.
3939

40-
![Google Cloud Console VM instances page displaying running instance with green checkmark and SSH button in the Connect column#center](images/gcp-pubip-ssh.png "Connecting to a running C4A VM using SSH")
40+
![Google Cloud Console VM instances page displaying running instance with green checkmark and SSH button in the Connect column alt-txt#center](images/gcp-pubip-ssh.png "Connecting to a running C4A VM using SSH")
4141

4242
A new browser window opens with a terminal connected to your VM.
4343

@@ -47,4 +47,4 @@ A new browser window opens with a terminal connected to your VM.
4747

4848
In this section, you provisioned a Google Axion C4A Arm VM and connected to it using SSH.
4949

50-
Next, you'll need to install TimescaleDB and the required dependencies on your VM.
50+
Next, you'll install TimescaleDB and the required dependencies on your VM.

content/learning-paths/servers-and-cloud-computing/timescaledb-on-gcp/live-sensor-dashboard.md

Lines changed: 21 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
11
---
2-
title: Live Sensor Temperature Dashboard
2+
title: Build a live sensor temperature dashboard
33
weight: 8
44

55
### FIXED, DO NOT MODIFY
66
layout: learningpathall
77
---
88

9-
## Create a Live Sensor Temperature Dashboard
9+
## Create a live sensor temperature dashboard
1010

11-
In this section, you will create a **real-time Grafana dashboard** that visualizes **live temperature data** stored in **TimescaleDB**.
12-
13-
This dashboard continuously updates and helps you monitor sensor temperature changes in near real time.
11+
In this section, you'll create a Grafana dashboard that visualizes live temperature data stored in TimescaleDB. The dashboard continuously updates to display sensor temperature changes in near real time.
1412

1513
## Prerequisites
1614

@@ -42,22 +40,22 @@ Log in using your Grafana credentials.
4240
## Create a New Dashboard
4341

4442
- From the left sidebar, select **Dashboards**
45-
- Click **New dashboard**
46-
- Select Add a **new visualization**
43+
- Select **New dashboard**
44+
- Select **New visualization**
4745

4846
You will be redirected to the Edit panel screen.
4947

5048
## Configure the Live Sensor Query
5149

5250
In the Query section:
5351

54-
- Data source: PostgreSQL / TimescaleDB
55-
- Query type: SQL
56-
- Format: Time series
52+
- **Data source:** PostgreSQL / TimescaleDB
53+
- **Query type:** SQL
54+
- **Format:** Time series
5755

58-
![Grafana visualization configuration showing time series panel settings#center](images/data-source-visualization.png "Grafana visualization configuration")
56+
![Grafana time series panel editor showing the visualization configuration screen with the time series panel type selected and panel title field alt-txt#center](images/data-source-visualization.png "Grafana visualization configuration")
5957

60-
Paste the following query after pressing the "Code" button on the right of the query editor:
58+
Paste the following query after selecting **Code** on the right of the query editor:
6159

6260
```sql
6361
SELECT
@@ -76,41 +74,31 @@ Apply the following settings in the right-hand panel:
7674

7775
- Visualization Settings
7876

79-
- Visualization: Time series
80-
- Panel title: Live Sensor Temperature
81-
- Table view: Disabled
77+
- **Visualization:** Time series
78+
- **Panel title:** Live Sensor Temperature
79+
- **Table view:** Disabled
8280

8381
- Time & Refresh Settings
8482

85-
- Time range: Last 5 minutes
86-
- Refresh interval: 5s
83+
- **Time range:** Last 5 minutes
84+
- **Refresh interval:** 5s
8785

8886
These settings ensure the panel refreshes automatically with new data.
8987

9088
## Validate the Live Sensor Panel
9189

9290
Once configured, the panel should display a continuously updating temperature graph.
9391

94-
![Grafana dashboard showing Live Sensor Temperature time series panel alt-txt#center](images/live-sensor-temperature.webp "Live Sensor Temperature Panel")
92+
![Grafana live sensor temperature time series panel showing a continuous line graph of temperature readings from multiple sensors over the last 5 minutes alt-txt#center](images/live-sensor-temperature.webp "Live sensor temperature panel")
9593

96-
## Save the Dashboard
94+
## Save the dashboard
9795

98-
- Click Save dashboard (top-right corner)
96+
- Select **Save dashboard** (top-right corner)
9997
- Enter a name, for example: Live Sensor Monitoring Dashboard
100-
- Click Save
98+
- Select **Save**
10199

102100
The dashboard is now active.
103101

104-
## What you've accomplished and what's next
105-
106-
You've successfully:
107-
108-
- Built a complete time-series data pipeline on Google Cloud C4A Axion Arm-based processors
109-
- Installed and configured TimescaleDB by building from source for optimal Arm64 performance
110-
- Created a real-time sensor data ingestion pipeline using Python with hypertables and continuous aggregates
111-
- Configured retention policies and indexes for production-ready time-series storage
112-
- Installed Grafana and connected it to TimescaleDB as a data source
113-
- Built a live sensor dashboard that automatically refreshes to display real-time temperature data
114-
- Validated end-to-end data flow from ingestion through TimescaleDB to Grafana visualization
102+
## What you've accomplished
115103

116-
You now have a production-ready time-series monitoring solution running natively on Arm infrastructure. This setup demonstrates how TimescaleDB and Grafana work together to provide comprehensive real-time monitoring for IoT and sensor workloads. You can extend this foundation by adding more sensors, creating additional dashboards, implementing alerting rules in Grafana, or optimizing TimescaleDB for your specific workload patterns.
104+
You've built a complete time-series monitoring pipeline on Google Cloud C4A Axion Arm-based processors. TimescaleDB is running natively on Arm64, ingesting live sensor data through Python, and serving queries to Grafana for real-time visualization. From here you can add more sensors, create additional dashboards, set up alerting rules in Grafana, or tune TimescaleDB for your specific workload.

0 commit comments

Comments
 (0)