MySQL 過濾器

在此範例中,我們示範如何將 MySQL 過濾器 與 Envoy 代理搭配使用。

Envoy 代理組態包含一個 MySQL 過濾器,該過濾器會解析查詢並收集 MySQL 專屬的指標。

注意

目前協定過濾器的實作已使用 MySQL v5.7 進行廣泛測試。它可能也適用於其他版本。此範例使用目前的最新版本。

步驟 1:建立沙箱

變更至 examples/mysql 目錄。

建置並啟動容器。

$ pwd
envoy/examples/mysql
$ docker compose pull
$ docker compose up --build -d
$ docker compose ps

    Name                   Command               State                             Ports
----------------------------------------------------------------------------------------------------
mysql_mysql_1   docker-entrypoint.sh mysqld      Up      3306/tcp
mysql_proxy_1   /docker-entrypoint.sh /bin       Up      10000/tcp, 1999/tcp, 0.0.0.0:8001->8001/tcp

步驟 2:使用 mysql 發出命令

使用 mysql 發出一些命令,並驗證它們是否透過 Envoy 路由。

$ docker run --rm -it --network mysql_default mysql:5.7 mysql -h proxy -P 1999 -u root --skip-ssl
... snip ...

mysql> CREATE DATABASE test;
Query OK, 1 row affected (0.00 sec)

mysql> USE test;
Database changed
mysql> CREATE TABLE test ( text VARCHAR(255) );
Query OK, 0 rows affected (0.01 sec)

mysql> SELECT COUNT(*) FROM test;
+----------+
| COUNT(*) |
+----------+
|        0 |
+----------+
1 row in set (0.01 sec)

mysql> INSERT INTO test VALUES ('hello, world!');
Query OK, 1 row affected (0.00 sec)

mysql> SELECT COUNT(*) FROM test;
+----------+
| COUNT(*) |
+----------+
|        1 |
+----------+
1 row in set (0.00 sec)

mysql> exit
Bye

步驟 3:檢查出口統計資料

檢查出口統計資料是否已更新。

$ curl -s "https://127.0.0.1:8001/stats?filter=egress_mysql"
mysql.egress_mysql.auth_switch_request: 0
mysql.egress_mysql.decoder_errors: 0
mysql.egress_mysql.login_attempts: 1
mysql.egress_mysql.login_failures: 0
mysql.egress_mysql.protocol_errors: 0
mysql.egress_mysql.queries_parse_error: 2
mysql.egress_mysql.queries_parsed: 7
mysql.egress_mysql.sessions: 6
mysql.egress_mysql.upgraded_to_ssl: 0

步驟 4:檢查 TCP 統計資料

檢查 TCP 統計資料是否已更新。

$ curl -s "https://127.0.0.1:8001/stats?filter=mysql_tcp"
tcp.mysql_tcp.downstream_cx_no_route: 0
tcp.mysql_tcp.downstream_cx_rx_bytes_buffered: 0
tcp.mysql_tcp.downstream_cx_rx_bytes_total: 446
tcp.mysql_tcp.downstream_cx_total: 1
tcp.mysql_tcp.downstream_cx_tx_bytes_buffered: 0
tcp.mysql_tcp.downstream_cx_tx_bytes_total: 677
tcp.mysql_tcp.downstream_flow_control_paused_reading_total: 0
tcp.mysql_tcp.downstream_flow_control_resumed_reading_total: 0
tcp.mysql_tcp.idle_timeout: 0
tcp.mysql_tcp.max_downstream_connection_duration: 0
tcp.mysql_tcp.upstream_flush_active: 0
tcp.mysql_tcp.upstream_flush_total: 0

另請參閱

Envoy MySQL 過濾器

深入了解如何使用 Envoy MySQL 過濾器。

Envoy 管理員快速入門指南

Envoy 管理介面的快速入門指南。

MySQL

MySQL 資料庫。