2016-05-23 25 views
1

Ich versuche, Websphere-Serverprotokolle über wsadmin abzurufen. Wenn ich mit einem ND verbunden bin, muss ich möglicherweise Protokolle von entfernten Knoten abrufen, wo ich keinen SSH-Zugang habe.Abrufen von Websphere-JVM-Protokollen mit wsadmin

Da ich die Protokolle mit der Management Console anzeigen kann, habe ich mich gefragt, ob ich die Protokolle mit wsadmin abrufen könnte.

Ich habe folgendes zu tun verwaltet:

s1 = AdminConfig.getid('/Node:'+nodeName+'/Server:'+serverName) 
    log = AdminConfig.showAttribute(s1, 'outputStreamRedirect') 

Für jeden Server, das so etwas wie dieses druckt:

[baseHour 24] 
[fileName ${SERVER_LOG_ROOT}/SystemOut.log] 
[formatWrites true] 
[maxNumberOfBackupFiles 5] 
[messageFormatKind BASIC] 
[rolloverPeriod 24] 
[rolloverSize 1] 
[rolloverType SIZE] 
[suppressStackTrace false] 
[suppressWrites false] 
[baseHour 24] 
[fileName ${SERVER_LOG_ROOT}/SystemErr.log] 
[formatWrites true] 
[maxNumberOfBackupFiles 5] 
[messageFormatKind BASIC] 
[rolloverPeriod 24] 
[rolloverSize 1] 
[rolloverType SIZE] 
[suppressStackTrace false] 
[suppressWrites false] 

Gibt es irgendein Objekt in wsadmin, die mir den Inhalt abrufen helfen könnte dieses Attributs fileName?

Antwort

1

Dies funktioniert für einen einzelnen Server, aber es ist einfach für mehrere Server und Konfigurationen zu bearbeiten.

Es findet den Protokollpfad und sendet einen ant-Job, um seinen Inhalt zu laden, und ruft dann das ant-Protokoll ab.

Das Parsen der Datei, um nur das Protokoll zu erhalten, sollte einfach genug sein.

from java.lang import String 
import jarray 

serverName = sys.argv[0] 
s1 = AdminConfig.getid('/Server:'+serverName) 
log = AdminConfig.showAttribute(s1, 'outputStreamRedirect') 
errLog = AdminConfig.showAttribute(s1, 'errorStreamRedirect') 
adminOperations = AdminControl.queryNames('WebSphere:*,type=AdminOperations,process='+serverName).splitlines()[0] 
sysOutLogPath = AdminControl.invoke(adminOperations, 'expandVariable', [AdminConfig.showAttribute(log, 'fileName')]) 
#sysErrLogPath = AdminControl.invoke(adminOperations, 'expandVariable', [AdminConfig.showAttribute(errLog, 'fileName')]) 
fileContent_outLog = '<project name="printLog" default="printLog"><target name="printLog"><loadfile property="logContents" srcFile="'+sysOutLogPath+'"/></target></project>' 
str = String(fileContent_outLog) 
bytes = str.getBytes() 
antAgent = AdminControl.makeObjectName(AdminControl.queryNames('WebSphere:*,type=AntAgent,process='+serverName)) 
AdminControl.invoke_jmx(antAgent, 'putScript', [String('printLog.xml'),bytes], jarray.array(['java.lang.String', '[B'], String)) 
AdminControl.invoke_jmx(antAgent, 'invokeAnt', [jarray.array([], String), String('printLog.xml'), String('printLog')], jarray.array(['[Ljava.lang.String;', 'java.lang.String', 'java.lang.String'], String)) 
logBytes = AdminControl.invoke_jmx(antAgent, 'getLastLog', [],jarray.array([], String)) 
tempFile = open('./'+serverName+'.SystemOut.log','w') 
tempFile.write(String(logBytes)) 
tempFile.close()