# EasyAds-Pro_Nebula **Repository Path**: bayescom/EasyAds-Pro_Nebula ## Basic Information - **Project Name**: EasyAds-Pro_Nebula - **Description**: 🔥🔥智能聚合、极速变现、专业私有、卓越升级。EasyAds Pro是倍业科技技术团队研发的一款开源聚合SDK管理项目,该项目是数据任务项目,根据SDK策略服务的日志信息统计报表数据信息,也支持通过配置的Report API信息,自动拉取各方SDK数据,目前可支持穿山甲、优量汇的Report API数据拉取功能。 - **Primary Language**: Python - **License**: GPL-3.0 - **Default Branch**: main - **Homepage**: http://easyads-pro.bayescom.cn - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2025-01-22 - **Last Updated**: 2025-04-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Nebula EasyAds Pro 数据报表任务 & Report API三方数据拉取任务 ## 依赖 * python 3.8.10及以上 * pandas 1.1.5 * PyMySQL 1.1.0


## 部署 任务输入为聚合SDK请求、上报日志文件,任务结果输出到MySQL数据库。

### 您需要: ### 1. 给任务提供聚合SDK日志输入 见小时运行脚本 `/nebula/crontab/hour_report.sh`第161行,**在小时脚本运行时,您需要确保两种聚合SDK日志文件分别存在于两个指定的路径。** 将整个小时的请求日志文件(action为req)放入`temp_nebula_pv_log_path`,其他上报日志文件(action为loaded、succeed、win、click)放入`temp_nebula_deal_log_path`。 推荐您编写一个自动拉取并分割日志的脚本,并在小时运行脚本`hour_report.sh`第161行处调用。 * 请务必将原始日志按行分割成小文件后再放入路径,本任务启用了python的多线程处理,分割为小文件可以显著加快运行速度。 * 请确保聚合SDK日志文件的临时路径包含对应的时间,例如:`/您的目录/20250101_00/pv`和`/您的目录/20250101_00/deal`,以确保多个小时的任务同时运行时临时文件不会混淆。

### 2. 给任务提供MySQL数据库输出 见数据库更新python脚本 `/nebula/utils/db_utils.py`第50行,**脚本运行完成后,您的结果将写出到给定的MySQL数据库中。** MySQL数据库配置位于 `/nebula/db.config`,请根据您的实际配置填写。 本任务涉及到三个MySQL数据表:report_hourly(小时报表)、report_daily(天报表)、sdk_report_api_params(report api任务上游渠道账号表)。项目提供了建表的示例语句,位于 `/nebula/create_table_template`,您可以直接使用或者按需求修改。 * 如果您需要修改数据库更新相关代码,请修改报表更新逻辑脚本 `/nebula/script/join_and_update_db.py` 和数据库更新脚本 `/nebula/utils/db_utils.py`。

### 3. 给数据库提供Report API账号(可选) 如果您有上游渠道的Report API账号,您可以将账号信息插入到sdk_report_api_params表中来为天报表拉取第三方数据。 * 本项目提供了穿山甲、快手、优量汇的Report API模版。如果需要拉取其他的上游渠道三方数据,请参照 `/nebula/report_api`下已有的脚本开发。 * 请确保您的账号开通了对应上游渠道的Report API功能。各个上游渠道的操作各不相同,请参考各个上游渠道的官方文档。


## 运行 ### 1. 运行小时报表任务 `cd /您的目录/nebula/crontab && bash hour_report.sh [-t yyyymmdd_HH]` * 默认运行上一小时的日志任务,可选 -t 选项指定运行小时,格式为yyyymmdd_HH。例如:`bash hour_report.sh -t 20250101_00`

### 2. 运行天报表任务 `cd /您的目录/nebula/crontab && bash day_report.sh [-t yyyymmdd_HH]` * 默认运行上一天的日志任务,可选 -t 选项指定运行日期,格式为yyyymmdd。例如:`bash day_report.sh -t 20250101`

### 3. 运行上游渠道Report API三方数据拉取(可选) `cd /您的目录/nebula/crontab && bash report_api.sh [yyyy-mm-dd]` * 默认运行上一天的Report API,可选指定运行日期,格式为yyyy-mm-dd。例如:`bash report_api.sh 2025-01-01` **建议通过Linux crontab定时执行任务。每个小时执行上一小时数据报表任务;每天凌晨在上一天小时报表任务全部结束,后执行上一天的天数据报表任务。考虑到上游渠道出数据可能存在延迟,每天早上执行Report API三方数据拉取任务。**


## 运行日志 本任务启动后,会自动生成log日志目录和对应小时/天的日志文件,路径为 `/nebula/log`。请根据运行日志来排查问题。


## 可能的常见问题 1. map阶段报错,提示找不到文件。 * 解决方法:参见部署1.,确保聚合SDK请求日志文件和上报日志文件已经分别存在于正确的路径。 2. 运行过程中sort阶段报错,提示进程终止。造成此报错的原因在任务执行中有一个需要大量内存去排序的阶段,机器预留的内存比例不足。在小时运行脚本 `/nebula/crontab/hour_report.sh`中, 66和72行:sort命令默认指定了参数 `-S 70%`,即最高使用整台机器70%的内存来排序。如果在该台机器上还运行有其他的服务占用内存,可能会导致本任务的内存不足。 * 解决方法:降低本任务允许使用整台机器的最高内存比例,例如`-S 30%`。降低该比例可能会导致任务中间执行的速度变慢。 3. join_and_update_db.py或db_utils.py报错,更新失败。 * 解决方法:参见部署2.,确保MySQL数据库配置与代码一致。