kubernetes ingress更改日志格式

kubernetes ingress更改日志格式 IngressNginx默认访问日志都输出到/var/log/nginx/access.log文件中,但是对于一般的生产环境来说,不可能把所有日志都输到一个日志文件中,一般情况都是根据域名分别输出到各个文件中。所以这里区分http指令域默认配置以及单独域名的日志的配置方式。1.默认日志格式更改为json  修改mandatory.yaml部署文件nginx-configurationConfigMap配置中log-format-upstream字段,具体修改如下:log-form

大家好,又见面了,我是你们的朋友全栈君。

 Ingress Nginx默认访问日志都输出到/var/log/nginx/access.log文件中,但是对于一般的生产环境来说,不可能把所有日志都输到一个日志文件中,一般情况都是根据域名分别输出到各个文件中。所以这里区分http指令域默认配置以及单独域名的日志的配置方式。

1.默认日志格式更改为json

  修改mandatory.yaml部署文件nginx-configuration ConfigMap配置中log-format-upstream字段,具体修改如下:

  log-format-upstream: '{"time": "$time_iso8601", "remote_addr": "$proxy_protocol_addr",
    "x-forward-for": "$proxy_add_x_forwarded_for", "request_id": "$req_id", "remote_user":
    "$remote_user", "bytes_sent": $bytes_sent, "request_time": $request_time, "status":$status,
    "vhost": "$host", "request_proto": "$server_protocol", "path": "$uri", "request_query":
    "$args", "request_length": $request_length, "duration": $request_time,"method":
    "$request_method", "http_referrer": "$http_referer", "http_user_agent": "$http_user_agent"}'

第二种:
  log-format-upstream: '{"nginx_timestamp":"$time_iso8601","clientip":"$remote_addr","nginx_host":"$server_addr","host":"$http_host","request":"$request","url":"$request_uri","upstreamhost":"$upstream_addr","status":"$status","body_bytes_sent":"$body_bytes_sent","request_time":"$request_time","upstream_response_time":"$upstream_response_time","xff":"$http_x_forwarded_for","referer":"$http_referer","http_user_agent":"$http_user_agent","request_length":"$request_length","request_method":"$request_method"}'

  注意:mandatory.yaml是官方ingress-nginx的默认安装yaml文件,其中也有configmap的配置,这是配置为空,留给运维人员自定义发挥。这里只是截出configmap的配置。(安装ingress这里不做演示,参考本人ingress安装博客)

kind: ConfigMap
apiVersion: v1
metadata:
  name: nginx-configuration
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
data:
  log-format-upstream: '{"nginx_timestamp":"$time_iso8601","clientip":"$remote_addr","nginx_host":"$server_addr","host":"$http_host","request":"$request","url":"$request_uri","upstreamhost":"$upstream_addr","status":"$status","body_bytes_sent":"$body_bytes_sent","request_time":"$request_time","upstream_response_time":"$upstream_response_time","xff":"$http_x_forwarded_for","referer":"$http_referer","http_user_agent":"$http_user_agent","request_length":"$request_length","request_method":"$request_method"}'

  部署了上述文件后,查看一下ingress-nginx的配置文件中发生了什么变化

#先将nginx配置文件拷贝出来比较容易查看
kubectl  cp -n ingress-nginx  nginx-ingress-controller-8f68db9b5-2flsq:/etc/nginx/nginx.conf /test/nginx.conf
#找到文件变化的配置文件

kubernetes ingress更改日志格式

  目前ingress-nginx配置日志文件格式为json输出已经完成了。一般默认中server指令域中如果不配置单独的日志输出,会使用http中默认的日志配置。如果需要为每一个域名独立配置文件,见如下。

2.根据域名配置访问日志输出

  这里使用一个测试网站的ingress的yaml文件来作为演示。

cat gcc-21ldj-frontend-ingress.yaml 
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: gcc-21ldj-frontend
  namespace: dev
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/configuration-snippet: |
      access_log /var/log/nginx/gcc-h5-test01.access.log upstreaminfo if=$loggable;
      # 这里直接引用了http指令域的upstreaminfo。
      error_log  /var/log/nginx/gcc-h5-test01.error.log;
      rewrite /gcc/21ldj/(.*) /$1 break;
