精华内容
下载资源
问答
  • 智能电网对数据的准确性、可靠性、实时性的要求越来越高,然而目前电网状态监测方面存在着系统繁多、数据多源异构以及质量不高等问题。因此,本文以南方电网“西电东送”主通道为背景,整合现有输变电设备状态监测...
  • IPTV端到端业务质量监测技术研究

    千次阅读 2011-01-11 12:55:00
    摘要 在IPTV业务的实际运营中,如何保证和监测端到端的业务质量是运营商关注的主要问题。本文首先介绍了IPTV业务质量的定义和业务质量模型,并从运营商角度提出了业务质量监测的需求。之后介绍了目前IPTV质量监测...

     

    1、引言

      随着近几年在业务融合、技术、标准以及商业模式等方面的摸索,IPTV业务在中国开始逐步成熟并进入到规模商用阶段。IPTV作为一种电信级业务,要达到大规模应用需要有效的业务质量保障。由于IPTV是电视类的媒体业务,用户希望得到如同有线电视的服务水平,包括频道切换速度、节目的图像质量、播放的流畅性等。而传统的宽带业务质量监测侧重于数据链路层和网络层的监测,无法直接反映用户对IPTV业务的主观感受,因此不能满足IPTV质量监测的需求。

      本文针对现有监测方案的不足,提出了一种采用分布式部署与集中管理相结合的监测方案,该方案具有监测功能丰富、可扩展性强等优点,可满足现阶段IPTV业务质量监测的需要。

    2、业务质量定义及模型

      业务质量(quality of service,QoS)术语并不是针对IPTV的,在很多电信业务中都提出QoS要求及相关的QoS保障技术。在ITU-T E.800[1]标准中,QoS被定义为“反映用户对业务使用满意程度的服务性能的综合效果”。对传统电信业务而言,QoS通常指网络性能,尤其是网络传输性能。而由于IPTV是一种上层应用的业务,传统的QoS无法满足对最终用户感受的评估,因此目前业界往往采用体验质量(quality of experience,QoE)一词来描述面向最终用户应用的业务质量。QoE在ITU-T P.10/G.100[2]中被定义为“最终用户对使用的应用或业务的总体主观可接受程度”,可见QoE相比QoS更强调最终用户的业务使用感受。

      目前尚无国际规范对IPTV业务质量进行完整定义,国际标准组织ITU正在进行IPTV GSI(global standard initial,全球主动标准)工作,以推动全球IPTV标准化进程。其中暂时还没有对IPTV业务质量进行定义,仍沿用了ITU-T P.10/G.100中对QoE的定义。IPTV GSI也指出,IPTV QoE应该同时包含主观评估质量和客观评估质量两部分内容,前者主要根据人眼视觉系统来评估视频质量,通过主观感受来评估体验质量;后者则可以定义各种客观指标,并采用相应的测试工具进行测量,具体如图1所示。


    图1 目前ITU IPTV GSI规定的QoE定义范围

      作者比较赞同ITU IPTV GSI目前对IPTV业务质量的定义,在本文中也采用IPTV QoE来表示IPTV业务质量。当然,从运营商的角度来说不仅仅关心IPTV业务质量定义,更具实际意义的是如何量化IPTV业务质量,如何建立IPTV业务质量的指标体系以指导现网的质量运维。因此,需要根据IPTV所涉及的技术环节,建立IPTV业务质量的评估模型。

      图2参考OSI的7层模型,给出了一种可供参考的IPTV业务质量的参数模型,并展示了与IPTV协议栈之间的对应关系。


    图2 IPTV业务质量模型与OSI 7层模型和IPTV协议栈的关系

    如图2所示,IPTV QoE的参数模型覆盖了OSI 7层模型的所有层次。其中,客观QoE相关的分层质量对应于IPTV的协议栈中各个协议,各层次的质量参数可以通过采集对应的协议及其字段获得。

      具体的,客观QoE包含以下几方面的内容。

      ●内容质量和业务控制质量:主要指直播频道、时移节目、VOD节目、图片、文字等内容的品质和业务控制的性能指标。例如对于直播频道质量,需要采集和分析媒体编码参数、分辨率参数等;对于业务控制质量,需要采集HTTP和RTSP请求的响应速度、页面数据呈现完整度、组播加入/退出的时延等。

      ●流媒体质量:主要指流媒体传输层的性能指标,以采用MPEG2 TS协议传输IPTV节目为例,DVB系统测试标准TR 101-290根据各参数对质量影响的程度不同,定义了3个级别,每个级别分别对应一组质量参数,这些参数同样可供采用MPEG2 TS协议的IPTV系统参考,例如需要采集第一级别中的同步错误字段(sync loss)、包识别丢失(PID missing),第二级别中的数据传输错误(transport error)、节目参考时钟抖动错误(PCR,jitter error)等参数。如果采用RTSP作为VOD节目的流控制协议,则要采集RTSP信令参数。

      ●网络传输层质量:主要指网络传输层相关协议的性能指标,包括TCP/UDP的重传次数,在采用了RTP的情况下,需要监测RTP丢包率、RTP抖动等。

      ●网络层质量:主要指传统IP网络层的性能指标,根据ITU-T Y.1540[3]建议,主要为IP丢包率、IP包时延、IP包抖动及其相关参数。

      ●链路层质量:根据不同的链路层类型,需要采集不同的性能指标。由于这个层次的质量保障是面向全业务而不仅仅是IPTV业务,本文不做详述。

      主观QoE主要是用户对IPTV业务使用中的主观感受,这些感受是对服务接入速度、内容质量、使用操作便利性等多方面的综合,至少可以包含以下参数:

      ●开机进入IPTV主界面的速度;

      ●用户鉴权频道浏览(加入/离开时延);

      ●视频内容的清晰度和流畅程度;

      ●直播频道的切换速度;

      ●VOD节目进行快进、快退和暂停操作的响应速度;

      ●业务请求的响应速度、业务内容的完整性等。

    3、业务质量监测需求

      IPTV业务质量监测应包含两部分,即监控和测试,二者相互关联但又相对独立。其中监控技术主要是面向IPTV运维部门使用,协助IPTV平台及网络运维部门监控网络运行中的质量状态,帮助定位故障和解决问题,因此要求监控技术能够覆盖整个IPTV业务质量领域。测试主要面向IPTV产品研发、性能评估和故障排查等应用,因此测试技术往往针对与IPTV业务质量相关的某一个领域或层面,重点解决某一类问题。

      如前所述,IPTV业务质量监控应该覆盖整个IPTV业务领域,是面向IPTV业务的端到端全网监测,具体应满足以下需求。

      ●满足IPTV业务的7×24 h不间断监测,同时不对正在运营的IPTV系统产生影响。

      ●监测范围能够覆盖整个IPTV网络的各个环节,并能根据各环节采集的参数进行对比分析。这些环节至少包括:内容头端系统、系统核心平台出口、边缘节点出口、关键网络节点等。

      ●当IPTV质量发生劣化时,系统能够自动采集质量劣化的技术参数,并作详细记录;能够通过对比分析各节点参数,进行故障点分析和快速定位。

      ●能够根据采集参数进行平台及服务器的性能分析等。

      ●能够完成图2中质量模型各层次的分析。

      而IPTV业务质量测试主要针对与IPTV业务质量相关的某一个领域或层面,如在实验室进行质量验证或问题和故障发生后进行定位和排障,或针对IPTV某个网元设备进行测试。因此IPTV业务质量测试往往可以借助原来各层面的相关测试工具进行,下面举几个例子。

     

      ●内容质量的测试:主要在实验室或内容上线前,采用专门的质量检测工具进行图像质量、伴音质量、字幕质量、元数据质量等的测试,主要针对直播频道、时移节目、VOD节目、图片、文字等内容的品质和业务控制的性能指标。

      ●流媒体层的测试:主要在系统上线前对流协议的规范性进行测试和验证。

      ●网络传输层、网络层和链路层质量测试:主要采用与应用无关的专用测试软件或仪表测试目前IPTV承载网络的质量状况。

    4、标准及产业链现状

      如前所述,IPTV作为一个新兴的融合性业务,目前还没有非常完备的国际规范。虽然包括ITU IPTV GSI、ATIS(alliance for telecommunication industry solution,电信行业解决方案联盟)、IPTV论坛、DSL论坛、DVB(digital video broadcasting,数字视频广播)等多家国际标准化组织已开始相关的标准化推进工作,但目前尚未正式发布。尽管如此,在IPTV业务质量监测的系统架构、参数建议等方面已取得了较大进展。

      ●ITU IPTV GSI:已经初步完成了IPTV业务质量相关的需求草案和IPTV业务性能监测的草案,目前ITU的相关工作组正在进行后续的工作,计划在2008年底能够成为国际规范。

      ●ATIS:起步较早,在2006年就开始了IPTV QoS指标体系、IPTV QoE模型等相关的制定工作,计划在2008年完成。

      ●DSL论坛:主要关注机顶盒侧与业务质量相关的参数定义,目前已经完成了机顶盒数据模型技术报告(DSL Forum TR135)、可应用于机顶盒的终端广域网管理协议技术报告(DSL Forum TR069)等。

      在产业链支持方面,尽管还没有完整的IPTV业务质量监测技术标准可供参考,但由于IPTV业务的快速部署和运营商对质量监测需求的迫切,市场上已经有多家测试仪表厂商能够提供IPTV质量监测仪表。如前所述,IPTV业务质量监测包含测试和监控两部分,因此这些仪表也可对应地分为测试和监控两大类。

      在测试仪表方面,主要是针对某个层面的专用测试工具,例如美国IneoQuest公司提供的Singulus G1-T系列测试仪表,其主要特征是支持RFC4445定义的MDI指标值,可应用于IPTV数据的模拟、捕捉、数据流监控以及视频质量的分析;思博伦公司提供的IPTV测试解决方案包括宽带网络测试、频道切换测试、频道内容验证等;泰克公司则提供了较为完备的视频质量测试和分析工具,如能够分析H.264编解码参数的MTS4EA,能够测试视频主观质量的PQA仪表等。

      在监控系统方面,目前还没有很完备的、能完全满足运营商需求的解决方案。美国JDSU公司提供的QT系列仪表可应用于IPTV直播频道的7×24 h质量监控,监控的内容包括了网络质量、传输层质量等。因此,目前国内的IPTV运营商开始根据运维需求自主或与合作伙伴联合开发IPTV业务质量监测系统。例如中国电信上海研究院就和国内的中创信测合作开发了IPTV业务质量监测系统,该系统已能够支持现网应用的主流IPTV系统,支持从业务层到网络层的端到端业务质量监测。

    5、IPTV端到端业务质量监测方案

      以下以中国电信上海研究院与中创信测合作开发的IPTV业务质量监测系统为例,介绍IPTV端到端的质量解决方案。该系统是一个独立的分布式系统,叠加在现有IPTV业务网络中,通过部署监测代理或测试探针的方式来获得IPTV业务运行时各个网络节点的相关质量参数数据,并由监测平台进行集中采集、分析和统计,以获得IPTV业务总体质量情况。

      值得一提的是,该方案的系统架构与目前ITU IPTV GSI正在制定的IPTV性能监测标准一致,均采用了“分布部署、集中采集”的系统架构,如图3所示,其中PT指监测点。

     

    图3 目前ITU IPTV GSI定义的业务质量系统架构


    如图3所示,整个系统主要包括监测管理平台、监测代理。

      监测管理平台:负责管理监测代理和采集所有代理上传的监测数据,并执行统计和分析,是整个系统的核心组件。

      监测代理:主要完成业务质量参数的采集和上传,根据部署的监测点不同,又可以分为3种工作模式。

      ●仿真模式:即主动模式,仿真用户的IPTV业务登录、认证及基本业务流程,能够通过预定义的脚本文件,自动进行相关的测试,记录并形成业务质量参数记录文件,上传给监测管理平台所有的性能参数。在图3中,该模式可以部署在PT4和PT5的位置。

      ●监测模式:即被动模式,通过数据镜像或备份的方式获得用户业务数据,分析质量参数,并记录和上传给监测管理平台所有参数。在图3中,该模式可以部署在PT1、PT2和PT3的位置。

      ●机顶盒内嵌模式(STB embedded test agent,STB-TA):在机顶盒内部嵌入测试客户端软件,能够将机顶盒运行中的业务质量参数记录并上传到监测管理平台。在图3中,该模式可以部署在PT1、PT2和PT3的位置。

      当然,从系统角度来看,IPTV监测系统在不同的节点所关注的质量是不同的,因此当监测代理工作在不同的模式下或部署在不同的节点时,所采集的质量参数也不尽相同,这里就不详述了。

      从整个系统的架构可以看出,上述系统基本覆盖了IPTV端到端各个环节,所采集的参数能够帮助完成图2中质量模型客观QoE各个层面的分析,能够协助IPTV平台及网络运维部门监控网络运行中的质量状态,从而帮助定位故障和解决问题。

    6、结束语

      IPTV是一个跨广电网、IP网、电信网的复杂应用,其业务质量监测需要综合考虑视音频内容质量、网络质量、用户最终感受等多重因素。本文对IPTV业务质量监测相关技术进行了研究,并提出了IPTV业务质量模型及性能监测的系统框架。

      但是对于IPTV运维部门来说,需要一整套IPTV业务质量指标体系,希望能够通过类似主观评测分的等级划分来衡量整个IPTV系统质量,并提供可操作的监测手段。因此,后续还需要研究IPTV业务质量指标体系,量化和评估每个指标对最终用户感受的影响,并研究各业务质量指标的采集方法,从而构建完整的IPTV业务质量监测体系,保证IPTV业务的顺利运营。

      参考文献

      1 ITU-T E.800.Terms and definitions related to quality of service and network performance including dependability,August 1994

      2 ITU-T P.10/G.100.Vocabulary for performance and quality of service,July 2006

      3 ITU-T Y.1540.Internet protocol data communication service-IP packet transfer and availability performance parameters,Nov、2007

      4 DSL Forum.www.dslforum.org

     

    展开全文
  • spark脚本监控任务运行状态

    千次阅读 2019-05-05 00:08:31
    如何根据appName监控spark任务,当任务不存在则启动(任务存在当超过多久没有活动状态则kill,等待下次启动) 业务需求 实现一个根据spark任务的appName来监控任务是否存在,及任务是否卡死的监控。 1)给定一个...

    如何根据appName监控spark任务,当任务不存在则启动(任务存在当超过多久没有活动状态则kill,等待下次启动)

    业务需求

    实现一个根据spark任务的appName来监控任务是否存在,及任务是否卡死的监控。

    1)给定一个appName,根据appName从yarn application -list中验证任务是否存在,不存在则调用spark-submit.sh脚本来启动任务;

    2)如果任务存在yarn application -list中,则读取‘监控文件(监控文件内容包括:appId,最新活动时间)’,从监控文件中读取出最后活动的日期,计算当前日期与app的最后活动日期相差时间为X,如果X大于30minutes(认为任务处于假死状态[再发布环境发现有的任务DAG抛出OOM,导致app的executor和driver依然存在,当时不执行任务调度,程序卡死。具体错误详情请参考《https://issues.apache.org/jira/browse/SPARK-26452》]),则执行yarn application -kill appId(杀掉任务),等待下次监控脚本执行时重启任务。

    监控实现
    脚本

    #/bin/sh
    #LANG=zh_CN.utf8
    #export LANG
    export SPARK_KAFKA_VERSION=0.10
    export LANG=zh_CN.UTF-8
    # export env variable
    if [ -f ~/.bash_profile ];
    then
       source ~/.bash_profile
    fi
    source /etc/profile
    
    myAppName='myBatchTopic'               #这里指定需要监控的spark任务的appName,注意:这名字重复了会导致监控失败。
    apps=''
    
    for app in `yarn application -list`
    do
      apps=${app},$apps
    done
    apps=${apps%?}
    
    if [[ $apps =~ $myAppName ]];
    then
      echo "appName($myAppName) exists in yarn application list"
      #1)运行 hadop fs -cat /目录/appName,读取其中最后更新日期;(如果文件不存在,则跳过等待文件生成。)
      monitorInfo=$(hadoop fs -cat /user/dx/streaming/monitor/${myAppName})
      LD_IFS="$IFS"
      IFS=","
      array=($monitorInfo)
      IFS="$OLD_IFS"  
      appId=${array[0]}
      monitorLastDate=${array[1]}
      echo "loading mintor information 'appId:$appId,monitorLastUpdateDate:$monitorLastDate'"
    
      current_date=$(date "+%Y-%m-%d %H:%M:%S")
      echo "loading current date '$current_date'"
      
      #2)与当前日期对比:
      # 如果距离当前日期相差小于30min,则不做处理;
      # 如果大于30min则kill job,根据上边yarn application -list中能获取对应的appId,运行yarn application -kill appId
      t1=`date -d "$current_date" +%s`
      t2=`date -d "$monitorLastDate" +%s`
      diff_minute=$(($(($t1-$t2))/60))
      echo "current date($current_date) over than monitorLastDate($monitorLastDate) $diff_minute minutes"
      if [ $diff_minute -gt 30 ];
      then
        echo 'over then 30 minutes'
        $(yarn application -kill ${appId})
        echo "kill application ${appId}"
      else
        echo 'less than 30 minutes'
      fi
    else
      echo "appName($myAppName) not exists in yarn application list"
      #./submit_x1_x2.sh abc TestRestartDriver #这里指定需要启动的脚本来启动相关任务
      $(nohup ./submit_checkpoint2.sh >> ./output.log 2>&1 &)
    fi
    

    监控脚本业务流程图:
    监控脚本业务流程图

    监控文件生成

    我这里程序是spark structured streaming,因此可以注册sparkSesssion的streams()的query的监听事件

    sparkSession.streams().addListener(new GlobalStreamingQueryListener(sparkSession。。。))
    

    在监听事件中实现如下:

    public class GlobalStreamingQueryListener extends StreamingQueryListener {
        private static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(GlobalStreamingQueryListener.class);
        private static final String monitorBaseDir = "/user/dx/streaming/monitor/";
        private SparkSession sparkSession = null;
        private LongAccumulator triggerAccumulator = null;
    
        public GlobalStreamingQueryListener(SparkSession sparkSession, LongAccumulator triggerAccumulator) {
            this.sparkSession = sparkSession;
            this.triggerAccumulator = triggerAccumulator;
        }
    
        @Override
        public void onQueryStarted(QueryStartedEvent queryStarted) {
            System.out.println("Query started: " + queryStarted.id());
        }
    
        @Override
        public void onQueryTerminated(QueryTerminatedEvent queryTerminated) {
            System.out.println("Query terminated: " + queryTerminated.id());
        }
    
        @Override
        public void onQueryProgress(QueryProgressEvent queryProgress) {
            System.out.println("Query made progress: " + queryProgress.progress());
            // sparkSession.sql("select * from " +
            // queryProgress.progress().name()).show();
    
            triggerAccumulator.add(1);
            System.out.println("Trigger accumulator value: " + triggerAccumulator.value());
    
            logger.info("minitor start .... ");
            try {
                if (HDFSUtility.createDir(monitorBaseDir)) {
                    logger.info("Create monitor base dir(" + monitorBaseDir + ") success");
                } else {
                    logger.info("Create monitor base dir(" + monitorBaseDir + ") fail");
                }
            } catch (IOException e) {
                logger.error("An error was thrown while create monitor base dir(" + monitorBaseDir + ")");
                e.printStackTrace();
            }
    
            // spark.app.id application_1543820999543_0193
            String appId = this.sparkSession.conf().get("spark.app.id");
            // spark.app.name myBatchTopic
            String appName = this.sparkSession.conf().get("spark.app.name");
            String mintorFilePath = (monitorBaseDir.endsWith(File.separator) ? monitorBaseDir : monitorBaseDir + File.separator) + appName;
            logger.info("The application's id is " + appId);
            logger.info("The application's name is " + appName);
            logger.warn("If the appName is not unique,it will result in a monitor error");
    
            try {
                HDFSUtility.overwriter(mintorFilePath, appId + "," + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
            } catch (IOException e) {
                logger.error("An error was thrown while write info to monitor file(" + mintorFilePath + ")");
                e.printStackTrace();
            }
            logger.info("minitor stop .... ");
        }
    
    }
    

    HDFSUtility.java中方法如下:

    public class HDFSUtility {
        private static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(HDFSUtility.class);
    
        /**
         * 当目录不存在时,创建目录。
         * 
         * @param dirPath
         *            目标目录
         * @return true-創建成功;false-失敗。
         * @throws IOException
         * */
        public static boolean createDir(String dirPath) throws IOException {
            FileSystem fs = null;
            Path dir = new Path(dirPath);
            boolean success = false;
            try {
                fs = FileSystem.get(new Configuration());
    
                if (!fs.exists(dir)) {
                    success = fs.mkdirs(dir);
                } else {
                    success = true;
                }
            } catch (IOException e) {
                logger.error("create dir (" + dirPath + ") fail:", e);
                throw e;
            } finally {
                try {
                    fs.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
    
            return success;
        }
    
        /**
         * 覆盖文件写入信息
         * 
         * @param filePath
         *            目标文件路径
         * @param content
         *            被写入内容
         * @throws IOException
         * */
        public static void overwriter(String filePath, String content) throws IOException {
            FileSystem fs = null;
            // 在指定路径创建FSDataOutputStream。默认情况下会覆盖文件。
            FSDataOutputStream outputStream = null;
            Path file = new Path(filePath);
    
            try {
                fs = FileSystem.get(new Configuration());
                if (fs.exists(file)) {
                    System.out.println("File exists(" + filePath + ")");
                }
                outputStream = fs.create(file);
                outputStream.write(content.getBytes());
            } catch (IOException e) {
                logger.error("write into file(" + filePath + ") fail:", e);
                throw e;
            } finally {
                if (outputStream != null) {
                    try {
                        outputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                try {
                    fs.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    

    转载自:https://www.cnblogs.com/yy3b2007com/p/10241914.html

    展开全文
  • 服务器运行状态监控工具

    千次阅读 2014-09-08 11:43:25
    务,因而减少影响业务运作的停机问题避免严重损失。WhatsUp Gold使用全新Web接口与技术 ,让您可以轻松控管 网络设备 与应用服务,以维系企业运作不中断、推动公司持续成长。在 市场上充斥复杂产品的今天,...

    whatsup

    WhatsUp Gold提供完整、易用的监控机制,全方位监控应用服务与网络设备,协助IT管理人员 能将网管信息转变成可阅读的商业信息。WhatsUp Gold能主动监控所有关键网络设备与应用服 务,因而减少影响业务运作的停机问题避免严重损失。WhatsUp Gold使用全新Web接口与技术 ,让您可以轻松控管网络设备与应用服务,以维系企业运作不中断、推动公司持续成长。在 市场上充斥复杂产品的今天,WhatsUp Gold具有操作容易、快速部署、扩充性强、与高投资报 酬率等优势而独树一帜。


    nagios:开源

    1、Nagios作用

    作为系统管理员,最担心那些重要的在线系统在不知情的情况下停机或者停止网络服务,而且那些发生故障的服务或主机有时候可能要好长一段时间才知道(这种情况多发生在节假日),只要一到节假日,很多系统管理员就紧张不已。网络监控软件Nagios的出现改变这种被动局面,它最大的好处是可以发故障报警短信—只要Nagios监控的对象发生故障,系统就会自动发送短信到手机上。

    2、Nagios提供的监控功能

    • 监控网络服务(SMTP、POP3、HTTP、NNTP、PING等);
    • 监控主机资源(处理器负荷、磁盘利用率等);
    • 简单地插件设计使得用户可以方便地扩展自己服务的检测方法;
    • 并行服务检查机制;
    • 具备定义网络分层结构的能力,用"parent"主机定义来表达网络主机间的关系,这种关系可被用来发现和明晰主机宕机或不可达状态;
    • 当服务或主机问题产生与解决时将告警发送给联系人(通过EMail、短信、用户定义方式);
    • 可以定义一些处理程序,使之能够在服务或者主机发生故障时起到预防作用;
    • 自动的日志滚动功能;
    • 可以支持并实现对主机冗余监控;
    • 可选的WEB界面用于查看当前的网络状态、通知和故障历史、日志文件等。

    展开全文
  • MongoDB 运行状态、性能监控,分析

    万次阅读 2014-05-07 16:08:54
    它会间隔固定时间获取mongodb的当前运行状态,并输出。如果你发现数据库突然变慢或者有其他问题的话,你第一手的操作就考虑采用mongostat来查看mongo的状态。 它的输出有以下几列: inserts/s

    这篇文章的目的是让你知道怎么了解你正在运行的Mongdb是否健康。转载自http://tech.lezi.com/archives/290

    mongostat详解

    mongo statmongostat是mongdb自带的状态检测工具,在命令行下使用。它会间隔固定时间获取mongodb的当前运行状态,并输出。如果你发现数据库突然变慢或者有其他问题的话,你第一手的操作就考虑采用mongostat来查看mongo的状态。

    它的输出有以下几列:

    • inserts/s 每秒插入次数
    • query/s 每秒查询次数
    • update/s 每秒更新次数
    • delete/s 每秒删除次数
    • getmore/s 每秒执行getmore次数
    • command/s 每秒的命令数,比以上插入、查找、更新、删除的综合还多,还统计了别的命令
    • flushs/s 每秒执行fsync将数据写入硬盘的次数。
    • mapped/s 所有的被mmap的数据量,单位是MB,
    • vsize 虚拟内存使用量,单位MB
    • res 物理内存使用量,单位MB
    • faults/s 每秒访问失败数(只有Linux有),数据被交换出物理内存,放到swap。不要超过100,否则就是机器内存太小,造成频繁swap写入。此时要升级内存或者扩展
    • locked % 被锁的时间百分比,尽量控制在50%以下吧
    • idx miss % 索引不命中所占百分比。如果太高的话就要考虑索引是不是少了
    • q t|r|w 当Mongodb接收到太多的命令而数据库被锁住无法执行完成,它会将命令加入队列。这一栏显示了总共、读、写3个队列的长度,都为0的话表示mongo毫无压力。高并发时,一般队列值会升高。
    • conn 当前连接数
    • time 时间戳

    使用profiler

    Mongo profile类似于MySQL的slow log, MongoDB可以监控所有慢的以及不慢的查询。

    Profiler默认是关闭的,你可以选择全部开启,或者有慢查询的时候开启。

    1 > use test
    2 switched to db test
    3 > db.setProfilingLevel(2);
    4 {"was" : 0 , "slowms" : 100, "ok" : 1} // "was" is the old setting
    5 > db.getProfilingLevel()
    6 2

    查看Profile日志

    1 > db.system.profile.find().sort({$natural:-1})
    2 {"ts" "Thu Jan 29 2009 15:19:32 GMT-0500 (EST)" "info" :
    3 "query test.$cmd ntoreturn:1 reslen:66 nscanned:0 query: { profile: 2 } nreturned:1 bytes:50" ,
    4 "millis" : 0} ...

    3个字段的意义

    • ts:时间戳
    • info:具体的操作
    • millis:操作所花时间,毫秒

    不多说,此处有官方文档。注意,造成满查询可能是索引的问题,也可能是数据不在内存造成因此磁盘读入造成。

    使用Web控制台

    mongodb web monitorMongodb自带了Web控制台,默认和数据服务一同开启。他的端口在Mongodb数据库服务器端口的基础上加1000,如果是默认的Mongodb数据服务端口(Which is 27017),则相应的Web端口为28017

    这个页面可以看到

    • 当前Mongodb的所有连接
    • 各个数据库和Collection的访问统计,包括:Reads, Writes, Queries, GetMores ,Inserts, Updates, Removes
    • 写锁的状态
    • 以及日志文件的最后几百行(CentOS+10gen yum 安装的mongodb默认的日志文件位于/var/log/mongo/mongod.log)

    可以参考右边的截图

    db.stat()

    获取当前数据库的信息,比如Obj总数、数据库总大小、平均Obj大小等

    01 > use test
    02 switched to db test
    03 > db.stats()
    04 {
    05     "collections" : 9,
    06     "objects" : 4278845,
    07     "avgObjSize" : 224.56603031892953,
    08     "dataSize" : 960883236,
    09     "storageSize" : 1195438080,
    10     "numExtents" : 59,
    11     "indexes" : 13,
    12     "indexSize" : 801931264,
    13     "fileSize" : 6373244928,
    14     "ok" : 1
    15 }

    db.serverStatus()

    获取服务器的状态

    01 {
    02     "version" "1.6.5",
    03     "uptime" : 7208469,
    04     "uptimeEstimate" : 7138829,
    05     "localTime" "Wed Oct 26 2011 22:23:07 GMT+0800 (CST)",
    06     "globalLock" : {
    07         "totalTime" : 7208469556704,
    08         "lockTime" : 4959693717,
    09         "ratio" : 0.000688036992871448,
    10         "currentQueue" : {
    11             "total" : 0,
    12             "readers" : 0,
    13             "writers" : 0
    14         }
    15     },
    16     "mem" : {
    17         "bits" : 64,
    18         "resident" : 3131,
    19         "virtual" : 6172,
    20         "supported" true,
    21         "mapped" : 4927
    22     },
    23     "connections" : {
    24         "current" : 402,
    25         "available" : 2599
    26     },
    27     "extra_info" : {
    28         "note" "fields vary by platform",
    29         "heap_usage_bytes" : 832531920,
    30         "page_faults" : 8757
    31     },
    32     "indexCounters" : {
    33         "btree" : {
    34             "accesses" : 2821726,
    35             "hits" : 2821725,
    36             "misses" : 1,
    37             "resets" : 0,
    38             "missRatio" : 3.543930204420982e-7
    39         }
    40     },
    41     "backgroundFlushing" : {
    42         "flushes" : 120133,
    43         "total_ms" : 73235923,
    44         "average_ms" : 609.6236920746173,
    45         "last_ms" : 1332,
    46         "last_finished" "Wed Oct 26 2011 22:22:23 GMT+0800 (CST)"
    47     },
    48     "cursors" : {
    49         "totalOpen" : 0,
    50         "clientCursors_size" : 0,
    51         "timedOut" : 238392
    52     },
    53     "repl" : {
    54         "ismaster" true
    55     },
    56     "opcounters" : {
    57         "insert" : 269351,
    58         "query" : 19331151,
    59         "update" : 14199331,
    60         "delete" : 1,
    61         "getmore" : 145575,
    62         "command" : 55982302
    63     },
    64     "asserts" : {
    65         "regular" : 0,
    66         "warning" : 0,
    67         "msg" : 0,
    68         "user" : 27,
    69         "rollovers" : 0
    70     },
    71     "ok" : 1
    72 }

    需要关心的地方:

    • connections 当前连接和可用连接数,听过一个同行介绍过,mongodb最大处理到2000个连接就不行了(要根据你的机器性能和业务来设定),所以设大了没意义。设个合理值的话,到达这个值mongodb就拒绝新的连接请求,避免被太多的连接拖垮。
    • indexCounters:btree:misses 索引的不命中数,和hits的比例高就要考虑索引是否正确建立。你看我的”missRatio” : 3.543930204420982e-7,很健康吧。所以miss率在mongostat里面也可以看
    • 其他的都能自解释,也不是查看mongo健康状况的关键,就不说明了。

    db.currentOp()

    Mongodb 的命令一般很快就完成,但是在一台繁忙的机器或者有比较慢的命令时,你可以通过db.currentOp()获取当前正在执行的操作。

    在没有负载的机器上,该命令基本上都是返回空的

    1 >  db.currentOp()
    2 "inprog" : [ ] }

    以下是一个有负载的机器上得到的返回值样例:

    1 "opid" "shard3:466404288""active" false"waitingForLock" false"op""query""ns" "sd.usersEmails""query" : { }, "client_s" :"10.121.13.8:34473""desc" "conn" },

    字段名字都能自解释。如果你发现一个操作太长,把数据库卡死的话,可以用这个命令杀死他

    1 > db.killOp("shard3:466404288")

    MongoDB Monitoring Service

    MongoDB Monitoring Service(MMS)是Mongodb厂商提供的监控服务,可以在网页和Android客户端上监控你的MongoDB状况。


    展开全文
  • 随着工业生产的发展,设备现代化水平的不断提高...随着设备诊断技术的发展,产生了以设备技术状态为基准的维护方式即状态监测维护。这种方式通过加强对设备状态数据的全面收集,并对数据进行分析挖掘,实现对设备的故障
  • 供水管网GPRS远程测控调度系统及 小区泵站运行监测系统
  • 1、blackbox_exporter介绍 blackbox_exporter是Prometheus 官方提供的 exporter 之一,可以... blackbox_exporter 应用场景: ...TCP 测试:业务组件端口状态监听, 应用层协议定义与监听 ICMP 测试:主机探活机制 POS
  •  随着信息技术的迅速发展,架空电力线路正逐渐考虑采用无线监测系统来实现对架空电力线路的数据采集和运行状态监测。相比人工方式,无线监测系统具有很多优点:节省了大量的人力物力,可以随时抽测架空电力线路的...
  • 本文介绍了一种远程检测网络计算机运行安全的软件系统。该系统通过采集网络中计算机的运行状态信息,检测计算机的运行情况,并通过对采集数据的挖掘,为网络管理维护提供依据;为业务服务提供决策支持。
  • 业务领域来看,运维、电力、交通、工控、煤炭、油气、科研等,所有具有量化监测指标的产业,都需要数据的采集、存储、分析、可视化。但具体到不同业务,其监测的重点却可以差别很大。 运维监测系统概述 本文将...
  • 服务器监测器     ...服务器监测器-监测各种操作系统下服务器的运行状况 CPU 监测 CPU 的使用情况 Disk 监测指定磁盘的剩余空间及利用率 Memory 监测内存
  • 远程全方位环境监测无人机系统

    千次阅读 2019-08-01 01:52:00
    摘要 随着我国城市化、工业化进程的迅速推进,人民生活水平的快速提高,国家与社会...目前传统的环境监测手段主要以空气监测站、人工定期巡查、视频监控等方式,然而随着环保工作的开展,它们的缺陷也逐一暴露——...
  • 电气安全监测终端是24小时x365天实时在线监测电气安全等方面数据。展示版本是没有开放电气采集方面的硬件和源码,是通过每分钟定时虚拟形成的数据来上传物联网云平台。硬件是使用STM32+移远EC20的方案,硬件电路和...
  • 把感应器和装备嵌入到各种环境监控对像中,通过超级计算机和云计算将环保领域物联网整合起来,实现人类社会与环境业务系统的整合,通过大数据分析,构建一个以电子政务、行政许可、环境综合监管、自动监控监测、生态...
  • SL651-2014 水文监测 RTU 解决方案

    千次阅读 2018-03-28 17:37:22
    1、行业背景1.1行业背景及需求分析 在水文监测系统建设时,由于河道、湖泊、水库地形复杂、分布的区域广等原因,实现现场监测管理难度很大,如何将监测现场采集到的雨量信息、水位信 息、图片等按监测要 求传输到...
  • SL651-2014水文监测RTU解决方案

    千次阅读 2018-03-20 15:55:21
    1、行业背景1.1 行业背景及背景分析在水文监测系统建设时,由于河道、湖泊、水库地形复杂、分布的区域广等原因,实现现场监测管理难度很大,如何将监测现场采集到的雨量信息、水位信息、图片等按监测要求传输到监测...
  • web系统性能监测指标

    千次阅读 2018-12-18 09:52:37
    使用Pingdom的servlet功能进行运行状态检查。 我们可以查到应用程序的所有传输,包括数据库和S3。 SLA:服务等级协议(简称:SLA,全称:service level agreement: 是在一定开销下为保障服务的性能和可用性 对系统...
  • iOS真实网络 监测 RealReachability

    千次阅读 2016-03-04 15:20:32
    iOS实际网络检测框架RealReachability 时间 2016-02-29 10:07:41 标哥的技术博客 ...网络连接状态检测对于我们的iOS app开发来说是一个非常通用的需求。为了更好的用户体验,我们会在无网络时展现本地或者缓存
  • SONPMSA(Service-Oriented Network Performance Management System Based on...对网络线路质量进行分析,同时,统计网络业务运行状态信息,并对网络的使用发展做出评测、估计,为网络进一步的规划调整提供依据等。
  • 做一个简单的kafka消息发送订阅功能,使用心跳机制进行监测监测系统的线上健康状态,通过消息队列给kafka服务端发送健康状态标识值,在系统内实时监听消费,并做相应的业务提醒操作。因为只是介绍kafka的实现原理...
  • 恶意邮件智能监测与溯源技术研究

    千次阅读 2020-04-25 21:39:00
    导读:近年因电子邮件安全问题引起的恶性网络事件影响范围越来越广、造成后果越来越恶劣。...通过人工智能技术将几百种基于知识工程的邮件安全元素与威胁、业务模型关联建模,使系统具备更智能的威胁感知...
  • 传统的机车车载故障诊断装置在进行在陑监测与车载诊断时存在实时性差、信息难以共享等不邾,为此,利用车载嵌入式数据采 集技术、GPRS 无陑传输技术、故障诊断专家系统、MQ 传输技术及基于浏览器/服务器模式的客户端...
  • 在供水企业信息化建设中,可以通过数采仪、无线网络等在线监测设备实时感知城市供水管网的运行状态,并且采用可视化的方式有机整合运营调度部门与供水管网设备,形成供水企业“物联网”,并可将及时采集到的各种管网...
  • 在供水企业信息化建设中,可以通过数采仪、无线网络等在线监测设备实时感知城市供水管网的运行状态,并且采用可视化的方式有机整合运营调度部门与供水管网设备,形成供水企业“物联网”,并可将及时采集到的各种管网...
  •  经过取数工作后,就形成了由业务运行产生的原始数据。原始数据是极其丰富的,有很多种分类方法,而从用户的观点来看可以大致分为两种。一种是用户意识到的主动提供的,如注册数据,发表的文字等;另一种是用户不...
  • 入侵监测系统简介

    千次阅读 2004-10-06 13:00:00
    第一课 入侵监测系统简介 入侵监测技术是为保证计算机系统的安全而设计与配置的一种能够及时发现并报告系统中未授权或异常现象的技术,是一种用于监测计算机网络中违反安全策略行为的技术。 入侵监测系统能够识别...
  • 摘要随着电信行业数据业务的不断发展,数据网络监测和管理的复杂性将不断增加,对实时的电信网络监测系统的需求也越来越强烈。文章介绍了一个基于简单网络管理协议(SNMP)的网络监测和管理系统的设计过程。系统主要...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,305
精华内容 12,122
关键字:

业务运行状态监测