docs: update db connection docs
This commit is contained in:
3
docs/sources/img/installation-postgres_ds_config.png
Normal file
3
docs/sources/img/installation-postgres_ds_config.png
Normal file
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:d7dae33170bf09b353f886bc1a8cbc4307d80858c514199f08f1b9e01bc01e81
|
||||
size 260406
|
||||
@@ -1,5 +1,7 @@
|
||||
# SQL Data Source Configuration
|
||||
|
||||
## MySQL
|
||||
|
||||
In order to use _Direct DB Connection_ feature you should configure SQL data source first.
|
||||
|
||||

|
||||
@@ -7,7 +9,7 @@ In order to use _Direct DB Connection_ feature you should configure SQL data sou
|
||||
Select _MySQL_ data source type and provide your database host address and port (3306 is default for MySQL). Fill
|
||||
database name (usually, `zabbix`) and specify credentials.
|
||||
|
||||
## Security notes
|
||||
### Security notes
|
||||
|
||||
As you can see in _User Permission_ note, Grafana doesn't restrict any queries to the database. So you should be careful
|
||||
and create a special user with limited access to Zabbix database. Grafana-Zabbix plugin uses only `SELECT` queries to
|
||||
@@ -20,3 +22,13 @@ Also, all queries are invoked by grafana-server, so you can restrict connection
|
||||
```sql
|
||||
GRANT SELECT ON zabbix.* TO 'grafana'@'grafana-host' identified by 'password';
|
||||
```
|
||||
|
||||
## PostgreSQL
|
||||
|
||||
Select _PostgreSQL_ data source type and provide your database host address and port (5432 is default). Fill
|
||||
database name (usually, `zabbix`) and specify credentials.
|
||||
|
||||

|
||||
### Security notes
|
||||
|
||||
Make sure you use read-only user for Zabbix database.
|
||||
|
||||
@@ -65,7 +65,7 @@ Read [how to configure](/installation/configuration-sql) SQL data source in Graf
|
||||
|
||||
#### Supported databases
|
||||
|
||||
Now only **MySQL** is supported by Grafana.
|
||||
**MySQL** and **PostgreSQL** are supported by Grafana.
|
||||
|
||||
### Alerting
|
||||
|
||||
|
||||
@@ -22,12 +22,26 @@ and `trend.get` API calls.
|
||||
|
||||
Below is an example query for getting history in the Grafana-Zabbix Plugin:
|
||||
|
||||
**MySQL**:
|
||||
```sql
|
||||
SELECT itemid AS metric, clock AS time_sec, {aggFunc}(value) as value
|
||||
FROM {historyTable}
|
||||
WHERE itemid IN ({itemids})
|
||||
AND clock > {timeFrom} AND clock < {timeTill}
|
||||
GROUP BY time_sec DIV {intervalSec}, metric
|
||||
FROM {historyTable}
|
||||
WHERE itemid IN ({itemids})
|
||||
AND clock > {timeFrom} AND clock < {timeTill}
|
||||
GROUP BY time_sec DIV {intervalSec}, metric
|
||||
ORDER BY time_sec ASC
|
||||
```
|
||||
|
||||
**PostgreSQL**:
|
||||
```sql
|
||||
SELECT to_char(itemid, 'FM99999999999999999999') AS metric,
|
||||
clock / {intervalSec} * {intervalSec} AS time,
|
||||
{aggFunc}(value) AS value
|
||||
FROM {historyTable}
|
||||
WHERE itemid IN ({itemids})
|
||||
AND clock > {timeFrom} AND clock < {timeTill}
|
||||
GROUP BY 1, 2
|
||||
ORDER BY time ASC
|
||||
```
|
||||
|
||||
where `{aggFunc}` is one of `[AVG, MIN, MAX, SUM, COUNT]` aggregation functions, `{historyTable}` is a history table,
|
||||
@@ -36,18 +50,34 @@ where `{aggFunc}` is one of `[AVG, MIN, MAX, SUM, COUNT]` aggregation functions,
|
||||
When getting trends, the plugin additionally queries a particular value column (`value_avg`, `value_min` or `value_max`) which
|
||||
depends on `consolidateBy` function value:
|
||||
|
||||
**MySQL**:
|
||||
```sql
|
||||
SELECT itemid AS metric, clock AS time_sec, {aggFunc}({valueColumn}) as value
|
||||
FROM {trendsTable}
|
||||
WHERE itemid IN ({itemids})
|
||||
AND clock > {timeFrom} AND clock < {timeTill}
|
||||
GROUP BY time_sec DIV {intervalSec}, metric
|
||||
FROM {trendsTable}
|
||||
WHERE itemid IN ({itemids})
|
||||
AND clock > {timeFrom} AND clock < {timeTill}
|
||||
GROUP BY time_sec DIV {intervalSec}, metric
|
||||
ORDER BY time_sec ASC
|
||||
```
|
||||
|
||||
**PostgreSQL**:
|
||||
```sql
|
||||
SELECT to_char(itemid, 'FM99999999999999999999') AS metric,
|
||||
clock / {intervalSec} * {intervalSec} AS time,
|
||||
{aggFunc}({valueColumn}) AS value
|
||||
FROM {trendsTable}
|
||||
WHERE itemid IN ({itemids})
|
||||
AND clock > {timeFrom} AND clock < {timeTill}
|
||||
GROUP BY 1, 2
|
||||
ORDER BY time ASC
|
||||
```
|
||||
|
||||
**Note**: these queries may be changed in future, so look into sources for actual query structure.
|
||||
|
||||
As you can see, the Grafana-Zabbix plugin uses aggregation by a given time interval. This interval is provided by Grafana and depends on the panel width in pixels. Thus, Grafana displays the data in the proper resolution.
|
||||
|
||||
## Functions usage with Direct DB Connection
|
||||
|
||||
There's only one function that directly affects the backend data. This function is `consolidateBy`. Other functions work on the client side and transform data that comes from the backend. So you should clearly understand that this is pre-aggregated data (by AVG, MAX, MIN, etc).
|
||||
|
||||
For example, say you want to group values by 1 hour interval and `max` function. If you just apply `groupBy(10m, max)` function, your result will be wrong, because you would transform data aggregated by default `AVG` function. You should use `consolidateBy(max)` coupled with `groupBy(10m, max)` in order to get a precise result.
|
||||
For example, say you want to group values by 1 hour interval and `max` function. If you just apply `groupBy(10m, max)` function, your result will be wrong, because you would transform data aggregated by default `AVG` function. You should use `consolidateBy(max)` coupled with `groupBy(10m, max)` in order to get a precise result.
|
||||
|
||||
Reference in New Issue
Block a user