spec:
  tls:
    - hosts:
        - gcc-h5-test01.mbgadev.cn
      secretName: mbgadev-20210908
  rules:
    - host:  gcc-h5-test01.mbgadev.cn
      http:
        paths:
          - path: /gcc/21ldj/
            backend:
              serviceName: gcc-21ldj-frontend
              servicePort: 80

  部署该ingress文件后,查看一下nginx文件的变化。

#将最新的nginx文件拷贝一下 
kubectl  cp -n ingress-nginx  nginx-ingress-controller-8f68db9b5-2flsq:/etc/nginx/nginx.conf /test/nginx.conf
#找到文件变化的配置文件

  

kubernetes ingress更改日志格式

  注:if=$loggable的含义

#参数 if,设置是否记录日志,当参数值的条件成立,即不为 0 或空时,才记录日志。
下面是ingress-nginx中的配置文件
map $status $loggable {
    ~^[23]  0;
    default 1;
}

access_log logs/access.log combined if=$loggable;
具体可参考:Nginx日志管理

3.参考

Log format – ingress-nginx-docs-cn

  Ingress配置参考:https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/nginx-configuration/configmap.md

  Ingress注释参考https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/nginx-configuration/annotations.md

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/132848.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • c语言基础知识菜鸟_c语言入门基础100题

    c语言基础知识菜鸟_c语言入门基础100题菜鸟教程之C语言基础(上)一、前言:前几天,在看另一个教程视频,总感觉太啰嗦,讲的东西不符合我想要的。这里,通过菜鸟教程,看一遍文档,打一遍笔记,想通过这样学一下C语言的基础。感谢菜鸟教程。

    2022年8月5日
    7
  • DDoS攻击模拟与Metasploitable渗透

    DDoS攻击模拟与Metasploitable渗透DDoS攻击模拟与Metasploitable渗透Part.1DDoS介绍和发展史1.DDoS:DistributedDenialofService,分布式拒绝服务攻击。2.带宽消耗型攻击,所谓带宽消耗型攻击就是攻击者将提供网络服务的正常的带宽消耗殆尽,带宽消耗殆尽后就会造成网络堵塞,从而当正常的用户与服务器进行通信时无法提供正常服务。举vps的例子,vps服务器一般都有固定的带宽,…

    2022年10月21日
    4
  • 手机发布版sha1怎么获取_android获取真实时间

    手机发布版sha1怎么获取_android获取真实时间Android安卓获取发布版SHA1生成打包密钥后打开黑窗口,进入打包密钥同级目录输入命令:keytool-list-v-keystore密钥名称例:keytool-list-v-keystoreappKey回车,输入密钥密码,获取发布版SHA1结束…

    2022年8月11日
    4
  • 一篇文章带你深入理解 Java 中的Class.getClassLoader[通俗易懂]

    一篇文章带你深入理解 Java 中的Class.getClassLoader[通俗易懂]文章目录一、ClassLoader的作用二、ClassLoader层次结构三、Class加载时调用类加载器的顺序一、ClassLoader的作用我们都知道java程序写好以后是以.java(文本文件)的文件存在磁盘上,然后,我们通过(bin/javac.exe)编译命令把.java文件编译成.class文件(字节码文件),并存在磁盘上。但是程序要运行,首先一定要把.class文件加载…

    2022年4月29日
    47
  • native/ascii在线转换工具_中文转ascii

    native/ascii在线转换工具_中文转ascii1,原理Property文件中,使用的编码根据机器的设置可能是GBK或者UTF-8。而在Java中读取Property文件时使用的是Unicode编码,编码方式不同会导致中文乱码,因此需要将Property文件中的中文字符转化成Unicode编码才能正常显示中文。2,解决办法Java提供了native2ascii这种专门的工具对Property文件进行编码转换,在JDK安装环境的bin目录下可以找…

    2025年10月26日
    2
  • 未连接到互联网代理服务器出现问题或地址有误(代理服务器的ip地址是多少)

    今天遇到一个问题:【校园网】打开电脑其实网络无法连接到安全代理服务器,本地IP地址非法,无法打开本地连接属性既看不到TCP/IP地址框。解决方法:1.重新启动计算机后发现网卡被禁用,重新启用就好了。

    2022年4月13日
    381

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号