Search before asking
DeepFlow Component
Agent
Description
当 MySQL 执行较长的 SQL 语句时(如多表 JOIN、含大量列的 SELECT),DeepFlow Agent 采集到的 request_resource 和 endpoint 字段会被截断,导致只能看到 SQL 的前半部分(通常止于 SELECT 列名列表),而 FROM / JOIN / WHERE / ORDER BY 等子句丢失。
实际观测
通过 DeepFlow SQL API 直接查询 l7_flow_log,获取到的 request_resource 字段内容如下(1017 字符):
SELECT
A.id , A.mgmt_monitor_param_id , A.mgmt_system_admin_id ,
A.environment_config_id , A.project_id , A.organization_id ,
A.environment_id , A.project_name , A.project_code ,
A.system_name , A.system_code , A.service_id ,
A.service_name , A.service_code , A.environment_name ,
A.environment_code , A.environment_type , A.pinpoint_code ,
A.param_name , A.param_code , A.rp_name ,
A.update_date , A.create_date , A.creator_id ,
A.updater_id , A.disable , A.kibana_id ,
A.kibana_code , A.cluster_code , A.kibana_type ,
A.service_status , A.kibana_env , A.source_type ,
B.mgmt_service_id , B.rp_code AS rpCode , B.rp_name AS rpName ,
B.rp_id , B.phone , B.email , B.msg_send_mode
SQL 在列名列表中间被截断,缺少 FROM、JOIN、WHERE 等关键子句,无法用于根因分析。
request_resource 和 endpoint 字段长度均为 1017 字符
- 截断位置不在语句边界,直接在列名中间截断
- 同一条 SQL 在 MySQL
performance_schema.events_statements_summary_by_digest 中可以查到完整语句
环境信息
- DeepFlow 社区版
- 采集方式:Packet(非 eBPF)
- MySQL Pod 运行在 K8s 中,l7_protocol=60
l7_log_packet_size 已尝试调大至 4096,问题依旧
Use case
在 SRE 故障诊断场景(特别是 MySQL Pod CPU 异常),需要通过 DeepFlow 采集的慢 SQL 排名获取完整的 SQL 语句来定位根因。当前 request_resource 被截断后:
- 无法判断 SQL 涉及的表和查询条件
- 无法分析索引使用情况
- 无法给出优化建议
- SRE 只能告知用户「SQL 不完整,请自行登录 MySQL 查看」
Expected behavior
- 最低期望:
request_resource 字段能采集完整的 SQL 语句(至少 4096 字符),覆盖绝大多数业务 SQL
- 更好方案:提供可配置的
request_resource_max_length 参数,让用户根据实际 SQL 长度和存储成本自行权衡
- 最佳方案:当 SQL 超过采集长度时,在
endpoint 字段中保留 SQL digest(模板化后的 SQL,去除字面值),这样即使完整语句被截断,仍能通过 digest 识别同模板的 SQL
Related issues
Are you willing to submit a PR?
Code of Conduct
Search before asking
DeepFlow Component
Agent
Description
当 MySQL 执行较长的 SQL 语句时(如多表 JOIN、含大量列的 SELECT),DeepFlow Agent 采集到的
request_resource和endpoint字段会被截断,导致只能看到 SQL 的前半部分(通常止于 SELECT 列名列表),而 FROM / JOIN / WHERE / ORDER BY 等子句丢失。实际观测
通过 DeepFlow SQL API 直接查询
l7_flow_log,获取到的request_resource字段内容如下(1017 字符):SQL 在列名列表中间被截断,缺少 FROM、JOIN、WHERE 等关键子句,无法用于根因分析。
request_resource和endpoint字段长度均为 1017 字符performance_schema.events_statements_summary_by_digest中可以查到完整语句环境信息
l7_log_packet_size已尝试调大至 4096,问题依旧Use case
在 SRE 故障诊断场景(特别是 MySQL Pod CPU 异常),需要通过 DeepFlow 采集的慢 SQL 排名获取完整的 SQL 语句来定位根因。当前
request_resource被截断后:Expected behavior
request_resource字段能采集完整的 SQL 语句(至少 4096 字符),覆盖绝大多数业务 SQLrequest_resource_max_length参数,让用户根据实际 SQL 长度和存储成本自行权衡endpoint字段中保留 SQL digest(模板化后的 SQL,去除字面值),这样即使完整语句被截断,仍能通过 digest 识别同模板的 SQLRelated issues
l7_log_packet_size=4096调大无效)Are you willing to submit a PR?
Code of Conduct