Skip to content

This content is not available in your language yet.

HiMarket 集成了阿里云 SLS(日志服务)提供可观测能力,支持基于访问日志的指标聚合、图表展示和日志检索。本手册将指导您完成 SLS 可观测功能的配置。

以下情况适合使用 SLS 方案:

  • 使用阿里云商业化 AI 网关(阿里云 AI 网关或者飞天企业版),开启 SLS 投递即可(开箱即用)
  • 使用开源 Higress,通过配置 ai-statistics 插件和日志采集,投递到阿里云 SLS

如果您不使用阿里云环境,可以选择 使用数据库实现可观测 方案。

  • 可观测大盘:模型调用统计、MCP 工具调用统计、请求成功率、响应时间等
  • 日志查询:支持自定义 SQL 查询访问日志
  • 认证方式:支持 STS(默认)和 AK/SK 两种认证方式
  • 自动降级:SLS 未配置时自动返回空数据,不影响系统正常运行
  • 使用开源 Higress,需要进行如下配置
  • 使用阿里云商业化 AI 网关(阿里云/飞天企业版),则无需进行以下配置,只需要开启日志投递即可。

在开始配置前,您需要在阿里云 SLS 控制台准备以下资源:

  1. 登录阿里云 SLS 控制台
  2. 创建 Project(例如:apigateway-csb-cop
  3. 在 Project 下创建 Logstore(例如:apig-access-log

将网关访问日志采集到上述 logstore。建议使用 higress 2.1.9 及以上版本,accesslogformat 已优化,适配了 HiMarket 可观测大盘。

日志格式包含以下关键字段:

基础字段:

  • __time__: 时间戳
  • response_code: 响应状态码
  • duration: 请求耗时
  • method: 请求方法
  • consumer: 调用者标识
  • route_name: 路由名称
  • upstream_cluster: 上游服务

AI 相关字段(JSON 格式的 ai_log 字段):

  • model: 模型名称
  • api: API 名称
  • input_token: 输入 Token 数
  • output_token: 输出 Token 数
  • response_type: 响应类型(stream/normal)
  • llm_service_duration: LLM 服务耗时
  • cache_status: 缓存状态(hit/miss/skip)
  • token_ratelimit_status: 限流状态
  • mcp_tool_name: MCP 工具名称

HiMarket 提供了自动索引更新接口,启动后会自动配置索引(AK/SK 需要具备创建索引权限)

  • 文本字段methodconsumerroute_nameupstream_cluster
  • 数值字段durationbytes_receivedbytes_sentresponse_code
  • JSON 字段ai_log(开启 JSON 索引,包含上述 AI 相关字段)

准备 AK/SK 认证凭证:

AK/SK(推荐用于开发测试环境)

  1. 登录阿里云控制台
  2. 进入 AccessKey 管理页面
  3. 创建或获取 AccessKey ID 和 AccessKey Secret
  4. 确保该 AccessKey 具有 SLS 读取权限

HiMarket 的 SLS 配置全部通过环境变量注入,无需修改配置文件。application.yml 中已预置了环境变量占位符和默认值:

环境变量说明默认值
SLS_ENDPOINTSLS 服务端点(必填),格式:<region>.log.aliyuncs.com空(未配置时自动降级返回空数据)
SLS_AUTH_TYPE认证方式STS
SLS_ACCESS_KEY_IDAccessKey ID(AK_SK 模式必填)
SLS_ACCESS_KEY_SECRETAccessKey Secret(AK_SK 模式必填)
SLS_DEFAULT_PROJECTSLS Project 名称apigateway-csb-cop
SLS_DEFAULT_LOGSTORESLS Logstore 名称apig-access-log
OBSERVABILITY_LOG_SOURCE日志数据源类型SLS

SLS_AUTH_TYPE 支持两种值:STS(适用于阿里云 ECS/ACK 等有实例角色的环境)和 AK_SK(适用于开发测试或非阿里云环境)。

根据部署方式选择对应的配置方法:

Terminal window
export SLS_ENDPOINT="cn-hangzhou.log.aliyuncs.com"
export SLS_AUTH_TYPE="AK_SK"
export SLS_ACCESS_KEY_ID="your-access-key-id"
export SLS_ACCESS_KEY_SECRET="your-access-key-secret"
# 以下两项如果与默认值一致可省略
export SLS_DEFAULT_PROJECT="apigateway-csb-cop"
export SLS_DEFAULT_LOGSTORE="apig-access-log"

docker-compose.ymlenvironment 中添加:

services:
himarket-server:
environment:
- SLS_ENDPOINT=cn-hangzhou.log.aliyuncs.com
- SLS_AUTH_TYPE=AK_SK
- SLS_ACCESS_KEY_ID=your-access-key-id
- SLS_ACCESS_KEY_SECRET=your-access-key-secret

通过 Secret 或 ConfigMap 注入上述环境变量。推荐将 AK/SK 存入 Secret:

apiVersion: v1
kind: Secret
metadata:
name: himarket-sls-secret
type: Opaque
stringData:
SLS_ACCESS_KEY_ID: "your-access-key-id"
SLS_ACCESS_KEY_SECRET: "your-access-key-secret"
---
# 在 Deployment 中引用
env:
- name: SLS_ENDPOINT
value: "cn-hangzhou.log.aliyuncs.com"
- name: SLS_AUTH_TYPE
value: "AK_SK"
- name: SLS_ACCESS_KEY_ID
valueFrom:
secretKeyRef:
name: himarket-sls-secret
key: SLS_ACCESS_KEY_ID
- name: SLS_ACCESS_KEY_SECRET
valueFrom:
secretKeyRef:
name: himarket-sls-secret
key: SLS_ACCESS_KEY_SECRET

启动 HiMarket 后查看日志,确认 SLS 配置加载成功:

Terminal window
# 开发环境
mvn clean install -pl himarket-bootstrap -am
cd himarket-bootstrap && mvn spring-boot:run
# 生产环境
java -jar himarket-bootstrap/target/himarket-bootstrap.jar

启动成功时日志输出:

INFO c.a.h.config.ObservabilityConfig - Observability log source: SLS
INFO c.a.h.config.ObservabilityConfig - SLS endpoint: cn-hangzhou.log.aliyuncs.com, project: apigateway-csb-cop, logstore: apig-access-log, authType: AK_SK

如果 SLS_ENDPOINT 未配置,会输出以下警告(不影响系统运行,可观测接口会返回空数据):

WARN c.a.h.config.ObservabilityConfig - SLS endpoint is not configured! Queries will return empty results.

ai-statistics 插件配置示例:

- config:
attributes:
- apply_to_log: true
default_value: unknown
key: consumer
value: x-mse-consumer
value_source: request_header
- apply_to_log: true
key: fallback_from
value: x-higress-fallback-from
value_source: request_header
- apply_to_log: true
apply_to_span: true
as_separate_log_field: true
key: question
trace_span_key: gen_ai.input.messages
value: messages.@reverse.0.content
value_source: request_body
- apply_to_log: true
apply_to_span: true
as_separate_log_field: true
key: answer
rule: append
trace_span_key: gen_ai.input.messages
value: choices.0.delta.content
value_source: response_streaming_body
- apply_to_log: true
apply_to_span: true
as_separate_log_field: true
key: answer
trace_span_key: gen_ai.input.messages
value: choices.0.message.content
value_source: response_body
configDisable: false
ingress:
- ai-route-higress-qwen-max.internal

ai-statistics 插件配置示例

- config:
attributes:
- apply_to_log: true
key: jsonrpc_version
value: x-envoy-jsonrpc-version
value_source: request_header
trace_span_key: network.protocol.version
apply_to_span: true
- apply_to_log: true
key: jsonrpc_id
value: x-envoy-jsonrpc-id
value_source: request_header
trace_span_key: rpc.jsonrpc.request_id
apply_to_span: true
- apply_to_log: true
key: jsonrpc_method
value: x-envoy-jsonrpc-method
value_source: request_header
trace_span_key: mcp.method.name
apply_to_span: true
- apply_to_log: true
key: jsonrpc_params
value: x-envoy-jsonrpc-params
value_source: request_header
trace_span_key: mcp.arguments
apply_to_span: true
- apply_to_log: true
key: jsonrpc_result
value: x-envoy-jsonrpc-result
value_source: response_header
- apply_to_log: true
apply_to_span: true
attribute_key: tool.name
key: mcp_tool_name
value: x-envoy-mcp-tool-name
value_source: request_header
trace_span_key: mcp.tool.name
apply_to_span: true
- apply_to_log: true
apply_to_span: true
attribute_key: tool.parameters
key: mcp_tool_arguments
value: x-envoy-mcp-tool-arguments
value_source: request_header
- apply_to_log: true
key: mcp_tool_response
value: x-envoy-mcp-tool-response
value_source: response_header
- apply_to_log: true
key: mcp_tool_error
value: x-envoy-mcp-tool-error
value_source: response_header
configDisable: false
ingress:
- mcp-server-travel.internal

pre-request 插件配置示例

apiVersion: extensions.higress.io/v1alpha1
kind: WasmPlugin
metadata:
annotations:
name: pre-request.internal
namespace: himarket-system
spec:
imagePullPolicy: Always
matchRules:
- config:
stage: request
configDisable: false
ingress:
- mcp-server-travel.internal
phase: AUTHN
priority: 1000
url: oci://higress-registry.cn-hangzhou.cr.aliyuncs.com/plugins/jsonrpc-converter:1.0.0

pre-response 插件配置示例:

apiVersion: extensions.higress.io/v1alpha1
kind: WasmPlugin
metadata:
annotations:
name: pre-response.internal
namespace: himarket-system
spec:
imagePullPolicy: Always
matchRules:
- config:
stage: response
configDisable: false
ingress:
- mcp-server-travel.internal
phase: UNSPECIFIED_PHASE
priority: 1000
url: oci://higress-registry.cn-hangzhou.cr.aliyuncs.com/plugins/jsonrpc-converter:1.0.0

插件优先级调整:

pre-request(json-converter):
phase: AUTHN
priority: 1000
key-auth:
phase: AUTHN
priority: 310
ai-statistics:
phase: AUTHN
priority: 100
pre-response(json-converter):
phase: UNSPECIFIED_PHASE
priority: 1000
mcp-server:
phase: UNSPECIFIED_PHASE
priority: 999
ai-security-guard:
phase: UNSPECIFIED_PHASE
priority: 850

HiMarket 内置了丰富的预设查询场景,涵盖模型大盘、MCP 大盘等:

场景标识说明适用大盘
pv总请求次数模型、MCP
uv独立调用者数量模型、MCP
fallback_countFallback 请求数模型
bytes_received网关入流量(MB)MCP
bytes_sent网关出流量(MB)MCP
input_token_total输入 Token 总数模型
output_token_total输出 Token 总数模型
token_totalToken 总数模型
场景标识说明适用大盘
qps_stream流式 QPS模型
qps_normal非流式 QPS模型
qps_total总体 QPS模型
success_rate请求成功率模型、MCP
token_per_sec_input输入 Token/s模型
token_per_sec_output输出 Token/s模型
token_per_sec_total总 Token/s模型
rt_avg_total平均响应时间(整体)模型
rt_avg_stream平均响应时间(流式)模型
rt_avg_normal平均响应时间(非流式)模型
rt_first_token首包响应时间模型
cache_hit/miss/skip缓存命中/未命中/跳过模型
ratelimited_per_sec限流请求数/s模型
qps_by_status按状态码分组的 QPSMCP
qps_total_simple总 QPSMCP
rt_avg平均响应时间MCP
rt_p99/p95/p90/p50P99/P95/P90/P50 响应时间MCP
场景标识说明适用大盘
model_token_table模型 Token 使用统计模型
consumer_token_table消费者 Token 使用统计模型
service_token_table服务 Token 使用统计模型
error_requests_table错误请求统计模型
ratelimited_consumer_table限流消费者统计模型
risk_label_table风险类型统计模型
risk_consumer_table风险消费者统计模型
method_distributionMethod 分布MCP
gateway_status_distribution网关状态码分布MCP
backend_status_distribution后端状态码分布MCP
request_distribution请求分布MCP
场景标识说明
filter_service_options实例列表
filter_api_optionsAPI 列表
filter_model_options模型列表
filter_route_options路由列表
filter_consumer_options消费者列表
filter_upstream_options上游服务列表
filter_mcp_tool_optionsMCP 工具名称列表
filter_mcp_server_optionsMCP Server 列表

原因分析:

  • SLS 未配置(endpoint 为空)
  • Project 或 Logstore 不存在
  • 时间范围内无日志数据
  • 认证信息错误

解决方法:

  1. 检查配置文件或环境变量是否正确设置
  2. 查看应用日志,确认 SLS 配置加载状态
  3. 登录 SLS 控制台确认 Project 和 Logstore 存在
  4. 使用 SLS 控制台查询验证数据是否存在
  5. 验证 AccessKey 权限是否包含 SLS 读取权限

原因分析:

  • 时间范围过大
  • 日志量过大
  • 索引未配置或配置不当

解决方法:

  1. 缩小查询时间范围
  2. 在 SLS 控制台为 Logstore 配置索引
  3. 使用预设场景而非复杂自定义查询
  4. 增加 interval 参数减少数据点数量

原因分析:

  • 日志字段映射不匹配
  • 索引配置不正确
  • SQL 语法错误

解决方法:

  1. 确认日志字段名称与预设 SQL 一致
  2. 检查 JSON 字段(如 ai_log)是否开启 JSON 索引
  3. 查看应用日志获取实际执行的 SQL
  4. 在 SLS 控制台手动执行 SQL 验证

错误日志:

ERROR c.a.h.s.g.f.SlsClientFactory - Failed to create SLS client
LogException: AccessKeyId is required

解决方法:

  1. 确认环境变量已正确设置
  2. 确认 auth-typeAK_SK
  3. 确认 AccessKey ID 和 Secret 无误
  4. 确认 AccessKey 未被禁用或过期
  • 不要将 AccessKey 直接写入配置文件
  • 使用环境变量或 Kubernetes Secret 管理敏感信息
  • 定期轮换 AccessKey
  • 遵循最小权限原则,仅授予 SLS 读取权限
  • 合理设置查询时间范围,避免一次查询超过 7 天
  • 配置索引提升查询性能
  • 使用预设场景而非复杂自定义查询
  • 增大 interval 减少时序图数据点
  • 按需配置 Logstore 存储周期
  • 合理设置日志采集规则,避免采集无用日志
  • 使用 SLS 的数据生命周期管理功能
  • 在 SLS 控制台配置查询异常告警
  • 监控 HiMarket 应用日志中的 SLS 相关错误
  • 定期检查 SLS 使用量和费用
区域Endpoint
华东1(杭州)cn-hangzhou.log.aliyuncs.com
华东2(上海)cn-shanghai.log.aliyuncs.com
华北1(青岛)cn-qingdao.log.aliyuncs.com
华北2(北京)cn-beijing.log.aliyuncs.com
华北3(张家口)cn-zhangjiakou.log.aliyuncs.com
华南1(深圳)cn-shenzhen.log.aliyuncs.com
西南1(成都)cn-chengdu.log.aliyuncs.com

更多区域请参考:https://help.aliyun.com/document_detail/29008.html