华为云用户手册

  • 服务范围 服务覆盖范围 本专业服务覆盖自动驾驶上云实施服务(自动驾驶数据迁移/标注/仿真地图生成/场景生成/合规采集)、视频、 自然语言处理 文字识别 、语音分析集成实施服务、热线感知算法开发实施服务、 智能问答机器人 问答实例开发服务、12345热线图谱集成实施服务、视频算法现场工勘服务、三方应用集成服务、三方算法集成服务,提供针对上述服务的部署方案设计、部署实施和集成对接等内容。 服务不覆盖范围 本服务不覆盖AI咨询、AI优化与提升、AI辅助运营、客户侧应用程序改造、应用程序开发等涉及客户业务系统的开发等内容。
  • 服务交付件 集成实施与开发支持服务 L6服务名称 交付件 视频分析算法集成实施服务 《视频分析算法集成实施方案》 自然语言处理算法集成实施服务 《自然语言处理算法集成实施方案》 文字识别算法集成实施服务 《文字识别算法集成实施方案》 语音分析算法集成实施服务 《语音分析算法服务实施方案》 热线感知算法开发实施服务 《热线感知算法开发实施方案》 智能流程机器人产品规划设计与安装实施服务 《部署方案》 智能 问答机器人 问答实例开发服务 《智能问答机器人问答实例开发服务实施方案》 智能流程机器人流程实例开发服务 《XXX测试报告》 《xxx工作流设计方案》 12345热线图谱集成实施服务 《12345热线图谱集成实施方案》 现场工勘调测服务 L6服务名称 交付件 视频算法现场工勘服务 《视频算法现场工勘报告》 三方集成服务(视频算法) L6服务名称 交付件 三方应用集成服务 《三方应用集成方案》 三方算法集成服务(1-3个算法对接) 《三方算法(1-3个算法对接)集成方案》 自动驾驶上云与实施服务 L6服务名称 交付件 自动驾驶上云与实施服务包 《自动驾驶上云与实施服务包实施方案》 自动驾驶数据迁移服务 《自动驾驶数据迁移实施方案》 自动驾驶标注服务 《自动驾驶标注实施方案》 自动驾驶仿真地图生成服务 《自动驾驶仿真地图生成实施方案》 自动驾驶仿真场景生成服务 《自动驾驶仿真场景生成实施方案》 自动驾驶合规采集服务 《自动驾驶合规采集实施方案》 自动驾驶虚实结合仿真实施服务 《自动驾驶虚实结合仿真实施方案》 自动驾驶技术支持服务 《自动驾驶技术支持服务方案》
  • 服务内容 服务项 服务内容 全域感知算法集成实施 提供视频分析、语音分析、NLP自然语言处理、 OCR文字识别 、热线感知等算法的部署方案设计与算法对接等服务,涵盖场景数据获取与分析、环境开通与部署问题排查等。 机器人规划设计与安装实施 提供流程机器人、问答机器人部署方案设计、完成该算法的集成实施,并指导上层应用完成算法API调用。 热线图谱集成实施 面向热线工单关联关系挖掘、疑难工单等场景,调研客户环境和数据,形成基于热线图谱的相对应的开发和部署方案,完成该算法适配训练、部署实施和问题排查,提供工单图谱能力,保证算法被上层应用调用获取分析结果,使能业务闭环。 视频算法工勘服务 针对企业/政府单位需求在现场进行工勘、选点、摄像头角度\高度调试等实施服务。 三方应用集成服务 指导企业/政府单位基于城市智能中枢,完成华为云外的三方AI应用的集成对接。 三方算法集成服务 指导企业/政府单位基于城市智能中枢,完成华为云外的三方AI算法上架工作。 自动驾驶上云与实施服务 提供客户系统与八爪鱼自动驾驶云服务的集成调测、数据迁移,自动驾驶数据标注、仿真地图生成、仿真场景生成、自动驾驶数据合规采集、自动驾驶虚实结合仿真、自动驾驶技术支持等服务。
  • aPaaS上云与实施服务可以提供哪些服务? aPaaS平台上云与实施 服务规格 服务内容 适用场景 aPaaS平台设计部署实施(每20实例) 针对一定规格(20个实例)的aPaaS平台及产品提供设计部署实施服务:服务核心内容包括:应用资源规划,服务产品安装&服务部署,功能验证等内容,保障aPaaS平台的高效部署上线。 客户希望对aPaaS平台做安装部署,集成对接等有诉求。 aPaaS平台对接服务(每20实例) 针对一定规格(20个实例)的aPaaS平台及产品提供平台对接服务,包括账号系统对接:aPaaS平台及产品和客户的运维、运营、账号权限系统做对接,内容包括:和客户的运营、运维、账号权限管理系统的集成开发工作。包括不限于,应用/模型/任务等统计信息的上报,系统日志、指标、告警上报,账号权限配置,接口对接开发等内容。 aPaaS平台工具集成服务(每20实例) 针对一定规格(20个实例)的aPaaS平台及产品提供工具的集成服务:针对未预集成工具(包括不限于训推+数据)的对接和验证。 智能制造aPaaS上云与实施服务 服务规格 服务内容 适用场景 智能制造aPaaS集成对接服务 基于智能制造云平台完成平台业务应用与周边系统的集成对接与数据打通等工作。 客户希望对智能制造集成对接有诉求,期望打通企业制造数字化系统。 父主题: 关于服务咨询
  • 服务范围 服务覆盖范围 aPaaS平台上云与实施 aPaaS平台设计部署实施(每20实例)提供针对aPaaS平台的部署依赖、组网依赖分析和设计,及平台自身的部署。 aPaaS平台对接服务(每20实例)提供aPaaS平台与客户现有系统的对接能力,需要是aPaaS平台支持的对接方。 aPaaS平台工具集成服务(每20实例)提供aPaaS与客户现有工具的集成,需要是aPaaS支持集成的工具。 智能制造aPaaS上云与实施服务 智能制造云aPaaS平台上云与实施,提供的是针对平台及提供的生产制造模块的部署、设计,及周边系统与平台本身的集成。 智能制造aPaaS集成对接服务提供aPaaS与客户现有工具的集成,需要是aPaaS平台支持集成的工具。 服务不覆盖范围 在提供专业服务时按照合同确定的内容进行服务,超出范围的符合技术支持无法提供,例如服务内容不覆盖客户aPaaS平台硬件的改造、客户原有软件系统的升级等。 服务区域 中国。
  • 服务内容 aPaaS平台上云与实施 华为云aPaaS平台上云与实施服务,依托华为云aPaaS平台,为客户aPaaS平台的高效部署上线,与客户现有系统的对接集成,实现运营、运维能力、账号权限管控等提供保障;为客户集成现有系统的能力工具,支持aPaaS平台的高效使用和应用的开发提供保障,加速应用的开发。 服务规格 服务内容 适用场景 aPaaS平台设计部署实施(每20实例) 针对一定规格(20个实例)的aPaaS平台及产品提供设计部署实施服务:服务核心内容包括:应用资源规划,服务产品安装&服务部署,功能验证等内容,保障aPaaS平台的高效部署上线。 客户希望对aPaaS平台做安装部署,集成对接等有诉求。 aPaaS平台对接服务(每20实例) 针对一定规格(20个实例)的aPaaS平台及产品提供平台对接服务,包括账号系统对接:aPaaS平台及产品和客户的运维、运营、账号权限系统做对接,内容包括:和客户的运营、运维、账号权限管理系统的集成开发工作。包括不限于,应用/模型/任务等统计信息的上报,系统日志、指标、告警上报,账号权限配置,接口对接开发等内容。 aPaaS平台工具集成服务(每20实例) 针对一定规格(20个实例)的aPaaS平台及产品提供工具的集成服务:针对未预集成工具(包括不限于训推+数据)的对接和验证。 智能制造aPaaS上云与实施服务 华为云智能制造aPaaS上云与实施服务,依托华为云智能制造云平台,为客户实现平台及生产制造模块的高效实施上线,与客户现有业务系统的对接集成,支持智能制造云aPaaS平台的高效使用和生产制造模板应用的开发集成提供保障。 服务规格 服务内容 适用场景 智能制造aPaaS集成对接服务 基于智能制造云平台完成平台业务应用与周边系统的集成对接与数据打通等工作。 客户希望对智能制造集成对接有诉求,期望打通企业制造数字化系统。
  • 责任矩阵 共同责任 双方商定并确认aPaaS上云与实施服务的具体的业务需求范围及目标。 双方商定并确认aPaaS上云与实施服务的项目管理计划。 双方商定并确认aPaaS上云与实施服务的方案内容并评审。 华为责任 华为须依照责任矩阵完成需求调研、方案设计和交付实施。 华为云得到客户授权后,授权数据仅限用于aPaaS上云与实施服务中涉及的服务内容,不得超出限定范围。 客户责任 客户指派一位项目负责人协助华为云aPaaS上云与实施服务的需求调研和实施。此负责人应负责双方之协调及管理,负责审核、验收华为云提供的服务。 责任分工矩阵表 aPaaS平台上云与实施 以下为职责描述案例,可酌情修改。 R=责任方/Responsibility S=协助方/Support 序号 业务流程 工作内容 华为 客户 1 需求调研 详细调研客户需求,双方协商服务范围 R S 2 方案设计 针对客户需求进行aPaaS平台上云与实施的方案设计,输出SOW R S 3 交付实施 根据SOW进行aPaaS平台上云与实施交付 R S 4 客户验收 对交付内容进行验收确认 S R 智能制造aPaaS上云与实施服务 以下为职责描述案例,可酌情修改。 R=责任方/Responsibility S=协助方/Support 序号 业务流程 工作内容 华为 客户 1 需求调研 详细调研客户需求,双方协商服务范围 R S 2 方案设计 针对客户需求进行智能制造aPaaS上云与实施服务的方案设计,输出SOW R S 3 交付实施 根据SOW进行智能制造aPaaS上云与实施服务交付 R S 4 客户验收 对交付内容进行验收确认 S R
  • 服务交付件 aPaaS平台上云与实施 服务名称 交付件 aPaaS平台设计部署实施(每20实例) aPaaS平台设计部署实施集成与开发测试报告 aPaaS平台对接服务(每20实例) aPaaS平台对接服务集成与开发测试报告 aPaaS平台工具集成服务(每20实例) aPaaS平台工具集成服务集成与开发测试报告 智能制造aPaaS上云与实施服务 服务名称 交付件 智能制造aPaaS集成对接服务 智能制造aPaaS上云与实施集成验收测试报告
  • 字典构建 不同字典构建方式对比参考如下: 表1 不同字典构建方式对比 构建方式 优点 缺点 直接构建 直观、简单、方便。 如果内容较多,规则会相对冗长。且静态不灵活。 从任务配置资源构建 内容较多且经常修改时推荐使用,易于维护。 不易于扩展和跨任务复用,不支持自动刷新。 从表格构建 高级场景下使用,维护机制更灵活。 需要构建和维护对应的表格,过程相对繁琐。 从字典函数构建 基于逻辑动态构建字典,特定场景下适用。 较为高级,不易于维护。 从其他表达式构建 从日志事件的字段中动态提取映射关系,特定场景下适用。 较为高级,不易于维护。 直接构建 e_dict_map({"400": "error", "200": "ok", "*": "other"}, "status", "message") 从任务高级配置构建 e_dict_map(res_local("http_code_map"), "status", "message") 其中http_code_map是任务高级配置项,值为: 从表格构建 使用tab_to_dict从表格构建。而表格的构建参见本文后面的表格构建。 e_dict_map(tab_to_dict(tab_parse_csv("status_code,status_info\n400,error\n200,ok\n*,other"), "status_code", "status_info"), "status", "message") 从字典函数构建 e_dict_map(dct_make("400", "error", "200", "ok", "*", "other"), "status", "message") 从其他表达式构建 e_dict_map(json_parse(v("http_code_map")), "status", "message") 此处从源日志的http_code_map字段中获取映射关系。
  • 表格构建 不同表格构建方式对比参考如下: 表2 不同表格构建方式对比 构建方式 优点 缺点 从文本构建 直观、简单、方便。 如果内容较多,规则会相对冗长。不易于维护、扩展和复用。 从OBS资源构建 内容较多且不常修改时推荐使用,易于维护。 编写相对复杂。 从文本构建 e_table_map(tab_parse_csv("city,name,age\nshanghai,baixiao,10\ncity:nanjing,Maki,18"), "name",["city", "age"]) 从OBS资源构建 e_search_table_map(tab_parse_csv(res_obs_file("https://obs.xxx.myhuaweicloud.com","dsl-test-xx","data.csv")), "name",["city", "age"]) 其中data.csv是obs中的文件,值为: e_search_table_map(tab_parse_csv(res_obs_file("https://obs.xxx.myhuaweicloud.com","dsl-test-xx","data.csv")), "name",["city", "age"])
  • 使用e_search_dict_map函数进行数据富化 本案例介绍使用e_search_dict_map函数完成数据富化的方法。 原始日志 [{ "http_host": "example.com", "http_status": 200, "request_method": "GET" }, { "http_host": "example.org", "http_status": 201, "request_method": "POST" }, { "http_host": "example.net", "http_status": 404, "request_method": "GET" }] 加工需求 根据日志中的http_status字段的值的不同,为每条日志添加不同的type信息。 为http_status为2XX的日志,添加type字段,并将字段值设置为正常。 为http_status为3XX的日志,添加type字段,并将字段值设置为重定向。 为http_status为4XX的日志,添加type字段,并将字段值设置为错误。 加工规则 e_search_dict_map({"http_status:2??": "正常","http_status:3??": "重定向","http_status:4??": "错误"}, "http_status", "type") 加工结果 { "http_status": "正常", "request_method": "GET", "http_host": "example.com" } { "http_status": "正常", "request_method": "POST", "http_host": "example.org" } { "http_status": "错误", "request_method": "GET", "http_host": "example.net" }
  • 使用e_dict_map函数进行数据富化 本案例介绍使用e_dict_map函数完成数据富化的方法。 原始日志 [{ "http_host": "example.com", "http_status": 300, "request_method": "GET" }, { "http_host": "example.org", "http_status": 200, "request_method": "POST" }, { "http_host": "example.net", "http_status": 400, "request_method": "GET" }, { "http_host": "huaweicloud.com", "http_status": 500, "request_method": "GET" }] 加工需求 将http_status字段中的请求状态码转化为文本格式,并添加到status_desc字段中。 加工规则 e_dict_map({"400": "请求错误", "500": "服务器错误", "300": "跳转", "200": "成功"}, "http_status", "status_desc") 在实际情况中,HTTP请求状态码不止以上4种,详情请参见HTTP请求状态码。当http_status字段的值为401、404时,需要更新字典覆盖,否则无法匹配。 加工结果 { "status_desc": "跳转", "http_status": 300, "request_method": "GET", "http_host": "example.com" } { "status_desc": "成功", "http_status": 200, "request_method": "POST", "http_host": "example.org" } { "status_desc": "请求错误", "http_status": 400, "request_method": "GET", "http_host": "example.net" } { "status_desc": "服务器错误", "http_status": 500, "request_method": "GET", "http_host": "huaweicloud.com" }
  • 背景信息 日志服务数据加工映射富化函数包括普通映射函数和搜索映射函数,两者区别如下所示: 普通映射函数使用文本完全匹配方式来映射。普通映射函数包括e_dict_map函数和e_table_map函数,两者区别在于e_dict_map函数接收的是dict类型的数据,e_table_map函数接收的是通过资源函数获取的table类型的数据。 例如:在nginx日志中,将特定的状态码转换为文本格式,可以使用普通映射函数e_dict_map。 状态码 文本 200 成功 300 跳转 400 请求错误 500 服务器错误 搜索映射函数的映射关键字是查询字符串,支持正则表达式匹配、完全匹配、模糊匹配等形式。搜索映射函数包括e_search_dict_map函数和e_search_table_map函数,两者区别在于e_search_dict_map函数接收的是dict类型的数据,而e_search_table_map函数接收的是通过资源函数获取的table类型的数据。 例如:在nginx日志中,将一定范围内的状态码转换为文本格式,可以使用搜索映射函数e_search_dict_map。 状态码 文本 2XX 成功 3XX 跳转 4XX 请求错误 5XX 服务器错误
  • 实践案例 原始日志 { "account":"Sf24asc4ladDS" } OBS Bucket中的 CS V文件数据 表1 CSV文件数据 id account nickname 1 Sf24asc4ladDS 多弗朗明哥 2 Sf24asc4ladSA 凯多 3 Sf24asc4ladCD 罗杰 CSV文件需要是UNIX文件格式,windows文件格式暂不支持。 加工规则 通过原始日志中的account字段和OBS CSV文件中的account字段进行匹配,只有account字段的值完全相同,才能匹配成功。匹配成功后,返回OBS CSV文件中的nickname字段和字段值,与原始日志中的数据拼接,生成新的数据。 e_table_map(tab_parse_csv(res_obs_file("https://obs.xxx.myhuaweicloud.com","dsl-test-xx","data.csv")),"account","nickname") res_obs_file函数重要字段说明如下表所示,更多参数说明请参见资源函数。 字段 说明 endpoint obs访问 域名 ,详情请参见res_obs_file。 bucket 用于存储CSV文件的OBS Bucket。 file 目标OBS文件的路径。例如test/data.txt,不能以正斜线(/)开头。 加工结果 { "nickname": "多弗朗明哥", "account": "Sf24asc4ladDS" }
  • 背景信息 OBS是华为云提供的一个高可靠、高性能、高安全的基于对象的海量存储云服务。针对更新不频繁的数据,建议您存储在OBS上,只需要支付少量的存储费用即可。当您分散存储数据,面临日志数据不完善时,您可以从OBS中获取数据。日志服务数据加工支持使用res_obs_file函数从OSS中获取数据,再使用tab_parse_csv函数构建表格,最后使用e_table_map函数进行字段匹配,返回指定字段和字段值,生成新的日志数据。
  • 场景2:银行卡信息脱敏 日志中包含银行卡或者信用卡信息,可采用正则表达式,运用regex_replace函数脱敏。 原始日志 { "content":"bank number is 491648411333978312 and credit card number is 4916484113339780" } 加工规则 e_set( "bank_number", regex_replace( v("content"), r"([1-9]{1})(\d{14}|\d{13}|\d{11})(\d{4})", replace=r"****\3" ), ) 加工结果 { "bank_number": "bank number is ****8312 and credit card number is ****9780", "content": "bank number is 491648411333978312 and credit card number is 4916484113339780" }
  • 场景6:身份证脱敏 日志中包含身份证信息,可同时运用regex_replace函数,对身份证号进行正则捕获后而脱敏。 原始日志 content: Id card is 111222190002309999 加工规则 e_set( "id_encrypt", regex_replace(v("content"), r"\b\d{17}(\d|X)\b", replace=r"\1****") ) 加工结果 { "id_encrypt": "Id card is 9****", "content": "Id card is 111222190002309999" }
  • 场景9:字符串脱敏 若希望日志中的关键字符串不被暴露,可通过str_translate函数制定映射规则,对关键字符或字符串进行映射脱敏。 原始日志 { "content": "message level is info_" } 加工规则 e_set("data_translate", str_translate(v("content"),"aeiou","12345")) 加工结果 { "data_translate": "m2ss1g2 l2v2l 3s 3nf4_", "content": "message level is info_" }
  • 场景3:邮箱地址脱敏 日志中包含邮箱信息,可采用正则表达式,运用regex_replace函数脱敏。 原始日志 { "content":"email is username@example.com" } 加工规则 e_set( "email_encrypt", regex_replace( v("content"), r"[A-Za-z\d]+([-_.][A-Za-z\d]+)*(@([A-Za-z\d]+[-.])+[A-Za-z\d]{2,4})", replace=r"****\2", ), ) 加工结果 { "content": "email is username@example.com", "email_encrypt": "email is ****@example.com" }
  • 场景8:订单号脱敏 对日志内容中的订单号做脱敏处理,同时不希望其他人能够解码,可运用MD5编码函数,对订单号进行编码。 原始日志 { "orderId": "20210101123456" } 加工规则 e_set("md5_orderId",md5_encoding(v("orderId"))) 加工结果 { "orderId": 20210101123456, "md5_orderId": "9c0ab8e4d9f4eb6fbd5c508bbca05951" }
  • 背景信息 使用敏感数据包括手机号、银行卡号、邮箱、IP地址、AK、身份证号、网址、订单号、字符串等场景中,您需要为敏感数据进行脱敏操作。在日志服务数据加工服务中,常见的脱敏方法有正则表达式替换(关键函数regex_replace)、Base64转码(关键函数base64_encoding)、MD5编码(关键函数md5_encoding)、str_translate映射(关键函数str_translate)等。更多信息,请参见正则表达式函数和编码解码函数。
  • 场景5:IP地址脱敏 日志中包含IP地址信息,可同时运用regex_replace函数,对IP地址进行正则捕获后而脱敏。 原始日志 { "content":"ip is 192.0.2.10" } 加工规则 e_set("ip_encrypt",regex_replace(v('content'), r"((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])", replace=r"****")) 加工结果 { "content": "ip is 2.0.2.10", "ip_encrypt": "ip is ****" }
  • 场景1:手机号脱敏 日志中包含不希望被暴露的手机号,可采用正则表达式,运用regex_replace函数脱敏。参考如下示例: 原始日志 { "iphone":"13900001234" } 加工规则 e_set( "sec_iphone", regex_replace(v("iphone"), r"(\d{0,3})\d{4}(\d{4})", replace=r"\1****\2"), ) 加工结果 { "sec_iphone": "139****1234", "iphone": 13900001234 }
  • 场景7:网址脱敏 对日志内容中的网址做脱敏处理,并且将脱敏的数据转成明文格式,可运用Base64编码解码函数,对网址进行转码。 原始日志 { "content":"https://www.huaweicloud.com/" } 加工规则 e_set("base64_url",base64_encoding(v("content"))) 加工结果 { "base64_url": "aHR0cHM6Ly93d3cuaHVhd2VpY2xvdWQuY29tLw==", "content": "https://www.huaweicloud.com/" } 如果想对base64_url进行解码,可以使用base64_decoding(v("base64_url"))DSL语法规则。
  • 日期时间偏移 处理函数 dt_add函数的参数如下: dt_add(字段名, dt1=None, dt2=None, year(s)=None, month(s)=None, day(s)=None, hour(s)=None, minute(s)=None, second(s)=None, microsecond(s)=None, weeks(s)=None, weekday=None) year(s)、month(s)、day(s)等参数的后面都带有s,表示这些参数可以有两种形式,即year和years,month和months等。以year和years为例,如果参数传递的是year,表示在年份粒度上覆盖为year参数的值;如果传递的是years,表示在年份粒度上增加years参数的值。同时要一起组合使用的dt_add函数支持在特定时间粒度上修改(增加、减少、覆盖)日期时间的值。 dt_add中weekday参数通常和dt_MO、dt_TU等参数一起使用,表示特定星期几的偏移,如下例所示。 场景1:按年和月进行日期偏移。 原始日志 { "time1" : "2019-06-04 2:41:26" } 加工规则1 e_set("time2", dt_add(v("time1"), year=2018)) 加工结果1 { "time1": "2019-06-04 2:41:26", "time2": "2018-06-04 02:41:26" } 加工规则2 e_set("time2", dt_add(v("time1"), years=2018)) 加工结果2 { "time1": "2019-06-04 2:41:26", "time2": "4037-06-04 02:41:26" } 场景2:按周进行日期偏移。 原始日志:2019-06-04是周二 { "time1" : "2019-06-04 2:41:26" } 加工规则 #time1的下一个星期一对应的日期 e_set("nex_Monday", dt_add(v("time1"), weekday=dt_MO(1))) #time1的上一个星期二对应的日期 e_set("previous_Tuesday", dt_add(v("time1"), weekday=dt_TU(op_neg(1)))) #time1的下下一个星期六对应的日期 e_set("nex_next_Saturday", dt_add(v("time1"), weekday=dt_SA(2))) #time1的上上一个星期日对应的日期 e_set("previous_previous_Sunday", dt_add(v("time1"), weekday=dt_SU(op_neg(2)))) 加工结果 { "time1": "2019-06-04 2:41:26", "previous_Tuesday": "2019-05-28 02:41:26", "previous_previous_Sunday": "2019-05-26 02:41:26", "nex_next_Saturday": "2019-06-15 02:41:26", "nex_Monday": "2019-06-10 02:41:26" } 父主题: 使用DSL加工函数处理日期时间
  • 日期时间对象和日期时间字符串的相互转换 处理函数 dt_parse智能转换函数可以将日期时间字符串或Unix时间戳转换为日期时间对象。 dt_astimezone函数返回一个带新时区信息的日期时间对象。 场景1:不带时区信息的日期时间字符串转换成指定时区的日期时间对象。 对于不带时区信息的日期时间字符串2019-06-02 18:41:26,可以通过Unix时间戳,实现不同时区下的日期时间的相互转换。将洛杉矶时区的日期时间转换为上海时区的日期时间。 原始日志:已知time字段的值的时间是洛杉矶时间 { "time" : "2019-06-04 2:41:26" } 加工规则 e_set("timestamp", dt_parsetimestamp(v("time"), tz="America/Los_Angeles")) e_set("Shanghai_time", dt_parse(v("timestamp"), tz="Asia/Shanghai")) 加工结果 { "Shanghai_time": "2019-06-04 17:41:26+08:00", "time": "2019-06-04 2:41:26", "timestamp": 1559641286 } 场景2:不带时区的日期时间字符串转换成带时区的日期时间对象。 原始日志 { "time" : "2019-07-10 06:58:19" } 加工规则 e_set("new_time", dt_parse(v("time"), tz="Asia/Shanghai")) 加工结果 { "new_time": "2019-07-10 06:58:19+08:00", "time": "2019-07-10 06:58:19" } 场景3:带时区的日期时间字符串转换为目标时区的日期时间对象。 原始日志 { "time" : "2019-06-04 2:41:26+08:00" } 加工规则 e_set("new_time",dt_astimezone(v("time"), "America/Los_Angeles")) 加工结果 { "new_time": "2019-06-03 11:41:26-07:00", "time": "2019-06-04 2:41:26+08:00" } 父主题: 使用DSL加工函数处理日期时间
  • 数据类型转换和转换函数 日期时间字符串、日期时间对象和Unix时间戳的相互转换方式和对应转换函数如下图所示。 上图所示的转换场景和对应的转换函数具体描述如下表所示。 转换场景 转换函数 日期时间对象和Unix时间戳的相互转换 日期时间对象转为Unix时间戳。 dt_parsetimestamp智能转换函数,可以将日期时间对象或日期时间字符串转换为Unix时间戳。 dt_totimestamp专用函数,只支持将日期时间对象转换为Unix时间戳。 Unix时间戳转为日期时间对象。 dt_parse智能转换函数,可以将Unix时间戳或日期时间字符串转换为日期时间对象。 dt_fromtimestamp专用函数,只支持将Unix时间戳转换为日期时间对象。 日期时间对象和日期时间字符串的相互转换。 日期时间对象转为日期时间字符串。 dt_str智能转换函数,可以将日期时间对象、Unix时间戳和日期时间字符串转换为指定格式的日期时间字符串。 dt_strftime专用函数,只支持将日期时间对象转换为日期时间字符串。 日期时间字符串转为日期时间对象。 dt_parse智能转换函数,可以将日期时间字符串或Unix时间戳转换为日期时间对象。 dt_strptime专用函数,只支持将日期时间字符串转化为日期时间对象。 日期时间字符串和Unix时间戳的相互转换。 日期时间字符串转为Unix时间戳。 dt_parsetimestamp智能转换函数,可以将日期时间字符串或日期时间对象转换为Unix时间戳。 Unix时间戳转为日期时间字符串。 dt_str智能转换函数,可以将Unix时间戳、日期时间对象和日期时间字符串转换为指定格式的日期时间字符串。 dt_strftimestamp专用函数,只支持将Unix时间戳转换为日期时间字符串。 上图和上表展示了三种数据类型之间的六种转换,转换过程涉及两种方式,一种使用智能转换函数,另一种使用该转换的专用函数。 智能转换函数 以dt_parse函数为代表的智能转换函数可以接收Unix时间戳、日期时间对象以及日期时间字符串等不同类型的参数,实现智能转换。 专用函数 智能转换函数无法满足用户的全部需求。如对于用户自定义的特殊日期格式,dt_parse等智能转换函数无法自动解析日志,需要使用dt_strptime函数来进行解析指定格式。 父主题: 使用DSL加工函数处理日期时间
  • 概念解释 LTS DSL语法中的日期时间处理主要涉及三种数据类型:日期时间字符串、日期时间对象和Unix时间戳。 日期时间字符串:日期时间字符串的主要用途是为了便于展示以及提升用户可读性。 LTS DSL语法中的日期时间字符串主要分为两种形式: 带有时区信息的日期时间字符串,如2018-06-02 18:41:26+08:00。 不带时区信息的日期时间字符串,如2019-06-02 10:41:26。 带有时区信息的日期时间字符串通过在日期时间后添加额外的时差信息来表达时区: 2019-06-02 18:41:26+08:00表示该时间是东8区时区下的2019-06-02 18:41:26。 2019-06-02 18:41:26-07:00表示该时间是西7区时区下的2019-06-02 18:41:26。 日期时间对象 实例化的日期时间,专指Datetime类型的数据。日期时间对象的主要用途是为了便于展示以及提升用户可读性。 Unix时间戳 从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数。Unix时间戳的主要应用场景有: 表示系统时间:日志事件中表示日志接收时间的字段collectTime字段的值就是使用Unix时间戳来表示对应的系统时间,如下例所示。 source: 192.0.2.1 collectTime: 1562741899 topic: 时间相关的计算:Unix时间戳是从1970年1月1日开始所经过的秒数,因此在很多场景下便于直接进行日期时间相关的计算,例如如下示例。 原始日志 { "time1": 1562741899, "time2": 1562731122 } 加工规则 e_set("time_diff", op_sub(v("time1"), v("time2"))) 加工结果 { time1: 1562741899 time2: 1562731122 time_diff: 10777 } 父主题: 使用DSL加工函数处理日期时间
  • 场景四:基于字段值的逻辑查询判断 原始日志 [ { "http_host": "example.com", "status": 200, "request_method": "GET", "scheme": "https", "header_length": 700, "body_length": 1200 }, { "http_host": "example.org", "status": 200, "request_method": "POST", "scheme": "https", "header_length": 100, "body_length": 800 }, { "http_host": "example.net", "status": 200, "request_method": "GET", "scheme": "http", "header_length": 200, "body_length": 800 }, { "http_host": "example.cn", "status": 404, "request_method": "GET", "scheme": "https", "header_length": 100, "body_length": 300 } ] 加工需求1:为所有status字段值为200的日志事件,添加一个新字段type,其值为normal。 加工规则: e_if(e_match("status", "200"), e_set("type", "normal")) 加工结果: { "scheme": "https", "header_length": 700, "request_method": "GET", "type": "normal", "http_host": "example.com", "status": 200, "body_length": 1200 } { "scheme": "https", "header_length": 100, "request_method": "POST", "type": "normal", "http_host": "example.org", "status": 200, "body_length": 800 } { "scheme": "http", "header_length": 200, "request_method": "GET", "type": "normal", "http_host": "example.net", "status": 200, "body_length": 800 } { "scheme": "https", "header_length": 100, "request_method": "GET", "http_host": "example.cn", "status": 404, "body_length": 300 } 加工需求2:为所有status字段值为200,且request_method字段值为GET,且scheme字段值为https的日志事件添加一个新字段type,其值为normal。 加工规则: e_if(e_match_all("status", "200", "request_method","GET", "scheme", "https"), e_set("type", "normal")) 加工结果: { "scheme": "https", "header_length": 700, "request_method": "GET", "type": "normal", "http_host": "example.com", "status": 200, "body_length": 1200 } { "scheme": "https", "header_length": 100, "request_method": "POST", "http_host": "example.org", "status": 200, "body_length": 800 } { "scheme": "http", "header_length": 200, "request_method": "GET", "http_host": "example.net", "status": 200, "body_length": 800 } { "scheme": "https", "header_length": 100, "request_method": "GET", "http_host": "example.cn", "status": 404, "body_length": 300 } 加工需求3:为所有status字段值为200,或request_method字段值为GET,或scheme字段值为https的日志事件添加一个字段type,其值为normal。 加工规则: e_if(e_match_any("status", "200", "request_method","GET", "scheme", "https"), e_set("type", "normal")) 加工结果: { "scheme": "https", "header_length": 700, "request_method": "GET", "type": "normal", "http_host": "example.com", "status": 200, "body_length": 1200 } { "scheme": "https", "header_length": 100, "request_method": "POST", "type": "normal", "http_host": "example.org", "status": 200, "body_length": 800 } { "scheme": "http", "header_length": 200, "request_method": "GET", "type": "normal", "http_host": "example.net", "status": 200, "body_length": 800 } { "scheme": "https", "header_length": 100, "request_method": "GET", "type": "normal", "http_host": "example.cn", "status": 404, "body_length": 300 }
  • 场景二:判断字段值是否存在且不为空 原始日志 { "a": "a_value", "b":"" } 加工规则 e_if_else(v("a"), e_set("not_empty_a", true),e_set("not_empty_a", false)) e_if_else(v("b"), e_set("not_empty_b", true),e_set("not_empty_b", false)) 加工结果 { "a": "a_value", "not_empty_b": false, "b": "", "not_empty_a": true }
共100000条