Ich bin mir nicht sicher, ob Sie das geklärt haben, aber ich musste etwas Ähnliches tun, um herauszufinden, wer die Instanz gestartet hat, damit ich sie dazu bringen kann, die Instanz zu stoppen, wenn sie sie nicht verwenden. Ich habe eine Protokollierungsabfrage zusammengestellt:
resource.type = gce_instance AND (jsonPayload.event_subtype = compute.instances.start OR jsonPayload.event_subtype = compute.instances.insert ) AND jsonPayload.event_type = GCE_OPERATION_DONE AND timestamp >= "2018-10-29T14:28:34-07:00" AND jsonPayload.actor.user!="" AND jsonPayload.resource.name=my-sweet-instance-name
Und hier ist die NodeJS-Funktion, die ich zusammengestellt habe, um sie zu erhalten:
const Logging = require( '@google-cloud/logging' );
const moment = require( 'moment' );
const logging = new Logging( );
var getStartInfo = function( instanceName, querySince, cb ) {
var tstart = ( querySince ? querySince : moment( ).subtract( 48, 'hours' ).format( ) ); //
var theLogFilter = 'resource.type = gce_instance AND ' +
'(jsonPayload.event_subtype = compute.instances.start OR jsonPayload.event_subtype = compute.instances.insert ) AND ' +
'jsonPayload.event_type = GCE_OPERATION_DONE AND ' +
'timestamp >= "' + tstart + '" AND ' +
'jsonPayload.actor.user!="" AND ' +
'jsonPayload.resource.name=' + instanceName;
logging.getEntries( {
filter: theLogFilter,
autoPaginate: false
}, ( err, entries, nextQuery, apiResponse ) => {
if ( err ) {
console.log( "ERROR: " + err );
cb( err );
return;
}
var item, startedBy, startTime, runningTime, mostRecentStart;
//console.log( 'Entries: ' + JSON.stringify( entries ) );
// Mabye if none found, we try again with a longer querySince?
if ( entries.length == 0 ) {
console.log( "\nNo log entries found for instance '" + instanceName + "'. Filter:" );
console.log( theLogFilter );
cb( "No entries found" );
return;
}
// Are these sorted by time?
for ( var i = 0; i < entries.length; i++ ) {
startedBy = entries[ i ].metadata.jsonPayload.fields.actor.structValue.fields.user.stringValue;
startTime = entries[ i ].metadata.jsonPayload.fields.event_timestamp_us.stringValue / 1000; // This is nano seconds since epoch
}
if ( cb )
cb( null, { "startedBy": startedBy, "startTime": moment( startTime ).format() } );
} );
}
Hoffentlich hilft das jemandem, denn es war ein gutes Stück Arbeit, es zusammenzustellen.