ingress 日志,还能这么玩--结合阿里云日志服务统计系统访问日志

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 修改 nginx-ingress 日志,并结合阿里云日志服务制作系统访问日志统计图表。

前言

最近接到一个需求,需要展示 ingress 上面的访问日志,由于我们的业务系统都部署在 Kubernetes 上面,通过 ingress 进行访问,所以这里的访问日志,其实就是我们全部业务系统的访问日志。

日志采集方面,阿里云天生就提供了 nginx-ingress 日志和采集和展示,本身提供很多不错的基于 ingress 日志数据的图表与分析。如果你使用的是阿里云 ACK 容器服务,那么极端推荐使用,配置方法见官方文档:https://help.aliyun.com/document_detail/86532.html

image

让人头秃的是,我们这次不但要采集 ingress 日志上比较常规的 url client_ip method status 等字段,还要采集我们系统在 Request Headers 里面自定义的参数,这些参数是默认的 ingress 并不展示的,所以需要我们进行调整。

开始

首先明确需要调整的组件:

  • nginx-ingress 的 ConfigMap:用于打印自定义日志字段
  • AliyunLogConfig:这个是阿里云日志服务的 CRD 扩展,需要在这个里面加入新增的字段名和修改后的正则表达式
  • 在日志服务控制台,添加新增字段的指定字段查询
  • 新增展示仪表盘

调整 ingress 日志输出

我们 ingress 组件使用的是 nginx-ingress-container,这里要调整日志输出格式,老规矩,直接官方文档:https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/

从文档可见,只需要调整 ingress-nginx 的 ConfigMap nginx-configuration data 中的 log-format-upstream 字段即可。

官方文档里面给的说明不是很详细,没有提到 Request Headers 里自定义的字段应该怎么表示(也有可能是我眼瘸没看见),但经过我多次试验发现,Request Headers 里的字段在 log-format-upstream 中应该使用 $http_{your field} 表示,比如 $http_cookie;而带 - 的字段则需要将 - 改为 _,并且使用小写,比如 app-Id 就应使用 $http_app_id 表示。

修改 ConfigMap,ingress-controller 将进行热更新,看到如下日志,就证明配置已完成更新,接下来就可以看到你自定义字段的值已经打印出来了。

I0302 08:20:58.393365 9 controller.go:200] Backend successfully reloaded.

调整阿里云日志组件配置

执行下面的步骤请确保已经按照官方文档正确部署阿里云日志服务在您的 K8S 集群之后,并且已达到要求的版本。

日志已经成功打印了,接下来就是调整日志采集的字段了,这里只需要调整日志服务 CRD 的扩展配置即可。

$ kubectl edit AliyunLogConfig k8s-nginx-ingress

在修改配置之前,推荐先去 https://regex101.com/ 验证正则表达式是否正确,将调整过的正则表达式和 ingress-controller 打印的日志贴入下图指定位置,就可以看出正则表达式是否正确。

image

然后将添加的字段名称(这个名称将作为 key 在日志服务中展示,可以与 header 中的字段不同)和正则表达式贴入如下 CRD 中。

apiVersion: log.alibabacloud.com/v1alpha1
kind: AliyunLogConfig
metadata:
  # your config name, must be unique in you k8s cluster
  name: k8s-nginx-ingress
spec:
  # logstore name to upload log
  logstore: nginx-ingress
  # product code, only for k8s nginx ingress
  productCode: k8s-nginx-ingress
  # logtail config detail
  logtailConfig:
    inputType: plugin
    # logtail config name, should be same with [metadata.name]
    configName: k8s-nginx-ingress
    inputDetail:
      plugin:
        inputs:
        - type: service_docker_stdout
          detail:
            IncludeLabel:
              io.kubernetes.container.name: nginx-ingress-controller
            Stderr: false
            Stdout: true
        processors:
        - type: processor_regex
          detail:
            KeepSource: false
            Keys:
            - client_ip
            - x_forward_for
            - remote_user
            - time
            - method
            - url
            - version
            - status
            - body_bytes_sent
            - http_referer
            - http_user_agent
            - request_length
            - request_time
            - proxy_upstream_name
            - upstream_addr
            - upstream_response_length
            - upstream_response_time
            - upstream_status
            - req_id
            - host
            - #需要添加的字段名称
            - ...
            NoKeyError: true
            NoMatchError: true
            Regex: #修改后的正则表达式
            SourceKey: content

日志控制台新增字段

如果上面的操作无误的话,日志服务中就会展示您添加的字段了,如果配置有误,所有的自定义字段都会不显示,只会显示保留字段名称。

添加指定字段查询,就可以快速查看添加的字段了。

image

新增展示仪表盘

日志既然已经取到了,那么展示就很容易了,直接在查询栏中输入分析语句,日志服务支持 SQL 聚合日志,并直接生成统计图表,点击添加到仪表盘可以就可以添加到现有仪表盘或者新建一个仪表盘。

image

成果

