summaryrefslogtreecommitdiffstats
path: root/collectors/python.d.plugin/proxysql/README.md
blob: 8c6a394f12e88d4592f3b24006ca55b8824a4391 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
<!--
title: "ProxySQL monitoring with Netdata"
custom_edit_url: https://github.com/netdata/netdata/edit/master/collectors/python.d.plugin/proxysql/README.md
sidebar_label: "ProxySQL"
-->

# ProxySQL monitoring with Netdata

Monitors database backend and frontend performance metrics.

## Requirements

-   python library [MySQLdb](https://github.com/PyMySQL/mysqlclient-python) (faster) or [PyMySQL](https://github.com/PyMySQL/PyMySQL) (slower)
-   `netdata` local user to connect to the ProxySQL server.

To create the `netdata` user, follow [the documentation](https://github.com/sysown/proxysql/wiki/Users-configuration#creating-a-new-user).

## Charts

It produces:

1.  **Connections (frontend)**

    -   connected: number of frontend connections currently connected
    -   aborted: number of frontend connections aborted due to invalid credential or max_connections reached
    -   non_idle: number of frontend connections that are not currently idle
    -   created: number of frontend connections created

2.  **Questions (frontend)**

    -   questions: total number of queries sent from frontends
    -   slow_queries: number of queries that ran for longer than the threshold in milliseconds defined in global variable `mysql-long_query_time`

3.  **Overall Bandwidth (backends)**

    -   in
    -   out

4.  **Status (backends)**

    -   Backends
        -   `1=ONLINE`: backend server is fully operational
        -   `2=SHUNNED`: backend sever is temporarily taken out of use because of either too many connection errors in a time that was too short, or replication lag exceeded the allowed threshold
        -   `3=OFFLINE_SOFT`: when a server is put into OFFLINE_SOFT mode, new incoming connections aren't accepted anymore, while the existing connections are kept until they became inactive. In other words, connections are kept in use until the current transaction is completed. This allows to gracefully detach a backend
        -   `4=OFFLINE_HARD`: when a server is put into OFFLINE_HARD mode, the existing connections are dropped, while new incoming connections aren't accepted either. This is equivalent to deleting the server from a hostgroup, or temporarily taking it out of the hostgroup for maintenance work
        -   `-1`: Unknown status

5.  **Bandwidth (backends)**

    -   Backends
        -   in
        -   out

6.  **Queries (backends)**

    -   Backends
        -   queries

7.  **Latency (backends)**

    -   Backends
        -   ping time

8.  **Pool connections (backends)**

    -   Backends
        -   Used: The number of connections are currently used by ProxySQL for sending queries to the backend server.
        -   Free: The number of connections are currently free.
        -   Established/OK: The number of connections were established successfully.
        -   Error: The number of connections weren't established successfully.

9.  **Commands**

    -   Commands
        -   Count
        -   Duration (Total duration for each command)

10. **Commands Histogram**

    -   Commands
        -   100us, 500us, ..., 10s, inf: the total number of commands of the given type which executed within the specified time limit and the previous one.

## Configuration

Edit the `python.d/proxysql.conf` configuration file using `edit-config` from the Netdata [config
directory](/docs/configure/nodes.md), which is typically at `/etc/netdata`.

```bash
cd /etc/netdata   # Replace this path with your Netdata config directory, if different
sudo ./edit-config python.d/proxysql.conf
```

```yaml
tcpipv4:
  name     : 'local'
  user     : 'stats'
  pass     : 'stats'
  host     : '127.0.0.1'
  port     : '6032'
```

If no configuration is given, module will fail to run.

---