pcp
[Top] [All Lists]

MySQL PMDA Changes

To: pcp@xxxxxxxxxxx
Subject: MySQL PMDA Changes
From: Chandana De Silva <chandana@xxxxxxxxxxxxx>
Date: Fri, 02 Nov 2012 20:48:01 +1100
Reply-to: chandana@xxxxxxxxxxxxx
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:16.0) Gecko/20121011 Thunderbird/16.0.1
I have corrected and the errors in units. Please see the attached diff, which is against the original 3.6.9 code . I will send the complete file to Nathan.

chandana@tardis:~/pmdamysql$ diff -u 3.6.9/pmdamysql.pl 2012-11-02/pmdamysql.pl
--- 3.6.9/pmdamysql.pl  2012-11-02 20:43:19.749170048 +1100
+++ 2012-11-02/pmdamysql.pl     2012-11-02 20:31:39.973700045 +1100
@@ -32,8 +32,8 @@
     eval `cat $file` unless ! -f $file;
 }

-use vars qw( $pmda %status %variables @processes );
-use vars qw( $dbh $sth_variables $sth_status $sth_processes );
+use vars qw( $pmda %status %variables @processes %slave_status );
+use vars qw( $dbh $sth_variables $sth_status $sth_processes $sth_slave_status );
 my $process_indom = 0;
 my @process_instances;

@@ -48,6 +48,7 @@
            $sth_variables = $dbh->prepare('show variables');
            $sth_status = $dbh->prepare('show status');
            $sth_processes = $dbh->prepare('show processlist');
+           $sth_slave_status = $dbh->prepare('show slave status');
        }
     }
 }
@@ -101,6 +102,20 @@
     $pmda->replace_indom($process_indom, \@process_instances);
 }

+sub mysql_slave_status_refresh
+{
+    # $pmda->log("mysql_slave_status_refresh\n");
+
+    %slave_status = ();        # clear any previous contents
+    if (defined($dbh)) {
+       $sth_slave_status->execute();
+       my $result = $sth_slave_status->fetchrow_hashref();
+       while ( my ($key, $value) = each(%$result) ) {
+           $slave_status{lc $key} = $value;
+       }
+    }
+}
+
 sub mysql_refresh
 {
     my ($cluster) = @_;
@@ -109,6 +124,7 @@
     if ($cluster == 0)         { mysql_status_refresh; }
     elsif ($cluster == 1)      { mysql_variables_refresh; }
     elsif ($cluster == 2)      { mysql_process_refresh; }
+    elsif ($cluster == 3)      { mysql_slave_status_refresh; }
 }

 sub mysql_fetch_callback
@@ -145,9 +161,17 @@
        if (!defined($value))   { return (PM_ERR_APPVERSION, 0); }
        return ($value, 1);
     }
+    elsif ($cluster == 3) {
+       $mysql_name =~ s/^mysql\.slave_status\.//;
+       $value = $slave_status{$mysql_name};
+       if (!defined($value))   { return (PM_ERR_APPVERSION, 0); }
+       return ($value, 1);
+    }
     return (PM_ERR_PMID, 0);
 }

+# pmda_units(dim_space, dim_time, dim_count, scale_space, scale_time, scale_count)
+
 $pmda = PCP::PMDA->new('mysql', 66);

 $pmda->add_metric(pmda_pmid(0,0), PM_TYPE_U32, PM_INDOM_NULL,
@@ -1632,6 +1656,103 @@
                  PM_SEM_INSTANT, pmda_units(0,0,0,0,0,0),
                  'mysql.processlist.info', '', '');

