@ beesolve/分析-处理器
CloudFront分析处理器. 通过雅典娜阅读 CloudFront 标准日志 保持单表DynamoDB设计,每平方位计时总和 以及使用原子计数器更新的每日/月滚动 偶发性标记.
[尖叫声] 前1.0——不稳定的API. 这个软件包是
0.x活动 发展。 打破的改变可以降落在任何0.x释放无主 版本凸起。 选中一个精确的版本并在升级前审查更改日志 . 一旦API稳定,包裹到达1.0.0,它跟随语义 版本和此通知被删除 .
建筑
┌──────────────┐ hourly ┌────────┐ ADD + marker ┌──────────┐
│ CloudFront │ ──────────► │ Athena │ ───────────────► │ DynamoDB │
│ v2 Parquet │ query │ │ (transaction) │ totals │
│ (S3 + Glue) │ └────────┘ │ breakdowns│
└──────────────┘ └──────────┘
▲
daily / monthly rollups (read-back) ─────┘
一个小时的Lambda在关闭的Athena 上运行着一个分块的查询
小时v2Parquet数据并写总计 + 每分数细分
原子 ADD 更新,每小时守护一次 applied#... 已写入标记
有条件地在同一地点 TransactWriteCommand每日和每月滚动
Lambdas sum fineer-grain DynamoDB项目(从未重新征服雅典娜). 一次性
独立回填脚本将历史数据行走同一写道
(单位:千美元) compact 命令将遗留的 v1 日志重写到 v2 Parquet 形状, 因此
可以通过同一路径读取.
安装
npm install @beesolve/analytics-processor
出口
.- 计划/类型(totalsSchema编号 :TotalsItem, (中文(简体) ),breakdownSchema编号 :BreakdownItem, (中文(简体) ),appliedMarkerSchema编号 :AppliedMarker, (中文(简体) ),configSchema编号 :AnalyticsConfig, (中文(简体) ),grains编号 :Grain, (中文(简体) ),dimensions编号 :Dimension, (中文(简体) ), 时间/窗口助手( e)hourKey, (中文(简体) ),dayKey, (中文(简体) ),monthKey, (中文(简体) ),maxWindowFor, (中文(简体) ),windowKeys, (中文(简体) ),shiftAnchor, (中文(简体) ),hoursBetween, (中文(简体) ),parsePeriodKey, (中文(简体) ),grainForPeriodKey, (中文(简体) ), 示范班级(Totals, (中文(简体) ),Breakdowns, (中文(简体) ),AppliedMarkers, (中文(简体) ),Config, (中文(简体) ),IpInfoCache+ 键lookupIpInfo+ 键IpInfo编号 :IpInfoCacheItem, (中文(简体) ), 纯助行者buildHourlyQuery, (中文(简体) ),classifyDevice, (中文(简体) ),sumTotals, (中文(简体) ),sumBreakdown, (中文(简体) ),topNWithOther),活体综合解析器 (单位:千美元)resolveTotalsLive编号 :resolveBreakdownLive),以及processHour(+ 数)applyDailyRollup编号 :applyMonthlyRollup) (中文(简体) )../cdk- 那个AnalyticsProcessorCDK 构造 .
Lambda处理器不属于可导入的API. 业务
命令船舶作为可执行的垃圾箱—— analytics-backfill, (中文(简体) ), analytics-watch-backfill, (中文(简体) ),
财务报告和审定财务报表 analytics-compact - 可通过 npx (见
如何引导) (中文(简体) ).
CDK 用户
import { AnalyticsProcessor } from "@beesolve/analytics-processor/cdk";
const processor = new AnalyticsProcessor(this, "Analytics", {
athenaDatabase: logging.glueDatabaseName,
athenaV2Table: logging.glueTableName,
athenaWorkgroup: logging.workgroupName,
logBucketArn: logging.logBucket.bucketArn,
athenaResultsBucketArn: logging.athenaResultsBucket.bucketArn,
ipInfoApiKey: process.env.IPINFO_API_KEY,
});
// Grant read-only access to a dashboard Lambda. Sets ANALYTICS_TABLE_NAME and
// ANALYTICS_REVERSE_INDEX env vars on the handler.
processor.grantRead(dashboardLambda);
构筑条款:
- DynamoDB表(按需,复合键)
pk编号 :sk,反转GSIreverse, TTL) (中文(简体) ) - 三兰布达斯(第24节):
Hourly, (中文(简体) ),DailyRollup, (中文(简体) ),MonthlyRollup - 事件桥表:小时
rate(1 hour)日克龙00:15月克龙(01:30(第1个) - 每小时Lambda的Athena/Glue/S3准入率最低
后补
成本警告 : 如果您的来源是遗留的 v1 日志( 许多小 gzip 文件), 运行
compact第一和点ATHENA_TABLE在紧凑的桌子上。 直接回填一个原始 v1 表格使每个小时 s3 对象数以万计的查询风扇——至少雅典娜发行 每一个文件,它的成本 几百元的S3 得到请求 页:1 一个完整的回填。 收缩首先会降低到一分钱.
一次性回填脚本将历史日志数据通过相同的写法
路由作为小时Lambda。 它通过独一无二的力量是可以恢复的,而且是一成不变的
标记——已经应用的时数立即跳过. 它读出v2 Parquet表;
来回填充遗存 v1 日志, 第一次运行 compact
将其重写为 v2 形状,然后点 ATHENA_TABLE 在紧凑的
页:1.
TABLE_NAME=... \
ATHENA_DATABASE=... ATHENA_TABLE=... ATHENA_WORKGROUP=... \
bun run backfill -- --from 2026-01-01T00:00:00Z --to 2026-01-31T23:00:00Z --concurrency 2 --rollups
--from编号 :--to——包容性ISO小时范围(需要).--concurrency——界限平行主义(默认2).--rollups——每小时填满后,每日和每月在范围上进行滚动.
证书通过默认 AWS SDK 链( 荣誉) 解决 AWS_PROFILE) (中文(简体) ).
压缩
这个 compact 命令转换遗留 v1 LazySimpleSerDe 将表格输入一个
v2 形状 Parquet 表格( 每小时一个文件分区, v1 列重命名为
v2 schema),所以查询停止在数以万计的微小S3上扇出
对象。 见 如何引导。 。 。 .
bun run compact -- \
--database cf_logs_db --source-table cf_logs_v1_backfill \
--target-table cf_logs_v1_compact \
--external-location s3://log-bucket/compact/v1/ \
--workgroup primary --output-location s3://athena-results/ctas/ \
--from 2025-10-16 --to 2026-10-13