zoukankan      html  css  js  c++  java
  • kubernetes ingress更改日志格式

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

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

      修改mandatory.yaml部署文件nginx-configuration ConfigMap配置中log-format-upstream字段,具体修改如下:
      注意: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
    #找到文件变化的配置文件

      目前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
    #找到文件变化的配置文件
      

      注:if=$loggable的含义

    #参数 if,设置是否记录日志,当参数值的条件成立,即不为 0 或空时,才记录日志。
    下面是ingress-nginx中的配置文件
    map $status $loggable {
        ~^[23]  0;
        default 1;
    }
    
    access_log logs/access.log combined if=$loggable;
    具体可参考:Nginx日志管理

    3.参考

      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

    作者:小家电维修

    相见有时,后会无期。

  • 相关阅读:
    修改element ui 默认样式最好的解释
    python全栈开发day92-day96 Vue总结
    跨域资源共享 CORS 详解(转自阮一峰博客)
    Vue axios 返回数据绑定到vue对象问题
    Vue爬坑之路
    input标签checkbox选中触发事件的方法
    python中super的理解(转)
    Django时区的解释
    django 视图函数返回queryset对象或日期对象至浏览器ajax接收的写法
    python全栈开发day87~91-整个流程梳理、CRM功能、知识点梳理
  • 原文地址:https://www.cnblogs.com/lizexiong/p/15050188.html
Copyright © 2011-2022 走看看