+$pmda->add_metric(pmda_pmid(3,0), PM_TYPE_STRING, PM_INDOM_NULL,
+                 PM_SEM_INSTANT, pmda_units(0,0,0,0,0,0),
+                 'mysql.slave_status.slave_io_state', '', '');
+$pmda->add_metric(pmda_pmid(3,1), PM_TYPE_STRING, PM_INDOM_NULL,
+                 PM_SEM_INSTANT, pmda_units(0,0,0,0,0,0),
+                 'mysql.slave_status.slave_io_running', '', '');
+$pmda->add_metric(pmda_pmid(3,2), PM_TYPE_STRING, PM_INDOM_NULL,
+                 PM_SEM_INSTANT, pmda_units(0,0,0,0,0,0),
+                 'mysql.slave_status.slave_sql_running', '', '');
+$pmda->add_metric(pmda_pmid(3,3), PM_TYPE_U32, PM_INDOM_NULL,
+                 PM_SEM_INSTANT, pmda_units(0,1,0,0,PM_TIME_SEC,0),
+                 'mysql.slave_status.seconds_behind_master', '', '');
+$pmda->add_metric(pmda_pmid(3,4), PM_TYPE_STRING, PM_INDOM_NULL,
+                 PM_SEM_INSTANT, pmda_units(0,0,0,0,0,0),
+                 'mysql.slave_status.master_log_file', '', '');
+$pmda->add_metric(pmda_pmid(3,5), PM_TYPE_U32, PM_INDOM_NULL,
+                 PM_SEM_INSTANT, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+                 'mysql.slave_status.read_master_log_pos', '', '');
+$pmda->add_metric(pmda_pmid(3,6), PM_TYPE_STRING, PM_INDOM_NULL,
+                 PM_SEM_INSTANT, pmda_units(0,0,0,0,0,0),
+                 'mysql.slave_status.relay_master_log_file', '', '');
+$pmda->add_metric(pmda_pmid(3,7), PM_TYPE_U32, PM_INDOM_NULL,
+                 PM_SEM_INSTANT, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+                 'mysql.slave_status.exec_master_log_pos', '', '');
+$pmda->add_metric(pmda_pmid(3,8),  PM_TYPE_STRING, PM_INDOM_NULL,
+                 PM_SEM_INSTANT, pmda_units(0,0,0,0,0,0),
+                 'mysql.slave_status.relay_log_file', '', '');
+$pmda->add_metric(pmda_pmid(3,9), PM_TYPE_U32, PM_INDOM_NULL,
+                 PM_SEM_INSTANT, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+                 'mysql.slave_status.relay_log_pos', '', '');
+$pmda->add_metric(pmda_pmid(3,10), PM_TYPE_STRING, PM_INDOM_NULL,
+                 PM_SEM_INSTANT, pmda_units(0,0,0,0,0,0),
+                 'mysql.slave_status.until_log_file', '', '');
+$pmda->add_metric(pmda_pmid(3,11), PM_TYPE_U32, PM_INDOM_NULL,
+                 PM_SEM_INSTANT, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+                 'mysql.slave_status.until_log_pos', '', '');
+$pmda->add_metric(pmda_pmid(3,12), PM_TYPE_STRING, PM_INDOM_NULL,
+                 PM_SEM_DISCRETE, pmda_units(0,0,0,0,0,0),
+                 'mysql.slave_status.master_ssl_cipher', '', '');
+$pmda->add_metric(pmda_pmid(3,13), PM_TYPE_STRING, PM_INDOM_NULL,
+                 PM_SEM_DISCRETE, pmda_units(0,0,0,0,0,0),
+                 'mysql.slave_status.master_ssl_ca_file', '', '');
+$pmda->add_metric(pmda_pmid(3,14), PM_TYPE_U32, PM_INDOM_NULL,
+                 PM_SEM_INSTANT, pmda_units(0,0,1,0,0,PM_COUNT_ONE),
+                 'mysql.slave_status.skip_counter', '', '');
+$pmda->add_metric(pmda_pmid(3,15), PM_TYPE_U32, PM_INDOM_NULL,
+                 PM_SEM_INSTANT, pmda_units(1,0,0,PM_SPACE_BYTE,0,0),
+                 'mysql.slave_status.relay_log_space', '', '');
+$pmda->add_metric(pmda_pmid(3,16), PM_TYPE_STRING, PM_INDOM_NULL,
+                 PM_SEM_DISCRETE, pmda_units(0,0,0,0,0,0),
+                 'mysql.slave_status.until_condition', '', '');
+$pmda->add_metric(pmda_pmid(3,17), PM_TYPE_U32, PM_INDOM_NULL,
+                 PM_SEM_DISCRETE, pmda_units(0,1,0,0,PM_TIME_SEC,0),
+                 'mysql.slave_status.connect_retry', '', '');
+$pmda->add_metric(pmda_pmid(3,18), PM_TYPE_STRING, PM_INDOM_NULL,
+                 PM_SEM_DISCRETE, pmda_units(0,0,0,0,0,0),
+                 'mysql.slave_status.master_host', '', '');
+$pmda->add_metric(pmda_pmid(3,19), PM_TYPE_U32, PM_INDOM_NULL,
+                 PM_SEM_INSTANT, pmda_units(0,0,0,0,0,0),
+                 'mysql.slave_status.last_errno', '', '');
+$pmda->add_metric(pmda_pmid(3,20), PM_TYPE_STRING, PM_INDOM_NULL,
+                 PM_SEM_DISCRETE, pmda_units(0,0,0,0,0,0),
+                 'mysql.slave_status.master_ssl_cert', '', '');
+$pmda->add_metric(pmda_pmid(3,21), PM_TYPE_STRING, PM_INDOM_NULL,
+                 PM_SEM_DISCRETE, pmda_units(0,0,0,0,0,0),
+                 'mysql.slave_status.replicate_do_db', '', '');
+$pmda->add_metric(pmda_pmid(3,22), PM_TYPE_STRING, PM_INDOM_NULL,
+                 PM_SEM_DISCRETE, pmda_units(0,0,0,0,0,0),
+                 'mysql.slave_status.replicate_ignore_db', '', '');
+$pmda->add_metric(pmda_pmid(3,23), PM_TYPE_STRING, PM_INDOM_NULL,
+                 PM_SEM_DISCRETE, pmda_units(0,0,0,0,0,0),
+                 'mysql.slave_status.master_user', '', '');
+$pmda->add_metric(pmda_pmid(3,24), PM_TYPE_STRING, PM_INDOM_NULL,
+                 PM_SEM_DISCRETE, pmda_units(0,0,0,0,0,0),
+                 'mysql.slave_status.replicate_do_table', '', '');
+$pmda->add_metric(pmda_pmid(3,25), PM_TYPE_STRING, PM_INDOM_NULL,
+                 PM_SEM_DISCRETE, pmda_units(0,0,0,0,0,0),
+                 'mysql.slave_status.replicate_wild_do_table', '', '');
+$pmda->add_metric(pmda_pmid(3,26), PM_TYPE_STRING, PM_INDOM_NULL,
+                 PM_SEM_DISCRETE, pmda_units(0,0,0,0,0,0),
+ 'mysql.slave_status.replicate_wild_ignore_table', '', '');
+$pmda->add_metric(pmda_pmid(3,27), PM_TYPE_STRING, PM_INDOM_NULL,
+                 PM_SEM_DISCRETE, pmda_units(0,0,0,0,0,0),
+                 'mysql.slave_status.replicate_ignore_table', '', '');
+$pmda->add_metric(pmda_pmid(3,28), PM_TYPE_STRING, PM_INDOM_NULL,
+                 PM_SEM_DISCRETE, pmda_units(0,0,0,0,0,0),
+                 'mysql.slave_status.master_ssl_allowed', '', '');
+$pmda->add_metric(pmda_pmid(3,29), PM_TYPE_STRING, PM_INDOM_NULL,
+                 PM_SEM_DISCRETE, pmda_units(0,0,0,0,0,0),
+                 'mysql.slave_status.master_ssl_ca_path', '', '');
+$pmda->add_metric(pmda_pmid(3,30), PM_TYPE_U32, PM_INDOM_NULL,
+                 PM_SEM_DISCRETE, pmda_units(0,0,0,0,0,0),
+                 'mysql.slave_status.master_port', '', '');
+$pmda->add_metric(pmda_pmid(3,31), PM_TYPE_STRING, PM_INDOM_NULL,
+                 PM_SEM_DISCRETE, pmda_units(0,0,0,0,0,0),
+                 'mysql.slave_status.master_ssl_key', '', '');
+
 $pmda->add_indom($process_indom, \@process_instances,
                 'Instance domain exporting each MySQL process', '');

<Prev in Thread] Current Thread [Next in Thread>
  • MySQL PMDA Changes, Chandana De Silva <=