Skip to content

Commit

Permalink
Merge branch 'main' into automate-integration
Browse files Browse the repository at this point in the history
  • Loading branch information
Jayko001 authored Apr 23, 2024
2 parents 9526939 + c48c9ff commit 091b3d0
Show file tree
Hide file tree
Showing 6 changed files with 170 additions and 1 deletion.
16 changes: 16 additions & 0 deletions .github/workflows/pages-deployment.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
name: github pages deployment
on:
push:
branches:
- main
- master
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
with:
python-version: 3.x
- run: pip install mkdocs-material
- run: mkdocs gh-deploy --force
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@
**/*.rs.bk
.vscode/
META.json
/prometheus_fdw-*
/prometheus_fdw-*
/site
6 changes: 6 additions & 0 deletions docs/hello_world/basic_setup.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Prometheus FDW basic demo

- **Dockerfile**: A Postgres database with prometheus_fdw installed
- **setup-prometheus-fdw.sql**: A script to show how to configure
- **sample-query.sql**: A sample query against Prometheus
- **run-demo.sh**: A script showing the whole process of running the demo
43 changes: 43 additions & 0 deletions docs/hello_world/practical_example/setup.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Practical example

- **Dockerfile**: A Postgres database with prometheus_fdw installed
- **setup-prometheus-fdw.sql**: A script to show how to configure
- **setup-cache.sql**: Setup tables for local storage of metrics data
- **setup-metrics-sync.sql**: Automatically sync data from Prometheus to Postgres
- **run-demo.sh**: A script showing the whole process of running the demo

## Data model

This data model was inspired by the [Crunchy Data postgresql-prometheus-adapter](https://github.com/CrunchyData/postgresql-prometheus-adapter).

**metric_labels**: Stores the metric name labels.

```
id | name | labels
----+------------------------------------+-------------------------
1 | container_cpu_usage_seconds_total | {"pod": "my-pod-1", ...}
2 | container_cpu_usage_seconds_total | {"pod": "my-pod-2", ...}
3 | container_memory_working_set_bytes | {"pod": "my-pod-1", ...}
4 | container_memory_working_set_bytes | {"pod": "my-pod-2", ...}
```

**metric_values**: A partitioned table that stores metric values, when they happened, and the corresponding labels.

```
label_id | time | value
----------+------------+----------
4320 | 1702678142 | 12214272
4320 | 1702678742 | 11923456
4320 | 1702679342 | 12230656
4320 | 1702679942 | 11804672
4320 | 1702677542 | 11870208
4331 | 1702679942 | 53743616
4331 | 1702678142 | 54022144
4331 | 1702678742 | 53903360
4331 | 1702679342 | 53288960
4331 | 1702677542 | 53514240
```

## Example query

The query in **sample-query.sql** is an example of showing the current memory utilization of each container in kube-system.
64 changes: 64 additions & 0 deletions docs/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
## Prometheus_fdw

Prometheus_fdw is an integration of Prometheus monitoring data into Postgres. It enables querying for Prometheus metrics directly within Postgres, bridging the gap between Prometheus monitoring and Postgres's robust database capabilities.
[![Static Badge](https://img.shields.io/badge/%40tembo-community?logo=slack&label=slack)](https://join.slack.com/t/tembocommunity/shared_invite/zt-20dtnhcmo-pLNV7_Aobi50TdTLpfQ~EQ)
[![PGXN version](https://badge.fury.io/pg/prometheus_fdw.svg)](https://pgxn.org/dist/prometheus_fdw/)

### Pre-requisistes

- Install `prometheus_fdw`
- (Optional) install `pg_partman` and `pg_cron`

### Quick start

`create extension prometheus_fdw;`

Create the foreign data wrapper:

```sql
create foreign data wrapper prometheus_wrapper
handler prometheus_fdw_handler
validator prometheus_fdw_validator;
```

Create the server:

```sql
create server my_prometheus_server
foreign data wrapper prometheus_wrapper
options (
base_url '<base prometheus url>');
```

Create Foreign Table:

```sql
CREATE FOREIGN TABLE IF NOT EXISTS metrics (
metric_name TEXT,
metric_labels JSONB,
metric_time BIGINT,
metric_value FLOAT8
)
server my_prometheus_server
options (
object 'metrics',
step '10m'
);
```

## Queries

To simply run the fdw and look at values

```sql
SELECT
*
FROM metrics
WHERE
metric_name='container_cpu_usage_seconds_total'
AND metric_time > 1696046800 AND metric_time < 1696133000;
```

## Examples

Please see the `examples/` directory to find a basic example and a practical example. In the practical example, metrics are automatically synced into the database using `pg_cron`, and automatically expired using `pg_partman`. Performance is optimized using indexes and partitioning.
39 changes: 39 additions & 0 deletions mkdocs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
site_name: Prometheus FDW
theme:
name: material
palette:
- scheme: default
primary: teal
toggle:
icon: material/weather-night
name: dark mode
- scheme: slate
primary: teal
toggle:
icon: material/weather-sunny
name: light mode
nav:
- Prometheus FDW: 'index.md'
- hello world:
- 'hello_world/basic_setup.md'
- practical example:
- 'practical_example/setup.md'
markdown_extensions:
- toc:
permalink: true
- markdown.extensions.codehilite:
guess_lang: false
- codehilite:
- admonition
- extra
- pymdownx.snippets:
check_paths: true
- pymdownx.highlight:
anchor_linenums: true
line_spans: __span
pygments_lang_class: true
- pymdownx.inlinehilite
- pymdownx.superfences
plugins:
- search
- mkdocstrings

0 comments on commit 091b3d0

Please sign in to comment.