多项目百库百表慢日志切割
发表于:2024-11-19 作者:千家信息网编辑
千家信息网最后更新 2024年11月19日,问题描述:多个项目,有些项目分库分表分布在多个节点,因此,对慢日志的切割并且收集对于慢日志分析来说是极其必要的。实现方案:①环境准备Host1 : ftp服务器(192.168.xx.xxx),用于集
千家信息网最后更新 2024年11月19日多项目百库百表慢日志切割问题描述:
多个项目,有些项目分库分表分布在多个节点,因此,对慢日志的切割并且收集对于慢日志分析来说是极其必要的。
实现方案:
①环境准备
Host1 : ftp服务器(192.168.xx.xxx),用于集中存储各项目每天(可脚本自定义)的日志
Host2 : mysql服务器(192.168.xx.xxx),用于存储配置相关的参数(如需要收集的日志host,user,pwd,日志位置等信息),之后用于脚本的查询调用。
Host3 : 执行操作的机器(192.168.xx.xxx) ,即执行脚本设置定时任务的机器
②脚本准备
涉及到两个脚本,logrotate.sh 以及 job.sh
其中job.sh用于批量执行的mysql中存储的相关host的操作,job.sh调用logrotate.sh
logrotate.sh用于在各台需要收集日志的机器上实际的执行操作
mysql配置表结构及数据如下(注意添加一个所有机器都能查询该表的一个账号):
job.sh脚本如下:
logrotate.sh脚本内容如下:
在Host2(ftp)上查看操作结果
③过程描述
1 . job.sh 查询DB_SPLIT_LOG.t_log_info表中的所有host_ip ssh_user ssh_pwd ,然后循环远程执行脚本logrotate.sh
2 . logrotate.sh 首先查询本机ip ,然后根据本机ip获取DB_SPLIT_LOG.t_log_info表中对应的log_dir lot_file game ftp相关信息
3 . 生成logrotate的配置文件
4 . 进行切割
5 . 更改切割出来的日志名称
6 . 上传到ftp
7 . 清空临时文件
注意点:logrotate所切割的文件产生的结果必须和源文件在一个分区上(即你切割的结果文件slow.log-2016-10-25和原来的slow.log文件),不然切割会不成功。
另 : 该脚本适用于任何日志文件的切割与收集。只需要在DB_SPLIT_LOG.t_log_info表中添加相应的记录即可。
多个项目,有些项目分库分表分布在多个节点,因此,对慢日志的切割并且收集对于慢日志分析来说是极其必要的。
实现方案:
①环境准备
Host1 : ftp服务器(192.168.xx.xxx),用于集中存储各项目每天(可脚本自定义)的日志
Host2 : mysql服务器(192.168.xx.xxx),用于存储配置相关的参数(如需要收集的日志host,user,pwd,日志位置等信息),之后用于脚本的查询调用。
Host3 : 执行操作的机器(192.168.xx.xxx) ,即执行脚本设置定时任务的机器
②脚本准备
涉及到两个脚本,logrotate.sh 以及 job.sh
其中job.sh用于批量执行的mysql中存储的相关host的操作,job.sh调用logrotate.sh
logrotate.sh用于在各台需要收集日志的机器上实际的执行操作
mysql配置表结构及数据如下(注意添加一个所有机器都能查询该表的一个账号):
job.sh脚本如下:
点击(此处)折叠或打开
- #!/bin/bash
- mysql_host=192.168.xx.xxx
- mysql_port=3456
- mysql_user=xxx
- mysql_pwd=xxxxxx
- function get_info {
- cmd=`which mysql`
- $cmd -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_pwd -BNe "select * from DB_SPLIT_LOG.t_log_info;" | while read line
- do
- host_ip=`echo $line | awk '{print $3}'`
- ssh_user=`echo $line | awk '{print $9}'`
- ssh_pwd=`echo $line | awk '{print $10}'`
- /usr/bin/sshpass -p $ssh_pwd ssh -o StrictHostKeyChecking=no $ssh_user@$host_ip "bash " < logrotate.sh
- done
- }
- get_info
logrotate.sh脚本内容如下:
点击(此处)折叠或打开
- #!/bin/bash
- declare game
- declare slow_log
- declare ftp_host
- declare ftp_user
- declare ftp_pwd
- declare ssh_pwd
- declare local_ip
- declare log_name
- declare old_dir
- declare tmp_conf
- declare tran_log_dir
- declare tran_log
- dev=eth2
- mysql_host=192.168.xx.xxx
- mysql_port=3456
- mysql_user=xxx
- mysql_pwd=xxxxx
- mysql_db=DB_SPLIT_LOG
- date=`date +%Y%m%d`
- function get_ip {
- local_ip=`/sbin/ifconfig| grep -A 1 "$dev" | grep -i 'inet addr' | head -1 | awk -F[:] '{print $2}' | cut -d' ' -f1`
- }
- function get_info {
- cmd=`which mysql`
- argvs=`$cmd -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_pwd -BNe "select * from DB_SPLIT_LOG.t_log_info where host_ip='${local_ip}' limit 1;"`
- game=`echo $argvs | awk '{print $2}'`
- local_ip=`echo $argvs | awk '{print $3}'`
- old_dir=`echo $argvs | awk '{print $4}'`
- slow_log=`echo $argvs | awk '{print $5}'`
- ftp_host=`echo $argvs | awk '{print $6}'`
- ftp_user=`echo $argvs | awk '{print $7}'`
- ftp_pwd=`echo $argvs | awk '{print $8}'`
- log_name=${game}_`date +%Y%m%d`_$local_ip.slow
- tmp_conf=$old_dir/logrotate_${date}.conf
- mkdir -p /tmp/slow_tran_log
- tran_log_dir=/tmp/slow_tran_log
- tran_log=$tran_log_dir/${date}.log
- }
- function operation_log {
- exec 1>$tran_log
- exec 2>$tran_log
- }
- function create_rotate_conf {
- echo """
- $slow_log {
- daily
- copytruncate
- dateext
- create 0660 mysql mysql
- olddir $old_dir
- rotate 1
- }
- """ > $tmp_conf
- }
- function start_logrotate {
- echo ""
- /usr/sbin/logrotate -vf $tmp_conf
- }
- function change_logname {
- echo ""
- for file in `find $old_dir -maxdepth 1 -type f -name "*slow*${date}*"`
- do
- echo $file
- done
- echo "change log name $file to ${old_dir}/${log_name}"
- mv $file ${old_dir}/${log_name}
- }
- function ftp_put {
- echo ""
- echo "start ftp put $log_name"
- ftp -in <<EOF
- open $ftp_host
- user $ftp_user $ftp_pwd
- mkdir $game
- cd $game
- lcd $old_dir
- mput $log_name
- quit
- EOF
- echo "ftp put $log_name over!"
- }
- function clear_tmp_file {
- echo ""
- echo "clear tmp file"
- cd $old_dir
- echo "cd $old_dir "
- echo "rm -f $tmp_conf "
- echo "rm -f $log_name "
- rm -f $tmp_conf
- rm -f $log_name
- }
- get_ip
- get_info
- operation_log
- create_rotate_conf
- start_logrotate
- change_logname
- ftp_put
- clear_tmp_file
在Host2(ftp)上查看操作结果
③过程描述
1 . job.sh 查询DB_SPLIT_LOG.t_log_info表中的所有host_ip ssh_user ssh_pwd ,然后循环远程执行脚本logrotate.sh
2 . logrotate.sh 首先查询本机ip ,然后根据本机ip获取DB_SPLIT_LOG.t_log_info表中对应的log_dir lot_file game ftp相关信息
3 . 生成logrotate的配置文件
4 . 进行切割
5 . 更改切割出来的日志名称
6 . 上传到ftp
7 . 清空临时文件
注意点:logrotate所切割的文件产生的结果必须和源文件在一个分区上(即你切割的结果文件slow.log-2016-10-25和原来的slow.log文件),不然切割会不成功。
另 : 该脚本适用于任何日志文件的切割与收集。只需要在DB_SPLIT_LOG.t_log_info表中添加相应的记录即可。
脚本
日志
文件
机器
查询
项目
结果
存储
配置
两个
任务
信息
多个
服务器
本机
准备
服务
必要
成功
上将
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
商业计划软件开发
山东工程项目管控软件开发平台
c ado连接数据库
妄想山海捏脸数据库狼人
软件开发员的职业发展
服务器多重网络环境不可达
消防开展手机网络安全隐患排查
成都任我行网络技术有
服务器搭建注意事项
2018年华为软件开发收入
服务器怎样开启telnet功能
hp服务器配置管理账号密码
有机晶体数据库xrd
简单数据库购物车
深圳市方腾网络技术有限公司
江苏数字化城管软件开发系统
保密网络安全实施计划
cdn服务器和代理服务器区别
上证指数十年数据库
碟中谍4网络安全
普京拜登网络安全
磊科no1改打印服务器
不要正版的服务器
互联网蒜泥科技
数据库定时备份脚本
关于网络安全法培训的通知
金融领域服务器 无故障小时
数招软件开发与大数据区别
高新区信息化软件开发系统
山东新能源软件开发价格表格