基于 Flume 的 Python 日志处理 METL 系统

6 篇文章 0 订阅
6 篇文章 0 订阅

目录

一、Flume 日志收集系统

1、一图了解 HIGO 新日志收集系统

2、Flume 日志汇聚(Flume NG 之 HIGO 实际应用方案)

3、Python 日志处理 METL 系统

二、METL❓

1、系统支持

2、部署安装

3、在 HIGO 的使用

4、异常情况处理

4.1 将对应的未处理的 block 的 status 重置为 0,error_times 重置为 0 即可重新自动进行 METL

4.2 如果 MySQL 中记录缺失,举个例子以此形式插入,即可重新自动进行 METL


一、Flume 日志收集系统

1、一图了解 HIGO 新日志收集系统

 

2、Flume 日志汇聚(Flume NG 之 HIGO 实际应用方案

AgentHostnameIPUserPathLogTopic
Agent00yz-sre-wannx00.lehe.com10.20.201.242flume/home/flume/flumeng/
  • /usr/local/openresty/nginx/logs/v.lehe.access.log
  • /usr/local/openresty/nginx/logs/www.lehe.access.log
  • /usr/local/openresty/nginx/logs/m.lehe.access.log
  • /usr/local/openresty/nginx/logs/a.lehe.access.log
  • /usr/local/openresty/nginx/logs/pages.w.lehe.access.log
  • /usr/local/openresty/nginx/logs/lehe.access.log
  • higo_v_log
  • higo_wap_log
  • higo_main_log
  • higo_utm_log
  • higo_glk_log
  • higo_other_log
Agent01yz-sre-wannx01.lehe.com10.20.202.238
Agent02yz-higo-preonline01.lehe.com10.20.0.86
  • /opt/logs/higo/riskcontrol/risk.control.login${risk_logtime}.log
  • /opt/logs/higo/riskcontrol/risk.control.order${risk_logtime}.log
  • /opt/logs/higo/riskcontrol/risk.control.register${risk_logtime}.log
  • higo_php_statistics_login_log
  • higo_php_statistics_order_log
  • higo_php_statistics_register_log
Collector00yz-bi-store03.lehe.com10.20.3.34--
Failover00yz-bi-store02.lehe.com10.20.5.67--

3、Python 日志处理 METL 系统

服务器IP用户部署路径日志分类模块状态
yz-bi-web01.lehe.com10.20.2.21flume/home/flume/flume_log_treater_metl
  • gz_higo_glk_log
  • gz_higo_main_log
  • gz_higo_utm_log
  • gz_higo_v_log
  • gz_higo_wap_log
  • gz_higo_php_statistics_register_log
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、系统支持

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 记录库的情况:

MySQLHOSTPORTDBTBgroup_id
yz-bi-store00.lehe.com10.20.2.223411higo_biloglog_block_galaxy
  • gz_higo_glk_log
  • gz_higo_main_log
  • gz_higo_utm_log
  • gz_higo_v_log
  • gz_higo_wap_log
  • gz_higo_php_statistics_register_log
举个例子: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 日志处理状态说明:

StatusModeAnnotationLog pathCode entry
0monitor监视 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
5load上传模块检索是否有 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

mysql> update log_block_galaxy set error_times = 0, status = 0 where id

或者

mysql> update log_block_galaxy set error_times = 0, status = 0 where log_date

= ...
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);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值