1. 配置详情

log_format json '{
    "time_local": "$time_iso8601",         # 本地时间,格式为 ISO 8601
    "msec": $msec,                         # 当前时间的毫秒数
    "remote_addr": "$remote_addr",         # 客户端的 IP 地址
    "remote_user": "$remote_user",         # 客户端的用户名(如果有通过 HTTP 基本认证提供)
    "body_bytes_sent": $body_bytes_sent,   # 发送给客户端的主体内容的字节数
    "content_length": "$content_length",   # 请求的 Content-Length 头部字段的值
    "upstream_response_length": "$upstream_response_length", # 来自上游服务器的响应长度
    "upstream_addr": "$upstream_addr",     # 处理请求的上游服务器的地址
    "upstream_connect_time": "$upstream_connect_time", # 与上游服务器建立连接的时间
    "bytes_sent": $bytes_sent,             # 发送给客户端的总字节数
    "request_length": $request_length,     # 请求的总长度(包括请求行、请求头和请求主体)
    "connection_requests": $connection_requests, # 当前连接处理的请求数
    "http_status": $status,                # 响应的 HTTP 状态码
    "schema": "$scheme",                   # 请求的协议(HTTP 或 HTTPS)
    "uri": "$uri",                         # 请求的 URI
    "http_cookie": "$http_cookie",         # 请求头中的 Cookie 信息
    "request_uri": "$request_uri",         # 请求的完整 URI,包括参数
    "query_string": "$query_string",       # 请求的查询字符串
    "method": "$request_method",           # 请求的方法(GET、POST 等)
    "request_time": $request_time,         # 处理请求所用的时间
    "upstream_response_time": "$upstream_response_time", # 上游服务器响应的时间
    "upstream_status": "$upstream_status", # 上游服务器响应的 HTTP 状态码
    "http_host": "$http_host",             # 请求头中的 Host 字段的值
    "http_referrer": "$http_referer",      # 请求头中的 Referer 字段的值
    "http_x_forwarded_for": "$http_x_forwarded_for", # 请求头中的 X-Forwarded-For 字段的值
    "sla_appname": "$cookie_sla_appname",  # 来自 Cookie 的 sla_appname 字段的值
    "http_user_agent": "$http_user_agent", # 请求头中的 User-Agent 字段的值
    "host": "$host",                       # 请求头中的 Host 字段的值
    "request": "$request",                 # 请求行,包括方法、URI 和 HTTP 版本
    "server_addr": "$server_addr",         # 处理请求的服务器的 IP 地址
    "request_id": "$http_x_request_id"     # 请求头中的 X-Request-ID 字段的值
}';

log_format json '
{
    "time_local": "$time_iso8601",
    "msec": $msec,
    "remote_addr": "$remote_addr",
    "remote_user": "$remote_user",
    "body_bytes_sent": $body_bytes_sent,
    "content_length": "$content_length",
    "upstream_response_length": "$upstream_response_length",
    "upstream_addr": "$upstream_addr",
    "upstream_connect_time": "$upstream_connect_time",
    "bytes_sent": $bytes_sent,
    "request_length": $request_length,
    "connection_requests": $connection_requests,
    "http_status": $status,
    "schema": "$scheme",
    "uri": "$uri",
    "http_cookie": "$http_cookie",
    "request_uri": "$request_uri",
    "query_string": "$query_string",
    "method": "$request_method",
    "request_time": $request_time,
    "upstream_response_time": "$upstream_response_time",
    "upstream_status": "$upstream_status",
    "http_host": "$http_host",
    "http_referrer": "$http_referer",
    "http_x_forwarded_for": "$http_x_forwarded_for",
    "sla_appname": "$cookie_sla_appname",
    "http_user_agent": "$http_user_agent",
    "host": "$host",
    "request": "$request",
    "server_addr": "$server_addr",
    "request_id": "$http_x_request_id"
}';

2. 配置应用

2.1 nginx

access_log /log/web-slb/nginx/access.log json;

2.2 ingress-nginx

需要使用 log-format-escape-json: 'true' 开启json方式

kind: ConfigMap
apiVersion: v1
metadata:
  name: ingress-nginx-controller
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
    app.kubernetes.io/version: 1.1.2
    helm.sh/chart: ingress-nginx-4.0.18
  annotations:
data:
  log-format-escape-json: 'true'
  log-format-upstream: |-
    {
        "time_local": "$time_iso8601",         # 本地时间,格式为 ISO 8601
        "msec": $msec,                         # 当前时间的毫秒数
        ............
    }