xml地图|网站地图|网站标签 [设为首页] [加入收藏]

【皇家赌场网址】MongoDB日志文件过大的解决方法

来源:http://www.ccidsi.com 作者:最新解决方案 人气:148 发布时间:2019-06-05
摘要:MongoDB的日志文件在设置 logappend=true的景况下,会没完没了向同一日志文件扩展的,时间长了,自然变得老大大。 前言 本文实例讲述了PHP简单达成定期监察和控制nginx日志文件功效。分

MongoDB的日志文件在设置 logappend=true 的景况下,会没完没了向同一日志文件扩展的,时间长了,自然变得老大大。

前言

本文实例讲述了PHP简单达成定期监察和控制nginx日志文件功效。分享给大家供大家仿效,具体如下:

赶尽杀绝如下:(特别注意:运转的时候必须是--logpath内定了log路线的)

实在所谓自动分割MongoDB日志文件,正是指Rotate MongoDB log files,即让MongoDB每一日(或每个礼拜,可自定义调整)生成八个日志文件,而不是将MongoDB全部的运营日志都停放在3个文件中,那样各种日志文件都相对不大,定位难题也更便于。

此意义是为着落到实处,定期监察和控制nginx生成的日记数据,并将猛增的数据交由到3个接口(比方大数据的接口,让大数量来开展辨析)

用mongo连接到服务端

完结机关分割MongoDB日志的法子可以参谋:

define("MAX_SHOW", 8192*5); //新增数据提交阈值
define("LOG_NAME", ""); //读取的日志文件
define("LOG_SIZE", ""); //保留上次读取的位置
define("LOG_URL", ""); //日志提交地址
//运行时log文件原始大小
$log_size    = get_filesize();
$file_size     = filesize(LOG_NAME);
if(empty($log_size)){//没有记录上次位置,则从当前位置开始
  $file_size = $file_size;
}else if($log_size > $file_size){ //说明是第二天的日志文件,指针放到文件头
  $file_size = 0;
}else{ //从上次记录的位置开始
  $file_size = $log_size;
}
$file_size_new   = 0;
$add_size     = 0;
$ignore_size   = 0;
$fp = fopen(LOG_NAME, "r");
while(1){
  clearstatcache();
  $read_num = 0;
  $file_size_new = filesize(LOG_NAME);
  $add_size = $file_size_new - $file_size;
  $add_data = array();
  $add_log = '';
  if($add_size > 0){
    //大于一个阈值提交数据
    if($add_size > MAX_SHOW){
      fseek($fp, $file_size);
      //当增加量超过8192,需要分页读取增加量
      $page = ceil($add_size/8192);
      for($i=1; $i<=$page; $i  ){
        if($i == $page){//最后一页
          $end_add = $add_size - ($page -1) * 8192;
          $add_log .= fread($fp, $end_add);
        }else{
          $add_log .= fread($fp, 8192);
          $file_size_step = $file_size   $i * 8192;
          fseek($fp, $file_size_step);
        }
      }
      $add_data['add_log'] = $add_log;
      $add_data['add_log'] = base64_encode($add_data['add_log']);
      http_post(LOG_URL, $add_data);
      $file_size = $file_size_new;
      //记录当前位置
      save_filesize($file_size);
    }
  }else if($add_size < 0){ //第二天从头部开始
    $file_size = 0;
  }
  sleep(2);
}
fclose($fp);
/**
 * 每次启动时获取上次打开文件位置
 */
function get_filesize(){
  $size = file_get_contents(LOG_SIZE);
  return $size;
}
/**
 * 每次提交后保存这次读取文件的位置
 */
function save_filesize($size){
  return file_put_contents(LOG_SIZE, $size);
}
/**
 * http请求
 * @param array $data
 * @return boolean
 */
function http_post($url = '', $data = array())
{
  if(empty($url)){
    return FALSE;
  }
  if($data){
    $data = http_build_query($data);
  }
  $ch = curl_init ();
  curl_setopt ( $ch, CURLOPT_URL, $url );
  curl_setopt ( $ch, CURLOPT_POST, 1 );
  curl_setopt ( $ch, CURLOPT_HEADER, 0 );
  curl_setopt ( $ch, CURLOPT_TIMEOUT, 5 );
  curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
  curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data );
  $return = curl_exec ( $ch );
  curl_close ( $ch );
  return $return;
}

复制代码 代码如下:

现今以二个MongoDB实例为例,能够写三个脚本来完结全自动分割MongoDB日志

备注:由于日记文件过了凌晨会切割,所以须求做一下论断,判别是第三天的日志需求从日记文件底部进行读取

use admin  //切换到admin数据库
db.runCommand({logRotate:1})

1、配置MongoDB实例运维参数

急需优化的逻辑:其中等进度挂了,停了一段时间,再运维时,从上次的地点再度读取,提交的数据会相当的大,或者会超越提交数据大小的限量

诸如此类会使mongo关闭当明天记文件,重启四个新的日记文件,无需停止mongodb服务。

security: 
 keyFile: /usr/local/mongodb/authentication/keyFile 
sharding: 
 clusterRole: shardsvr 
replication: 
 replSetName: rs3 
net: 
 port: 27023 
storage: 
 dbPath: /data/db_delay_rs3 
systemLog: 
 path: /data/log_delay_rs3/mongodb.log 
 destination: file 
 logAppend: true 
 logRotate: rename 
processManagement: 
 fork: true 

更加多关于PHP相关内容感兴趣的读者可查看本站专项论题:《PHP日志操作技能总计》、《php文件操作总括》、《PHP数组(Array)操作工夫大全》、《PHP基本语法入门教程》、《php字符串(string)用法计算》、《php mysql数据库操作入门教程》及《php常见数据库操作手艺汇总皇家赌场网址,》

你或者感兴趣的稿子:

  • Node.js和MongoDB达成简单日志深入分析系统
  • MongoDB运维日志达成机关分割的章程实例
  • nginx日志配置指令详解
  • 达成Nginx中应用PHP-FPM时记下PHP错误日志的布署格局
  • nginx php-fpm中启用慢日志配置(用于检查测试试行比较慢的PHP脚本)
  • Linux服务器nginx访问日志里出现多量http 400不当的呼吁分析
  • nginx访问日志并删除钦定天数前的日志记录配置方式
  • nginx日志切割shell脚本
  • Python 深入分析Nginx访问日志并保留到MySQL数据库实例
  • 选用MongoDB解析Nginx日志的章程详解

布局MongoDB系统日志保存路线,并安排logRotate参数为rename

目的在于本文所述对我们PHP程序设计有着帮助。

本文由68399皇家赌场发布于最新解决方案,转载请注明出处:【皇家赌场网址】MongoDB日志文件过大的解决方法

关键词: 68399皇家赌场

上一篇:数据库的操作,添加删除节点的2种方法

下一篇:没有了

最火资讯