"""
Ovirt Engine logs
=================
This module contains the following parsers:
ServerLog - file ``/var/log/ovirt-engine/server.log``
-----------------------------------------------------
UILog - file ``/var/log/ovirt-engine/ui.log``
---------------------------------------------
EngineLog - file ``/var/log/ovirt-engine/engine.log``
-----------------------------------------------------
BootLog - file ``/var/log/ovirt-engine/boot.log``
-------------------------------------------------
ConsoleLog - file ``/var/log/ovirt-engine/console.log``
-------------------------------------------------------
"""
from time import strptime
from datetime import datetime
from insights import LogFileOutput, Syslog, parser
from insights.specs import Specs
[docs]@parser(Specs.ovirt_engine_boot_log)
class BootLog(Syslog):
'''Provide access to ``/var/log/ovirt-engine/boot.log`` using the Syslog parser class.
Sample input::
03:46:19,238 INFO [org.jboss.as.server] WFLYSRV0039: Creating http management service using socket-binding (management)
03:46:19,242 INFO [org.xnio] XNIO version 3.5.5.Final-redhat-1
03:46:19,250 INFO [org.xnio.nio] XNIO NIO Implementation Version 3.5.5.Final-redhat-1
Examples:
>>> xnio_lines = boot_log.get('xnio.nio')
>>> len(xnio_lines)
1
>>> xnio_lines[0].get('procname')
'org.xnio.nio'
>>> xnio_lines[0].get('level')
'INFO'
>>> xnio_lines[0].get('message')
'XNIO NIO Implementation Version 3.5.5.Final-redhat-1'
'''
time_format = '%H:%M:%S,%f'
def _parse_line(self, line):
msg_info = {'raw_message': line}
line_splits = line.split()
try:
if strptime(line_splits[0], self.time_format):
msg_info['timestamp'] = strptime(line_splits[0], self.time_format)
msg_info['level'] = line_splits[1]
msg_info['procname'] = line_splits[2].strip('[]')
msg_info['message'] = ' '.join(line_splits[3:])
except ValueError:
pass
return msg_info
[docs]@parser(Specs.ovirt_engine_console_log)
class ConsoleLog(LogFileOutput):
'''Provide access to ``/var/log/ovirt-engine/console.log`` using the LogFileoutput parser class.'''
pass
# Using existing engine_log specs
[docs]@parser(Specs.engine_log)
class EngineLog(LogFileOutput):
'''Provide access to ``/var/log/ovirt-engine/engine.log`` using the LogFileoutput parser class.
Sample input::
2018-08-06 04:06:33,229+05 INFO [org.ovirt.engine.core.bll.utils.ThreadPoolMonitoringService] (EE-ManagedThreadFactory-engineThreadMonitoring-Thread-1) [] Thread pool 'engine' is using 0 threads out of 500, 8 threads waiting for tasks and 0 tasks in queue.
2018-08-06 04:06:33,229+05 INFO [org.ovirt.engine.core.bll.utils.ThreadPoolMonitoringService] (EE-ManagedThreadFactory-engineThreadMonitoring-Thread-1) [] Thread pool 'engineScheduled' is using 0 threads out of 100, 100 threads waiting for tasks.
2018-08-06 04:06:33,229+05 INFO [org.ovirt.engine.core.bll.utils.ThreadPoolMonitoringService] (EE-ManagedThreadFactory-engineThreadMonitoring-Thread-1) [] Thread pool 'engineThreadMonitoring' is using 1 threads out of 1, 0 threads waiting for tasks.
2018-08-06 04:06:33,229+05 INFO [org.ovirt.engine.core.bll.utils.ThreadPoolMonitoringService] (EE-ManagedThreadFactory-engineThreadMonitoring-Thread-1) [] Thread pool 'hostUpdatesChecker' is using 0 threads out of 5, 5 threads waiting for tasks.
2018-08-06 04:16:33,231+05 INFO [org.ovirt.engine.core.bll.utils.ThreadPoolMonitoringService] (EE-ManagedThreadFactory-engineThreadMonitoring-Thread-1) [] Thread pool 'commandCoordinator' is using 0 threads out of 10, 2 threads waiting for tasks.
2018-08-06 04:16:33,231+05 INFO [org.ovirt.engine.core.bll.utils.ThreadPoolMonitoringService] (EE-ManagedThreadFactory-engineThreadMonitoring-Thread-1) [] Thread pool 'default' is using 0 threads out of 1, 5 threads waiting for tasks.
2018-08-06 04:16:33,231+05 INFO [org.ovirt.engine.core.bll.utils.ThreadPoolMonitoringService] (EE-ManagedThreadFactory-engineThreadMonitoring-Thread-1) [] Thread pool 'engine' is using 0 threads out of 500, 8 threads waiting for tasks and 0 tasks in queue.
2018-08-06 04:16:33,231+05 INFO [org.ovirt.engine.core.bll.utils.ThreadPoolMonitoringService] (EE-ManagedThreadFactory-engineThreadMonitoring-Thread-1) [] Thread pool 'engineScheduled' is using 0 threads out of 100, 100 threads waiting for tasks.
2018-08-06 04:16:33,231+05 INFO [org.ovirt.engine.core.bll.utils.ThreadPoolMonitoringService] (EE-ManagedThreadFactory-engineThreadMonitoring-Thread-1) [] Thread pool 'engineThreadMonitoring' is using 1 threads out of 1, 0 threads waiting for tasks.
2018-08-06 04:16:33,231+05 INFO [org.ovirt.engine.core.bll.utils.ThreadPoolMonitoringService] (EE-ManagedThreadFactory-engineThreadMonitoring-Thread-1) [] Thread pool 'hostUpdatesChecker' is using 0 threads out of 5, 5 threads waiting for tasks.
2018-08-06 04:26:33,233+05 INFO [org.ovirt.engine.core.bll.utils.ThreadPoolMonitoringService] (EE-ManagedThreadFactory-engineThreadMonitoring-Thread-1) [] Thread pool 'commandCoordinator' is using 0 threads out of 10, 2 threads waiting for tasks.
2018-08-06 04:26:33,233+05 INFO [org.ovirt.engine.core.bll.utils.ThreadPoolMonitoringService] (EE-ManagedThreadFactory-engineThreadMonitoring-Thread-1) [] Thread pool 'default' is using 0 threads out of 1, 5 threads waiting for tasks.
2018-08-06 04:26:33,233+05 INFO [org.ovirt.engine.core.bll.utils.ThreadPoolMonitoringService] (EE-ManagedThreadFactory-engineThreadMonitoring-Thread-1) [] Thread pool 'engine' is using 0 threads out of 500, 8 threads waiting for tasks and 0 tasks in queue.
2018-08-22 00:16:14,357+05 INFO [org.ovirt.engine.core.vdsbroker.vdsbroker.HotUnplugLeaseVDSCommand] (default task-133) [e3bc976c-bc3e-4b41-807f-3a518169ad18] START, HotUnplugLeaseVDSCommand(HostName = example.com, LeaseVDSParameters:{hostId='bfa308ab-5add-4ad7-8f1c-389cb8dcf703', vmId='789489a3-be62-40e4-b13e-beb34ba5ff93'}), log id: 7a634963
Examples:
>>> from datetime import datetime
>>> "Thread pool 'engine'" in engine_log
True
>>> len(list(engine_log.get_after(datetime(2018, 8, 6, 4, 16, 33, 0))))
10
>>> matched_line = "2018-08-06 04:16:33,231+05 INFO [org.ovirt.engine.core.bll.utils.ThreadPoolMonitoringService] (EE-ManagedThreadFactory-engineThreadMonitoring-Thread-1) [] Thread pool 'hostUpdatesChecker' is using 0 threads out of 5, 5 threads waiting for tasks."
>>> engine_log.get('hostUpdatesChecker')[-1].get('raw_message') == matched_line
True
>>> engine_log.get('vdsbroker')[-1].get('procname') == 'org.ovirt.engine.core.vdsbroker.vdsbroker.HotUnplugLeaseVDSCommand'
True
'''
def _parse_line(self, line):
msg_info = {'raw_message': line}
line_splits = line.split()
dt = ' '.join(line_splits[0:2]).split(',')[0]
try:
if datetime.strptime(dt, self.time_format):
msg_info['timestamp'] = datetime.strptime(dt, self.time_format)
msg_info['level'] = line_splits[2]
msg_info['procname'] = line_splits[3].strip('[]')
msg_info['message'] = ' '.join(line_splits[4:])
except ValueError:
pass
return msg_info
[docs]@parser(Specs.ovirt_engine_server_log)
class ServerLog(EngineLog):
'''Provide access to ``/var/log/ovirt-engine/server.log`` using the EngineLog parser class.
Sample input::
2018-01-17 01:46:15,834+05 INFO [org.jboss.as.server.deployment] (MSC service thread 1-6) WFLYSRV0207: Starting subdeployment (runtime-name: "services.war")
2018-01-17 01:46:16,834+05 INFO [org.jboss.as.server.deployment] (MSC service thread 1-1) WFLYSRV0207: Starting subdeployment (runtime-name: "webadmin.war")
2018-01-17 01:46:17,739+05 WARN [org.jboss.as.dependency.unsupported] (MSC service thread 1-7) WFLYSRV0019: Deployment "deployment.engine.ear" is using an unsupported module ("org.dom4j") which may be changed or removed in future versions without notice.
Examples:
>>> 'is using an unsupported module' in server_log
True
>>> from datetime import datetime
>>> len(list(server_log.get_after(datetime(2018, 1, 17, 1, 46, 16, 0))))
2
>>> matched_line = '2018-01-17 01:46:17,739+05 WARN [org.jboss.as.dependency.unsupported] (MSC service thread 1-7) WFLYSRV0019: Deployment "deployment.engine.ear" is using an unsupported module ("org.dom4j") which may be changed or removed in future versions without notice.'
>>> server_log.get('WARN')[-1].get('raw_message') == matched_line
True
>>> sec_lines = server_log.get('org.wildfly.security')
>>> len(sec_lines)
1
>>> sec_lines[0]['level']
'INFO'
'''
pass
[docs]@parser(Specs.ovirt_engine_ui_log)
class UILog(EngineLog):
'''Provide access to ``/var/log/ovirt-engine/ui.log`` using the EngineLog parser class.
Sample input::
2018-01-24 05:31:26,243+05 ERROR [org.ovirt.engine.ui.frontend.server.gwt.OvirtRemoteLoggingService] (default task-134) [] Permutation name: C068E8B2E40A504D3054A1BDCF2A72BB
2018-01-24 05:32:26,243+05 ERROR [org.ovirt.engine.ui.frontend.server.gwt.OvirtRemoteLoggingService] (default task-134) [] Uncaught exception: com.google.gwt.core.client.JavaScriptException: (TypeError)
Examples:
>>> 'Permutation name' in ui_log
True
>>> from datetime import datetime
>>> len(list(ui_log.get_after(datetime(2018, 1, 24, 5, 31, 26, 0))))
2
>>> exception_lines = ui_log.get('Uncaught exception')
>>> len(exception_lines)
1
>>> exception_lines[0].get('procname')
'org.ovirt.engine.ui.frontend.server.gwt.OvirtRemoteLoggingService'
>>> exception_lines[0].get('level')
'ERROR'
'''
pass