Skip to content

Conversation

@MisterDA
Copy link
Contributor

@MisterDA MisterDA commented Sep 3, 2021

This PR integrates the scheduler and workers services with the Windows Event Log by using the win-eventlog package. We still log on Prometheus, the two reporters are combined.

Windows services cannot log onto standard output/error, so when used as services, the workers and the scheduler use a file formatter for Prometheus logging.

The worker doesn't expose Prometheus cmdliner options, so does it make sense to even use Prometheus for logging?

Debug events are too verbose and are not reported into the Windows event log.

@MisterDA MisterDA force-pushed the windows-event-log branch 4 times, most recently from 27ec547 to 06013fe Compare September 8, 2021 09:08
@MisterDA MisterDA marked this pull request as ready for review January 14, 2022 08:55
@MisterDA MisterDA requested a review from talex5 January 14, 2022 08:55
@MisterDA
Copy link
Contributor Author

I think I forgot this, I'll do a fixup of the last commit.

diff --git a/bin/worker.ml b/bin/worker.ml
index 0102a85..ebf4bf1 100644
--- a/bin/worker.ml
+++ b/bin/worker.ml
@@ -43,7 +43,7 @@ let update_normal () =
   Lwt.return (fun () -> Lwt.return ())

 let main default_level ?formatter registration_path capacity name allow_push prune_threshold state_dir obuilder =
-  setup_log ?formatter default_level "ocluster-worker";
+  setup_log ?formatter default_level name;
   let update =
     if Sys.file_exists "/.dockerenv" then update_docker
     else update_normal

@MisterDA MisterDA force-pushed the windows-event-log branch 2 times, most recently from c7af082 to c6aac72 Compare January 20, 2022 11:56
@MisterDA
Copy link
Contributor Author

Ok, I've now added the DLL that Windows Event viewer needs to print the logged messages nicely. It needs to be registered with Windows:

set REG_DLL_PATH=%PREFIX%\lib\ocluster\dllprovider.dll
set REG_PATH=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application
set REG_WORKER_PATH=%REG_PATH%\%WORKER_NAME%
set REG_SCHEDULER_PATH=%REG_PATH%\ocluster-scheduler

reg ADD "%REG_WORKER_PATH%" /v CategoryCount        /t REG_DWORD /d 0x00000001
reg ADD "%REG_WORKER_PATH%" /v CategoryMessageFile  /t REG_SZ    /d "%REG_DLL_PATH%"
reg ADD "%REG_WORKER_PATH%" /v EventMessageFile     /t REG_SZ    /d "%REG_DLL_PATH%"
reg ADD "%REG_WORKER_PATH%" /v ParameterMessageFile /t REG_SZ    /d "%REG_DLL_PATH%"
reg ADD "%REG_WORKER_PATH%" /v TypesSupported       /t REG_DWORD /d 0x00000007

reg ADD "%REG_SCHEDULER_PATH%" /v CategoryCount        /t REG_DWORD /d 0x00000001
reg ADD "%REG_SCHEDULER_PATH%" /v CategoryMessageFile  /t REG_SZ    /d "%REG_DLL_PATH%"
reg ADD "%REG_SCHEDULER_PATH%" /v EventMessageFile     /t REG_SZ    /d "%REG_DLL_PATH%"
reg ADD "%REG_SCHEDULER_PATH%" /v ParameterMessageFile /t REG_SZ    /d "%REG_DLL_PATH%"
reg ADD "%REG_SCHEDULER_PATH%" /v TypesSupported       /t REG_DWORD /d 0x00000007

There's just one type of message, the simplicity is intentional.

By reusing the `--worker-name' CLI parameter instead of always opting
for "ocluster-worker", we can install multiple OCluster workers as
Windows services on the same host.
The `remove' CLI parameter becomes `remove <name>' where <name> is the
worker to remove from the list of services.
I forgot to self-initialize the random number generator. As the log
file is only differentiated by a random number, the log file would be
overriden at restart.
Don't report Debug events to avoid being too noisy. Build provider dll
to get log messages from Windows event viewers.
@MisterDA MisterDA mentioned this pull request Nov 8, 2022
@MisterDA MisterDA changed the title Windows event log & logging bugfixes Windows event log Nov 8, 2022
@MisterDA MisterDA marked this pull request as draft November 8, 2022 15:00
@MisterDA
Copy link
Contributor Author

I now think that logging should use TraceLogging on Windows. There are examples of a TraceLogging easy-to-use wrapper with a dynamic implementation that doesn't require to register all logging messages. There are also examples of backend for TraceLogging using LTTng, a library available on Linux, that can help if someone tries to build an OCaml wrapper for TraceLogging.

@MisterDA MisterDA closed this Apr 11, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants