diff --git a/html/includes/graphs/application/ceph_osd_performance.inc.php b/html/includes/graphs/application/ceph_osd_performance.inc.php
new file mode 100644
index 000000000..f089041bc
--- /dev/null
+++ b/html/includes/graphs/application/ceph_osd_performance.inc.php
@@ -0,0 +1,27 @@
+ 'Pool stats',
+ 'ceph_osdperf' => 'OSD Performance',
+ 'ceph_df' => 'Usage',
+);
+
+$rrddir = $config['rrd_dir'].'/'.$device['hostname'];
+
+foreach ($graphs as $key => $text) {
+ echo '
'.$text.'
';
+ $graph_array['height'] = '100';
+ $graph_array['width'] = '215';
+ $graph_array['to'] = $config['time']['now'];
+ $graph_array['id'] = $app['app_id'];
+
+ if ($key == "ceph_poolstats") {
+ foreach (glob($rrddir."/app-ceph-".$app['app_id']."-pool-*") as $rrd_filename) {
+ if (preg_match("/.*-pool-(.+)\.rrd$/", $rrd_filename, $pools)) {
+ $pool = $pools[1];
+ echo ''.$pool.' Reads/Writes
';
+ $graph_array['type'] = 'application_ceph_pool_io';
+ $graph_array['pool'] = $pool;
+
+ echo "| ";
+ include 'includes/print-graphrow.inc.php';
+ echo ' |
';
+
+ echo ''.$pool.' IOPS
';
+ $graph_array['type'] = 'application_ceph_pool_iops';
+ $graph_array['pool'] = $pool;
+
+ echo "| ";
+ include 'includes/print-graphrow.inc.php';
+ echo ' |
';
+ }
+ }
+ } elseif ($key == "ceph_osdperf") {
+ foreach (glob($rrddir."/app-ceph-".$app['app_id']."-osd-*") as $rrd_filename) {
+ if (preg_match("/.*-osd-(.+)\.rrd$/", $rrd_filename, $osds)) {
+ $osd = $osds[1];
+ echo ''.$osd.' Latency
';
+ $graph_array['type'] = 'application_ceph_osd_performance';
+ $graph_array['osd'] = $osd;
+
+ echo "| ";
+ include 'includes/print-graphrow.inc.php';
+ echo ' |
';
+ }
+ }
+ } elseif ($key == "ceph_df") {
+ foreach (glob($rrddir."/app-ceph-".$app['app_id']."-df-*") as $rrd_filename) {
+ if (preg_match("/.*-df-(.+)\.rrd$/", $rrd_filename, $pools)) {
+ $pool = $pools[1];
+ if ($pool == "c") {
+ echo 'Cluster Usage
';
+ $graph_array['type'] = 'application_ceph_pool_df';
+ $graph_array['pool'] = $pool;
+
+ echo "| ";
+ include 'includes/print-graphrow.inc.php';
+ echo ' |
';
+ } else {
+ echo ''.$pool.' Usage
';
+ $graph_array['type'] = 'application_ceph_pool_df';
+ $graph_array['pool'] = $pool;
+
+ echo "| ";
+ include 'includes/print-graphrow.inc.php';
+ echo ' |
';
+
+ echo ''.$pool.' Objects
';
+ $graph_array['type'] = 'application_ceph_pool_objects';
+ $graph_array['pool'] = $pool;
+
+ echo "| ";
+ include 'includes/print-graphrow.inc.php';
+ echo ' |
';
+ }
+ }
+ }
+ }
+
+}
diff --git a/includes/polling/applications/ceph.inc.php b/includes/polling/applications/ceph.inc.php
new file mode 100644
index 000000000..711433843
--- /dev/null
+++ b/includes/polling/applications/ceph.inc.php
@@ -0,0 +1,69 @@
+', $section);
+ if ($section == "poolstats") {
+ foreach (explode("\n", $data) as $line) {
+ if (empty($line))
+ continue;
+ list($pool,$ops,$wrbytes,$rbytes) = explode(':', $line);
+ $ceph_rrd = $ceph_rrddir.'/app-ceph-'.$app['app_id'].'-pool-'.$pool.'.rrd';
+ if (!is_file($ceph_rrd)) {
+ rrdtool_create(
+ $ceph_rrd,
+ '--step 300 \
+ DS:ops:GAUGE:600:0:U \
+ DS:wrbytes:GAUGE:600:0:U \
+ DS:rbytes:GAUGE:600:0:U '.$config['rrd_rra']
+ );
+ }
+
+ print "Ceph Pool: $pool, IOPS: $ops, Wr bytes: $wrbytes, R bytes: $rbytes\n";
+ rrdtool_update($ceph_rrd, array("ops" => $ops, "wrbytes" => $wrbytes, "rbytes" => $rbytes));
+ }
+ } elseif ($section == "osdperformance") {
+ foreach (explode("\n", $data) as $line) {
+ if (empty($line))
+ continue;
+ list($osd,$apply,$commit) = explode(':', $line);
+ $ceph_rrd = $ceph_rrddir.'/app-ceph-'.$app['app_id'].'-osd-'.$osd.'.rrd';
+ if (!is_file($ceph_rrd)) {
+ rrdtool_create(
+ $ceph_rrd,
+ '--step 300 \
+ DS:apply_ms:GAUGE:600:0:U \
+ DS:commit_ms:GAUGE:600:0:U '.$config['rrd_rra']
+ );
+ }
+
+ print "Ceph OSD: $osd, Apply: $apply, Commit: $commit\n";
+ rrdtool_update($ceph_rrd, array("apply_ms" => $apply, "commit_ms" => $commit));
+ }
+ } elseif ($section == "df") {
+ foreach (explode("\n", $data) as $line) {
+ if (empty($line))
+ continue;
+ list($pool,$avail,$used,$objects) = explode(':', $line);
+ $ceph_rrd = $ceph_rrddir.'/app-ceph-'.$app['app_id'].'-df-'.$pool.'.rrd';
+ if (!is_file($ceph_rrd)) {
+ rrdtool_create(
+ $ceph_rrd,
+ '--step 300 \
+ DS:avail:GAUGE:600:0:U \
+ DS:used:GAUGE:600:0:U \
+ DS:objects:GAUGE:600:0:U '.$config['rrd_rra']
+ );
+ }
+
+ print "Ceph Pool DF: $pool, Avail: $avail, Used: $used, Objects: $objects\n";
+ rrdtool_update($ceph_rrd, array("avail" => $avail, "used" => $used, "objects" => $objects));
+ }
+ }
+ }
+}
diff --git a/includes/polling/unix-agent.inc.php b/includes/polling/unix-agent.inc.php
index 0bdfae836..18d30e58e 100644
--- a/includes/polling/unix-agent.inc.php
+++ b/includes/polling/unix-agent.inc.php
@@ -51,6 +51,7 @@ if ($device['os_group'] == 'unix') {
$agentapps = array(
"apache",
+ "ceph",
"mysql",
"nginx",
"bind",
@@ -104,7 +105,7 @@ if ($device['os_group'] == 'unix') {
if (file_exists("includes/polling/applications/$key.inc.php")) {
d_echo("Enabling $key for ".$device['hostname']." if not yet enabled\n");
- if (in_array($key, array('apache', 'mysql', 'nginx', 'proxmox'))) {
+ if (in_array($key, array('apache', 'mysql', 'nginx', 'proxmox', 'ceph'))) {
if (dbFetchCell('SELECT COUNT(*) FROM `applications` WHERE `device_id` = ? AND `app_type` = ?', array($device['device_id'], $key)) == '0') {
echo "Found new application '$key'\n";
dbInsert(array('device_id' => $device['device_id'], 'app_type' => $key), 'applications');