Nginx 日志分析(三)| 学习笔记

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 快速学习 Nginx 日志分析。

开发者学堂课程【DevOps 日志分析实战 :Nginx 日志分析(三)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/736/detail/13102


Nginx 日志分析(三)

三、通过 UserAgent 判断客户端操作系统

在访问中有一个 user_agent 的字段,该字段包含客户端的 user 信息,包括其浏览器、操作系统等信息。可以用函数对该数据进行解析:

ua_parse_all 这个函数进行解析,解析完成后获得一个一个 json 对象,可以通过 e_json 再对该对象进行处理,最终的到相应的字段解析的效果,在其过程中还可以用到 e_drop_fields 做临时的字段清理。

代码为:

e_set(“ua”,ua_parse_all(v(“http_user_agent”)))

e_json(“ua”,fat=’full’,sep=’_’)

e_drop_fields(“ua”,regex=False)

先将下面两行注释,得到第一行的效果:

image.png

得到一个 json ,该 json 中包含解析的结果,可以把浏览器的信息解析出来,包括其属于哪种浏览器、版本号、版本系统等等。

ua 解析完后不是非常符合要求,因为分析时可能需要将其中的操作系统和浏览器的信息提取到第一层。所以可以使用e_json(“ua”,fat=’full’,sep=’_’)  对 json 进行处理,full 表示对全路径进行打批,然后可以使用分隔符_。

效果:

image.png

通过 e_json 后,想要的信息都解析到第一层,所以可以使用 e_drop_fields(“ua”,regex=False) 进行字段丢弃,regex=False 表示不是使用正则方式去匹配,如果要丢弃字段较多是可以使用正则的匹配方式做丢弃,效果如下:

image.png

1.非200的日志投递到指定 logstore

一般情况下,请求都是200的请求,比较正常,但是如果出现非200的请求,很可能是目录端出现了异常情况,这种情况是需要关注的,可以将非200的错误日志投递到指定的 logstore,然后后面做一个分析的告警的任务。

2.投递用到的函数:

#条件判断

e_if (*条件1如e_match(…)*,*操作1如e_regex(…)*,*条件2*,*操作2*,…)

#判断是否相等

op_ne(v(“字段名1”),v(“字段名2”))

#output 发送到目标名称,目标名称在数据加工保存任务的时候配置对应的 logstore 信息

e_output(name=”指定的目标名称”)

代码:

e_if(op_ne(v(“http_code_alias”),”2xx”),e_output(name=” http_code_bad”))

判断 http_code_alias 是否等于2xx,如果不等于则会默认继续执行,如果等于则执行后面的代码,将该日志拉取到 http_code_bad 中。到此将完整的日志处理完毕,效果如下:

image.png

输出目标变为了 nginx_log_bad,可以知道该日志属于502,属于5xx,所以投递到该目标下。默认情况下投递到 target0。

点击保存,然后创建数据加工规则,存储目标一取名为 nginx_etl ,日志处理后默认进入 target0,目标 Project 为 dsl-demo,目标库为 nginx-log-default(先创建 Logstore,名称为nginx-log-default,再建立一个异常日志的 Logstore ,名称为 nginx-log-bad 。默认情况下,流程运行完会进入第一个 Logstore)存储目标二名称为 nginx-log-bad(要与代码中内容保持一致),目标库为 nginx-log-bad。

3.投递目标完成:

image.png

然后选择加工范围,选择从选择开始加工,点击确定后创建成功。

任务创建完成后可以在左侧数据加工中查看(需要做初始化工作),还可以在 nginx-log 下的数据处理>加>nginx-etl 查看,如下图:

image.png

展示了原 Logstore 信息、目标 Logstore 信息、shard消费的点位信息,在执行状态下有数据加工的加工速率、shard 消费延迟和速率情况,如果加工过程中有报错日志会被展示在异常详情中,还有活跃 shard(加工订阅的活动列表,与基本信息中的 shard 列表一致)。

4.分别查看 nginx-log-bad 和 nginx-log-default

先分别打开索引,方便后面做查询分析信息,然后查看数据加工的状态如下:

image.png

说明已经启动,部分指标已经打印。

然后查看目标 nginx-log-bad 的内容:

image.png

说明其日志已经投递完成。

5.Logstore -查询、可视化以及报警设置

nginx-log-bad 中都是异常日志,假设要查看所有异常日志的分类,需要对 http_code_alias 这个字段添加索引,添加完成后点击设置生成索引(如下图):

image.png

然后点击自动生成索引,并且可以看到所有日志中存在的字段:

image.png

还可以登记索引,然后点击确定,索引创建完成,索引创建完成后就可以对 http_code_alias 这个字段进行统计,可以做相应的分析和告警。

建立完索引后,索引的生效是对后面新写入的数据进行生效的。

使用 select 查询

*| select http_code_alias,count(*) as c from log group by http_code_alias

得到 http_code_alias 词条,然后统计,from log 就是本 log

查询分析得到:

image.png

可以看到数据,要对该数据进行可视化,可以将其变为饼图得到:

image.png

还可以查看该饼图的属性配置:

image.png

如果想要将该饼图变为仪表盘方便后续去查看,可以点击添加到仪表盘,然后设置后点击确定:

image.png

仪表盘建立完后可以在左侧仪表盘查看,可以看到创建的仪表盘

image.png

如果想对该仪表做调整(查询时间、位置、布局、大小等等),可以点击编辑,即可对其位置进行调整。双击后还可以对 code 进行调整:

image.png

调整完后点击保存即可

如果想要对错误的 code 进行告警,可以点击仪表盘上面的告警的按钮,点击创建。告警需要关联一个仪表,可以点击添加选择仪表,该告警会使用仪表的结果作为一个表达式的告警。触发条件可以用 c 的值(例如,c>500,还需要注意中英文的符号),告警触发的频率、查询多久的范围需要根据实际情况选择,设置完成后点击下一步提升:

image.png

然后设置通知列表,这里选择邮件:

image.png

在正文内容写一条 massage ,可以引用变量信息。

点击提交,即完成了告警的配置:

image.png

告警在启用后会有统计的报表。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
1月前
|
监控 应用服务中间件 定位技术
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
115 3
|
3月前
|
PyTorch 算法框架/工具
Pytorch学习笔记(七):F.softmax()和F.log_softmax函数详解
本文介绍了PyTorch中的F.softmax()和F.log_softmax()函数的语法、参数和使用示例,解释了它们在进行归一化处理时的作用和区别。
560 1
Pytorch学习笔记(七):F.softmax()和F.log_softmax函数详解
|
5月前
|
jenkins 持续交付
jenkins学习笔记之三:使用jenkins共享库实现日志格式化输出
jenkins学习笔记之三:使用jenkins共享库实现日志格式化输出
jenkins学习笔记之三:使用jenkins共享库实现日志格式化输出
|
3月前
|
数据可视化
Tensorboard可视化学习笔记(一):如何可视化通过网页查看log日志
关于如何使用TensorBoard进行数据可视化的教程,包括TensorBoard的安装、配置环境变量、将数据写入TensorBoard、启动TensorBoard以及如何通过网页查看日志文件。
328 0
|
5月前
|
应用服务中间件 nginx
nginx error日志 client intended to send too large body: 1434541 bytes 如何处理?
【8月更文挑战第27天】nginx error日志 client intended to send too large body: 1434541 bytes 如何处理?
442 6
|
5月前
|
应用服务中间件 Linux nginx
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
|
5月前
|
存储 监控 应用服务中间件
查看nginx日志文件
器性能和提高网站可用性。掌握日志文件的路径、查看方法和基本分析技能对于任何服务器管理员来说都是必备技能。
233 1
|
5月前
|
存储 Ubuntu 应用服务中间件
如何在 Ubuntu VPS 上配置 Nginx 的日志记录和日志轮转
如何在 Ubuntu VPS 上配置 Nginx 的日志记录和日志轮转
52 4
|
5月前
|
存储 应用服务中间件 nginx
部署ELK+filebeat收集nginx日志
部署ELK+filebeat收集nginx日志
188 0
部署ELK+filebeat收集nginx日志
|
5月前
|
应用服务中间件 Linux nginx
Nginx log 日志文件较大,按日期生成 实现日志的切割
Nginx log 日志文件较大,按日期生成 实现日志的切割
1031 0