开发者学堂课程【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)
先将下面两行注释,得到第一行的效果:
得到一个 json ,该 json 中包含解析的结果,可以把浏览器的信息解析出来,包括其属于哪种浏览器、版本号、版本系统等等。
ua 解析完后不是非常符合要求,因为分析时可能需要将其中的操作系统和浏览器的信息提取到第一层。所以可以使用e_json(“ua”,fat=’full’,sep=’_’) 对 json 进行处理,full 表示对全路径进行打批,然后可以使用分隔符_。
效果:
通过 e_json 后,想要的信息都解析到第一层,所以可以使用 e_drop_fields(“ua”,regex=False) 进行字段丢弃,regex=False 表示不是使用正则方式去匹配,如果要丢弃字段较多是可以使用正则的匹配方式做丢弃,效果如下:
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 中。到此将完整的日志处理完毕,效果如下:
输出目标变为了 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.投递目标完成:
然后选择加工范围,选择从选择开始加工,点击确定后创建成功。
任务创建完成后可以在左侧数据加工中查看(需要做初始化工作),还可以在 nginx-log 下的数据处理>加>nginx-etl 查看,如下图:
展示了原 Logstore 信息、目标 Logstore 信息、shard消费的点位信息,在执行状态下有数据加工的加工速率、shard 消费延迟和速率情况,如果加工过程中有报错日志会被展示在异常详情中,还有活跃 shard(加工订阅的活动列表,与基本信息中的 shard 列表一致)。
4.分别查看 nginx-log-bad 和 nginx-log-default
先分别打开索引,方便后面做查询分析信息,然后查看数据加工的状态如下:
说明已经启动,部分指标已经打印。
然后查看目标 nginx-log-bad 的内容:
说明其日志已经投递完成。
5.Logstore -查询、可视化以及报警设置
nginx-log-bad 中都是异常日志,假设要查看所有异常日志的分类,需要对 http_code_alias 这个字段添加索引,添加完成后点击设置生成索引(如下图):
然后点击自动生成索引,并且可以看到所有日志中存在的字段:
还可以登记索引,然后点击确定,索引创建完成,索引创建完成后就可以对 http_code_alias 这个字段进行统计,可以做相应的分析和告警。
建立完索引后,索引的生效是对后面新写入的数据进行生效的。
使用 select 查询
*| select http_code_alias,count(*) as c from log group by http_code_alias
得到 http_code_alias 词条,然后统计,from log 就是本 log
查询分析得到:
可以看到数据,要对该数据进行可视化,可以将其变为饼图得到:
还可以查看该饼图的属性配置:
如果想要将该饼图变为仪表盘方便后续去查看,可以点击添加到仪表盘,然后设置后点击确定:
仪表盘建立完后可以在左侧仪表盘查看,可以看到创建的仪表盘
如果想对该仪表做调整(查询时间、位置、布局、大小等等),可以点击编辑,即可对其位置进行调整。双击后还可以对 code 进行调整:
调整完后点击保存即可
如果想要对错误的 code 进行告警,可以点击仪表盘上面的告警的按钮,点击创建。告警需要关联一个仪表,可以点击添加选择仪表,该告警会使用仪表的结果作为一个表达式的告警。触发条件可以用 c 的值(例如,c>500,还需要注意中英文的符号),告警触发的频率、查询多久的范围需要根据实际情况选择,设置完成后点击下一步提升:
然后设置通知列表,这里选择邮件:
在正文内容写一条 massage ,可以引用变量信息。
点击提交,即完成了告警的配置:
告警在启用后会有统计的报表。