Bei SOLR können auch Daten zu Metriken und gesammelte Statistiken abgeholt werden. Sie können sogar gleich als PNG-Bilddateien heruntergeladen werden. Die einfachste Variante ist natürlich per Request aus Agorum heraus, denn es entfällt das Tunneln des SOLR-Ports per SSH-Port-Forwarding.
Doku bei SOLR:
Im betreffenden System läuft ein SOLR 7.7.2.
Einige Links:
https://solr.apache.org/guide/7_7/performance-statistics-reference.html
Für unseren Zweck: https://solr.apache.org/guide/7_7/metrics-history.html
Um schnell einen Überblick über die Memory-Belegung zu bekommen, wollten wir Histogramme bekommen. Dazu lautet der Link auf dem Agorum-Host:
http://localhost:8981/solr/adm…ame=solr.jvm&format=graph
Als Antwort kommt ein JSON mit base64-encodierten PNGs. Das sieht etwa so aus:
{
"responseHeader":{
"zkConnected":true,
"status":0,
"QTime":826},
"metrics":{
"solr.jvm":{
"data":{
"RRA:AVERAGE:0.5:1:240":{
"values":{
"memory.heap.used":"iVBORw0KGgoAAAANSUhEUgAAAkQAAADlCAIAAAA9XX9vAAAgkUlEQVR42u2dX2gc173HDUIsRmIxGCOEKULFIQQ........",
"os.processCpuLoad":"iVBORw0KGgoAAAANSUhEUgAAAkQAAADlCAIAAAA9XX9vAAAd6UlEQVR42u2db2gcVb/HA2EJ4QYplFCkh.......",
Alles anzeigen
In Agorum bleibt jetzt nur etwas Fleißarbeit, etwa so:
let StringBase64Utils = Packages.agorum.commons.string.StringBase64Utils;
// siehe client.json
function getSvc(host, path, config, query) {
let conf = {
type: 'application/xml', // Was liefern wir
accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', // Was wollen wir,
'Accept-Language': 'en-US,en;q=0.5'
};
conf = Object.assign(conf, config);
let svc = apiClient(host, conf)(path);
if (query) {
svc.query(
query
);
}
return svc;
}
let path = '/solr/admin/metrics/history';
let query = {'action':'get','name':'solr.jvm','format':'graph'};
let rsp = getSvc('http://127.0.0.1:8981', path ,null,query).get();
let metrics = rsp.metrics['solr.jvm'].data;
const pngPath = '';
// das ergebnis-json parsen
// name ist so etwas wie "RRA:AVERAGE:0.5:1:240":
// memory.heap.used enthält das Base64
let heapList = Object.keys(metrics).map(it => {
return { name: it,
memory: metrics[it].values['memory.heap.used']
} ;
});
let list = heapList.map( it => {
// return mit dem dekodierten PNG
return { name: it.name,
memoryHistogramm: StringBase64Utils.decodeFromBase64Bytes(it.memory)
} ;
});
//jedes listenelement enthält ein PNG. Irgenwohin schreiben in Agorum. Damit hat man die Bildazeige gratis.
list.forEach( it => {
saveWhereEver(it.name, it.memoryHistogramm );
});
Alles anzeigen
Mit property geht's noch einfacher. Siehe letzten Post zum Round-Table im Februar. Der Request ist einfacher. Und wie man schon sieht, lassen sich auch so interessante Daten wie CPU-Load holen.