目录
2、Flume 日志汇聚(Flume NG 之 HIGO 实际应用方案)
4.1 将对应的未处理的 block 的 status 重置为 0,error_times 重置为 0 即可重新自动进行 METL
4.2 如果 MySQL 中记录缺失,举个例子以此形式插入,即可重新自动进行 METL
一、Flume 日志收集系统
1、一图了解 HIGO 新日志收集系统
2、Flume 日志汇聚(Flume NG 之 HIGO 实际应用方案)
Agent | Hostname | IP | User | Path | Log | Topic |
---|---|---|---|---|---|---|
Agent00 | yz-sre-wannx00.lehe.com | 10.20.201.242 | flume | /home/flume/flumeng/ |
|
|
Agent01 | yz-sre-wannx01.lehe.com | 10.20.202.238 | ||||
Agent02 | yz-higo-preonline01.lehe.com | 10.20.0.86 |
|
| ||
Collector00 | yz-bi-store03.lehe.com | 10.20.3.34 | - | - | ||
Failover00 | yz-bi-store02.lehe.com | 10.20.5.67 | - | - |
3、Python 日志处理 METL 系统
服务器 | IP | 用户 | 部署路径 | 日志分类 | 模块 | 状态 |
---|---|---|---|---|---|---|
yz-bi-web01.lehe.com | 10.20.2.21 | flume | /home/flume/flume_log_treater_metl |
| monitor | ✅ |
extractor | ✅ | |||||
transformator | ✅ | |||||
loader | ✅ | |||||
基于 Flume 分布式日志收集到 HDFS 的实时监视、提取、解析、上传入 Hive 库的系统 | 代码详见 GitHub:https://github.com/SHOWufei/flume_log_treater_metl | |||||
启动各阶段服务 | $ cd /home/flume/flume_log_treater_metl/bin/ && bash start-all.sh | |||||
停止各阶段服务 | $ cd/home/flume/flume_log_treater_metl/bin/ && bash stop-all.sh | |||||
检查各阶段服务 | $ cd /home/flume/flume_log_treater_metl/bin/ && bash check-supervise.sh |
二、METL❓
基于 Flume 分布式日志收集到 HDFS 的实时监视、提取、解析、上传入 Hive 库的系统。
METL,是英文 Monitor-Extract-Transform-Load 的缩写。用来描述通过对汇聚端日志的监视(monitor)、提取(extract)、解析(transform)、上传(load)至目的端(hive 库)的过程。
兼容在 MySQL 失效时依然能够运行。
1、系统支持
- Anaconda3 : Anaconda 指的是一个开源的 Python 发行版本,其包含了 conda、Python 等 180 多个科学包及其依赖项
- Python : Python version >= 3.7
- supervise : 系统进程监控管理
- shell script : 启动、停止、检查各个阶段的脚本
- Hadoop 客户端
- hive 客户端
2、部署安装
# groupadd flume
# useradd -g flume flume
# passwd flume
# su - flume
$ conda create -n higo_3.7 python=3.7 # 创建一个名叫 higo_3.7 的基于 Python3 的环境
$ source activate higo_3.7 # 切换环境到 hiigo_3.7
$ conda install -n higo_3.7 PyMySQL # 安装 Python3 MySQL 数据库连接 - PyMySQL 驱动
$ conda install -n higo_3.7 pyyaml # 安装 PyYAML
$ pip install webhdfspy # A Python 2/3 wrapper library to access Hadoop WebHDFS REST API
$ git clone git@github.com:SHOWufei/flume_log_treater_metl.git
$ cd flume_log_treater_metl
$ cd /home/flume/flume_log_treater_metl/bin/ && bash start-all.sh # 启动各阶段服务
$ cd /home/flume/flume_log_treater_metl/bin/ && bash stop-all.sh # 停止各阶段服务
$ cd /home/flume/flume_log_treater_metl/bin/ && bash check-supervise.sh # 检查各阶段服务
3、在 HIGO 的使用
4、异常情况处理
日志没有正确导入,如何发现❓
通过 HUE 查看最新导入的 partition 时间:http://hue.data.lehe.com/filebrowser/#/user/hive/warehouse/higo_v_log(举个例子:higo_v_log)
查看 metl log block 记录库的情况:
MySQL | HOST | PORT | DB | TB | group_id |
---|---|---|---|---|---|
yz-bi-store00.lehe.com | 10.20.2.22 | 3411 | higo_bilog | log_block_galaxy |
|
举个例子:mysql> select id,group_id,status,log_date,error_times,block_name from log_block_galaxy where group_id = 'gz_higo_v_log' and log_date = '2020-06-01'; |
METL 日志处理状态说明:
Status | Mode | Annotation | Log path | Code entry |
---|---|---|---|---|
0 | monitor | 监视 Flume 是否成功写入 HDFS,成功则 replace into log_block_galaxy 一条数据,status 为 0 | /home/flume/flume_log_treater_metl /supervise /%(group_id)s /%(mode)% /logs /log_treater.log | monitor_block.py |
1 | extract | 提取模块检索是否有 status 为 0 的未处理的新日志,如果有,把 status 更新为 1 | extract_block.py | |
2 | 提取模块检索是否有 status 为 1 的待提取的新日志,如果有,则更新更新日志块信息解析模块做好相关准备,更新 status 为 2 | |||
3 | transform | 解析模块检索是否有 status 为 2 的未解析的新下载日志,如果有,把 status 更新为 3,为下一步提交 Hadoop 作业做准备 | transform_block.py | |
4 | 解析模块检索是否有 status 为 3 的待提交的 hadoop 作业,如果有,则提交 hadoop 作业,hadoop cmd 相关一系列操作成功后则更新 status 为 4 | |||
5 | load | 上传模块检索是否有 status 为 4 的未上传导入 hive 表的任务,如果有,把 status 更新为 5,为下一步导入 hive 表做准备 | load_block.py | |
6 | 上传模块检索是否有 status 为 5 的待导入 hive 表的任务,如果有,则根据导入模式,在分区追加或覆盖,追加或覆盖相关一系列操作成功后则更新 status 为 6,服务成功,至此结束该服务 |
如何修复❓
查看是不是 METL 故障,可以根据 MySQL 中记录的 status 到 METL 机器到对应的 log path 下分析日志找到错误原因。
4.1 将对应的未处理的 block 的 status 重置为 0,error_times 重置为 0 即可重新自动进行 METL
或者
| = ... |
in(...) | |
between ... and ... | |
group_id:gz_higo_v_log、gz_higo_main_log、gz_higo_wap_log、gz_higo_utm_log、gz_higo_glk_log、gz_higo_php_statistics_register_log |
4.2 如果 MySQL 中记录缺失,举个例子以此形式插入,即可重新自动进行 METL
缺失的记录可从 HDFS 相关目录中查询:http://yz-higo-nn1:8088/explorer.html#/user/flume/data
replace into log_block_galaxy(group_id,block_name,create_time,modify_time,log_date,block_file_path_in_client,status,last_update_time,client_host,client_user,error_times) values('gz_higo_v_log','higo_v_log-2020-06-02.1591106437654','2020-06-02 22:30:37','2020-06-02 22:30:37','2020-06-02','/user/flume/data/gz_higo_v_log/higo_v_log-2020-06-02.1591106437654',0,'2020-06-02 22:30:37','10.20.3.34','flume',0);