ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Apache DolphinScheduler 远程日志(Remote Logging)完整配置指南:支持 OSS、S3、GCS、ABS

Apache DolphinScheduler 远程日志(Remote Logging)完整配置指南:支持 OSS、S3、GCS、ABS Apache DolphinScheduler 远程日志Remote Logging完整配置指南支持 OSS、S3、GCS、ABS【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址: https://gitcode.com/GitHub_Trending/dol/dolphinschedulerApache DolphinScheduler 的远程日志Remote Logging功能允许将任务运行日志异步上传至 OSS、S3、GCS、ABS 等对象存储从而解决多 Worker 节点日志分散、日志盘空间不足、历史日志难以集中审计的问题。本文以官方文档 remote-logging.md 为主体结合 dolphinscheduler-common 模块源码系统讲解远程日志的启用方式、五大对象存储的完整配置参数、底层实现原理与注意事项帮助你快速落地一套可长期保留、可集中查看的任务日志体系。远程日志的核心机制在默认情况下DolphinScheduler 的任务日志只写入各 Worker 节点本地磁盘一旦节点被回收或磁盘被清理历史日志就会丢失。开启远程日志后日志的读写路径变为写入异步上传任务结束后Worker 会将本地日志文件异步发送到远程对象存储不阻塞任务主流程读取按需下载用户在 Web UI 上查看或下载任务日志时如果本地日志文件不存在系统会先从远程存储下载对应文件到本地再展示。从源码看这一逻辑由 RemoteLogUtils.java 统一封装sendRemoteLog(logPath)负责触发上传getRemoteLog(logPath)负责触发下载二者都会先通过isRemoteLoggingEnable()判断开关状态并调用对应目标存储的 Handler 完成实际读写。上传操作经由 RemoteLogService.java 中的Async(remoteLogHandleExecutor)注解异步执行这意味着日志投递由独立的异步线程池承载remote.logging.thread.pool.size即用于控制该线程池的大小。日志路径到对象名的映射规则远程存储上的对象路径并不是简单地把本地绝对路径原样上传。RemoteLogUtils.getObjectNameFromLogPath()会先计算出本地日志基础目录由data.basedir.path推导然后把日志文件相对该基础目录的剩余路径拼接到remote.logging.base.dir配置的远程基础目录之下。也就是说本地日志目录与远程对象目录保持一一对应的镜像关系便于按目录检索与归档。启用远程日志远程日志的总开关位于各服务节点的common.properties中默认关闭remote.logging.enablefalse见 common.properties。开启方式取决于部署模式Cluster集群或 Pseudo-Cluster伪集群模式需要同时修改api-server/conf/common.properties、master-server/conf/common.properties和worker-server/conf/common.properties三处配置并重启对应服务Standalone单机模式只需修改standalone-server/conf/common.properties一处即可。三处配置的意义各有侧重Worker 负责在任务结束后上传日志Master 在任务故障转移时需要读取远端日志API Server 则在用户通过 Web 界面查看、下载日志时负责拉取因此三者都需要开启并保持一致的目标存储配置。基础配置项# 是否启用远程日志 remote.logging.enablefalse # 远程日志目标存储支持 OSS、S3、GCS、ABS源码中同时支持 COS remote.logging.targetOSS # 远程日志基础目录对应对象存储上的根目录前缀 remote.logging.base.dirlogs # 异步上传日志的线程池大小 remote.logging.thread.pool.size10各参数说明如下参数默认值必填说明remote.logging.enablefalse是远程日志总开关置为true后才会触发上传与下载逻辑remote.logging.targetOSS启用后必填目标存储类型可选OSS、S3、GCS、ABSCOS亦有实现remote.logging.base.dirlogs启用后必填远程对象存储中的日志基础目录日志对象将存放于该目录之下remote.logging.thread.pool.size10否异步发送日志到远程存储的线程数任务量较大时可适当调大除上述基础项外不同目标存储还需补充各自的访问凭据与桶/容器信息见下文分节说明。写入阿里云 OSS目标存储选择阿里云对象存储 OSS 时配置如下# OSS AccessKey IDtargetOSS 时必填 remote.logging.oss.access.key.idaccess.key.id # OSS AccessKey SecrettargetOSS 时必填 remote.logging.oss.access.key.secretaccess.key.secret # OSS Bucket 名称targetOSS 时必填 remote.logging.oss.bucket.namebucket.name # OSS EndpointtargetOSS 时必填 remote.logging.oss.endpointendpoint这些参数在 Constants.java 中均有对应的REMOTE_LOGGING_OSS_*常量定义。Endpoint 应填写你 Bucket 所在区域对应的访问域名如公网或内网 Endpoint部署在阿里云 ECS 内部时建议使用内网 Endpoint 以降低流量费用并提升速度。写入 Amazon S3目标存储选择 Amazon S3 时配置如下# S3 AccessKey IDtargetS3 时必填 remote.logging.s3.access.key.idaccess.key.id # S3 AccessKey SecrettargetS3 时必填 remote.logging.s3.access.key.secretaccess.key.secret # S3 Bucket 名称targetS3 时必填 remote.logging.s3.bucket.namebucket.name # S3 EndpointtargetS3 时必填 remote.logging.s3.endpointendpoint # S3 区域targetS3 时必填 remote.logging.s3.regionregionregion应与 Bucket 所在区域保持一致例如us-east-1。从实现上看S3 的客户端由 S3RemoteLogHandler.java 构建它会通过PropertyUtils.getByPrefix(aws.s3., )收集所有aws.s3.前缀的属性并交给AmazonS3ClientFactory创建客户端因此在配置时你既可以使用remote.logging.s3.*系列参数也可以复用仓库中 AWS 认证模块dolphinscheduler-aws-authentication约定的aws.s3.*通用配置。值得注意的一个细节是S3 Handler 在构造时就会执行checkBucketNameExists()校验——如果remote.logging.s3.bucket.name为空或目标 Bucket 不存在会直接抛出IllegalArgumentException终止初始化。也就是说S3 的 Bucket 必须预先手动创建好DolphinScheduler 不会替你自动建桶。上传与下载则分别通过putObject与getObject完成。写入 Google Cloud StorageGCS目标存储选择 GCS 时配置如下# Google Cloud 凭据文件路径targetGCS 时必填 remote.logging.google.cloud.storage.credential/path/to/credential # GCS Bucket 名称targetGCS 时必填 remote.logging.google.cloud.storage.bucket.nameyour-bucketGCS 使用服务账号凭据文件JSON 格式的 key file完成认证credential指向该文件在服务器上的绝对路径。请确保运行 DolphinScheduler 的进程对该文件具备读取权限。写入 Azure Blob StorageABS目标存储选择 Azure Blob Storage 时配置如下# ABS 账户名targetABS 时必填 remote.logging.abs.account.nameyour-account-name # ABS 账户密钥targetABS 时必填 remote.logging.abs.account.keyyour-account-key # ABS 容器名targetABS 时必填 remote.logging.abs.container.nameyour-container-nameABS 的 HandlerAbsRemoteLogHandler.java及其测试用例AbsRemoteLogHandlerTest.java位于 dolphinscheduler-common 模块中可直接查阅作为参考实现。关于 ABS 空目录文件的说明由于 Azure Blob Storage 不支持空目录的概念开启 ABS 远程日志后资源目录下会出现名为no name的空文件。这是 Azure 存储语义导致的正常现象不会影响 DolphinScheduler 资源中心对文件的正常展示与使用可忽略。源码视角存储适配的扩展机制远程日志对不同存储的适配遵循典型的工厂模式。所有实现都实现统一的 RemoteLogHandler.java 接口其中定义了两个方法sendRemoteLog(String logPath)与getRemoteLog(String logPath)。RemoteLogHandlerFactory.java 根据remote.logging.target的大小写无关取值返回对应的单例 HandlerOSS→OssRemoteLogHandlerS3→S3RemoteLogHandlerGCS→GcsRemoteLogHandlerABS→AbsRemoteLogHandlerCOS→CosRemoteLogHandler也就是说除了文档正文列出的四种存储当前仓库的 remote 目录 中还包含了腾讯云 COS 的实现且 remote-logging.yaml 中同样提供了 COS 的配置模板remote.logging: cos: # COS AccessKey ID access.key.id: access.key.id # COS AccessKey Secret access.key.secret: access.key.secret # COS Bucket 名称 bucket.name: bucket.name # COS 区域 region: region这一点从侧面印证了远程日志目标是可插拔、易扩展的新增一种对象存储只需实现RemoteLogHandler接口并在工厂中注册即可。完整配置示例与验证建议以 S3 为例一个完整的common.properties远程日志段落如下remote.logging.enabletrue remote.logging.targetS3 remote.logging.base.dirlogs remote.logging.thread.pool.size10 remote.logging.s3.access.key.idAKIAXXXXXXXXXXXXXXXX remote.logging.s3.access.key.secretxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx remote.logging.s3.bucket.nameds-task-logs remote.logging.s3.endpointhttps://s3.us-east-1.amazonaws.com remote.logging.s3.regionus-east-1验证配置是否生效可以从以下三个层面检查服务启动日志S3 Handler 初始化时若 Bucket 校验失败会直接报错服务启动即可发现配置问题任务运行后等待任务结束观察远程存储logs/目录下是否出现了与本地日志目录结构一致的对象界面查看删除 Worker 本地日志目录后再通过 Web UI 查看该任务日志若能正常展示说明按需下载链路API Server 侧getRemoteLog工作正常。注意事项三处配置保持一致集群模式下 API Server、Master、Worker 的common.properties中的远程日志参数必须一致否则会出现上传成功但查询失败的现象提前创建桶/容器S3、OSS 等目标的 Bucket 需预先创建DolphinScheduler 不会自动建桶S3 尤其会因桶不存在而拒绝启动 Handler凭据安全access.key.id/access.key.secret等敏感信息以明文写入配置文件建议严格限制配置文件所在目录的读写权限生产环境可结合云厂商的 RAM/IRSA 等机制管理凭据线程池调优remote.logging.thread.pool.size决定日志上传的并发能力在任务频繁、日志量大的集群中可适当调大避免上传积压磁盘占用开启远程日志后本地日志文件仍会按原有策略保留远程存储只是增加一份集中归档并不会释放本地磁盘空间如需释放可结合日志清理策略使用。通过本文的配置与原理讲解你可以将 DolphinScheduler 的任务日志从节点本地文件升级为云端集中归档在享受 Web 界面无缝查看日志体验的同时为日志的长期留存、集中审计和多集群统一运维打下基础。更深入的实现细节可继续阅读 remote-logging.yaml 配置模板与 remote 包 下的各 Handler 源码。【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址: https://gitcode.com/GitHub_Trending/dol/dolphinscheduler创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表