开发者学堂课程【DevOps 日志分析实战 :Nginx 日志分析(二)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/736/detail/13102
Nginx 日志分析(二)
二、code 码
注意到 http 请求中有一个 code 码,对于每一次请求表达其返回的状态,每一个 code 码有一份其真实的含义。
1.code 码的映射表为:
针对不同的 code 码,有不同的类以及其类别的英文说明。
2.http code 状态码映射
可以将该映射列表与日志 join 一起做一个日志孵化的工作,就是将该字段status扩展,将其更多信息带入日志中,方便后面做更多的分析,例如可以按照 code 码的分类的各类请求做处理,或者聚合然后告警。
孵化会用到三种算子,分别是 e_table_map(*表格对象*,” 源字段映射列表”,*目标字段列表*)(第一个参数需要传入一个表格对象,该表格对象可以通过下面两个函数来获得,该函数用来做字段富化,类似于 sql 里 join 功能),tab_parse_csv(CSV 文本数据,sep=’,’,quote=’*’)(用来把 csv 文件解析成 table 对象),res_oss_file(支持从 oss 将 csv 文件拉取,里面的参数是 oss 访问的一些参数)
3.写好的 http 状态码映射:
e_table _map(
tab_parse_csv(
res_oss_file(endpoint="oss-cn-shanghai.aliyuncs.com",
ak _id=",ak_ key=",
bucket="ali-sls-etl-test",
file="http_code.csv" , format="text2),
[("status” , code")],
[(“alias” ," http_code_alias").
(“description"," http_code_desc"),
( “category “," http_code_category")])
最外层使用 e_table_map 做孵化,第一个参数是tab 对象,该tab对象来自于 tab_parse_csv 的内容,其 csv 的内容来自 oss,有oss 访问的 endpoint、id、key、bucket,还有对应的 csv 文件以及其文件的格式。
第二个参数表示源字段映射关系,日志中状态码的字段是 status,在Servers Event 文件中名字为 code。通过 status code 映射就可以将需要去做孵化的字段做一些关联。第三个参数是目标字段映射,其中 alias、descriptioncategory分别对应表中的 alias、description、category这三个字段。这三个字段在孵化后可以取新的名字(也可以使用原始的名字)。使用快速预览时遇到孵化的场景不会真实的去拉取 oss 的文件,所以在这时快速预览会失败。
4.演示:
可以直接贴入维表数据做模拟(部分):
然后再执行一次快速预览,无报错:
有三个新的字段映射出来:http_code_alias
http_code_catogory、
http_code_dasc。
可以再进行模拟改变其中的 code ,在快速预览后的数据中可以改变,在快速预览时数据来自一个一个的 dict ,可以改变其中的301改为502,然后查看:
其 status 变为为502,http_code_alias 变为5xx
真实的连接 oss ,使用高级预览的方式(比快速预览更慢):
看到其 code 码已经被映射出来(注意:使用高级预览不能用模拟数据做修改)
注意:id 和 key 填为空,因为 http_code.csv 这个文件是 public可读的,如果是私有的权限则需要设置相应的 id 和 key。