diff options
-rw-r--r-- | plugins/check_mysql.c | 71 |
1 files changed, 61 insertions, 10 deletions
diff --git a/plugins/check_mysql.c b/plugins/check_mysql.c index eaad709..212910d 100644 --- a/plugins/check_mysql.c +++ b/plugins/check_mysql.c | |||
@@ -62,6 +62,29 @@ int verbose = 0; | |||
62 | static double warning_time = 0; | 62 | static double warning_time = 0; |
63 | static double critical_time = 0; | 63 | static double critical_time = 0; |
64 | 64 | ||
65 | #define LENGTH_METRIC_UNIT 7 | ||
66 | static const char *metric_unit[LENGTH_METRIC_UNIT] = { | ||
67 | "Connections", | ||
68 | "Open_files", | ||
69 | "Open_tables", | ||
70 | "Qcache_free_memory", | ||
71 | "Qcache_queries_in_cache", | ||
72 | "Threads_connected", | ||
73 | "Threads_running" | ||
74 | }; | ||
75 | |||
76 | #define LENGTH_METRIC_COUNTER 8 | ||
77 | static const char *metric_counter[LENGTH_METRIC_COUNTER] = { | ||
78 | "Qcache_hits", | ||
79 | "Qcache_inserts", | ||
80 | "Qcache_lowmem_prunes", | ||
81 | "Qcache_not_cached", | ||
82 | "Queries", | ||
83 | "Questions", | ||
84 | "Table_locks_waited", | ||
85 | "Uptime" | ||
86 | }; | ||
87 | |||
65 | thresholds *my_threshold = NULL; | 88 | thresholds *my_threshold = NULL; |
66 | 89 | ||
67 | int process_arguments (int, char **); | 90 | int process_arguments (int, char **); |
@@ -82,7 +105,9 @@ main (int argc, char **argv) | |||
82 | char *result = NULL; | 105 | char *result = NULL; |
83 | char *error = NULL; | 106 | char *error = NULL; |
84 | char slaveresult[SLAVERESULTSIZE]; | 107 | char slaveresult[SLAVERESULTSIZE]; |
85 | char* slaveperfdata = NULL; | 108 | char* perf; |
109 | |||
110 | perf = strdup (""); | ||
86 | 111 | ||
87 | setlocale (LC_ALL, ""); | 112 | setlocale (LC_ALL, ""); |
88 | bindtextdomain (PACKAGE, LOCALEDIR); | 113 | bindtextdomain (PACKAGE, LOCALEDIR); |
@@ -130,6 +155,34 @@ main (int argc, char **argv) | |||
130 | die (STATE_CRITICAL, "%s\n", mysql_error (&mysql)); | 155 | die (STATE_CRITICAL, "%s\n", mysql_error (&mysql)); |
131 | } | 156 | } |
132 | 157 | ||
158 | /* try to fetch some perf data */ | ||
159 | if (mysql_query (&mysql, "show global status") == 0) { | ||
160 | if ( (res = mysql_store_result (&mysql)) == NULL) { | ||
161 | error = strdup(mysql_error(&mysql)); | ||
162 | mysql_close (&mysql); | ||
163 | die (STATE_CRITICAL, _("status store_result error: %s\n"), error); | ||
164 | } | ||
165 | |||
166 | while ( (row = mysql_fetch_row (res)) != NULL) { | ||
167 | int i; | ||
168 | |||
169 | for(i = 0; i < LENGTH_METRIC_UNIT - 1; i++) { | ||
170 | if (strcmp(row[0], metric_unit[i]) == 0) { | ||
171 | xasprintf(&perf, "%s %s", perf, perfdata(metric_unit[i], | ||
172 | atol(row[1]), "", FALSE, 0, FALSE, 0, FALSE, 0, FALSE, 0)); | ||
173 | continue; | ||
174 | } | ||
175 | } | ||
176 | for(i = 0; i < LENGTH_METRIC_COUNTER - 1; i++) { | ||
177 | if (strcmp(row[0], metric_counter[i]) == 0) { | ||
178 | xasprintf(&perf, "%s %s", perf, perfdata(metric_counter[i], | ||
179 | atol(row[1]), "c", FALSE, 0, FALSE, 0, FALSE, 0, FALSE, 0)); | ||
180 | continue; | ||
181 | } | ||
182 | } | ||
183 | } | ||
184 | } | ||
185 | |||
133 | if(check_slave) { | 186 | if(check_slave) { |
134 | /* check the slave status */ | 187 | /* check the slave status */ |
135 | if (mysql_query (&mysql, "show slave status") != 0) { | 188 | if (mysql_query (&mysql, "show slave status") != 0) { |
@@ -222,17 +275,17 @@ main (int argc, char **argv) | |||
222 | 275 | ||
223 | status = get_status(value, my_threshold); | 276 | status = get_status(value, my_threshold); |
224 | 277 | ||
225 | slaveperfdata = fperfdata ("seconds behind master", value, "s", | 278 | xasprintf (&perf, "%s %s", perf, fperfdata ("seconds behind master", value, "s", |
226 | TRUE, (double) warning_time, | 279 | TRUE, (double) warning_time, |
227 | TRUE, (double) critical_time, | 280 | TRUE, (double) critical_time, |
228 | FALSE, 0, | 281 | FALSE, 0, |
229 | FALSE, 0); | 282 | FALSE, 0)); |
230 | 283 | ||
231 | if (status == STATE_WARNING) { | 284 | if (status == STATE_WARNING) { |
232 | printf("SLOW_SLAVE %s: %s|%s\n", _("WARNING"), slaveresult, slaveperfdata); | 285 | printf("SLOW_SLAVE %s: %s|%s\n", _("WARNING"), slaveresult, perf); |
233 | exit(STATE_WARNING); | 286 | exit(STATE_WARNING); |
234 | } else if (status == STATE_CRITICAL) { | 287 | } else if (status == STATE_CRITICAL) { |
235 | printf("SLOW_SLAVE %s: %s|%s\n", _("CRITICAL"), slaveresult, slaveperfdata); | 288 | printf("SLOW_SLAVE %s: %s|%s\n", _("CRITICAL"), slaveresult, perf); |
236 | exit(STATE_CRITICAL); | 289 | exit(STATE_CRITICAL); |
237 | } | 290 | } |
238 | } | 291 | } |
@@ -246,12 +299,10 @@ main (int argc, char **argv) | |||
246 | mysql_close (&mysql); | 299 | mysql_close (&mysql); |
247 | 300 | ||
248 | /* print out the result of stats */ | 301 | /* print out the result of stats */ |
249 | if (check_slave && slaveperfdata) { | 302 | if (check_slave) { |
250 | printf ("%s %s|%s\n", result, slaveresult, slaveperfdata); | 303 | printf ("%s %s|%s\n", result, slaveresult, perf); |
251 | } else if (check_slave) { | ||
252 | printf ("%s %s\n", result, slaveresult); | ||
253 | } else { | 304 | } else { |
254 | printf ("%s\n", result); | 305 | printf ("%s|%s\n", result, perf); |
255 | } | 306 | } |
256 | 307 | ||
257 | return STATE_OK; | 308 | return STATE_OK; |