Kubernetes Ingress NGINX Controller 日志可视化

摘要:

Ingress NGINX Controller是一个Kubernetes上的Ingress控制器,它可以将外部流量路由到K8s集群内的服务。主要提供7层路由能力,是目前K8sHTTP/HTTPS服务的主流暴露方式。当Ingress NGINX Controller处理访问请求时,会将相关信息记录在日志中,例如请求的URL、状态码等。有了这些数据信息,对业务系统的流量分析,包括问题定位都有极大的帮助。

image.png

接下来我们将介绍如何收集Ingress NGINX Controller的日志,并将日志存储在Elasticsearch中,然后使用Grafana进行展示可视化展示及分析。如各服务的PVUV、访问最多的IP地址、最常请求的资源、历史趋势等。

日志收集

我们集群的管理日志使用filebeat收集,只需要简单配置就能收集到Ingress NGINX Controller的日志,并且filebeat有专门的模块解析Ingress NGINX Controller日志的字段,都不需要自己写gork解析日志字段。

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: kube-logging
  name: filebeat-config
  labels:
    app: filebeat
data:
  filebeat.yml: |-
    filebeat.config:
      inputs:
        # Mounted `filebeat-inputs` configmap:
        path: ${path.config}/inputs.d/*.yml
        # Reload inputs configs as they change:
        reload.enabled: true
        reload.period: 10s
      modules:
        path: ${path.config}/modules.d/*.yml
        # Reload module configs as they change:
        reload.enabled: false 
        xpack.monitoring.enabled: true
 
    # 使用filebeat autodiscover收集ingress nginx controller的日志
    filebeat.autodiscover:
      providers:
        - type: kubernetes
          templates:
            - condition:
                equals:
                  kubernetes.namespace: "ingress-nginx"
              config:
                - module: nginx
                  ingress_controller:
                    enabled: true
                    input:
                      type: container
                      paths:
                        - /var/log/containers/*-${data.kubernetes.container.id}.log
                      ignore_older: 48h
                      fields_under_root: true
                      fields:
                        servicetype: "k8s_ingress_log"

收集到日志后配置outputElasticsearch

    output.elasticsearch:
      hosts: ["elasticsearch:9200"]
      indices:
        - index: "k8s-ingress-log-%{+yyyy.MM.dd}"
          when.contains:
            servicetype: "k8s_ingress_log"

Ingress NGINX Controller 日志分析

image-20231101192902396.png

日志入库后就可以检索了。

这些访问日志通常包含URL、源IPUserAgent、状态码、入/出流量、响应时间等,数据量大、信息价值也比较高。从这些信息中,我们能够分析出非常多的信息:

  • 服务访问的PVUV
  • 访问的客户端IP信息
  • 访问的错误比例
  • 后端服务的响应延迟
  • 不同URL访问分布
  • 恶意攻击分析

当然还可以进行服务来源的地域分析,但我们的服务访问基本都发生在内网之间,所以就不做这部分的信息分析了。

有了这些信息,就可以很轻松应对业务同事的各种数据统计已经问题定位的需求了。比如面前我们有位业务系统小姐姐同事找我要访问响应状态码,统计接口的调用量,查看请求的转发等等。

Ingress 可视化

我们根据收集到的日志数据,定制了几个可视化看板:总体概览、TOPPV & UV、趋势展示、报表分析。所有可视化看板均可通过单一服务过滤,亦可根据业务系统实际场景进行定制化调整。

总体概览

总体概览看板主要展示当前集群的整体状态,主要包括以下几类信息:

  • 整体状态,包括:PVUV、处理时间、平均响应时间等
image-20231101202921347.png

TOP

TOP则可统计展示源IPUserAgentURL等比较多的信息。

image-20231101203719194.png

趋势展示

趋势展示可以分析请求数、状态码等信息的时间趋势。

image-20231101204536577.png

报表分析

最后可以根据各种需求场景,做一些统计报表。

image-20231101205019226.png
image-20231101205126377.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容