Nginx - Stream 日志模块不完全指北

news2024/9/21 3:28:24

文章目录

  • Pre
  • 官网
  • Nginx Stream模块基础功能
  • Nginx Stream访问日志的缺陷
  • 解决方案或替代方案
    • 安装和配置nginx-log-enhancement模块
    • 1. 下载nginx-log-enhancement模块源代码
    • 2. 解压源代码
    • 3. 配置Nginx源代码
    • 4. 编译和安装Nginx
    • 5. 配置nginx-log-enhancement模块
    • 6. 重启Nginx
    • 7. 测试
  • 不同端口配置不同日志输出
      • 第一个服务器块
      • 第二个服务器块

在这里插入图片描述


Pre

Nginx - stream 模块中按时间记录日志 ngx_stream_log_module


官网

https://nginx.org/en/docs/stream/ngx_stream_log_module.html

在这里插入图片描述


Nginx Stream模块基础功能

Nginx从1.9.0版本开始引入了Stream模块,该模块支持TCP/UDP的反向代理功能。Stream模块允许Nginx处理与TCP和UDP协议相关的流量,适用于邮件代理、数据库代理等场景。自1.11.4版本开始,Nginx还增加了对Stream会话日志的支持,提供基本的连接统计信息。

Nginx Stream访问日志的缺陷

  1. 日志记录延迟

    • 问题:Nginx会在会话结束时才将日志记录到日志文件中。这意味着对于长时间保持打开的连接(如某些持久连接应用),日志记录会有显著的延迟。
    • 影响:这种延迟可能导致实时监控和及时的故障排除变得困难。
  2. 日志信息有限

    • 问题:Stream会话日志主要记录TCP层面的信息,包括会话持续时间、发送和接收的字节数等。日志不包含应用层的具体数据传输内容。
    • 影响:无法通过Stream日志获取具体的应用层操作信息,这对一些需要详细记录每个请求和响应的场景(如HTTP日志)是不够的。
  3. 缺乏内部发送日志

    • 问题:Stream会话日志不记录会话内部的具体数据包传输,例如一个socket连接建立后多次发送的心跳数据。
    • 影响:这种情况下,详细的操作记录只能在应用层实现,增加了实现的复杂性和系统负担。

解决方案或替代方案

  1. 增强日志记录机制

    • 定期记录:引入中间状态日志记录机制,定期将会话状态写入日志文件,减少日志记录的延迟。
    • 细化日志内容:在可能的情况下,增加对应用层协议(如HTTP、FTP等)的日志支持,记录更多细节。
  2. 结合应用层日志

    • 应用层日志:在应用层实现细粒度的日志记录。例如,在Web服务器应用中,可以在Nginx代理之后的应用服务器上记录详细的HTTP请求和响应日志。
    • 日志聚合:使用集中式日志管理工具(如ELK Stack, Splunk等)聚合和分析来自不同层级的日志,提供全方位的日志分析。
  3. 第三方插件或工具

    • 使用第三方插件:有一些第三方插件可以增强Nginx的日志记录功能,如Nginx第三方模块nginx-log-enhancement
    • 网络监控工具:使用专门的网络监控工具(如Wireshark, Tcpdump等)捕获和分析TCP/UDP流量,可以获得比Nginx Stream日志更详细的信息。

安装和配置nginx-log-enhancement模块

1. 下载nginx-log-enhancement模块源代码

你可以在nginx-log-enhancement的GitHub页面上找到最新的源代码。使用git工具或直接下载zip文件都可以。

2. 解压源代码

如果下载的是zip文件,解压缩至任意目录。

3. 配置Nginx源代码

在编译Nginx之前,需要将nginx-log-enhancement模块包含到Nginx的编译选项中。

cd /path/to/nginx/source
./configure --add-module=/path/to/nginx-log-enhancement

4. 编译和安装Nginx

执行make和make install命令编译和安装Nginx。

make
sudo make install

5. 配置nginx-log-enhancement模块

在Nginx的配置文件中添加日志格式和日志记录。

http {
    log_format enhanced '$remote_addr - $remote_user [$time_local] '
                        '"$request" $status $body_bytes_sent '
                        '"$http_referer" "$http_user_agent" '
                        '"$upstream_addr" "$upstream_response_time"';

    access_log /var/log/nginx/access.log enhanced;
}

这个例子中,我们使用了增强的log_format格式,并将其用于access_log指令。

6. 重启Nginx

完成配置后,重新加载或重启Nginx服务器。

sudo systemctl reload nginx

7. 测试

使用curl或浏览器访问你的网站,然后检查Nginx日志文件(在这个例子中是/var/log/nginx/access.log),确保已经开始记录增强的日志信息。

通过这些步骤,你可以安装和配置nginx-log-enhancement模块,并增强Nginx的日志记录功能。记得在部署前做好备份,并在测试通过后将配置应用到生产环境中。


不同端口配置不同日志输出

日志格式需要在stream标签内配置,与server标签同级

stream {
    log_format proxy '$remote_addr [$time_local] '
                 '$protocol $status $bytes_sent $bytes_received '
                 '$session_time "$upstream_addr" '
                 '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';
}

不同端口配置不同日志输出

这段Nginx配置定义了两个服务器块(server blocks),分别监听9100和9200端口。

第一个服务器块

server {
    listen 9100 ssl;
    access_log /opt/nginx-1.24.0/logs/tcp-ssl-access.log proxy;
    ssl_certificate   /opt/nginx-1.24.0/conf/cert/server.crt;
    ssl_certificate_key    /opt/nginx-1.24.0/conf/cert/server.key;
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
    proxy_ssl_session_reuse on; 
    ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    proxy_pass redis;
}
  • listen 9100 ssl;:配置Nginx监听9100端口,并启用SSL/TLS。
  • access_log /opt/nginx-1.24.0/logs/tcp-ssl-access.log proxy;:指定日志文件路径,用于记录访问日志,proxy表示记录代理服务器的访问日志。
  • ssl_certificate /opt/nginx-1.24.0/conf/cert/server.crt;:配置SSL证书的路径。
  • ssl_certificate_key /opt/nginx-1.24.0/conf/cert/server.key;:配置SSL证书私钥的路径。
  • ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;:指定允许的SSL/TLS协议版本。
  • proxy_ssl_session_reuse on;:启用代理服务器SSL会话重用。
  • ssl_ciphers …;:配置SSL密码套件。
  • ssl_session_cache shared:SSL:10m;:配置SSL会话缓存。
  • ssl_session_timeout 10m;:配置SSL会话超时时间。
  • proxy_pass redis;:将接收到的请求转发到redis服务器。

第二个服务器块

server {
    listen 9200;
    access_log /opt/nginx-1.24.0/logs/tcp-access.log proxy;      #日志记录
    proxy_connect_timeout 60s;
    proxy_timeout 60s;
    proxy_pass 127.0.0.1:8100;
    ssl_verify_client on;
    ssl_client_certificate /opt/nginx-1.24.0/conf/cert/ca.crt;
    proxy_ssl   on;  
    ssl_certificate   /opt/nginx-1.24.0/conf/cert/server.crt;
    ssl_certificate_key    /opt/nginx-1.24.0/conf/cert/server.key;
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
}
  • listen 9200;:配置Nginx监听9200端口。
  • access_log /opt/nginx-1.24.0/logs/tcp-access.log proxy;:指定日志文件路径,用于记录访问日志,proxy表示记录代理服务器的访问日志。
  • proxy_connect_timeout 60s;:设置连接到上游服务器的超时时间。
  • proxy_timeout 60s;:设置与上游服务器建立连接后,从上游服务器读取数据的超时时间。
  • proxy_pass 127.0.0.1:8100;:将接收到的请求转发到本地8100端口。
  • ssl_verify_client on;:启用SSL客户端证书验证。
  • ssl_client_certificate /opt/nginx-1.24.0/conf/cert/ca.crt;:配置用于验证客户端证书的CA证书路径。
  • proxy_ssl on;:启用代理服务器SSL。
  • ssl_certificate /opt/nginx-1.24.0/conf/cert/server.crt;:配置SSL证书的路径。
  • ssl_certificate_key /opt/nginx-1.24.0/conf/cert/server.key;:配置SSL证书私钥的路径。
  • ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;:指定允许的SSL/TLS协议版本。

这两个服务器块配置了Nginx监听不同的端口,并针对不同的需求进行了SSL/TLS配置、日志记录、代理转发等设置。

输出如下

==> logs/tcp-access.log <==
111.201.222.10 [18/May/2024:02:37:57 +0000] TCP 200 7490 250 22.959 "127.0.0.1:8100" "250" "7490" "0.003"
111.201.222.10 [18/May/2024:02:45:38 +0000] TCP 200 7777 824 434.695 "127.0.0.1:8100" "824" "7777" "0.001"
111.201.222.10 [18/May/2024:02:45:47 +0000] TCP 200 7478 222 5.642 "127.0.0.1:8100" "222" "7478" "0.009"

==> logs/tcp-ssl-access.log <==
127.0.0.1 [18/May/2024:02:37:57 +0000] TCP 200 7490 250 22.958 "127.0.0.1:6379" "250" "7490" "0.000"
127.0.0.1 [18/May/2024:02:45:38 +0000] TCP 200 7777 824 434.650 "127.0.0.1:6379" "824" "7777" "0.000"
127.0.0.1 [18/May/2024:02:45:47 +0000] TCP 200 7478 222 5.642 "127.0.0.1:6379" "222" "7478" "0.000"

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1685849.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

I/O '24|学习资源焕新,技术灵感升级

2024 年 5 月 15 日凌晨举行的 Google I/O 大会为各地的开发者们带来了新的灵感。面对技术革新&#xff0c;相信各位开发者们都迫不及待想要自己上手试一试。 别急&#xff0c;Google 谷歌今年为中国的开发者们准备了一份特别的学习资源&#xff0c;让开发者们自由探索新知。 G…

RedisTemplate操作Redis, 看这一篇文章就够了

文章目录 1. String 命令1.1 添加缓存1.2 设置过期时间(单独设置)1.3 获取缓存值1.4 删除key1.5 顺序递增1.6 顺序递减1.7 常用的 2. Hash命令2.1 添加缓存2.2 设置过期时间(单独设置)2.3 添加一个Map集合2.4 提取所有的小key2.5 提取所有的value值2.6 根据key提取value值2.7 获…

【VTKExamples::Texture】第六期 TextureThreshold

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享VTK样例TextureThreshold,并解析接口vtkTexture,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~Y…

20240524每日后端---------聊聊编写简历

简历 简历就是你的名片。 生活中很多朋友却不拿简历当一回事。 最近看了几十份应聘简历&#xff0c;我不得不佩服有些老哥&#xff0c;工作十来年&#xff0c;简历还是表格的格式&#xff0c;不仅看着不好看&#xff0c;而且排版还贼差。 第一感官就很差好吧。。。 好的简历 …

二叉树(详解)

在了解二叉树之前呢我们先来了解一下树形结构&#xff0c;因为二叉树就是树形结构的一种特殊情况&#xff0c;它有这非常好的性质&#xff0c;是很常用的一种结构。 目录 一.什么是树形结构&#xff1f; 二.树形结构常见的名词 三.树的存储 四.二叉树 1.二叉树的概念 2.…

python web自动化(Pytest实战)

1.UnitTest框架与Pytest框架对⽐ 1&#xff09; unittest框架介绍 Unittest则是Python语⾔的标准单元测试框架。 Unittest⽀持⾃动化测试&#xff0c;测试⽤例的初 始化、关闭和测试⽤例的聚合等功能&#xff0c;它有⼀个很重要的特性&#xff…

勒索病毒的策略与建议

随着网络技术的快速发展&#xff0c;勒索病毒攻击成为全球范围内日益严重的网络安全威胁。勒索病毒通过加密用户文件或锁定系统来勒索赎金&#xff0c;给个人和企业带来了巨大的损失。因此&#xff0c;了解如何应对勒索病毒攻击至关重要。本文将概述一些有效的防范措施和应对策…

深入Django项目实战与最佳实践

title: 深入Django项目实战与最佳实践 date: 2024/5/19 21:41:38 updated: 2024/5/19 21:41:38 categories: 后端开发 tags: Django 基础项目实战最佳实践数据库配置静态文件部署高级特性 第一章&#xff1a;Django项目架构与设计原则 Django框架概述 Django是一个高级的P…

目前流行的前端框架有哪些?

目前流行的前端框架有很多&#xff0c;它们可以帮助开发者快速构建高质量的前端应用程序。本文将介绍一些目前比较受欢迎的前端框架&#xff0c;并分析它们的优缺点。 React React 是一个由 Facebook 开发的开源前端JavaScript库&#xff0c;用于构建用户界面&#xff0c;尤其…

如何从Android恢复已删除的文件?3 种有效的方式

有时我们可能会错误地删除Android设备上的重要文件。更疯狂的是&#xff0c;Android手机上的文件在一夜之间消失了&#xff0c;我们不知道为什么。我们感到非常遗憾和恼火&#xff0c;但不知道。但是&#xff0c;此时学习如何从Android手机恢复已删除的文件为时已晚&#xff0c…

二.常见算法--贪心算法

&#xff08;1&#xff09;单源点最短路径问题 问题描述&#xff1a; 给定一个图&#xff0c;任取其中一个节点为固定的起点&#xff0c;求从起点到任意节点的最短路径距离。 例如&#xff1a; 思路与关键点&#xff1a; 以下代码中涉及到宏INT_MAX,存在于<limits.h>中…

怎么压缩pdf pdf在线压缩 pdf文件压缩大小

pdf文件无论在何种设备上打开&#xff0c;PDF文件都能保持其原始的布局和格式&#xff0c;这对于文档共享和打印非常重要。PDF不仅支持文本&#xff0c;还能嵌入图像、视频、音频以及动态链接等元素。PDF文件支持加密和密码保护&#xff0c;可以限制访问、编辑、复制或打印文档…

Dalle2学习

Dalle2 mini有GitHub库并且有网页可以直接测试

[图解]产品经理创新模式03封装领域逻辑

1 00:00:02,530 --> 00:00:06,840 第三个改进模式就是封装领域逻辑 2 00:00:06,840 --> 00:00:12,860 把人脑里面的封装的逻辑提炼出来 3 00:00:12,870 --> 00:00:13,740 放到电脑里面去 4 00:00:16,100 --> 00:00:21,440 比如说&#xff0c;销售员的&#xff0…

Zookeeper 安装教程和使用指南

一、Zookeeper介绍 ZooKeeper 是 Apache 软件基金会的一个开源项目&#xff0c;主要基于 Java 语言实现。 Apache ZooKeeper 是一个开源的分布式应用程序协调服务&#xff0c;提供可靠的数据管理通知、数据同步、命名服务、分布式配置服务、分布式协调等服务。 关键特性 分布…

《王者荣耀》4月狂揽2.34亿美元 单日流水1亿美元 全球销量第二

易采游戏网5月24日消息&#xff0c;在刚刚过去的四月&#xff0c;全球手游市场迎来了一场收益的盛宴&#xff0c;其中《王者荣耀》以其惊人的吸金能力&#xff0c;以2.34亿美元的月收入在全球手游排行榜上位列第二。4月5日&#xff0c;这款由腾讯游戏开发的多人在线战斗竞技游戏…

JS、Go、Rust 错误处理的不同 - JS 可以不用 Try/Catch 吗?

原文&#xff1a;Mateusz Piorowski - 2023.07.24 先来了解一下我的背景吧。我是一名软件开发人员&#xff0c;有大约十年的工作经验&#xff0c;最初使用 PHP&#xff0c;后来逐渐转向 JavaScript。 大约五年前&#xff0c;我开始使用 TypeScript&#xff0c;从那时起&#…

10、SpringBoot 源码分析 - 自动配置深度分析三

SpringBoot 源码分析 - 自动配置深度分析三 refresh和自动配置大致流程AutoConfigurationImportSelector的getAutoConfigurationEntry获取自动配置实体(重点)AutoConfigurationImportSelector的getCandidateConfigurations获取EnableAutoConfiguration类型的名字集合AutoConfig…

一个超级简单的Python UI库:NiceGUI

大家好&#xff0c;图形用户界面&#xff08;GUI&#xff09;的开发往往被看作是一项复杂且繁琐的任务。Python作为一门强大的编程语言&#xff0c;提供了许多优秀的库来帮助开发者实现这一目标。今天&#xff0c;我们将介绍一个名为NiceGUI的库&#xff0c;它能帮助你轻松构建…

基于Tensorflow+Keras的卷积神经网络(CNN)人脸识别

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 人脸识别是计算机视觉领域的一个重要研究方向&#xff0c;广泛应用于安全监控、身份验证、人机…