@
yellowmarlboro 公司项目千万别给自己团队增加学习,稳定快速构建压倒一切。架构可以迭代的,这个不是问题。
ETL 部分是最复杂的,也是最繁琐的,由于我不知道你这边实际情况怎么样,所以我只能从最坏的场景假设,我推荐使用两段式 ETL,具体做法如下:
第一阶段:日志收集和清洗,将日志一些无效、异常和缺失的数据要么过滤,要么基于算法补全。这个可以用 filebeat+ELK 架构( ES 可以设置 TTL,TTL 值可以设置一周),这个数据丢失其实并不影响,大不了重跑(这里有个风险点,有数据泄露风险,所以传输过程一定要强加密,这个一定要重视,数据安全无小事)
第二阶段阶段,可以基于定时任务每天定时处理前一天任务,这个时候业务会特别复杂,所以可以使用 celery 或者 airflow 进行定制化开发 pipelines,主要工作有:数据富化、字段对齐、字段标准化、字段含义统一(sip 和 source_ip 可能是同一个意思,这个时候需要用 tdidf 等相似度算法来计算字段,还有一些“无头数据”,通过正文内容预测字段含义)、数据格式统一(例如:日期到底是时间戳还是 UTC 时间),数据格式输出格式标准化(是用 JSON 还是 YAML 或 XML 等),建立 index_id 这个是一条数据的唯一标识,用于跟踪数据流转过程
切记一定要有日志,所有的数据生命周期内必须要能完整跟踪到一条数据整个流转过程,如果在发现无法跟踪的数据进入了系统,一定要删除掉!