多项目百库百表慢日志切割
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,问题描述:多个项目,有些项目分库分表分布在多个节点,因此,对慢日志的切割并且收集对于慢日志分析来说是极其必要的。实现方案:①环境准备Host1 : ftp服务器(192.168.xx.xxx),用于集
千家信息网最后更新 2025年01月20日多项目百库百表慢日志切割问题描述:
多个项目,有些项目分库分表分布在多个节点,因此,对慢日志的切割并且收集对于慢日志分析来说是极其必要的。
实现方案:
①环境准备
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安全错误
数据库的锁怎样保障安全
网络安全团课心得1000字
网络安全系列征文
国防科技大学互联网大会
网络安全二本
电商网络技术哪个好
创益科技网络技术
福建品牌软件开发电话多少
蚂蚁金服数据库技术
敏感数据库
整车控制器软件开发流程
空军计算机网络技术士官
另类服务器
pdo连接数据库的方式
深圳oa软件开发设计
网络安全攻防演练存在问题
南京趣融网络技术有限公司产品
计算机网络安全测试
通信网络安全防护系统怎么填写
如何安装dns服务器
网络安全你我他作文评语
做时间服务器的关键是什么
小学不沉迷网络安全教育视频
无忧考吧三级网络技术破解版
数据库相关的法律法规
江苏省网络技术应用
大连网络技术研究院
潼南区一站式软件开发流程售价
小区一卡通管理数据库连接失败
网络安全问题防护论文
中国和韩国网络安全技术