之后进行一些微调,添加过滤栏,由于这里统计的是登录用户,你甚至都可以添加一个词云来看看哪些用于使用系统比较频繁。当然,想添加什么都看您的喜好,日志在你手里,想怎么分析都可以。

image

结语

本次实现的功能并不是什么高深的功能,只不过是一个简单的访问日志记录和展示,相信每个系统其实都有一套这种功能。但是这种实现方式在我看来优点更多:

  • 无代码:全程没有写一行代码,如果有的话,也就是业务需要统一 Request Headers 里面的字段。
  • 配置简单:只需要修改 nginx ConfigMap 中的一个字段,并在 CRD 中添加字段名称和正在表达式,唯一的难度可能就是正则表达式。
  • 配置快:整体的配置时间很短,加上查文档和调整图表也不过半天的时间,肯定比 提需求-评估-开发-测试-验收 全流程走一遍,前端后端撕一遍要快的多的多的多。
  • 高度定制:可以根据自己的喜好,随意定制图表。

最近发现阿里云日志服务是一个宝藏产品,从安全到 k8s 业务,从成本控制到疫情动态,日志服务真的就是把所有没有前端开发资源的服务都帮了一把。
--- 摘自本人朋友圈

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
4月前
|
自然语言处理 监控 安全
阿里云发布可观测MCP!支持自然语言查询和分析多模态日志
阿里云可观测官方发布了Observable MCP Server,提供了一系列访问阿里云可观测各产品的工具能力,包含阿里云日志服务SLS、阿里云应用实时监控服务ARMS等,支持用户通过自然语言形式查询
459 0
阿里云发布可观测MCP!支持自然语言查询和分析多模态日志
|
6月前
|
存储 消息中间件 缓存
MiniMax GenAI 可观测性分析 :基于阿里云 SelectDB 构建 PB 级别日志系统
基于阿里云SelectDB,MiniMax构建了覆盖国内及海外业务的日志可观测中台,总体数据规模超过数PB,日均新增日志写入量达数百TB。系统在P95分位查询场景下的响应时间小于3秒,峰值时刻实现了超过10GB/s的读写吞吐。通过存算分离、高压缩比算法和单副本热缓存等技术手段,MiniMax在优化性能的同时显著降低了建设成本,计算资源用量降低40%,热数据存储用量降低50%,为未来业务的高速发展和技术演进奠定了坚实基础。
240 1
MiniMax GenAI 可观测性分析 :基于阿里云 SelectDB 构建 PB 级别日志系统
|
6月前
|
存储 监控 算法
基于 PHP 语言的滑动窗口频率统计算法在公司局域网监控电脑日志分析中的应用研究
在当代企业网络架构中,公司局域网监控电脑系统需实时处理海量终端设备产生的连接日志。每台设备平均每分钟生成 3 至 5 条网络请求记录,这对监控系统的数据处理能力提出了极高要求。传统关系型数据库在应对这种高频写入场景时,性能往往难以令人满意。故而,引入特定的内存数据结构与优化算法成为必然选择。
124 3
|
6月前
|
域名解析 应用服务中间件 网络安全
阿里云个人博客外网访问中断应急指南:从安全组到日志的七步排查法
1. 检查安全组配置:确认阿里云安全组已开放HTTP/HTTPS端口,添加规则允许目标端口(如80/443),授权对象设为`0.0.0.0/0`。 2. 本地防火墙设置:确保服务器防火墙未阻止外部流量,Windows启用入站规则,Linux检查iptables或临时关闭防火墙测试。 3. 验证Web服务状态:检查Apache/Nginx/IIS是否运行并监听所有IP,使用命令行工具确认监听状态。 4. 测试网络连通性:使用外部工具和内网工具测试服务器端口是否开放,排除本地可访问但外网不可的问题。 5. 排查DNS解析:确认域名A记录指向正确公网IP,使用`ping/nslookup`验证解析正
206 2
|
6月前
|
存储 监控 安全
网络安全视角:从地域到账号的阿里云日志审计实践
网络安全视角:从地域到账号的阿里云日志审计实践
119 0
|
7月前
|
SQL 分布式计算 Serverless
基于阿里云 EMR Serverless Spark 版快速搭建OSS日志分析应用
基于阿里云 EMR Serverless Spark 版快速搭建OSS日志分析应用
130 0
|
10月前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
2769 31
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
9月前
|
监控 安全 Apache
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。
237 9
|
7月前
|
存储 SQL 关系型数据库
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log、原理、写入过程;binlog与redolog区别、update语句的执行流程、两阶段提交、主从复制、三种日志的使用场景;查询日志、慢查询日志、错误日志等其他几类日志
556 35
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log
|
6月前
|
监控 Java 应用服务中间件
Tomcat log日志解析
理解和解析Tomcat日志文件对于诊断和解决Web应用中的问题至关重要。通过分析 `catalina.out`、`localhost.log`、`localhost_access_log.*.txt`、`manager.log`和 `host-manager.log`等日志文件,可以快速定位和解决问题,确保Tomcat服务器的稳定运行。掌握这些日志解析技巧,可以显著提高运维和开发效率。
410 13

热门文章

最新文章