docs: update db connection docs

This commit is contained in:
Alexander Zobnin
2017-10-22 11:06:48 +03:00
parent c8205b30c3
commit 538589b99b
4 changed files with 56 additions and 11 deletions

View File

@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d7dae33170bf09b353f886bc1a8cbc4307d80858c514199f08f1b9e01bc01e81
size 260406

View File

@@ -1,5 +1,7 @@
# SQL Data Source Configuration # SQL Data Source Configuration
## MySQL
In order to use _Direct DB Connection_ feature you should configure SQL data source first. In order to use _Direct DB Connection_ feature you should configure SQL data source first.
![Configure MySQL data source](../img/installation-mysql_ds_config.png) ![Configure MySQL data source](../img/installation-mysql_ds_config.png)
@@ -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 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. 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 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 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 ```sql
GRANT SELECT ON zabbix.* TO 'grafana'@'grafana-host' identified by 'password'; 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.
![Configure PostgreSQL data source](../img/installation-postgres_ds_config.png)
### Security notes
Make sure you use read-only user for Zabbix database.

View File

@@ -65,7 +65,7 @@ Read [how to configure](/installation/configuration-sql) SQL data source in Graf
#### Supported databases #### Supported databases
Now only **MySQL** is supported by Grafana. **MySQL** and **PostgreSQL** are supported by Grafana.
### Alerting ### Alerting

View File

@@ -22,12 +22,26 @@ and `trend.get` API calls.
Below is an example query for getting history in the Grafana-Zabbix Plugin: Below is an example query for getting history in the Grafana-Zabbix Plugin:
**MySQL**:
```sql ```sql
SELECT itemid AS metric, clock AS time_sec, {aggFunc}(value) as value SELECT itemid AS metric, clock AS time_sec, {aggFunc}(value) as value
FROM {historyTable} FROM {historyTable}
WHERE itemid IN ({itemids}) WHERE itemid IN ({itemids})
AND clock > {timeFrom} AND clock < {timeTill} AND clock > {timeFrom} AND clock < {timeTill}
GROUP BY time_sec DIV {intervalSec}, metric 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, where `{aggFunc}` is one of `[AVG, MIN, MAX, SUM, COUNT]` aggregation functions, `{historyTable}` is a history table,
@@ -36,14 +50,30 @@ 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 When getting trends, the plugin additionally queries a particular value column (`value_avg`, `value_min` or `value_max`) which
depends on `consolidateBy` function value: depends on `consolidateBy` function value:
**MySQL**:
```sql ```sql
SELECT itemid AS metric, clock AS time_sec, {aggFunc}({valueColumn}) as value SELECT itemid AS metric, clock AS time_sec, {aggFunc}({valueColumn}) as value
FROM {trendsTable} FROM {trendsTable}
WHERE itemid IN ({itemids}) WHERE itemid IN ({itemids})
AND clock > {timeFrom} AND clock < {timeTill} AND clock > {timeFrom} AND clock < {timeTill}
GROUP BY time_sec DIV {intervalSec}, metric 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. 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 ## Functions usage with Direct DB Connection