Merge remote-tracking branch 'upstream/master' into feature/issue-147

This commit is contained in:
Chris Cowan 2014-03-12 15:29:01 -07:00
commit 6ebf94bb62
7 changed files with 76 additions and 18 deletions

View file

@ -124,6 +124,7 @@ public class AgentService extends AbstractLifecycleComponent<AgentService> imple
nodeSettingsService.addListener(this);
dynamicSettings.addDynamicSetting(SETTINGS_INTERVAL);
dynamicSettings.addDynamicSetting(SETTINGS_INDICES + ".*"); // array settings
dynamicSettings.addDynamicSetting(SETTINGS_SHARD_STATS_ENABLED);
}
protected void applyIntervalSettings() {
@ -202,6 +203,12 @@ public class AgentService extends AbstractLifecycleComponent<AgentService> imple
logger.info("sampling indices updated to [{}]", Strings.arrayToCommaDelimitedString(indices));
indicesToExport = indices;
}
Boolean shardsExport = settings.getAsBoolean(SETTINGS_SHARD_STATS_ENABLED, null);
if (shardsExport != null) {
logger.info("updating " + SETTINGS_SHARD_STATS_ENABLED + " to [" + shardsExport + "]");
exportShardStats = shardsExport;
}
}
class ExportingWorker implements Runnable {

View file

@ -48,10 +48,7 @@ import org.elasticsearch.marvel.agent.Utils;
import org.elasticsearch.marvel.agent.event.Event;
import org.elasticsearch.node.settings.NodeSettingsService;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
@ -398,7 +395,11 @@ public class ESExporter extends AbstractLifecycleComponent<ESExporter> implement
private boolean checkAndUploadIndexTemplate() {
byte[] template;
try {
template = Streams.copyToBytesFromClasspath("/marvel_index_template.json");
InputStream is = ESExporter.class.getResourceAsStream("/marvel_index_template.json");
if (is == null) {
throw new FileNotFoundException("Resource [/marvel_index_template.json] not found in classpath");
}
template = Streams.copyToByteArray(is);
} catch (IOException e) {
// throwing an exception to stop exporting process - we don't want to send data unless
// we put in the template for it.

View file

@ -1,6 +1,29 @@
[[change_list]]
== Change list
=== 1.1.0
- Improved Sense's autocomplete suggestions:
* Added Snapshot & Restore
* Added Aggregations
* Added support for url query string parameters
* Updated for breaking changes in Elasticsearch 1.0
- Updated welcome splash screen.
- Sense now uses the last used server when opened (previously used the hostname used to access it).
- The agent's keep-alive thread is now stopped upon errors to reduce log noise. It will be restarted
upon successful connection.
- Improved error reporting for failures of items in the agent's bulk requests.
- Index Statistics Dashboard: Indexing Rate Primaries chart was based on the wrong field.
- Introduced `marvel.agent.shard_stats.enabled` to control exporting of shard level statistics. Defaults to `false`.
- Changed agent's default sampling rate to 10s (was 5s)
- Added a visual indication for the master node at the Nodes section of the Overview Dashboard
- Node and Indices tables visually indicate stale data
- Added error reporting to nodes and indices tables
- Made the following agent settings changeable via the Cluster Update Settings API:
* marvel.agent.interval (also supports setting to -1 to disable exporting)
* marvel.agent.exporter.es.hosts
* marvel.agent.exporter.es.timeout
* marvel.agent.shard_stats.enabled
=== 1.0.2
- Kibana uses `window.location.protocol` (http or https) to make ES calls.
- Added support for basic authentication when sending data from agent. See <<configuration>>.

View file

@ -10,6 +10,8 @@ A list of hosts in `hostname:port` format to which statistics and events will
be sent. Data will be sent to the first host, but will failover to the next
host(s) if the first is not reachable. Defaults to `["localhost:9200"]`.
+
This setting is update-able via the Cluster Update Settings API.
+
added[1.0.2] - HTTP Basic authentication credentials can be specified as part of the host name,
i.e., ["user:pwd@host:9200"]
@ -26,11 +28,15 @@ to avoid collecting data from the monitoring cluster itself.
Controls which indices to export data for. Uses simple `test1,test2,test3`
notation (or `_all` for all indices). It also supports wildcards, for
example: `test*`, and the ability to "add" (`+`) and "remove" (`-`), for
example: `+test*,-test3`. Defaults to `*`
example: `+test*,-test3`. Defaults to `*`.
+
This setting is update-able via the Cluster Update Settings API.
`marvel.agent.interval`::
Controls the interval between data samples. Defaults to `5s`.
Controls the interval between data samples. Defaults to `5s`. Set to `-1` to temporarily disable exporting.
+
This setting is update-able via the Cluster Update Settings API.
`marvel.agent.exporter.es.index.timeformat`::
@ -42,6 +48,14 @@ http://joda-time.sourceforge.net/api-release/org/joda/time/format/DateTimeFormat
`marvel.agent.exporter.es.timeout`::
Sets the connection timeout for sending data. Defaults to `6s`.
+
This setting is update-able via the Cluster Update Settings API.
`marvel.agent.shard_stats.enabled`::
Enables or disable exporting of shard level statistics. Defaults to `false`.
+
This setting is update-able via the Cluster Update Settings API.
[[marvel-indices]]

View file

@ -16,7 +16,7 @@ include::dashboards.asciidoc[]
[horizontal]
Elasticsearch:: 0.90.9 or above
Browser:: The latest version of Chrome, Firefox or Safari is
recommended. Internet Explorer 9 and above is also supported.
recommended. Internet Explorer 10 and above is also supported.
include::install.asciidoc[]

View file

@ -109,8 +109,18 @@ allocation] before you restart your nodes to avoid unnecessary shard
reallocation during the install process.
[[previous_versions]]
=== Installing previous versions
Previously released versions of Marvel are available by specifying an exact version. For example:
[source,sh]
----------------
bin/plugin -i elasticsearch/marvel/1.0.2
----------------
[[manual_download]]
==== Manual download
=== Manual download
Elasticsearch's `bin/plugin` script requires direct internet access for downloading
and installing Marvel. If your server doesn't have internet access, you can download

View file

@ -32,6 +32,9 @@
height: 10px;
width: 50px;
}
.marvel-stats-sparkline.compact {
margin-left: 5px;
}
.marvel-muted .mutable {
opacity: 0.3;
}
@ -52,14 +55,14 @@
<!-- full view -->
<table bindonce class="table table-bordered" ng-if="!panel.compact">
<thead>
<th class="pointer" ng-click="set_sort('__name__')">
{{panel.mode}}
<th class="pointer">
<span ng-click="set_sort('__name__')">{{panel.mode}}</span>
<i ng-show="'__name__' == panel.sort[0]" class="pointer link" ng-class="{'icon-chevron-up': panel.sort[1] == 'asc','icon-chevron-down': panel.sort[1] == 'desc'}"></i>
<a ng-disabled="!hasSelected()" id="detail_view_link" ng-href="{{detailViewLink()}}" class="btn btn-mini btn-info pull-right" bs-tooltip="detailViewTip()" data-placement="right">Dashboard</a>
</th>
<th ng-repeat="metric in panel.metrics" ng-class="alertClass(warnLevels[metric.field])" class="pointer" ng-click="set_sort(metric.field)">
{{metric.name}}
<th ng-repeat="metric in panel.metrics" ng-class="alertClass(warnLevels[metric.field])" class="pointer">
<span ng-click="set_sort(metric.field)">{{metric.name}}</span>
<i ng-show='metric.field == panel.sort[0]' class="pointer link" ng-class="{'icon-chevron-up': panel.sort[1] == 'asc','icon-chevron-down': panel.sort[1] == 'desc'}"></i>
</th>
</thead>
@ -95,14 +98,14 @@
<!-- compact view -->
<table bindonce class="table table-bordered table-condensed marvel-table" ng-if="panel.compact">
<thead>
<th class="pointer" ng-click="set_sort('__name__')">
{{panel.mode}}
<th class="pointer">
<span ng-click="set_sort('__name__')">{{panel.mode}}</span>
<i ng-show="'__name__' == panel.sort[0]" class="pointer link" ng-class="{'icon-chevron-up': panel.sort[1] == 'asc','icon-chevron-down': panel.sort[1] == 'desc'}"></i>
<a ng-disabled="!hasSelected()" id="detail_view_link" ng-href="{{detailViewLink()}}" class="btn btn-mini btn-info pull-right" bs-tooltip="detailViewTip()" data-placement="right">Dashboard</a>
</th>
<th ng-repeat="metric in panel.metrics" ng-class="alertClass(warnLevels[metric.field])" class="pointer" ng-click="set_sort(metric.field)">
{{metric.name}}
<th ng-repeat="metric in panel.metrics" ng-class="alertClass(warnLevels[metric.field])" class="pointer">
<span ng-click="set_sort(metric.field)">{{metric.name}}</span>
<i ng-show='metric.field == panel.sort[0]' class="pointer link" ng-class="{'icon-chevron-up': panel.sort[1] == 'asc','icon-chevron-down': panel.sort[1] == 'desc'}"></i>
</th>
</thead>
@ -121,7 +124,7 @@
<div class="pointer" ng-click="rowClick(row,metric)">
<span bo-text="(_.isNull(row[metric.field].value)?'n/a':row[metric.field].value) | metric_format:metric"></span>
<div ng-if="sparkLines" class="marvel-stats-sparkline pointer" ng-click="rowClick(row,metric)" panel='panel' field="metric.field" series="row[metric.field].series"></div>
<div ng-if="sparkLines" class="marvel-stats-sparkline compact pointer" ng-click="rowClick(row,metric)" panel='panel' field="metric.field" series="row[metric.field].series"></div>
</div>
</td>
</tr>