2018-04-20 21:13:37 +02:00
/ *
* Copyright Elasticsearch B . V . and / or licensed to Elasticsearch B . V . under one
* or more contributor license agreements . Licensed under the Elastic License ;
* you may not use this file except in compliance with the Elastic License .
* /
2018-08-29 20:33:27 +02:00
import { LOGGING _TAG , KIBANA _MONITORING _LOGGING _TAG } from './common/constants' ;
2018-04-20 21:13:37 +02:00
import { requireUIRoutes } from './server/routes' ;
import { instantiateClient } from './server/es_client/instantiate_client' ;
import { initMonitoringXpackInfo } from './server/init_monitoring_xpack_info' ;
2018-06-21 22:08:32 +02:00
import { initBulkUploader } from './server/kibana_monitoring' ;
import {
getKibanaUsageCollector ,
getOpsStatsCollector ,
getSettingsCollector ,
} from './server/kibana_monitoring/collectors' ;
2018-04-20 21:13:37 +02:00
/ * *
2018-05-15 18:32:14 +02:00
* Initialize the Kibana Monitoring plugin by starting up asynchronous server tasks
* - [ 1 ] instantiation of an elasticsearch - js client exposed as a server plugin object
* - [ 2 ] start monitoring cluster x - pack license and features check
* - [ 3 ] webserver route handling
2018-06-21 22:08:32 +02:00
* - [ 4 ] start the internal monitoring collector / bulk uploader
2018-05-15 18:32:14 +02:00
* - [ 5 ] expose the monitoring collector object for other plugins to register with
2018-04-20 21:13:37 +02:00
* @ param monitoringPlugin { Object } Monitoring UI plugin
* @ param server { Object } HapiJS server instance
* /
export const init = ( monitoringPlugin , server ) => {
2018-07-19 01:37:04 +02:00
const kbnServer = monitoringPlugin . kbnServer ;
2018-06-21 22:08:32 +02:00
const config = server . config ( ) ;
2018-07-09 18:32:02 +02:00
const { collectorSet } = server . usage ;
2018-06-21 22:08:32 +02:00
/ *
* Register collector objects for stats to show up in the APIs
* /
2018-07-19 01:37:04 +02:00
collectorSet . register ( getOpsStatsCollector ( server , kbnServer ) ) ;
2018-06-21 22:08:32 +02:00
collectorSet . register ( getKibanaUsageCollector ( server ) ) ;
2018-07-19 01:37:04 +02:00
collectorSet . register ( getSettingsCollector ( server , kbnServer ) ) ;
2018-06-21 22:08:32 +02:00
/ *
* Instantiate and start the internal background task that calls collector
* fetch methods and uploads to the ES monitoring bulk endpoint
* /
const xpackMainPlugin = server . plugins . xpack _main ;
xpackMainPlugin . status . once ( 'green' , async ( ) => { // first time xpack_main turns green
/ *
* End - user - facing services
* /
2018-04-20 21:13:37 +02:00
const uiEnabled = config . get ( 'xpack.monitoring.ui.enabled' ) ;
if ( uiEnabled ) {
2018-05-15 18:32:14 +02:00
await instantiateClient ( server ) ; // Instantiate the dedicated ES client
await initMonitoringXpackInfo ( server ) ; // Route handlers depend on this for xpackInfo
await requireUIRoutes ( server ) ;
2018-04-20 21:13:37 +02:00
}
2018-06-21 22:08:32 +02:00
} ) ;
2018-04-20 21:13:37 +02:00
2018-07-19 01:37:04 +02:00
const bulkUploader = initBulkUploader ( kbnServer , server ) ;
2018-06-21 22:08:32 +02:00
const kibanaCollectionEnabled = config . get ( 'xpack.monitoring.kibana.collection.enabled' ) ;
const { info : xpackMainInfo } = xpackMainPlugin ;
2018-04-20 21:13:37 +02:00
2018-06-21 22:08:32 +02:00
if ( kibanaCollectionEnabled ) {
/ *
* Bulk uploading of Kibana stats
* /
xpackMainInfo . onLicenseInfoChange ( ( ) => {
// use updated xpack license info to start/stop bulk upload
const mainMonitoring = xpackMainInfo . feature ( 'monitoring' ) ;
const monitoringBulkEnabled = mainMonitoring && mainMonitoring . isAvailable ( ) && mainMonitoring . isEnabled ( ) ;
if ( monitoringBulkEnabled ) {
bulkUploader . start ( collectorSet ) ;
} else {
bulkUploader . handleNotEnabled ( ) ;
}
} ) ;
} else if ( ! kibanaCollectionEnabled ) {
server . log (
[ 'info' , LOGGING _TAG , KIBANA _MONITORING _LOGGING _TAG ] ,
2018-07-09 18:32:02 +02:00
'Internal collection for Kibana monitoring is disabled per configuration.'
2018-06-21 22:08:32 +02:00
) ;
}
2018-04-20 21:13:37 +02:00
server . injectUiAppVars ( 'monitoring' , ( server ) => {
const config = server . config ( ) ;
return {
maxBucketSize : config . get ( 'xpack.monitoring.max_bucket_size' ) ,
minIntervalSeconds : config . get ( 'xpack.monitoring.min_interval_seconds' ) ,
kbnIndex : config . get ( 'kibana.index' ) ,
esApiVersion : config . get ( 'elasticsearch.apiVersion' ) ,
esShardTimeout : config . get ( 'elasticsearch.shardTimeout' ) ,
showLicenseExpiration : config . get ( 'xpack.monitoring.show_license_expiration' ) ,
showCgroupMetricsElasticsearch : config . get ( 'xpack.monitoring.ui.container.elasticsearch.enabled' ) ,
showCgroupMetricsLogstash : config . get ( 'xpack.monitoring.ui.container.logstash.enabled' ) // Note, not currently used, but see https://github.com/elastic/x-pack-kibana/issues/1559 part 2
} ;
} ) ;
} ;