大话人生

  IT博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  299 随笔 :: 0 文章 :: 73 评论 :: 0 Trackbacks

一、利用SiteScope工具来监控

   在LoadRunner中没有提供直接监控MySQL的方法,但是在实际工作中需要我们对mysql数据库服务器进行监控,我们可以利用sitescope监控然后在lr中显示SiteScope监控的结果,达到间接监控mysql的目的。

   备注:MercyrySiteScope介绍:它是一款无代理监测解决方案,可确保分布式IT基础架构——如服务器、操作系统、网络设备、网络服务、应用和应用组件的可用性和性能。这款主动的、基于Web界面的基础架构监测解决方案是非常简洁的,而且完全根据客户度身定制,无需在您的上线系统中增加额外的代理。
SiteScope为上线系统提供24×7的监控服务,为维护工程师及时发现问题提供帮助,确保系统架构内一切组建的正常运作。SiteScope在大量增加检测周期的同时也降低了维护人员的工作成本 。
SiteScope能够监控UNIX服务器资源、windows服务器资源、weblogic应用服务器、IIS应用服务器、Oracle数据库、SQLServer数据库、F5、URL地址、Ping、内存、CPU、磁盘空间、服务等等系统架构内各种组建的运行状况;监控器按照指定频率对目标进行检测,一旦发现异常会及时向管理员发送意外事件的报警,警报可以通过声音提醒、email、短信等方式发送;另外,SiteScope还可以生成监测活动的汇总报告,该对象从日志文件中读取历史信息,接着总结、筛选信息,并生成图表格式的报告。

   SiteScope利用Database Query monitor监控指定的数据库,通过SiteScope监控器的SHOW STATUS命令,获得相应数据,命令如下:

  show status where variable_name like ’innodb_buffer_pool_pages_total’

 为了确保监控请确认LoadRunner and SiteScope之间的端口, SiteScope和MySQL必须打开TCP 8888TCP 3306 . 还有SiteScope要监控必须要确保有JDBC的安装。 

以下为监控前需要注意的地方:

    1. SiteScope to be deployed.
    2. Sufficient license points for Database Query monitor.
    3. TCP 8888 (default) opened two-way for LoadRunner to SiteScope.
    4. TCP 3306 (default) opened two-way for SiteScope to MySQL.
    5. Monitoring privileges for SiteScope to monitor MySQL.
    6. JDBC driver to be installed on SiteScope.
    7. Have knowledge of the counter you want to monitor.

转自SiteScope帮助:

Monitoring mySQL Databases

Monitoring aMySQLdatabase requires the use of a JDBC driver. To enable SiteScope to monitor a MySQL database:

  1. Download the JDBC driver fromhttp://www.mysql.com/downloads/api-jdbc.html
  2. Uncompress the distribution file
  3. Among all the other files, you should find a file with a .jar extension.
  4. Copy the .jar file into the<SiteScope install path>/SiteScope/java/lib/extdirectory
  5. Stop and restart SiteScope
  6. Now, use your browser to add a Database Query Monitor within SiteScope.

    The Database Connection URL format for the MySQL JDBC driver is:

    jdbc:mysql://<database hostname>[:<tcp port>]/<database>

    For example to connect to the MySQL database "aBigDatabase" on a machine using the standard MySQL port number3306you would use:

    jdbc:mysql://206.168.191.19/aBigDatabase

    If you are using a different port to connect to the database then you should include that port number as part of the IP address.

    The specification for the MySQL JDBC driver is:org.gjt.mm.mysql.Driver

    Enter this string into the Database Driver text box under theAdvanced Optionssection of the Add Database Query Monitor form.

二、通过编写脚本来进行监控

// mysql_dll.cpp : Defines the entry point for the DLL application.

#include "stdafx.h"
#include "stdlib.h"

MYSQL *conn=NULL;
MYSQL_RES *p_res_ptr=NULL;
MYSQL_ROW sqlrows;


BOOL APIENTRY DllMain( HANDLE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
      )
{
    return TRUE;
}

extern "C" int _declspec(dllexport) init_mysql_connection(char *str_server,char *str_username,char *str_pwd,char *str_Table)
{
 conn=mysql_init(NULL);

    if(!conn)
 {
  printf("\nFailed to initate MySQL connection");
  return 1;
  exit(0);
 }
    else
 {
  printf("\nSuccess to initate MySQL connection");
  if (!mysql_real_connect(conn,str_server,str_username,str_pwd,str_Table,0,NULL,0))
  {
   printf( "Failed to connect to MySQL: Error: %s\n", mysql_error(conn));
  }
  else
  {
   printf("\nLogged on to %s sucessfully",str_server);
   return 0;
  }
  return 0;
 }
}

extern "C" int _declspec(dllexport) close_mysql_connection()
{
 if(conn=NULL)
 {
  printf("\nConnection is Null");
  return 1;
  exit(0);
 }
 else
 {
     mysql_free_result(p_res_ptr);
  printf("\nClose connection");
  mysql_close(conn);   
  return 0;
 }
}

//"show status like \'qcache%\'"

extern "C" int _declspec(dllexport) get_mysql_table_query(char *str_query)
{
 int res=0;
 res=mysql_query(conn,str_query);
 if(res)
 {
  printf("Failed to mysql query: Error: %s\n", mysql_error(conn));
  return 1;
 }
 else
 {
  printf("\nSucess in Mysql Query");
  return 0;

 }

}

 

extern "C" int _declspec(dllexport) get_mysql_query_data(char *str_query,char *str_data)
{
    unsigned long u1_numrow=0;
    unsigned int i_index = 0;
 p_res_ptr=mysql_use_result(conn);

 if(p_res_ptr){
 
  while((sqlrows=mysql_fetch_row(p_res_ptr))){
  
   if(*sqlrows[0]=*str_query)
   {
    strcpy(str_data,sqlrows[1]);
   
    
   }
  }
 }

 return NULL;

}

 

lr 9.1中代码:

Action()
{

        int i=0; 
        double x;
        char *str_data;
 
 
        str_data=(char *)malloc(20*sizeof(char));
        lr_load_dll("D:\\vc\\mysql_dll\\Debug\\mysql_dll.dll"); 
        i= init_mysql_connection("localhost","root","123456","mysql");
        lr_output_message("%d",i);
    
       for(;;)
       {
            get_mysql_query_data("Qcache_hits",str_data);
            i=get_mysql_table_query("show status like \'qcache%\'");
            lr_output_message("%d",i);
            x = atof(str_data);
            lr_user_data_point("hits",x);
            lr_think_time(5);
       }
        lr_output_message("%d",x);
     close_mysql_connection();
 return 0;
}
posted on 2009-08-06 16:44 大话人生 阅读(1341) 评论(0)  编辑 收藏 引用 所属分类: 性能测试
只有注册用户登录后才能发表评论。