多項(xiàng)目百庫(kù)百表慢日志切割

問(wèn)題描述:

    多個(gè)項(xiàng)目,有些項(xiàng)目分庫(kù)分表分布在多個(gè)節(jié)點(diǎn),因此,對(duì)慢日志的切割并且收集對(duì)于慢日志分析來(lái)說(shuō)是極其必要的。

實(shí)現(xiàn)方案:

    ①環(huán)境準(zhǔn)備

    Host1 : ftp服務(wù)器(192.168.xx.xxx),用于集中存儲(chǔ)各項(xiàng)目每天(可腳本自定義)的日志
    Host2 : MySQL服務(wù)器(192.168.xx.xxx),用于存儲(chǔ)配置相關(guān)的參數(shù)(如需要收集的日志host,user,pwd,日志位置等信息),之后用于腳本的查詢(xún)調(diào)用。
    Host3 : 執(zhí)行操作的機(jī)器(192.168.xx.xxx) ,即執(zhí)行腳本設(shè)置定時(shí)任務(wù)的機(jī)器

    ②腳本準(zhǔn)備

    涉及到兩個(gè)腳本,logrotate.sh 以及 job.sh
    其中job.sh用于批量執(zhí)行的mysql中存儲(chǔ)的相關(guān)host的操作,job.sh調(diào)用logrotate.sh
    logrotate.sh用于在各臺(tái)需要收集日志的機(jī)器上實(shí)際的執(zhí)行操作

    mysql配置表結(jié)構(gòu)及數(shù)據(jù)如下(注意添加一個(gè)所有機(jī)器都能查詢(xún)?cè)摫淼囊粋€(gè)賬號(hào)):

    多項(xiàng)目百庫(kù)百表慢日志切割

    多項(xiàng)目百庫(kù)百表慢日志切割


    job.sh腳本如下:
    

點(diǎn)擊(此處)折疊或打開(kāi)

成都創(chuàng)新互聯(lián)公司專(zhuān)注于寧縣企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站設(shè)計(jì),商城網(wǎng)站開(kāi)發(fā)。寧縣網(wǎng)站建設(shè)公司,為寧縣等地區(qū)提供建站服務(wù)。全流程定制設(shè)計(jì),專(zhuān)業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)公司專(zhuān)業(yè)和態(tài)度為您提供的服務(wù)

  1. #!/bin/bash


  2. mysql_host=192.168.xx.xxx
  3. mysql_port=3456
  4. mysql_user=xxx
  5. mysql_pwd=xxxxxx


  6. function get_info {
  7.     cmd=`which mysql`
  8.     $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
  9.     do
  10.         host_ip=`echo $line | awk '{print $3}'`
  11.         ssh_user=`echo $line | awk '{print $9}'`
  12.         ssh_pwd=`echo $line | awk '{print $10}'`
  13.         /usr/bin/sshpass -p $ssh_pwd ssh -o StrictHostKeyChecking=no $ssh_user@$host_ip "bash " < logrotate.sh
  14.     done
  15. }

  16. get_info

    logrotate.sh腳本內(nèi)容如下:

點(diǎn)擊(此處)折疊或打開(kāi)

  1. #!/bin/bash


  2. declare game
  3. declare slow_log
  4. declare ftp_host
  5. declare ftp_user
  6. declare ftp_pwd
  7. declare ssh_pwd
  8. declare local_ip
  9. declare log_name
  10. declare old_dir
  11. declare tmp_conf
  12. declare tran_log_dir
  13. declare tran_log

  14. dev=eth2
  15. mysql_host=192.168.xx.xxx
  16. mysql_port=3456
  17. mysql_user=xxx
  18. mysql_pwd=xxxxx
  19. mysql_db=DB_SPLIT_LOG

  20. date=`date +%Y%m%d`



  21. function get_ip {
  22.     local_ip=`/sbin/ifconfig| grep -A 1 "$dev" | grep -i 'inet addr' | head -1 | awk -F[:] '{print $2}' | cut -d' ' -f1`
  23. }

  24. function get_info {
  25.     cmd=`which mysql`
  26.     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;"`
  27.     game=`echo $argvs | awk '{print $2}'`
  28.     local_ip=`echo $argvs | awk '{print $3}'`
  29.     old_dir=`echo $argvs | awk '{print $4}'`
  30.     slow_log=`echo $argvs | awk '{print $5}'`
  31.     ftp_host=`echo $argvs | awk '{print $6}'`
  32.     ftp_user=`echo $argvs | awk '{print $7}'`
  33.     ftp_pwd=`echo $argvs | awk '{print $8}'`


  34.     log_name=${game}_`date +%Y%m%d`_$local_ip.slow
  35.     tmp_conf=$old_dir/logrotate_${date}.conf
  36.     mkdir -p /tmp/slow_tran_log
  37.     tran_log_dir=/tmp/slow_tran_log
  38.     tran_log=$tran_log_dir/${date}.log
  39. }


  40. function operation_log {
  41.     exec 1>$tran_log
  42.     exec 2>$tran_log
  43. }

  44. function create_rotate_conf {
  45.     echo """
  46.     $slow_log {
  47.         daily
  48.         copytruncate
  49.         dateext
  50.         create 0660 mysql mysql
  51.         olddir $old_dir
  52.         rotate 1
  53.     }
  54.     """ > $tmp_conf
  55. }


  56. function start_logrotate {
  57.     echo ""
  58.     /usr/sbin/logrotate -vf $tmp_conf
  59. }


  60. function change_logname {
  61.     echo ""

  62.     for file in `find $old_dir -maxdepth 1 -type f -name "*slow*${date}*"`
  63.     do
  64.         echo $file
  65.     done
  66.     echo "change log name $file to ${old_dir}/${log_name}"
  67.     mv $file ${old_dir}/${log_name}
  68. }

  69. function ftp_put {
  70.     echo ""
  71.     echo "start ftp put $log_name"
  72.     ftp -in <<EOF
  73.     open $ftp_host
  74.     user $ftp_user $ftp_pwd
  75.     mkdir $game
  76.     cd $game
  77.     lcd $old_dir
  78.     mput $log_name
  79.     quit
  80. EOF
  81.     echo "ftp put $log_name over!"
  82. }

  83. function clear_tmp_file {
  84.     echo ""
  85.     echo "clear tmp file"
  86.     cd $old_dir
  87.     echo "cd $old_dir "
  88.     echo "rm -f $tmp_conf "
  89.     echo "rm -f $log_name "
  90.     rm -f $tmp_conf
  91.     rm -f $log_name
  92. }

  93. get_ip
  94. get_info
  95. operation_log
  96. create_rotate_conf
  97. start_logrotate
  98. change_logname
  99. ftp_put
  100. clear_tmp_file
        在Host3上將兩個(gè)腳本置于一個(gè)目錄之下,然后添加一個(gè)定時(shí)任務(wù)

        多項(xiàng)目百庫(kù)百表慢日志切割

        
        在Host2(ftp)上查看操作結(jié)果
        
        多項(xiàng)目百庫(kù)百表慢日志切割


       ③過(guò)程描述
        1 .  job.sh 查詢(xún)DB_SPLIT_LOG.t_log_info表中的所有host_ip ssh_user ssh_pwd ,然后循環(huán)遠(yuǎn)程執(zhí)行腳本logrotate.sh
        2 . logrotate.sh 首先查詢(xún)本機(jī)ip ,然后根據(jù)本機(jī)ip獲取DB_SPLIT_LOG.t_log_info表中對(duì)應(yīng)的log_dir lot_file game ftp相關(guān)信息
        3 . 生成logrotate的配置文件
        4 . 進(jìn)行切割
        5 . 更改切割出來(lái)的日志名稱(chēng)
        6 . 上傳到ftp
        7 . 清空臨時(shí)文件
    
    注意點(diǎn):logrotate所切割的文件產(chǎn)生的結(jié)果必須和源文件在一個(gè)分區(qū)上(即你切割的結(jié)果文件slow.log-2016-10-25和原來(lái)的slow.log文件),不然切割會(huì)不成功。

    另 : 該腳本適用于任何日志文件的切割與收集。只需要在DB_SPLIT_LOG.t_log_info表中添加相應(yīng)的記錄即可。


網(wǎng)頁(yè)名稱(chēng):多項(xiàng)目百庫(kù)百表慢日志切割
標(biāo)題網(wǎng)址:http://bm7419.com/article46/jdsoeg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、做網(wǎng)站、、域名注冊(cè)、移動(dòng)網(wǎng)站建設(shè)網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)