Comment modifier la rétention des logs des JVMs sous Websphere en utilisant python ?

Premièrement, je lance une recherche sur Google avec les mots clés suivants :

change log file rotation and maximum file size jvm logs websphere

Je vois que cela ne suffit pas car je tombe sur les méthodes manuelles et non les scripts python. Du coup j’enrichis ma recherche :

Setting log file size and rotation for JVM log files websphere jython wsadmin

Super ! Je tombe sur un article qui a l’air de répondre à ma problématique.

# rotateWasLogEPRN.py
# Setup WAS Log file rotations
# for yourserver
#
# Implement:
# ./wsadmin.sh -lang jython -f $FILE_LOCATION/rotateWasLogEPRN.py >> $TO_LOG_FILE
#
# You can add this as you have other scripts in the deployment script
# if you need help please let me know.
#
#

print "Changing the SystemOut & SystemErr log file rotation settings"
var1 = AdminConfig.getid('/Cell:yourcell/Node:yournode/Server:yourserver/')

log = AdminConfig.showAttribute(var1, 'outputStreamRedirect')
log2 = AdminConfig.showAttribute(var1, 'errorStreamRedirect')

AdminConfig.modify(log, '[[rolloverSize 10] [maxNumberOfBackupFiles 5]]')
AdminConfig.modify(log2,'[[rolloverSize 10] [maxNumberOfBackupFiles 5]]')

AdminConfig.save()

print "New SystemOut settings 9-10-08"
AdminConfig.show(log).split("\n")
print "New SystemErr settings 9-10-08"
AdminConfig.show(log2).split("\n")

Je vais l’adapter à mes besoins, car j’ai besoin d’une rotation tous les 5MB et je dois garder 20 fichiers de logs. Cela donne donc :

# rotateWasLogEPRN.py
# Setup WAS Log file rotations
# for yourserver
#
# Implement:
# ./wsadmin.sh -lang jython -f $FILE_LOCATION/rotateWasLogEPRN.py >> $TO_LOG_FILE
#
# You can add this as you have other scripts in the deployment script
# if you need help please let me know.
#
#

print "Changing the SystemOut & SystemErr log file rotation settings"
var1 = AdminConfig.getid('/Cell:yourcell/Node:yournode/Server:yourserver/')

log = AdminConfig.showAttribute(var1, 'outputStreamRedirect')
log2 = AdminConfig.showAttribute(var1, 'errorStreamRedirect')

AdminConfig.modify(log, '[[rolloverSize 5] [maxNumberOfBackupFiles 20]]')
AdminConfig.modify(log2,'[[rolloverSize 5] [maxNumberOfBackupFiles 20]]')

AdminConfig.save()

print "New SystemOut settings 6-12-17"
AdminConfig.show(log).split("\n")
print "New SystemErr settings 6-12-17"
AdminConfig.show(log2).split("\n")

De plus je dois lancer ce script sur 48 JVMs. Il faut donc que je trouve un moyen de faire une boucle en python ou d’encapsuler ça dans du shell, ou encore de créer des fonctions en python. Je vais utiliser la dernière méthode, les fonctions en python. J’ai déjà vu un de mes collègues le faire, cela ne devrait pas être très compliqué.

def rotateWasLog(nodename,servername):
 server_id = getServerByNodeAndName(nodename,servername)
 log = AdminConfig.showAttribute(server_id, 'outputStreamRedirect')
 log2 = AdminConfig.showAttribute(server_id, 'errorStreamRedirect')
 AdminConfig.modify(log, '[[rolloverSize 5] [maxNumberOfBackupFiles 20]]')
 AdminConfig.modify(log2,'[[rolloverSize 5] [maxNumberOfBackupFiles 20]]')

# appel fonction
rotateWasLog('monPremierNode','SERVER01')
rotateWasLog('monPremierNode','SERVER02')

print "New SystemOut settings 6-12-17"
AdminConfig.show(log).split("\n")
print "New SystemErr settings 6-12-17"
AdminConfig.show(log2).split("\n")

AdminConfig.save()
AdminNodeManagement.syncActiveNodes()

Mon script ne fonctionne pas du premier coup, comme d’habitude avec python j’ai des erreurs incompréhensibles :

Traceback (innermost last):
 File "<string>", line 9, in ?
 File "<string>", line 2, in rotateWasLog
NameError: getServerByNodeAndName

Ce que je sais c’est que c’est l’appel à la fonction qui est erroné.

C’est bon, j’ai trouvé, j’avais oublié d’inclure la librairie wsadminlib.py. Donc cela a fonctionné comme prévu. Ci-dessous mon code :

execfile('/xxxx/wsadminlib.py')

def rotateWasLog(nodename,servername):
 server_id = getServerByNodeAndName(nodename,servername)
 log = AdminConfig.showAttribute(server_id, 'outputStreamRedirect')
 log2 = AdminConfig.showAttribute(server_id, 'errorStreamRedirect')
 AdminConfig.modify(log, '[[rolloverSize 5] [maxNumberOfBackupFiles 20]]')
 AdminConfig.modify(log2,'[[rolloverSize 5] [maxNumberOfBackupFiles 20]]')

# appel fonction
rotateWasLog("xxx","xxx")
rotateWasLog("xxx","xxx")

#print "New SystemOut settings 6-12-17"
#AdminConfig.show(log).split("\n")
#print "New SystemErr settings 6-12-17"
#AdminConfig.show(log2).split("\n")

AdminConfig.save()
AdminNodeManagement.syncActiveNodes()

Il ne me reste plus qu’à appeler la même fonction pour toutes mes JVMs.

Source :

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *