nginx(七十八)日志的深入探究

news2024/10/7 12:27:39

一  日志

①  nginx与日志相关的指令

access_log   log_format   error_log  rewrite_log  log_subrequest  debug_connection

rewrite_log  limit_conn_log_level  limit_req_log_level  log_not_found  open_log_file_cache

uninitialized_variable_warn  log_not_found

②  关注点

1) 根据'需求',合理配置'日志格式'

2) 注意'默认'日志格式、日志级别

3) 日志能分析'哪些问题'、组成日志格式的'变量信息源是哪些模块提供的'

4) 日志转储、日志防爆、日志切割  --> "尤其证书加密的场景"

③  error_log 

1) 为精确定位nginx'错误'日志,使用自带的'error_log'指令定义错误日志目录及记录错误日志的等级

2) nginx错误日志'平时'不用太关注,但是一旦出了问题,就需要借助错误日志来'判断问题'所在

3) 注意:'无法'自定义错误日志格式;可以调整'日志级别'记录不同的错误信息;调整粗错误日志存储位置

4) 需要观察nginx的'13'个阶段,需要'debug' --> nginx -V校验'/configure --with-debug'

5) 不推荐'同一个配置段里'定义了多个error_log会产生冲突

6) 错误日志格式'不支持自定义'日志格式

nginx默认错误日志配置的信息解读   error_log /dev/null和error_log off区别

debugging log

④   nginx error_log日志调试技巧

debug_connection

需求1: 仅记录'固定ip'的错误日志

备注: 由于'error_log'无法在if指令的上下文中使用,无法通过'if ($remote='xxx')'记录

细节点: 如果在'enents'指令中配置,只能'restart',无法'reload'

需求2: 调试 nginx 'rewrite' 规则

server {
    error_log    /var/logs/nginx/example.com.error.log;
    rewrite_log on;
}

特点:开启后,它将发送'所有的 rewrite 相关'的日志信息到 error_log 文件中,使用'notice'级别

rewrite_log 

需求3: 通过 syslog 将日志发送到'统一服务器'

场景: error_log配置syslog'远程传输'

补充: 增加'syslog'一行记录'在记录nginx错误日志的同时',会'同时记录'访问日志到syslog服务器

nginx的access_log和error_log支持记录到操作系统的syslog

nginx 用syslog传输error.log到远程服务器

error_log off 指令

需求4: 使用location记录'指定URL'的日志  --> "日志排错"

server {
        error_log    /var/logs/nginx/$hostname.error.log;
        location /static {
          error_log /var/logs/nginx/static-error.log debug; 
    }         
}

⑤  log_format

1) 用于定义日志格式的 'log_format' 指令仅适用于 'http 块'级指令内

2) 所有'时间值'均以'毫秒'为单位

3) 可以在'日志格式'中定义所有的出现的'$variable'变量

  备注: 非'json'格式,推荐'content-length=[$content-length] '日志格式

4) log_format对'字符串'进行转义配置,nginx '1.11.8之后'的版本才引入该指令

 细节: escape 参数'1.11.8'允许在变量中设置 'json 或 default' 字符转义

 [1]、escape=default  --> "默认值"

 备注1: 默认'"'、'\'、'ASCII<32'、'ASCII>126',会被转义为'\xXX'的'16'进制格式

 备注2: 如果'找不到'变量值,将记录连字符"-"

 [2]、escape=json     --> 解决'非法json值'和'未转义字符串'的问题

 特点1: 所有 JSON 字符串中'不允许'的字符都将'被转义'

 特点2: 字符 '"' 和 '\' 被转义为 '\"' 和 '\\'

 特点3: 值小于 32 的字符被转义为 '\n','\r','\t'、'\b'、'\f' 或 '\u00XX'

 备注: Unicode转义'\u00XX'的编码和解码 --> '\u0000-\u00ff'

 [3]、escape=none     --> "什么字符都不转义",禁用转义

+++++++++++ "关于头部的补充说明" +++++++++++

1) '$http_name'          --> client发送给'nginx'的'原始请求头'

2) '$sent_http_name'     --> nginx'发送给'客户端的'响应头',经过'filter'之后

3) '$upstream_http_name' --> '后端'发送给'nginx'的'原始'响应头

注意: nginx'模块'提供的变量

补充: 变量'不区分'大小写,变量'脱敏' --> '$COOKIE_flag'

⑥  log_format中的escape=json

应用场景: 为了配合'ELK'做日志分析,需要将nginx的日志转为'json'格式

解决: 部分json字符串'不能正常'解析,主要体现在'非法json值'和'未转义字符串'的问题

核心点1:map的指令'创建一个变量',该变量由其它变量通过一个'映射表置换'得来

通过map脱敏在 access_log 中混淆密码

1) 在$upstream_response_time为'空'的时候返回'0',而不是'-',将该值赋值给'新变量'

map $upstream_response_time $upstream_response_timer {
    default $upstream_response_time;
    ""        0;
}

2) 'json'格式的日志

log_format json escape=json '{"@timestamp":"$time_iso8601",'
            '"@version":"1",'
            '"server_addr":"$server_addr",'
            '"upstream_response_time":$upstream_response_timer,'
            '"remote_addr":"$remote_addr"'
            '}';

细节1: 可以分开'多行'书写,只要最后一行';'结尾即可

细节2: 日志格式一定要符合'json字符串'的日志格式

细节3: 外面'单引号'包括,里面的字符串"双引号"包括

json字符串格式

⑦  access_log

'默认': access_log logs/access.log combined gzip=1 flush=64K;

备注: 只要使用'buffer or gzip'之一,日志就会'buffer' 

access_log: 用来指定日志文件的'存放路径'、'格式'和'缓存'大小

补充: 不开启'buffer'时,每条日志都'需要IO'开销

format: 定义的'某个'access_log的日志'名称'

场景: 如果每次进行'磁盘'操作,将会较多的耗费资源,基于这个情况可以'开启' nginx 日志缓冲区

效果: 缓冲区'满'或者定时写入的'时间到了',再一次写入日志

日志缓冲区'参数':'buffer'、'flush'

access_log 中'path[file]'指定'日志文件'

注意事项:

 [1]、'日志目录'中,nginx进程设置的'用户和组'必须有对该路径'创建文件'的权限

if: 通过变量'判断'日志是否记录

应用场景: 不依赖'crontab或lograte'的日志切割;'不推荐',影响效率

if ($time_iso8601 ~ "(\d{4}-\d{2}-\d{2})") {
   set $daily $1;
}
access_log /log/blog_access_$daily.log;

nginx的日志切割   escape=json解决中文乱码  日志分析的工具

PLG做nginx日志展示  根据access_log的日志格式做统计分析

⑧  open_log_file_cache  了解

⑨  log_subrequest  rewrite_log

注意: 默认都是'off'

nginx access访问日志分析

nginx -s reopen日志切割

⑩  题外话

思考:nginx什么情况'不记录'日志?

题外话:

  1) include file '相对路径为'--conf-path文件所在的目录

  2) 其它指令 file '相对路径为'--prefix所在的目录

nginx学习资料整理  借助 SSL/TLS 和 NGINX 进行 Web 流量加密

disable_symlinks   max_ranges

max_ranges 0 的时候表示'不支持range-bytes',即不支持http'断点续传'

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

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

相关文章

【重新定义matlab强大系列八】利用matlab求局部值(函数islocalmax求局部最大值+函数islocalmin求局部最小值)

&#x1f517; 运行环境&#xff1a;Matlab &#x1f6a9; 撰写作者&#xff1a;左手の明天 &#x1f947; 精选专栏&#xff1a;《python》 &#x1f525; 推荐专栏&#xff1a;《算法研究》 #### 防伪水印——左手の明天 #### &#x1f497; 大家好&#x1f917;&#x1f91…

三控开关接线方式记录

参考原视频 三控开关与双控开关的多种接法&#xff0c;多控开关的工作原理_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Qh4y1J7gC/?spm_id_from333.337.search-card.all.click&vd_sourcee821a225c7ba4a7b85e5aa6d013ac92e原视频讲的不错&#xff0c;大家可以关…

国内好用的免费AI处理工具:Chat8(实现类似ChatGPT功能、TCP/IP通讯问题)

目前国外的ChatGPT比较火&#xff0c;朋友推荐了一个chat8&#xff0c;经过使用&#xff0c;觉得还不错&#xff0c;链接如下&#xff1a; https://ai.chat86.co/go/kl/775283&#xff0c;进去后可以直接用手机注册使用&#xff0c;以下是我问其关于TCP/IP的对话过程&#xff0…

(转载)从0开始学matlab(第11天)—关系运算符和逻辑运算符

选择结构的运算由一个表达式控制的&#xff0c;这个表达式的结果只有 true(1) 和 false(0)。有两种形式的运算符可以在 MATLAB 中关系得到 true/false&#xff1a;关系运算符和逻辑运算符。跟 C 语言一样&#xff0c; MATLAB 没有布尔型和逻辑数据类型。 MATLAB 把 0 …

模块一:k8s集群部署与安全配置

模块一&#xff1a;k8s集群部署与安全配置 目录 1、K8s安全运维概述 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PST6trat-1684674016197)(https://bucket-hg.oss-cn-shanghai.aliyuncs.com/img/1665822875941-73d822c8-7bdd-481c-acc1-df97b70c…

python爬虫实战——小说爬取

python爬虫实战——小说爬取 基于requests库和lxml库编写的爬虫&#xff0c;目标小说网站域名http://www.365kk.cc/&#xff0c;类似的小说网站殊途同归&#xff0c;均可采用本文方法爬取。 目标网站&#xff1a;传送门 本文的目标书籍&#xff1a;《我的师兄实在太稳健了》…

软件设计师第4题

首先&#xff0c;我是备考2023年上半年的考试。 一、历年考试题 历年的考题如下&#xff0c;从表中分析可以看出&#xff0c;动态规划法、排序算法、回溯法、分治法是很大概率考察的算法&#xff0c;尤其是动态规划法&#xff0c;本身其理解难度较高&#xff0c;且可以出的题型…

docker:容器的数据卷

1 数据卷概念及作用 1.1 什么是容器数据卷 先来看看Docker的理念&#xff1a; 将应用与运行的环境打包形成容器运行 &#xff0c;运行可以伴随着容器&#xff0c;但是我们对数据的要求希望是持久化的容器之间希望有可能共享数据 Docker容器产生的数据&#xff0c;如果不通过…

什么是人工智能的知识图谱?知识图谱的组成、构建、应用有哪些?

人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;是一种通过计算机模拟人类智能的技术&#xff0c;其应用范围越来越广泛。知识图谱&#xff08;Knowledge Graph&#xff0c;KG&#xff09;则是人工智能技术中的重要组成部分&#xff0c;它是一种结构化…

Redis集群安装之主从集群

1.主从集群 Redis有三种集群模式&#xff0c;分别是&#xff1a;主从模式、哨兵模式、Cluster模式。Rdis最开始使用主从模式做集群&#xff0c;若master宕机需要手动配置slave转为master&#xff1b;后来为了高可用提出来哨兵模式&#xff0c;该模式下有一个哨兵监视master和s…

TCP实现HTTP服务

在之前的篇章中我们已经讲过七层参考模型了&#xff0c;今天我们从传输层实现应用层http服务 使用nodejs原生net模块就可以打通TCP传输层并且提供一个端口号进行监听 创建一个TCP服务 import net from netconst server net.createServer((socket) > {socket.on(data, (da…

【路径规划】基于人工蜂群算法的栅格法路径规划 机器人路径规划【Matlab代码#23】

文章目录 【可更换其他算法&#xff0c;获取资源请见文章第6节&#xff1a;资源获取】1. 原始ABC算法2. 机器人路径规划环境创建3. 路径规划模型建立4. 部分代码展示5. 仿真结果展示6. 资源获取 【可更换其他算法&#xff0c;获取资源请见文章第6节&#xff1a;资源获取】 1. 原…

【实时性】实时性优化的一些参数设置和心得

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

Deformable DETR 论文学习

1. 解决了什么问题&#xff1f; DETR 去除了目标检测算法中的人为设计&#xff0c;取得了不错的表现。但是其收敛速度很慢&#xff0c;对低分辨率特征识别效果差&#xff1a; 模型初始化时&#xff0c;注意力模块给特征图上所有的像素点分配的权重是均匀的&#xff0c;就需要…

chatgpt赋能Python-python5的阶乘

Python5的阶乘介绍 Python是一门广泛应用于编写脚本、自动化、爬虫、数据分析等方面的编程语言&#xff0c;也是很多科研领域使用的首选。Python的功能和灵活性可以帮助用户解决各种问题&#xff0c;而本文要介绍的是Python中计算阶乘的方法。 阶乘是数学中的一个概念&#x…

fullter 学习记录_01_插件整理

flutter学习记录第一节--搭建项目及路由的设置 1.轮播图: flutter_swiper1.1 用处1.2 导入flutter_swiper库1.3 导入库&#xff0c;运行后可能遇到的问题1.4 属性说明1.5 代码案例 2. flutter_screenutil2.1 用处2.2 引用2.3 使用说明2.4 代码实现按理2.5 ScreenUtl 的封装 1.轮…

UNIX环境高级编程——守护进程

13.1 引言 守护进程&#xff08;daemon&#xff09;是生存期长的一种进程。它们常常在系统引导装入时启动&#xff0c;仅在系统关闭时才终止。因为它们没有控制终端&#xff0c;所以说它们是在后台运行的。 13.2 守护进程的特征 系统进程依赖于操作系统实现。父进程ID为0的各…

xxs跨站之原理分类及攻击手法

xss跨站达到原理&#xff0c;危害和特点 他和语言没有太大关系&#xff0c;它大部分都是属于一个前端的漏洞&#xff0c;搭建一个简易的php网站存在xss跨站漏洞 访问这个网站&#xff0c;x1&#xff0c;就输出1&#xff0c; 如果我们把x<script>alert(1)</script&g…

系统分析师考试之论文框架

系统分析师考试之论文框架 系统分析师考试之论文框架

SpringBoot—常用注解

目录 一、注解(annotations)列表 二、注解(annotations)详解 三、JPA注解 四、springMVC相关注解 五、全局异常处理 一、注解(annotations)列表 SpringBootApplication&#xff1a; 包含了ComponentScan、Configuration和EnableAutoConfiguration注解。其中ComponentScan…