跳到主要内容
版本:3.9.x

配置集中式日志记录

API7 网关会生成多种日志,用于调试和运维。生产环境建议将日志转发到 Elasticsearch、Splunk 或 AWS CloudWatch 等集中式日志管理系统。

日志类型和位置

数据面日志

数据面会产生错误日志和访问日志。默认配置使用相对于网关安装前缀的路径:

日志类型说明默认目标
错误日志网关启动事件、插件错误、上游故障和核心错误。logs/error.log
访问日志网关处理的每个请求一行。logs/access.log

在非容器部署中,这些目标就是安装前缀下的普通文件。而在官方容器镜像中,解析后的路径 /usr/local/apisix/logs/error.log/usr/local/apisix/logs/access.log 是指向 /dev/stderr/dev/stdout 的符号链接,网关 Helm Chart 也直接写入这两个设备路径。因此默认的容器部署没有可供读取的普通访问日志和错误日志文件,应改为采集容器输出。

两个目标都可以在 config.yaml 中配置,请参阅下文的配置日志文件

控制面日志

控制面(控制台和 DP Manager)会将结构化日志输出到对应容器的标准输出:

docker logs <api7-ee-dashboard-container>
docker logs <api7-ee-dp-manager-container>

配置创建、更新、删除、登录和角色变更等管理操作会单独记录在审计日志中,并可在控制台查看。

配置日志文件

数据面的 config.yaml 使用以下配置项控制日志位置和错误日志详细程度:

conf/config.yaml
nginx_config:
error_log: logs/error.log
error_log_level: warn # debug, info, notice, warn, error, crit, alert, emerg
http:
enable_access_log: true
access_log: logs/access.log
access_log_format: '$remote_addr - $remote_user [$time_local] $http_host "$request_line" $status $body_bytes_sent $request_time "$http_referer" "$http_user_agent" $upstream_addr $upstream_status $upstream_response_time "$apisix_request_id"'
access_log_format_escape: default # default or json

上例展示的是默认目标。相对路径以网关安装前缀为基准解析。若要在官方容器镜像中写入普通文件,请选择 /usr/local/apisix/logs/ 以外的路径,例如 /var/log/apisix/access.log/var/log/apisix/error.log;启动网关前需要先创建该目录、授予网关进程写权限,并在该路径挂载卷。

修改后请重新加载或重启网关。

使用 JSON 访问日志格式

为了便于日志采集器解析,可以使用 JSON 格式并将转义方式设为 json

conf/config.yaml
nginx_config:
http:
access_log_format: '{"time_local":"$time_local","remote_addr":"$remote_addr","status":"$status","request_time":"$request_time","upstream_status":"$upstream_status","request":"$request"}'
access_log_format_escape: json

如需在每行访问日志中包含消费者标签,请参阅在访问日志中包含消费者标签

将日志转发到集中式系统

有两种互补方式:

如果 API7 网关运行在 Kubernetes 上,并且需要收集容器输出中的网关错误日志,请参阅将 Kubernetes 错误日志发送到 Splunk

后续步骤