feat: Higress 轻量级日志方案:基于 HTTP 推送与 MySQL 存储 || feat: Higress lightweight logging solution: based on HTTP push and MySQL storage#3492
Closed
JayLi52 wants to merge 50 commits intohigress-group:mainfrom
Closed
feat: Higress 轻量级日志方案:基于 HTTP 推送与 MySQL 存储 || feat: Higress lightweight logging solution: based on HTTP push and MySQL storage#3492JayLi52 wants to merge 50 commits intohigress-group:mainfrom
JayLi52 wants to merge 50 commits intohigress-group:mainfrom
Conversation
添加HTTP日志推送插件,支持将请求和响应日志异步推送到指定收集器。主要功能包括: - 捕获请求头、请求体、响应头和响应体 - 支持自定义收集器集群和路径 - 异步推送不影响主请求流程 - 提供采样率配置选项
- 将插件目录及相关文件从http-go-pusher改名为http-log-pusher - 更新.gitignore、README.md、go.mod、go.sum、main.go和option.yaml文件路径 - 保持插件功能不变,仅调整命名以匹配新命名规范
…es and http call handling - 删除无用的 .gitignore、README.md 和 option.yaml 文件 - 修改 go.mod,更新模块路径与依赖版本,增加依赖包 - main.go 中调整 http 调用代码,支持 Fire-and-forget 模式,忽略响应处理 - 替换为新版 proxy-wasm SDK 导入路径,移除未使用的导入包和代码
- 在插件初始化时打印加载成功日志 - 在解析配置时添加日志记录,包括错误和配置信息 - 在请求头、请求体、响应头、响应体处理函数中添加调试日志 - 发送日志时记录发送详情及成功或失败的状态 - 新增 verify-plugin.sh 脚本,实现插件构建、上传、部署及验证自动化流程 - 脚本支持构建 wasm 文件、上传提示、更新配置、等待应用生效和日志检查 - 脚本附
- 将 main 函数修改为空函数以适配插件框架 - 在 init 函数中添加初始化日志输出 - 调用 SetCtx 设置插件上下文及配置解析函数
- 在插件配置中添加HTTP客户端支持,实现日志的异步发送 - 使用wrapper.HttpClient代替原生DispatchHttpCall简化代码并增强回调处理 - 新增tiny-collector微服务,实现日志的批量接收和写入MySQL数据库 - 实现日志查询接口,支持多维度过滤条件、分页和排序 - 提供Dockerfile及Kubernetes部署配置,方便快速部署日志收集服务 - 优化日志发送失败时的错误日志记录,提升可观测性
- 在请求头处理阶段添加采样率判断,根据随机数决定是否采样 - 通过上下文保存采样结果,供后续请求体和响应处理使用 - 未被采样的请求跳过请求体和响应头体的日志处理 - 记录采样决策的日志,方便调试采样效果 - 保持原有请求和响应数据的正常存储与处理逻辑
- 新增 test-with-logs.sh 脚本,实现实时监控插件日志并发送测试请求 - 脚本支持统计插件日志中的请求命中、采样及发送成功数量 - verify-plugin.sh 构建后将 wasm 文件重命名为带时间戳文件,方便版本管理 - verify-plugin.sh 提示上传对应时间戳的文件至 OSS,并更新配置文件中的 redeploy-timestamp 和 wasm 文件 URL - 部署完成后自动清理临时时间戳 wasm 文件,防止残留垃圾文件
- 新增 collect-logs.sh 脚本,实现对 Higress Gateway 的 HTTP Log Pusher 日志分类收集和分析 - 增加 set-log-level.sh 脚本,支持实时调整 WASM 插件日志级别,无需重启 Pod - 扩展 main.go 插件配置,支持 collector_host 和 collector_port 以动态构建集群客户端 - 丰富日志结构体 LogEntry,采集更多请求响应细节及 Envoy 相关属性 - 优化日志解析和上报逻辑,增强请求和响应头、状态码、请求路径等信息采集 - 新增 verify-plugin.sh 脚本,增强插件热加载验证和测试请求发送,提升部署体验 - test-with-logs.sh 脚本更新,完善测试请求数据和目标路径匹配插件配置
- 新增 FilterRules 结构体支持白名单和黑名单两种模式的日志过滤 - 实现 FilterRule 支持域名通配符、HTTP 方法和路径匹配 - 添加路径匹配器 Matcher 接口及多种字符串匹配方式(exact, prefix, suffix, contains, regex) - 优化插件配置解析,支持 filter_mode 和 filter_list 配置项,动态加载过滤规则 - 修改日志采样逻辑为根据过滤规则决定是否记录日志,提升灵活性 - 调整 CollectorClient 初始化逻辑,优先使用 host+port 配置,fallback 为预定义集群名 - 添加日志过滤相关的错误和警告日志,提升配置调试体验 - 新增单元匹配器实现,包含忽略大小写选项支持 - 简化采样相关上下文标记,改为 should_log 判断是否输出日志 - 更新测试脚本与部署配置,强化插件热加载和日志收集验证支持
- 调整deploy.yaml中MySQL连接字符串的用户名 - 修改verify-plugin.sh脚本中的命名空间为himarket-system - 更新验证脚本中请求的网关IP地址 - 替换测试请求的路径以匹配新的服务名称test-ai
- 将 plugins/wasm-go/extensions/http-log-pusher 下的 tiny-collector 重命名为 log-collector - 更新 set-log-level.sh 脚本中命名空间为 himarket-system - 修改 test.sh 脚本使用变量 NAMESPACE 并将命名空间改为 himarket-system - 在 test.sh 中添加日志抓取命令,将 http-log-pusher 日志保存到 http-log-pusher.log - 注释掉 test.sh 中部分不必要的配置检查命令
- 调整日志结构体字段,符合新日志格式规范 - 修改数据库表字段名和类型,匹配新的日志结构 - 更新批量插入SQL语句,支持新字段和数据格式 - 删除冗余字段,简化日志存储结构 - 保持日志插入功能稳定运行,确保与Wasm插件兼容
- 新增 AI 代理插件的内存使用和请求处理调试日志 - 记录 AI 代理请求的提供者、API Token 使用情况和路径重写细节 - 设置请求体缓冲区大小限制日志 - 添加 AI 统计插件中请求体属性抓取的日志记录
- 添加 http-log-pusher 的 Envoy 集群配置 cluster.json,定义多个服务及其状态信息 - 新增 diagnose-collector.sh 脚本用于排查 "bad argument" 错误 - 脚本包含 Service 和 Pod 状态检查、Endpoints 验证、DNS 解析及 HTTP 连通性测试 - 脚本支持检查 Envoy 集群配置及提供问题定位与解决建议 - 删除旧的 http-log-pusher.log 日志文件,清理历史调试信息
- 删除了 plugins/wasm-go/extensions/http-log-pusher 目录下的 cluster.json 文件 - 添加了 plugins/wasm-go/extensions/http-log-pusher 目录下的 config_dump.json 文件 - 新增配置文件包含 Envoy Bootstrap 配置的完整快照 - 配置内容详细包含节点元数据、代理配置、扩展列表等信息 - 减少旧配置冗余,提升配置管理的规范性和可维护性
- 将时间范围查询字段由 ts 修改为 start_time - 服务名查询字段由 service 修改为 authority - 状态码查询字段由 status 修改为 response_code - 排序默认字段由 ts 修改为 start_time - 排序字段校验更新,支持 start_time、response_code、duration、authority、method
- 移除了 http-log-pusher 插件中的 config_dump.json 文件 - 清理了大量冗余 BootstrapConfigDump 配置内容 - 优化了插件目录下的文件结构,减少无用数据占用 - 为后续配置管理和更新做准备,提高维护效率
- 新建数据库 higress_poc,字符集 utf8mb4 - 创建 access_logs 表,包含 27 个列,定义详细字段注释 - 建立主键 id,自增 bigint 类型 - 增加 9 个针对常用查询场景优化的索引 - 支持时间范围查询、分布式追踪、状态码过滤、路径模糊搜索等多种查询 - 设计上支持 HTTP 访问日志的存储与性能分析需求 - 提供初始化成功提示,确保脚本执行结果明确
- 为 JSON 解析错误添加更详细的日志前缀 - 打印接收日志后的路径、方法、状态码和追踪ID - 记录日志缓冲区当前大小及触发刷新时的状态 - 刷新日志时输出即将刷新的日志条目数量 - 为时间解析失败的日志条目输出警告日志 - 打印每条日志条目的关键信息用于调试 - 统计并
- 调整插入语句的字段占位符数量,由27改为26,保持与log-format.json一致 - 统一valueArgs数组字段顺序与数量,明确注释各字段所属类别和总计 - 修改预期参数数量计算,确保与实际字段数相符 - 更新SQL构建语句,反映26个字段的准确列数 - 调整日志打印时显示的参数数量,防止数组越界错误 - 删除log-format.json文件首尾多余的大括号,符合JSON片段格式要求
- 删除 FilterRules 和 FilterRule 相关结构与方法,实现日志过滤逻辑的代码清理 - 移除字符串匹配器 matcher.go 文件及相关接口与实现,简化项目依赖 - 从配置解析中剔除过滤规则的解析流程 - 在请求处理流程中去除基于FilterRules的日志记录控制逻辑 - 优化代码结构,减少不必要的判断与上下文存储 - 保持日志收集功能核心代码完整,减少复杂度提升性能
- 后台定时刷新协程添加刷新日志打印和缓存非空判断 - 接收日志时触发刷新添加日志打印及缓冲区大小检测 - 批量写入MySQL日志添加成功和失败详细耗时日志 - 增加max函数用于安全计算日志扫描统计 - 查询接口增强请求参数日志打印及过滤条件日志 - 记录分页和排序参数及查询各阶段操作耗时 - 查询结果解析添加错误处理及扫描耗时统计 - 查询结果返回前打印整体查询执行成功日志
- 新增支持 start_time 参数进行时间范围查询,兼容旧参数 start - 新增支持 authority 字段查询,兼容旧参数 service - 路径查询支持 path_like 进行模糊匹配,默认维持原有模糊匹配行为 - 新增 response_code 字段状态码查询,兼容旧参数 status - 分页参数 page 和 page_size 增加错误处理与合理值校验 - 限制分页大小最大值为 100,防止过大请求加载
- 新增性能测试指南文档 BENCHMARK_GUIDE.md,详细说明测试环境配置及测试流程 - 添加 batch 性能测试脚本 benchmark_batch.sh,支持批次大小、并发写入、吞吐量、边界条件等测试 - 添加 query 性能测试脚本 benchmark_query.sh,涵盖全表扫描、索引查询、分页、排序、并发及复杂查询测试 - 测试脚本包括日志格式示例、执行步骤、结果记录和性能指标分析 - 提供了测试报告保存及日志查看建议,方便结果跟踪和优化改进 - 指南与脚本覆盖 matchRules 验证、数据一致性、故障恢复与内存泄漏等多种场景 - 明确性能基准参考和优化建议,支持批量写入和查询效率提升
- 从.gitignore中移除higress-wasm-plugin-improved.yaml相关条目 - 新增higress-wasm-plugin-improved.yaml插件定义文件 - 配置插件元信息和注解,包括名称、命名空间、描述等 - 指定插件 wasm 文件下载地址及默认关闭状态 - 设置失败策略为开放,避免影响业务请求 - 定义插件执行阶段为STATS,优先级为100 - 配置匹配规则,应用于指定ingress服务 - 明确日志等级和日志搜集端点的详细参数配置
- 更新higress-wasm-plugin-improved.yaml中的WASM插件URL和重部署时间戳 - 添加备份文件,新增插件字段imagePullPolicy、phase、priority和matchRules配置 - 修正main.go中aiLog的读取方式,从WASM filter state正确读取 - 保持默认配置关闭,全局failStrategy设为FAIL_OPEN避免影响业务
- 将命名空间从 himarket-system 更改为 ls-test - 更新 wasm 插件的 redeploy 时间戳和 URL 版本 - 修改 log-collector MySQL 连接地址 - 更新诊断脚本、日志级别脚本及测试脚本中的命名空间变量 - 确保插件验证脚本使用新的命名空间配置
- 更新 wasm 插件的 redeploy-timestamp 注解和 wasm 文件 URL - 调整 ingress 配置中的目标路由地址 - 在测试脚本中添加注释,提供查询控制器日志的命令示例 - 维护备份文件中 wasm 插件版本与路由的同步更新
- 重构日志结构,增加实例ID、API名称、模型名称、消费者、路由、服务、MCP服务和MCP工具等字段 - 从Envoy属性和请求头提取丰富的监控元数据 - 优化AI日志读取逻辑,提供默认值以避免空值异常 - 添加多种解析函数,支持从路由名、请求体、认证头中解析关键信息 - 增加日志打印调试信息,方便问题排查 - 清理和合并Go模块依赖,移除部分测试依赖 - 更新WASM插件版本与配置,调整默认匹配规则和部署时间戳
- 优化消费者识别,支持Bearer完整Token、Basic认证和API Key头 - 调整MCP Server获取逻辑,简化为从路由名解析,提升准确性 - 优化MCP Tool识别,优先使用x-envoy-mcp-tool-name头信息 - 修正原有路由和路径推断方式,增加日志调试输出 - 更新WASM插件版本及对应URL,修正插件配置中的ingress列表
- 在 access_logs 表中新增 8 个监控元数据字段,扩展日志数据结构 - 为新增字段创建相关性能索引,提升查询效率 - 修改 LogEntry 结构体,新增 8 个字段映射 - 更新批量写入逻辑,支持新增字段的插入 - 增强查询接口,支持按新增监控元数据字段过滤查询 - 优化日志采集插件,完善实例ID获取逻辑及相关代码格式调整
- 优先从 Envoy 节点元数据获取 Pod 名称作为实例ID - 如无 Pod 名称,依次尝试从 Envoy 属性、请求头、节点名称获取实例ID - 添加 debug 日志记录各步骤获取的实例ID来源 - 更新插件 YAML 文件中 WASM 文件的 URL 和 redeploy 时间戳
- 支持从请求体JSON的params.name字段提取mcp_tool名称 - 添加extractToolNameFromJson函数用于解析请求体中的工具名 - 优化日志输出,区分从header/body/path中获取工具名的情况 - 更新WASM插件版本及重新部署时间戳
- 扩展 LogEntry 结构体,增加 token 使用统计字段(input_tokens、output_tokens、total_tokens) - 更新数据库写入及查询逻辑,同步支持新增的 37 个字段 - 新增 AggregationResponse、KpiData、TimeSeriesData 结构体及业务类型常量 - 新增批量 KPI、图表、表格查询的 HTTP 接口和处理函数 - 实现 KPI、图表及表格查询核心逻辑,支持多种复杂查询场景 - 增强查询过滤,支持业务类型(bizType)区分 MCP Server 与 Model API - 优化日志采集服务,支持高效批量数据聚合和统计分析
- 用 pluginlog 替换 proxywasm.Log 作为日志打印接口,统一日志输出 - 取消插件核心函数中的 log 参数,统一使用 pluginlog 包 - 调整 wrapper 调用方式,简化参数传递,统一配置解析和处理函数签名 - 统一日志打印调用,替换全部相关函数内日志调用 - 优化获取实例ID、API名、模型等辅助函数,去除日志参数并替换日志调用 - 优化 token 统计函数,去除日志参数并替换日志调用 - 清理注释和代码格式,提升代码可读性与一致性
- 直接使用数据库中的token字段进行聚合计算 - 在处理完每个时间窗口后打印日志,方便监控和调试 - 增加interval秒数参数的记录,提升日志信息完整性
- 将时间戳改为小时级别的最小开始时间 - 修正分组方式为按小时分组,而非按分钟分组 - 优化查询以统计整体、stream及非stream的QPS数据
- 编写完整的日志收集API接口说明 - 涵盖健康检查、日志上传、传统查询和批量查询 - 详细说明请求参数及响应格式 - 添加错误响应格式及性能优化建议 - 提供测试脚本及使用说明 test(scripts): 新增增强版性能与时间范围查询测试脚本 - 实现对传统查询和批量查询端点的性能测试 - 支持并发性能和大数据量测试 - 实现对时间范围查询的多格式测试 - 包含新API端点的功能验证 - 输出详细测试报告及优化建议 fix(deploy): 更新MySQL连接字符串配置 - 修正MySQL地址中的拼写错误 - 保证日志收集服务的数据库连接稳定运行 chore(wasm-plugin): 更新http-log-push插件的部署时间戳及下载URL - 更新higress.io/redeploy-timestamp注解 - 替换WASM插件的URL版本号以便重新部署
- 删除日志收集脚本 collect-logs.sh,停止支持本地日志分类保存 - 删除诊断连通脚本 diagnose-collector.sh,去除诊断辅助工具 - 移除插件旧版配置文件 higress-wasm-plugin-improved.yaml.bak - 删除日志收集器相关静态数据文件 dd-log.json - 清理 Log Collector 相关文档和性能测试指南,减少维护负担 - 彻底清理与 HTTP Log Pusher 插件相关的无用资源和文档文件
- 在获取 Envoy 属性和 AI 日志时增加 panic 恢复保护,避免插件崩溃 - 简化实例 ID 获取逻辑,优先获取 Envoy 属性,再读取请求头和节点名称 - 更新 wasm-plugin YAML 中 redeploy-timestamp 和 wasm 文件 URL,确保插件热更新生效 - 删除 verify-plugin.sh 脚本中过时的热加载等待和日志监控代码,简化验证流程 - 调整 test.sh 日志过滤关键词,更准确地捕获相关日志信息
- 移除获取AI日志时的panic恢复保护代码 - 移除获取Envoy属性时的panic恢复保护代码 - 优化getInstanceID方法,优先从Pod名称元数据获取实例ID - 若Pod名称不可用,则依次从Envoy属性、请求头及节点名称获取实例ID - 删除冗余的panic恢复保护,简化代码逻辑,提升稳定性和可读性
- 替换内置pluginlog为proxywasm及wrapper.Log,统一使用日志接口 - 修改wrapper函数调用,使用By后缀函数增强日志传递 - 精简LogEntry结构体,移除token相关字段 - parseConfig函数和回调函数增加日志参数,改用传入日志输出 - 删除tokenusage相关代码,简化token数量统计逻辑 - 各辅助获取函数均增加日志参数并调整实现,增强日志调试输出 - 统一日志格式和内容,改用LogInfo/LogError/LogDebug等标准方法 - 修正注释和代码对齐,提升代码可读性和一致性
- 移除多余依赖和代码,简化导入包结构 - 统一解析配置和HTTP处理函数签名,移除log参数传递 - 增加响应体Token统计,接入tokenusage包获取输入、输出及总Token数 - 在日志中打印Token使用情况,便于监控分析 - 调整插件元数据更新时间和WASM文件引用链接 - 优化获取实例ID、API名称、模型名称、消费者信息、路由、服务、MCP信息的函数,去除多余参数 - 保留详细请求、响应数据采集,增强日志完整性和可追踪性
- 修改端口默认值为从环境变量PORT读取 - 当PORT未设置时,使用8080作为默认端口 - 增加代码注释说明默认端口用途 - 保持服务启动日志输出端口信息
- 统一LogEntry结构体字段的格式,提升代码可读性 - 增加appendBizTypeWhereClause函数,根据业务类型动态追加查询条件 - 优化代码注释,增强可维护性和理解性
- 修改appendBizTypeWhereClause函数,简化条件逻辑,明确业务类型与mcp_tool的关系 - 更新SQL查询,确保仅统计模型调用产生的Token,排除真实MCP Server工具调用 - 改进代码注释,提升可维护性和理解性
- 优化了模型API和真实MCP调用的where条件构建,使用专门函数替代硬编码SQL - 调整了token统计查询,移除了冗余的模型非空过滤条件 - 修正消费者和服务端token统计时排除MCP工具调用的条件 - 增加buildModelNotNullCondition和buildMCPNotNullCondition函数封装过滤条件逻辑 - 优化了部分SQL格式,添加GROUP BY和ORDER BY子句规范查询结果排序
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
[RFC] Higress 轻量级日志方案:基于 HTTP 推送与 MySQL 存储
1. 背景与动机 (Motivation)
当前 Higress 的可观测性方案(如 ELK、Kafka、Prometheus + Grafana 或商业 SLS)对以下场景用户部署成本过高:
本方案目标:提供 零外部依赖、开箱即用 的日志采集能力,通过 Wasm 插件 + 轻量 Collector + MySQL 实现最小可行日志链路,同时保持插件通用性以利社区合并。
2. 架构设计 (Architecture)
采用 Side-channel Push(旁路推送) 模式,解耦数据面与采集逻辑:
核心原则:
3. 详细设计 (Detailed Design)
3.1 组件一:通用 HTTP 日志推送插件 (
request-logger-http)OnLog(请求完成后异步执行)plugins/wasm-go/extensions/request-logger-http/配置参数 (
plugin.yaml)核心逻辑
method,path,status,latency_ms,upstream_clusterproxywasm.DispatchHttpCall异步推送3.2 组件二:日志接收服务(Reference Implementation)
核心能力
/api/v1/ingestINSERT ... VALUES (...), (...)MySQL Schema
✅ 设计优势:
propertiesJSON 列适应任意 Header 扩展,避免频繁 DDL4. 接口协议 (Interface Protocol)
Wasm → Collector 通信格式
5. 性能与权衡 (Trade-offs)
6. 实施路线图 (Implementation Plan)
Phase 1: Wasm 插件(核心贡献)
request-logger-http插件(Go + TinyGo)plugins/wasm-go/extensions/request-logger-http/README.mdalibaba/higress仓库Phase 2: 参考实现与示例
examples/log-collector/目录:collector/main.go(Go 服务)docker-compose.yaml(Higress + Collector + MySQL + Grafana)grafana/dashboard.json(基础访问日志看板)docs/guides/lightweight-logging.md7. FAQ
Q: 为什么插件不直接写 MySQL?
A: 避免 Wasm 沙箱内处理 DB 连接(性能/安全风险),且丧失通用性。HTTP 推送模式可对接任意后端(如 Loki、自研系统)。
Q: 如何避免日志丢失?
A: 本方案定位“尽力而为”。生产环境建议:
Q: 是否支持其他数据库?
A: Collector 作为参考实现提供 MySQL 版本。社区可基于相同 HTTP 协议开发 PostgreSQL/SQLite 等变体。
✅ 本提案核心价值:
插件通用化(易合并) + 方案轻量化(易使用) + 实现参考化(易扩展)
欢迎社区评审与建议! 🙏
[RFC] Higress lightweight logging solution: based on HTTP push and MySQL storage
1. Background and Motivation
Current Higress observability solutions (such as ELK, Kafka, Prometheus + Grafana or commercial SLS) are too expensive to deploy for users in the following scenarios:
Goal of this solution: Provide zero external dependencies, out-of-the-box log collection capabilities, realize the minimum feasible log link through Wasm plug-in + lightweight Collector + MySQL, while maintaining plug-in versatility to facilitate community integration.
2. Architecture design (Architecture)
Adopt Side-channel Push mode to decouple the data plane and collection logic:
Core Principles:
3. Detailed Design
3.1 Component 1: Universal HTTP log push plug-in (
request-logger-http)OnLog(executed asynchronously after the request is completed)plugins/wasm-go/extensions/request-logger-http/Configuration parameters (
plugin.yaml)Core logic
method,path,status,latency_ms,upstream_clusterproxywasm.DispatchHttpCallfor asynchronous push3.2 Component 2: Log Receiving Service (Reference Implementation)
Core Competencies
/api/v1/ingestINSERT ... VALUES (...), (...)every 1 second or when 100 items are reachedMySQL Schema
✅ Design advantage:
propertiesJSON column adapts to any Header extension to avoid frequent DDL4. Interface Protocol
Wasm → Collector communication format
5. Performance and Trade-offs
6. Implementation Plan
Phase 1: Wasm plugin (core contribution)
request-logger-httpplugin (Go + TinyGo)plugins/wasm-go/extensions/request-logger-http/README.mdalibaba/higressrepositoryPhase 2: Reference implementation and examples
examples/log-collector/directory:collector/main.go(Go service)docker-compose.yaml(Higress + Collector + MySQL + Grafana)grafana/dashboard.json(basic access log dashboard)docs/guides/lightweight-logging.md7. FAQ
**Q: Why doesn’t the plug-in directly write MySQL? **
A: Avoid handling DB connections in the Wasm sandbox (performance/security risks) and loss of versatility. HTTP push mode can be connected to any backend (such as Loki, self-developed systems).
**Q: How to avoid log loss? **
A: This program is positioned as “do your best”. Recommendations for production environments:
**Q: Does it support other databases? **
A: Collector is provided as a reference implementation for MySQL. The community can develop variants such as PostgreSQL/SQLite based on the same HTTP protocol.
✅ Core value of this proposal:
Plug-in generalization (easy to merge) + Lightweight solution (easy to use) + Reference implementation (easy to expand)
Community reviews and suggestions are welcome! 🙏