Kong日志向导

作者: fossilman | 来源:发表于2019-10-03 20:48 被阅读0次

日志等级

日志级别可以在Kong配置文件中设置,以下是日志级别的严重程度,按递增排序:debuginfonoticewarnerrorcrit

  • debug:提供了每个插件以及其他组件的调试信息,只在调试期间使用,内容过于繁琐
  • info/notice:这两个级别的日志没有太大差别,提供了正常行为的信息,大部分可以忽略
  • warn:记录异常,但是不会导致事务失败的行为
  • error:记录导致请求错误的日志(比如获得了一个500报错)
  • crit:Kong处于致命错误从而影响到多个客户端,Nginx还提供了 alertemerg 的日志级别,Kong现在将 crit 定为最高日志级别
    默认情况下,日志级别为 notice,这也是推荐的日志级别,如果觉得日志内容过于繁琐,可以提高日志级别

从Kong日志中删除指定字段

由于保护私人数据(如GDPR等)新规定的出台,用户可能需要更改记录日志的习惯,如果选用Kong作为API网关,只需在一个地方做出修改,所有的服务都会生效,这篇向导会介绍实现此目标的一个方法,另外还有其他方法可以满足其他各种需求,请注意,这些更改只会影响 Nginx 的 access log 的输出,对Kong的日志插件没有任何影响
举个例子,假设用户需要从日志中删除任何关于电子邮件地址的示例,电子邮件可能会以各种形式出现,比如 /servicename/v2/verify/alice@example.com 或者 /v3/verify?alice@example.com,为了防止这些被添加到日志中,用户需要自定义 Nginx 模板
用户可以先从这个地址获取Nginx的模板文件:https://docs.konghq.com/latest/configuration/#custom-nginx-templates-embedding-kong,或者复制下面的文件

# ---------------------
# custom_nginx.template
# ---------------------

worker_processes $; # can be set by kong.conf
daemon $;                     # can be set by kong.conf

pid pids/nginx.pid;                      # this setting is mandatory
error_log logs/error.log $; # can be set by kong.conf

events {
    use epoll; # custom setting
    multi_accept on;
}

http {
    # include default Kong Nginx config
    include 'nginx-kong.conf';

    # custom server
    server {
        listen 8888;
        server_name custom_server;

        location / {
          ... # etc
        }
    }
}

为了控制日志中的内容,我们需要在模板文件中使用 Nginx 的 map 模块,关于 map 模块的详细信息可以参考 https://nginx.org/en/docs/http/ngx_http_map_module.html,用户需要创建一个新的变量,变量的内容取决于第一个参数加上匹配的规则,格式如下:

map $paramater_to_look_at $variable_name {
    pattern_to_look_for 0;
    second_pattern_to_look_for 0;
    
    default 1;
}

在这个例子中,我们创建一个新的变量 keeplog,这个变量依赖于 $request_uri,我们将 map 指令放在 http 块的开头位置,这句话必须在 include 'nginx-kong.conf'; 这句话之前,示例中我们可以这么添加:

map $request_uri $keeplog {
    ~.+\@.+\..+ 0;
    ~/servicename/v2/verify 0;
    ~/v3/verify 0;

    default 1;
}

用户可能注意到配置文件中的每一行都是以~符号开头的,这是 Nginx 中的正则表达式语法,这个例子中我们会查找三个内容:

  • 第一行是查找 x@y.z 格式的电子邮件地址
  • 第二行是查找包含 /servicename/v2/verify 的URI地址
  • 第三行是查找包含 /v3/verify 的URI地址

现在我们需要设置日志格式,我们使用 log_format 模块,并将日志格式新命名为 show_everything,日志的内容可以根据用户需要进行定制,这个例子中,我们将内容改回Kong的标准格式

log_format show_everything '$remote_addr - $remote_user [$time_local] '
    '$request_uri $status $body_bytes_sent '
    '"$http_referer" "$http_user_agent"';

现在我们自定义的 Nginx 模板可以使用了,文件如下所示:

# ---------------------
# custom_nginx.template
# ---------------------

worker_processes $; # can be set by kong.conf
daemon $;                     # can be set by kong.conf

pid pids/nginx.pid;                      # this setting is mandatory
error_log stderr $; # can be set by kong.conf

events {
    use epoll; # custom setting
    multi_accept on;
}

http {
    map $request_uri $keeplog {
        ~.+\@.+\..+ 0;
        ~/v1/invitation/ 0;
        ~/reset/v1/customer/password/token 0;
        ~/v2/verify 0;

        default 1;
    }
    log_format show_everything '$remote_addr - $remote_user [$time_local] '
        '$request_uri $status $body_bytes_sent '
        '"$http_referer" "$http_user_agent"';

    include 'nginx-kong.conf';
}

下一步我们需要告诉Kong使用新创建的日志 show_everything,为此,我们需要修改变量 proxy_access_log,此时可以编辑 etc/kong/kong.conf 配置文件,也可以直接修改环境变量 KONG_PROXY_ACCESS_LOG

proxy_access_log=logs/access.log show_everything if=$keeplog

最后一步重启Kong,使所有更改生效,用户可以使用 kong restart 命令
现在,日志不会记录与电子邮件地址相关的任何请求,我们也可以用类似的逻辑从日志中删除任何我们不想要的内容

相关文章

  • Kong日志向导

    日志等级 日志级别可以在Kong配置文件中设置,以下是日志级别的严重程度,按递增排序:debug、info、not...

  • Kong代理向导

    简介 在这篇文档中,我们会通过详细介绍Kong的路由功能和内部工作原理来涵盖其代理功能,Kong通过两个配置项对外...

  • Kong集群向导

    简介 Kong集群允许用户横向扩展系统,添加更多机器来处理更多请求,因为它们指向同一个数据库,所有它们之间共享相同...

  • Kong插件向导

    鉴权插件 Basic Authentication 配置信息 基本描述 参数 使用详情 创建消费者 创建凭证 使用...

  • Kong鉴权向导

    简介 传入用户 upstream service 的流量(API或者微服务)通常受应用和Kong各种鉴权插件控制,...

  • Kong负载均衡向导

    简介 Kong为后台服务提供了多种负载均衡策略,一种是简单的基于 DNS 的方法,还有一种更加动态的 ring-b...

  • Kong配置项向导

    Kong配置文件 加载配置 Kong提供了一份默认配置文件,路径是 /etc/kong/kong.conf.def...

  • kong 自定义插件开发

    1、安装插件 2、kong重新加载插件 3、查看Kong的日志 4、自定义日志打印,并且采集到ELK 5、日志输出...

  • Kong命令行向导

    简介 用户可以使用CLI启动,停止和管理Kong实例、仅限于本地节点 全局标志位 所有指令都可以携带下列全局标志位...

  • Kong插件开发向导

    简介 在进一步讨论之前,这里先有必要简要阐述一下 Kong 是如何构建的,特别是它如何与Nginx集成,以及它与L...

网友评论

    本文标题:Kong日志向导

    本文链接:https://www.haomeiwen.com/subject/cejzectx.html