From 999b71aa6cc800e7da38b98a0214dd0471491e54 Mon Sep 17 00:00:00 2001 From: ruflin Date: Wed, 11 Jan 2017 21:46:08 +0100 Subject: [PATCH] Add node stats page This adds an api page under `/api/_node` which provides the basic status information about the running Kibana node. **Example Event** An event exposed by the `/api/_node` looks as following: ``` { "name":"ruflin", "version":"6.0.0-alpha1", "build":{ "num":8467, "sha":"6cb7fec4e154faa0a4a3fee4b33dfef91b9870d9" }, "uuid":"5b2de169-2785-441b-ae8c-186a1936b17d", "heap":{ "total":125079552, "used":87140680, "rss":150970368 }, "connections":0, "requests":{ "total":2, "disconnects":0, "statusCodes":{ "200":2 } } } ``` --- src/server/status/index.js | 20 ++++++++++++++++++++ src/server/status/metrics.js | 13 +++++++++++++ 2 files changed, 33 insertions(+) diff --git a/src/server/status/index.js b/src/server/status/index.js index 90dea44ce5378..74da51100ae96 100644 --- a/src/server/status/index.js +++ b/src/server/status/index.js @@ -28,6 +28,26 @@ export default function (kbnServer, server, config) { } })); + // Outputs the status object under /api/_node + server.route(wrapAuth({ + method: 'GET', + path: '/api/_node', + handler: function (request, reply) { + return reply({ + name: config.get('server.name'), + version: config.get('pkg.version'), + build: { + num: config.get('pkg.buildNum'), + sha: config.get('pkg.buildSha'), + }, + uuid: config.get('server.uuid'), + heap: kbnServer.stats.heap, + connections: kbnServer.stats.connections, + requests: kbnServer.stats.requests, + }); + } + })); + server.decorate('reply', 'renderStatusPage', async function () { const app = kbnServer.uiExports.getHiddenApp('status_page'); const response = await getResponse(this); diff --git a/src/server/status/metrics.js b/src/server/status/metrics.js index d00a8eb540d04..c054d4396d0c3 100644 --- a/src/server/status/metrics.js +++ b/src/server/status/metrics.js @@ -1,9 +1,11 @@ import _ from 'lodash'; import Samples from './samples'; + module.exports = function (kbnServer, server, config) { let lastReport = Date.now(); kbnServer.metrics = new Samples(12); + kbnServer.stats = {}; server.plugins['even-better'].monitor.on('ops', function (event) { const now = Date.now(); @@ -23,5 +25,16 @@ module.exports = function (kbnServer, server, config) { requestsPerSecond: requestsPerSecond }); + // Creates a status object for this node + kbnServer.stats = { + heap: { + total: _.get(event, 'psmem.heapTotal'), + used: _.get(event, 'psmem.heapUsed'), + rss: _.get(event, 'psmem.rss'), + }, + connections: _.get(event, ['concurrents', port]), + requests: _.get(event, ['requests', port]), + }; }); }; +