ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Apache DolphinScheduler 远程日志(Remote Logging)配置与实现原理详解

Apache DolphinScheduler 远程日志(Remote Logging)配置与实现原理详解 任务调度大数据后端前端【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址https://gitcode.com/gh_mirrors/do/dolphinscheduler点击查看免费下载本指南围绕 Apache DolphinScheduler 的远程日志Remote Logging功能展开介绍如何将任务日志异步写入阿里云 OSS、Amazon S3、Google Cloud StorageGCS与 Azure Blob StorageABS等对象存储并在本地日志缺失时自动从远端回拉。读完本文你将掌握common.properties中远程日志相关配置的完整写法、每种存储后端的参数要求以及任务日志异步上传—按需下载背后源码级的运行机制。远程日志要解决什么问题在 Apache DolphinScheduler 中Master 与 Worker 节点上的任务日志默认保存在本地文件系统。一旦节点磁盘故障、日志目录被清理或者集群规模变大、希望集中审计与归档日志时仅靠本地存储往往不够可靠。远程日志Remote Logging功能正是为此设计的当它被启用后DolphinScheduler 会在任务结束后将任务日志异步发送到指定的远程对象存储当用户在前端查看或下载任务日志时如果本地日志文件不存在系统会自动从远程存储将对应日志文件下载回本地文件系统。也就是说远程日志包含两条核心链路写入链路异步任务结束后触发上传不阻塞任务本身的执行读取链路按需回拉查看/下载日志时发现本地缺失则先远程下载再返回给用户。具体行为可参见官方文档 remote-logging.md。启用远程日志修改 common.properties远程日志的开关与通用参数集中在各服务模块的common.properties中根据部署模式不同需要修改的文件位置也不同Cluster集群或 Pseudo-Cluster伪集群模式需要同时配置api-server/conf/common.properties、master-server/conf/common.properties和worker-server/conf/common.propertiesStandalone单机模式只需要配置standalone-server/conf/common.properties。基础配置如下# 是否启用远程日志 remote.logging.enablefalse # 当 remote.logging.enabletrue 时指定远程日志目标目前支持 OSS、S3、GCS、ABS remote.logging.targetOSS # 当 remote.logging.enabletrue 时指定日志在远端存储的基础目录 remote.logging.base.dirlogs # 当 remote.logging.enabletrue 时指定发送日志到远程存储的线程数 remote.logging.thread.pool.size10以上四项即远程日志的通用配置它们与仓库中 common.properties 的默认值与注释完全一致仓库还提供了一份等价的 YAML 格式模板 remote-logging.yaml可对照查看。核心配置参数一览配置项默认值是否必填说明remote.logging.enablefalse是远程日志总开关true时启用remote.logging.targetOSSenabletrue时必填远程存储类型取值OSS/S3/GCS/ABSremote.logging.base.dirlogs否日志在远端存储中的基础目录映射逻辑见下文对象名映射remote.logging.thread.pool.size10否异步上传线程池大小值得注意的是这些配置项对应的常量在 Constants.java 中统一定义例如REMOTE_LOGGING_ENABLE、REMOTE_LOGGING_TARGET、REMOTE_LOGGING_BASE_DIR、REMOTE_LOGGING_THREAD_POOL_SIZE等说明远程日志的读取与校验逻辑在dolphinscheduler-common模块中集中实现。写入任务日志到阿里云 OSS将remote.logging.target设为OSS后需要补充以下四项阿里云 OSS 专属配置# oss access key id当 remote.logging.targetOSS 时必须填写 remote.logging.oss.access.key.idaccess.key.id # oss access key secret当 remote.logging.targetOSS 时必须填写 remote.logging.oss.access.key.secretaccess.key.secret # oss bucket 名称当 remote.logging.targetOSS 时必须填写 remote.logging.oss.bucket.namebucket.name # oss endpoint当 remote.logging.targetOSS 时必须填写 remote.logging.oss.endpointendpoint从源码实现看OssRemoteLogHandler 在构造时会读取access.key.id、access.key.secret与endpoint构建 OSS 客户端随后读取bucket.name并调用doesBucketExist校验 bucket 是否存在如果 bucket 不存在会直接抛出IllegalArgumentException因此使用前请务必先在阿里云控制台创建好对应的 bucket。写入任务日志到 Amazon S3将remote.logging.target设为S3后需要补充以下五项配置# s3 access key id当 remote.logging.targetS3 时必须填写 remote.logging.s3.access.key.idaccess.key.id # s3 access key secret当 remote.logging.targetS3 时必须填写 remote.logging.s3.access.key.secretaccess.key.secret # s3 bucket 名称当 remote.logging.targetS3 时必须填写 remote.logging.s3.bucket.namebucket.name # s3 endpoint当 remote.logging.targetS3 时必须填写 remote.logging.s3.endpointendpoint # s3 region当 remote.logging.targetS3 时必须填写 remote.logging.s3.regionregion补充一点源码细节S3RemoteLogHandler 在构建 AmazonS3 客户端时通过PropertyUtils.getByPrefix(aws.s3., )读取所有以aws.s3.开头的配置例如aws.s3.access.key.id、aws.s3.endpoint、aws.s3.region等bucket 名则从aws.s3.bucket.name读取。也就是说除本文档列出的remote.logging.s3.*参数外S3 客户端的实际连接参数还会读取aws.s3.*前缀下的配置这在仓库测试资源 dolphinscheduler-common/src/test/resources/common.properties 中两者均有体现配置时若发现 S3 客户端未按预期连接可对照检查这一组参数。同样地bucket 必须已存在否则构造 handler 时会抛出异常。写入任务日志到 Google Cloud StorageGCS将remote.logging.target设为GCS后需要配置以下两项# google cloud 凭证文件位置当 remote.logging.targetGCS 时必须填写 remote.logging.google.cloud.storage.credential/path/to/credential # gcs bucket 名称当 remote.logging.targetGCS 时必须填写 remote.logging.google.cloud.storage.bucket.nameyour-bucket其中credential指向一个本地保存的 Google Cloud 服务账号凭证文件JSON 格式的 Service Account KeyGCS bucket 同样需要预先创建。写入任务日志到 Azure Blob StorageABS将remote.logging.target设为ABS后需要配置以下三项# abs 账号名称当 remote.logging.targetABS 时必须填写 remote.logging.abs.account.nameyour-account-name # abs 账号密钥当 remote.logging.targetABS 时必须填写 remote.logging.abs.account.keyyour-account-key # abs container 名称当 remote.logging.targetABS 时必须填写 remote.logging.abs.container.nameyour-container-name注意事项由于 Azure Blob Storage不支持空目录的存在启用 ABS 后资源目录下会出现名为no name的空文件。这属于 Azure 存储语义的客观限制并不会影响文件在 DolphinScheduler 资源中心的正常展示。远程日志的源码实现原理远程日志虽然只是若干配置项但其底层实现贯穿了dolphinscheduler-common模块中的多个类理解这些实现有助于排查日志没传上去或日志拉不下来之类的问题。异步上传RemoteLogService上传动作由 RemoteLogService 承担。它的asyncSendRemoteLog(String logPath)方法标注了Async(remoteLogHandleExecutor)因此上传是在独立的异步线程池中执行的方法内部首先判断远程日志是否启用然后通过RemoteLogHandlerFactory获取对应存储类型的 handler 并调用sendRemoteLog(logPath)完成上传。任务结束后异步发送日志这一行为由 RemoteLogUtils.sendRemoteLog 触发它同样先检查isRemoteLoggingEnable()即remote.logging.enable配置再转发给RemoteLogService。按需回拉RemoteLogUtils.getRemoteLog读取链路由 RemoteLogUtils.getRemoteLog 实现当用户查看或下载日志、且本地文件缺失时该方法会先为目标日志路径创建父目录mkdirOfLog再调用对应 handler 的getRemoteLog(logPath)把远端对象下载到本地。这正是文档所述若本地无日志文件则从远程存储下载到本地文件系统的代码实现。对象名映射getObjectNameFromLogPath日志在远端存储中的路径objectName并非随意生成而是由 RemoteLogUtils.getObjectNameFromLogPath 计算得到它取本地日志基础目录getLocalLogBaseDir()之后的相对路径再拼接到remote.logging.base.dir默认logs之下。例如本地日志位于local-base/task/2024/.../xxx.log时远端对象名大致为logs/task/2024/.../xxx.log。因此如果你自定义了remote.logging.base.dir上传与回拉会使用同一个映射保持两侧一致即可。存储类型分发RemoteLogHandlerFactoryRemoteLogHandlerFactory 根据remote.logging.target读取时统一转大写分发对应的单例 handlertarget 值Handler 实现OSSOssRemoteLogHandler阿里云 OSS SDKS3S3RemoteLogHandlerAWS Java SDKGCSGcsRemoteLogHandlerABSAbsRemoteLogHandler若目标值不在上述范围内工厂会记录一条No suitable remote logging target for ...的错误日志并返回null此时上传与回拉都会被安全跳过。异步线程池RemoteLogHandleThreadPool上传线程池由 RemoteLogHandleThreadPool 配置它是一个ThreadPoolTaskExecutor核心线程数与最大线程数均取自remote.logging.thread.pool.size默认 10线程名前缀为remote-logging-。也就是说任务结束后日志上传是并发异步进行的不会阻塞任务调度主流程若日志量巨大可适当调大该值以加快上传吞吐。常见问题与排查建议bucket/container 不存在OSS、S3 的 handler 构造时会主动校验 bucket 是否存在doesBucketExist/doesBucketExistV2不存在会直接抛异常请先确认存储桶已创建。启用了远程日志但日志未上传确认remote.logging.enabletrue且 API/Master/Worker 三处的common.properties或 Standalone 单机都已修改并重启生效同时确认remote.logging.target拼写为OSS/S3/GCS/ABS之一。S3 连接异常除remote.logging.s3.*外检查aws.s3.*前缀下的 access key、endpoint、region 配置是否完整对应 S3RemoteLogHandler 的getByPrefix(aws.s3., )逻辑。日志回拉失败确认本地日志路径与远端对象名映射一致远端对象存在且 handler 具备读权限回拉失败时 handler 会记录error while getting remote log ...相关错误日志。ABS 出现空文件这是 Azure Blob Storage 不支持空目录导致的预期行为可忽略不影响资源中心展示。以上所有配置项与实现细节均可在当前仓库中直接查阅验证包括配置模板 dolphinscheduler-common/src/main/resources/common.properties、remote-logging.yaml以及org.apache.dolphinscheduler.common.log.remote包下的各 Handler 实现与测试用例。赞分享任务调度大数据后端前端【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址https://gitcode.com/gh_mirrors/do/dolphinscheduler点击查看免费下载相关推荐Apache DolphinScheduler 远程日志Remote Logging完整配置指南支持 OSS、S3、GCS、ABSApache DolphinScheduler 远程日志Remote Logging完整配置指南支持 OSS、S3、GCS、ABS Apache Dolp任务调度数据编排工作流自动化后端大数据Apache Airflow 阿里云 OSS 远程日志OSSTaskHandler 配置指南与实现原理Apache Airflow 阿里云 OSS 远程日志OSSTaskHandler 配置指南与实现原理 Apache Airflow 的日志默认存放在调度节点后端任务调度工作流自动化数据编排批处理数据工程流程编排Apache Airflow 集成阿里云 OSS 远程任务日志配置详解与源码级原理Apache Airflow 集成阿里云 OSS 远程任务日志配置详解与源码级原理 本篇技术指南围绕 Apache Airflow Alibaba 提供者后端任务调度工作流自动化数据编排批处理数据工程流程编排上一篇常见问题解决方案homebridge-tplink-smarthome 项目下一篇Jupyter Resource Usage 项目常见问题解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表