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 数据库。