Skip to content

[FR] MySQL request_resource 字段采集长度不足,长 SQL 被截断导致无法获取完整语句 #11770

Description

@jeromeji

Search before asking

  • I had searched in the issues and found no similar feature requirement.

DeepFlow Component

Agent

Description

当 MySQL 执行较长的 SQL 语句时(如多表 JOIN、含大量列的 SELECT),DeepFlow Agent 采集到的 request_resourceendpoint 字段会被截断,导致只能看到 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_resourceendpoint 字段长度均为 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 被截断后:

  1. 无法判断 SQL 涉及的表和查询条件
  2. 无法分析索引使用情况
  3. 无法给出优化建议
  4. 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?

  • Yes I am willing to submit a PR!

Code of Conduct

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions