云日志服务 LTS
云日志服务 LTS
- 最新动态
- 功能总览
- 产品介绍
- 计费说明
- 快速入门
-
用户指南
- 授权IAM用户使用云日志服务LTS
- 购买LTS资源包
- 日志管理
-
日志接入
- 日志接入概述
- 使用ICAgent插件采集日志
-
使用云服务接入LTS
- 云服务接入LTS概述
- 应用运维管理AOM接入LTS
- API网关APIG接入LTS
- Astro轻应用接入LTS
- 云堡垒机CBH接入LTS
- 内容分发网络CDN接入LTS
- 云防火墙CFW接入LTS
- 云审计服务CTS接入LTS
- 分布式缓存服务DCS接入LTS
- 文档数据库服务DDS接入LTS
- DDoS防护 AAD接入LTS
- 分布式消息服务Kafka版接入LTS
- 数据复制服务DRS接入LTS
- 数据仓库服务GaussDB(DWS)接入LTS
- 弹性负载均衡 ELB接入LTS
- 企业路由器ER接入LTS
- 函数工作流FunctionGraph接入LTS
- 云数据库GaussDB接入LTS
- 图引擎服务GES接入LTS
- 云数据库 TaurusDB接入LTS
- 云数据库GeminiDB接入LTS
- 云数据库GeminiDB Mongo接入LTS
- 云数据库GeminiDB Cassandra接入LTS
- 华为HiLens接入LTS
- 设备接入IoTDA接入LTS
- AI开发平台ModelArts接入LTS
- MapReduce服务MRS接入LTS
- 云数据库RDS for MySQL接入LTS
- 云数据库RDS for PostgreSQL接入LTS
- 云数据库RDS for SQLServer接入LTS
- 应用与数据集成平台ROMA Connect接入LTS
- 视频直播Live接入LTS
- 消息通知服务SMN接入LTS
- 安全云脑SecMaster接入LTS
- 对象存储服务OBS接入LTS(邀测)
- 虚拟私有云VPC接入LTS
- Web应用防火墙WAF接入LTS
- 使用API接入LTS
- 使用SDK接入LTS
- 跨IAM账号接入LTS
- 使用KAFKA协议上报日志到LTS
- 使用Flume采集器上报日志到LTS
- 使用匿名写入采集日志
- 自建中间件
- 日志搜索与分析(默认推荐)
- 日志搜索与分析(管道符方式-邀测)
- 日志可视化
- 日志告警
- 日志转储
- 日志消费与加工
- LTS配置中心管理
- 查看LTS审计事件
- 最佳实践
- 开发指南
- API参考
- SDK参考
- 场景代码示例
- 常见问题
- 视频帮助
- 文档下载
- 通用参考
本文导读
展开导读
链接复制成功!
解析Nginx日志
Nginx访问日志记录了用户访问的详细信息,解析Nginx访问日志对业务运维具有重要意义。本文介绍如何使用正则表达式函数解析Nginx访问日志。
现以一条Nginx成功访问日志为例,介绍如何使用正则表达式解析Nginx成功访问日志。
- 原始日志
{"source":"192.168.0.1", "client_ip":"192.168.254.254", "receive_time":"1563443076", "content":"192.168.0.2 - - [04/Jan/2019:16:06:38 +0800] \"GET http://example.test.com/_astats?application=&inf.name=eth0 HTTP/1.1\" 200 273932 \"-\" \"Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.example.com/bot.html)\"" }
- 解析需求
- 需求1:从Nginx日志中提取出code、ip、datetime、protocol、request、sendbytes、referer、useragent、verb信息。
- 需求2:对request进行再提取,提取出uri_proto、uri_domain、uri_param信息。
- 需求3:对解析出来的uri_param进行再提取,提取出uri_path、uri_query信息。
- 加工规则
- 总编排
"""第一步:初步解析Nginx日志""" e_regex("content",r'(?P<ip>\d+\.\d+\.\d+\.\d+)( - - \[)(?P<datetime>[\s\S]+)\] \"(?P<verb>[A-Z]+) (?P<request>[\S]*) (?P<protocol>[\S]+)["] (?P<code>\d+) (?P<sendbytes>\d+) ["](?P<refere>[\S]*)["] ["](?P<useragent>[\S\s]+)["]') """第二步:解析第一步得到的request""" e_regex('request',r'(?P<uri_proto>(\w+)):\/\/(?P<uri_domain>[a-z0-9.]*[^\/])(?P<uri_param>(.+)$)') """第三步:解析第二步得到的uri_param参数""" e_regex('uri_param',r'(?P<uri_path>\/\_[a-z]+[^?]+)\?(?P<uri_query>[^?]+)')
- 总编排加工结果
{ "request": "http://example.test.com/_astats?application=&inf.name=eth0", "refere": "-", "uri_proto": "http", "code": 200, "ip": "192.168.0.2", "sendbytes": 273932, "receive_time": 1563443076, "verb": "GET", "useragent": "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.example.com/bot.html)", "source": "192.168.0.1", "content": "192.168.0.2 - - [04/Jan/2019:16:06:38 +0800] \"GET http://example.test.com/_astats?application=&inf.name=eth0 HTTP/1.1\" 200 273932 \"-\" \"Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.example.com/bot.html)\"", "datetime": "04/Jan/2019:16:06:38 +0800", "protocol": "HTTP/1.1", "uri_path": "/_astats", "uri_query": "application=&inf.name=eth0", "uri_param": "/_astats?application=&inf.name=eth0", "client_ip": "192.168.254.254", "uri_domain": "example.test.com" }
- 细分编排及对应加工结果
- 针对需求1的加工编排如下:
e_regex("content",r'(?P<ip>\d+\.\d+\.\d+\.\d+)( - - \[)(?P<datetime>[\s\S]+)\] \"(?P<verb>[A-Z]+) (?P<request>[\S]*) (?P<protocol>[\S]+)["] (?P<code>\d+) (?P<sendbytes>\d+) ["](?P<refere>[\S]*)["] ["](?P<useragent>[\S\s]+)["]')
对应加工结果:
{ "request": "http://example.test.com/_astats?application=&inf.name=eth0", "refere": "-", "code": 200, "ip": "192.168.0.2", "sendbytes": 273932, "receive_time": 1563443076, "verb": "GET", "useragent": "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.example.com/bot.html)", "source": "192.168.0.1", "content": "192.168.0.2 - - [04/Jan/2019:16:06:38 +0800] \"GET http://example.test.com/_astats?application=&inf.name=eth0 HTTP/1.1\" 200 273932 \"-\" \"Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.example.com/bot.html)\"", "datetime": "04/Jan/2019:16:06:38 +0800", "protocol": "HTTP/1.1", "client_ip": "192.168.254.254" }
- 针对需求2解析request,加工编排如下:
e_regex('request',r'(?P<uri_proto>(\w+)):\/\/(?P<uri_domain>[a-z0-9.]*[^\/])(?P<uri_param>(.+)$)')
对应加工结果:{ "uri_proto": "http", "uri_param": "/_astats?application=&inf.name=eth0", "uri_domain": "example.test.com" }
- 针对需求3解析uri_param,加工编排如下:
e_regex('uri_param',r'(?P<uri_path>\/\_[a-z]+[^?]+)\?(?P<uri_query>[^?]+)')
对应加工结果:
{ "uri_path": "/_astats", "uri_query": "application=&inf.name=eth0", }
- 针对需求1的加工编排如下:
- 总编排
父主题: 文本解析