From d1b1ce6256374db5c5125760592858c30aac25c0 Mon Sep 17 00:00:00 2001 From: Nolan Ehrstrom Date: Mon, 3 Aug 2026 13:09:51 -0700 Subject: [PATCH 1/3] Configure streaming logs --- ProcessMaker/Multitenancy/SwitchTenant.php | 5 +++++ config/logging.php | 10 +++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/ProcessMaker/Multitenancy/SwitchTenant.php b/ProcessMaker/Multitenancy/SwitchTenant.php index e85c1421f7..aee0a7539d 100644 --- a/ProcessMaker/Multitenancy/SwitchTenant.php +++ b/ProcessMaker/Multitenancy/SwitchTenant.php @@ -137,6 +137,11 @@ private function overrideConfigs(Application $app, IsTenant $tenant) $app->make('log')->reset(); $app->forgetInstance('log'); + // Used for setting the tenantId context when streaming logs to Loki + $app->afterResolving('log', function ($log) use ($tenant) { + $log->shareContext(['tenantId' => $tenant->id, 'appUrl' => $tenant->config['app.url']]); + }); + // url() helper app(UrlGenerator::class)->useOrigin($tenant->config['app.url']); diff --git a/config/logging.php b/config/logging.php index 075376e46c..e65f3d29f0 100644 --- a/config/logging.php +++ b/config/logging.php @@ -31,7 +31,10 @@ | */ - 'deprecations' => env('LOG_DEPRECATIONS_CHANNEL', 'null'), + 'deprecations' => [ + 'channel' => 'deprecations', + 'trace' => false, + ], /* |-------------------------------------------------------------------------- @@ -135,6 +138,11 @@ 'level' => 'debug', 'days' => env('DATA_SOURCE_CLEAR_LOG', 7), ], + 'deprecations' => [ + 'driver' => 'monolog', + 'handler' => NullHandler::class, + 'level' => 'emergency', + ], ], ]; From 715b9678ce0cdb452cc19f62bbfe3439c726cb18 Mon Sep 17 00:00:00 2001 From: Nolan Ehrstrom Date: Tue, 4 Aug 2026 15:27:27 -0700 Subject: [PATCH 2/3] Add pod logging --- ProcessMaker/Multitenancy/SwitchTenant.php | 7 ++++++- config/app.php | 3 +++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/ProcessMaker/Multitenancy/SwitchTenant.php b/ProcessMaker/Multitenancy/SwitchTenant.php index aee0a7539d..41c86aa0e7 100644 --- a/ProcessMaker/Multitenancy/SwitchTenant.php +++ b/ProcessMaker/Multitenancy/SwitchTenant.php @@ -139,7 +139,12 @@ private function overrideConfigs(Application $app, IsTenant $tenant) // Used for setting the tenantId context when streaming logs to Loki $app->afterResolving('log', function ($log) use ($tenant) { - $log->shareContext(['tenantId' => $tenant->id, 'appUrl' => $tenant->config['app.url']]); + $log->shareContext([ + 'tenantId' => $tenant->id, + 'appUrl' => $tenant->config['app.url'], + 'pod' => config('app.pod'), + 'pod_name' => config('app.pod_name'), + ]); }); // url() helper diff --git a/config/app.php b/config/app.php index b3c5891f98..1cca5c370d 100644 --- a/config/app.php +++ b/config/app.php @@ -334,4 +334,7 @@ 'claim_timeout_minutes' => env('SCHEDULER_CLAIM_TIMEOUT_MINUTES', 5), 'bpmn_timer_overlap_minutes' => env('SCHEDULER_BPMN_TIMER_OVERLAP_MINUTES', 5), ], + + 'pod' => env('POD', ''), + 'pod_name' => env('POD_NAME', ''), ]; From 7b31dcbf1253ded9adce7bae4f65eb05e2d342c5 Mon Sep 17 00:00:00 2001 From: Nolan Ehrstrom Date: Wed, 5 Aug 2026 15:05:18 -0700 Subject: [PATCH 3/3] Use hostname to get otel info --- ProcessMaker/Multitenancy/SwitchTenant.php | 2 -- .../Providers/ProcessMakerServiceProvider.php | 23 +++++++++++++++++++ config/app.php | 3 +-- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/ProcessMaker/Multitenancy/SwitchTenant.php b/ProcessMaker/Multitenancy/SwitchTenant.php index 41c86aa0e7..7c24f8ec6c 100644 --- a/ProcessMaker/Multitenancy/SwitchTenant.php +++ b/ProcessMaker/Multitenancy/SwitchTenant.php @@ -142,8 +142,6 @@ private function overrideConfigs(Application $app, IsTenant $tenant) $log->shareContext([ 'tenantId' => $tenant->id, 'appUrl' => $tenant->config['app.url'], - 'pod' => config('app.pod'), - 'pod_name' => config('app.pod_name'), ]); }); diff --git a/ProcessMaker/Providers/ProcessMakerServiceProvider.php b/ProcessMaker/Providers/ProcessMakerServiceProvider.php index 762fd6cd0b..6d8c1088a3 100644 --- a/ProcessMaker/Providers/ProcessMakerServiceProvider.php +++ b/ProcessMaker/Providers/ProcessMakerServiceProvider.php @@ -107,6 +107,8 @@ public function boot(): void $this->checkConfigCache(); + $this->shareServiceLogContext(); + // Hook after service providers boot self::$bootTime = (microtime(true) - self::$bootStart) * 1000; // Convert to milliseconds } @@ -634,4 +636,25 @@ private function checkConfigCache(): void }); } } + + /** + * Share non-tenant log context (service/replica from k8s hostname) for Loki. + */ + private function shareServiceLogContext(): void + { + $this->app->afterResolving('log', function ($log) { + $pattern = '/^(?:.*-)?([^-]+)-[^-]+-([^-]+)$/'; + $service = ''; + $replica = ''; + if (preg_match($pattern, config('app.hostname'), $matches)) { + $service = $matches[1]; + $replica = $matches[2]; + } + + $log->shareContext([ + 'service' => $service, + 'replica' => $replica, + ]); + }); + } } diff --git a/config/app.php b/config/app.php index 1cca5c370d..879b1b3502 100644 --- a/config/app.php +++ b/config/app.php @@ -335,6 +335,5 @@ 'bpmn_timer_overlap_minutes' => env('SCHEDULER_BPMN_TIMER_OVERLAP_MINUTES', 5), ], - 'pod' => env('POD', ''), - 'pod_name' => env('POD_NAME', ''), + 'hostname' => env('HOSTNAME', ''), ];