From 40fecd062f14c287510bf85ae6bdaf93506ec548 Mon Sep 17 00:00:00 2001 From: gulnaz Date: Thu, 29 May 2025 10:47:08 +0300 Subject: [PATCH 01/10] SUPPORT-9182: log request time --- .../ru/micord/ervu/security/esia/service/EsiaAuthService.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/backend/src/main/java/ru/micord/ervu/security/esia/service/EsiaAuthService.java b/backend/src/main/java/ru/micord/ervu/security/esia/service/EsiaAuthService.java index 65fc895..d4054f0 100644 --- a/backend/src/main/java/ru/micord/ervu/security/esia/service/EsiaAuthService.java +++ b/backend/src/main/java/ru/micord/ervu/security/esia/service/EsiaAuthService.java @@ -183,6 +183,7 @@ public class EsiaAuthService { } public void authEsiaTokensByCode(String esiaAuthCode, String state, HttpServletResponse response, HttpServletRequest request) { + long startReqTime = System.currentTimeMillis(); String esiaAccessTokenStr = null; String prnOid = null; Long expiresIn = null; @@ -287,6 +288,7 @@ public class EsiaAuthService { ); } createTokenAndAddCookie(response, prnOid, ervuId, expiresIn); + LOGGER.info("Thread {} - Request time: {} ms", Thread.currentThread().getId(), System.currentTimeMillis() - startReqTime); } } From e846562f0cccba6b7103422155a530ad075936b6 Mon Sep 17 00:00:00 2001 From: gulnaz Date: Fri, 30 May 2025 12:33:09 +0300 Subject: [PATCH 02/10] SUPPORT-9182: add extra logs --- .../audit/service/impl/BaseAuditService.java | 39 +++++++++++++++++++ .../esia/service/EsiaAuthService.java | 15 ++++--- 2 files changed, 48 insertions(+), 6 deletions(-) diff --git a/backend/src/main/java/ru/micord/ervu/audit/service/impl/BaseAuditService.java b/backend/src/main/java/ru/micord/ervu/audit/service/impl/BaseAuditService.java index 94520ee..3df2fa1 100644 --- a/backend/src/main/java/ru/micord/ervu/audit/service/impl/BaseAuditService.java +++ b/backend/src/main/java/ru/micord/ervu/audit/service/impl/BaseAuditService.java @@ -1,9 +1,14 @@ package ru.micord.ervu.audit.service.impl; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; import javax.servlet.http.HttpServletRequest; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Conditional; import org.springframework.stereotype.Service; @@ -26,6 +31,10 @@ import ru.micord.ervu.util.NetworkUtils; @Service @Conditional(AuditEnabledCondition.class) public class BaseAuditService implements AuditService { + private static final Logger LOGGER = LoggerFactory.getLogger(BaseAuditService.class); + private static final List IP_HEADERS = Arrays.asList("X-Forwarded-For", "Proxy-Client-IP", "WL-Proxy-Client-IP", "HTTP_CLIENT_IP", "HTTP_X_FORWARDED_FOR"); + + private final AuditKafkaPublisher auditPublisher; private final JwtTokenService jwtTokenService; private final ObjectMapper objectMapper; @@ -64,10 +73,26 @@ public class BaseAuditService implements AuditService { @Override public void processAuthEvent(HttpServletRequest request, PersonModel personModel, String status, String eventType) { + long startTime = System.currentTimeMillis(); String serverIp = NetworkUtils.getServerIp(); + LOGGER.info("Thread {} - server ip got in {} ms", Thread.currentThread().getId(), + System.currentTimeMillis() - startTime); + + startTime = System.currentTimeMillis(); String clientIp = NetworkUtils.getClientIp(request); + LOGGER.info("Thread {} - client ip got in {} ms", Thread.currentThread().getId(), + System.currentTimeMillis() - startTime); + + startTime = System.currentTimeMillis(); String serverHostName = NetworkUtils.getHostName(serverIp); + LOGGER.info("Thread {} - server host name got in {} ms", Thread.currentThread().getId(), + System.currentTimeMillis() - startTime); + + startTime = System.currentTimeMillis(); String clientHostName = NetworkUtils.getHostName(clientIp); + LOGGER.info("Thread {} - client host name got in {} ms", Thread.currentThread().getId(), + System.currentTimeMillis() - startTime); + startTime = System.currentTimeMillis(); AuditAuthorizationEvent event = new AuditAuthorizationEvent( personModel.getPrnsId(), @@ -85,6 +110,10 @@ public class BaseAuditService implements AuditService { ); String message = convertToMessage(event); auditPublisher.publishEvent(authorizationTopic, message); + LOGGER.info("Thread {} - event published in {} ms", Thread.currentThread().getId(), + System.currentTimeMillis() - startTime); + + LOGGER.info("client ip from header: {}", getClientIp(request)); } @Override @@ -114,4 +143,14 @@ public class BaseAuditService implements AuditService { throw new RuntimeException(e); } } + + public String getClientIp(HttpServletRequest request) { + IP_HEADERS.forEach(header -> LOGGER.info("Data from header: {} - {}", header, request.getHeader(header))); + return IP_HEADERS.stream() + .map(request::getHeader) + .filter(Objects::nonNull) + .filter(ip -> !ip.isEmpty() && !ip.equalsIgnoreCase("unknown")) + .findFirst() + .orElseGet(request::getRemoteAddr); + } } diff --git a/backend/src/main/java/ru/micord/ervu/security/esia/service/EsiaAuthService.java b/backend/src/main/java/ru/micord/ervu/security/esia/service/EsiaAuthService.java index d4054f0..f8793a0 100644 --- a/backend/src/main/java/ru/micord/ervu/security/esia/service/EsiaAuthService.java +++ b/backend/src/main/java/ru/micord/ervu/security/esia/service/EsiaAuthService.java @@ -184,6 +184,7 @@ public class EsiaAuthService { public void authEsiaTokensByCode(String esiaAuthCode, String state, HttpServletResponse response, HttpServletRequest request) { long startReqTime = System.currentTimeMillis(); + long startSubReqTime; String esiaAccessTokenStr = null; String prnOid = null; Long expiresIn = null; @@ -204,9 +205,9 @@ public class EsiaAuthService { parameters.put("state", "%s"); parameters.put("redirect_uri", redirectUrl); parameters.put("code", esiaAuthCode); - long startTime = System.currentTimeMillis(); + startSubReqTime = System.currentTimeMillis(); SignResponse signResponse = signMap(parameters); - signSecret = System.currentTimeMillis() - startTime; + signSecret = System.currentTimeMillis() - startSubReqTime; String newState = signResponse.getState(); String clientSecret = signResponse.getSignature(); String authUrl = esiaConfig.getEsiaBaseUri() + esiaConfig.getEsiaTokenUrl(); @@ -222,7 +223,7 @@ public class EsiaAuthService { .setParameter("token_type", "Bearer") .setParameter("client_certificate_hash", esiaConfig.getClientCertHash()) .toFormUrlencodedString(); - startTime = System.currentTimeMillis(); + startSubReqTime = System.currentTimeMillis(); HttpRequest postReq = HttpRequest.newBuilder(URI.create(authUrl)) .header(HttpHeaders.CONTENT_TYPE, "application/x-www-form-urlencoded") .POST(HttpRequest.BodyPublishers.ofString(postBody)) @@ -232,7 +233,7 @@ public class EsiaAuthService { .connectTimeout(Duration.ofSeconds(esiaConfig.getConnectionTimeout())) .build() .send(postReq, HttpResponse.BodyHandlers.ofString()); - requestAccessToken = System.currentTimeMillis() - startTime; + requestAccessToken = System.currentTimeMillis() - startSubReqTime; String responseString = postResp.body(); EsiaTokenResponse tokenResponse = objectMapper.readValue(responseString, EsiaTokenResponse.class @@ -247,9 +248,9 @@ public class EsiaAuthService { throw new EsiaException("Token invalid. State from request not equals with state from response."); } esiaAccessTokenStr = tokenResponse.getAccessToken(); - startTime = System.currentTimeMillis(); + startSubReqTime = System.currentTimeMillis(); String verifyResult = verifyToken(esiaAccessTokenStr); - verifySecret = System.currentTimeMillis() - startTime; + verifySecret = System.currentTimeMillis() - startSubReqTime; if (verifyResult != null) { throw new EsiaException(verifyResult); } @@ -283,9 +284,11 @@ public class EsiaAuthService { } finally { if (personModel != null) { + startSubReqTime = System.currentTimeMillis(); auditService.processAuthEvent( request, personModel, status, AuditConstants.LOGIN_EVENT_TYPE ); + LOGGER.info("Thread {} - Process auth event: {} ms", Thread.currentThread().getId(), System.currentTimeMillis() - startSubReqTime); } createTokenAndAddCookie(response, prnOid, ervuId, expiresIn); LOGGER.info("Thread {} - Request time: {} ms", Thread.currentThread().getId(), System.currentTimeMillis() - startReqTime); From a9a5ac9a2f2307f14d9da4cd344f991d33575614 Mon Sep 17 00:00:00 2001 From: gulnaz Date: Fri, 30 May 2025 13:36:05 +0300 Subject: [PATCH 03/10] SUPPORT-9182: add extra logs 2 --- .../ervu/audit/service/impl/BaseAuditService.java | 11 ++++++----- .../ervu/security/esia/service/EsiaAuthService.java | 3 +++ 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/backend/src/main/java/ru/micord/ervu/audit/service/impl/BaseAuditService.java b/backend/src/main/java/ru/micord/ervu/audit/service/impl/BaseAuditService.java index 3df2fa1..2cbcc0c 100644 --- a/backend/src/main/java/ru/micord/ervu/audit/service/impl/BaseAuditService.java +++ b/backend/src/main/java/ru/micord/ervu/audit/service/impl/BaseAuditService.java @@ -32,7 +32,8 @@ import ru.micord.ervu.util.NetworkUtils; @Conditional(AuditEnabledCondition.class) public class BaseAuditService implements AuditService { private static final Logger LOGGER = LoggerFactory.getLogger(BaseAuditService.class); - private static final List IP_HEADERS = Arrays.asList("X-Forwarded-For", "Proxy-Client-IP", "WL-Proxy-Client-IP", "HTTP_CLIENT_IP", "HTTP_X_FORWARDED_FOR"); + private static final List IP_HEADERS = + Arrays.asList("X-Forwarded-For", "Proxy-Client-IP", "WL-Proxy-Client-IP", "HTTP_CLIENT_IP", "HTTP_X_FORWARDED_FOR", "X-CLIENT-IP"); private final AuditKafkaPublisher auditPublisher; @@ -75,22 +76,22 @@ public class BaseAuditService implements AuditService { String eventType) { long startTime = System.currentTimeMillis(); String serverIp = NetworkUtils.getServerIp(); - LOGGER.info("Thread {} - server ip got in {} ms", Thread.currentThread().getId(), + LOGGER.info("Thread {} - server ip {} got in {} ms", Thread.currentThread().getId(), serverIp, System.currentTimeMillis() - startTime); startTime = System.currentTimeMillis(); String clientIp = NetworkUtils.getClientIp(request); - LOGGER.info("Thread {} - client ip got in {} ms", Thread.currentThread().getId(), + LOGGER.info("Thread {} - client ip {} got in {} ms", Thread.currentThread().getId(), clientIp, System.currentTimeMillis() - startTime); startTime = System.currentTimeMillis(); String serverHostName = NetworkUtils.getHostName(serverIp); - LOGGER.info("Thread {} - server host name got in {} ms", Thread.currentThread().getId(), + LOGGER.info("Thread {} - server host name {} got in {} ms", Thread.currentThread().getId(), serverHostName, System.currentTimeMillis() - startTime); startTime = System.currentTimeMillis(); String clientHostName = NetworkUtils.getHostName(clientIp); - LOGGER.info("Thread {} - client host name got in {} ms", Thread.currentThread().getId(), + LOGGER.info("Thread {} - client host name {} got in {} ms", Thread.currentThread().getId(), clientHostName, System.currentTimeMillis() - startTime); startTime = System.currentTimeMillis(); diff --git a/backend/src/main/java/ru/micord/ervu/security/esia/service/EsiaAuthService.java b/backend/src/main/java/ru/micord/ervu/security/esia/service/EsiaAuthService.java index f8793a0..5bcd921 100644 --- a/backend/src/main/java/ru/micord/ervu/security/esia/service/EsiaAuthService.java +++ b/backend/src/main/java/ru/micord/ervu/security/esia/service/EsiaAuthService.java @@ -290,7 +290,10 @@ public class EsiaAuthService { ); LOGGER.info("Thread {} - Process auth event: {} ms", Thread.currentThread().getId(), System.currentTimeMillis() - startSubReqTime); } + startSubReqTime = System.currentTimeMillis(); createTokenAndAddCookie(response, prnOid, ervuId, expiresIn); + LOGGER.info("Thread {} - Creating token and add cookie: {} ms", Thread.currentThread().getId(), System.currentTimeMillis() - startSubReqTime); + LOGGER.info("Thread {} - Request time: {} ms", Thread.currentThread().getId(), System.currentTimeMillis() - startReqTime); } } From c5ddacc405a123e960dbb9225e0656937ea361dd Mon Sep 17 00:00:00 2001 From: gulnaz Date: Fri, 30 May 2025 15:30:20 +0300 Subject: [PATCH 04/10] SUPPORT-9182: add extra logs 3 --- .../ru/micord/ervu/security/esia/service/EsiaAuthService.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/backend/src/main/java/ru/micord/ervu/security/esia/service/EsiaAuthService.java b/backend/src/main/java/ru/micord/ervu/security/esia/service/EsiaAuthService.java index 5bcd921..9c62b0d 100644 --- a/backend/src/main/java/ru/micord/ervu/security/esia/service/EsiaAuthService.java +++ b/backend/src/main/java/ru/micord/ervu/security/esia/service/EsiaAuthService.java @@ -184,12 +184,14 @@ public class EsiaAuthService { public void authEsiaTokensByCode(String esiaAuthCode, String state, HttpServletResponse response, HttpServletRequest request) { long startReqTime = System.currentTimeMillis(); - long startSubReqTime; + long startSubReqTime = startReqTime; String esiaAccessTokenStr = null; String prnOid = null; Long expiresIn = null; long signSecret = 0, requestAccessToken = 0, verifySecret = 0; verifyStateFromCookie(request, state, response); + LOGGER.info("Thread {} - Verify state from cookie: {} ms", Thread.currentThread().getId(), System.currentTimeMillis() - startSubReqTime); + try { String clientId = esiaConfig.getClientId(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm:ss xx"); From e0b5d32cd0e987d6e2f0443b7050587bc4d7896d Mon Sep 17 00:00:00 2001 From: gulnaz Date: Thu, 5 Jun 2025 16:24:27 +0300 Subject: [PATCH 05/10] SUPPORT-9182: small fix in logs --- .../ervu/audit/service/impl/BaseAuditService.java | 14 ++------------ .../service/impl/BaseReplyingKafkaService.java | 8 ++++---- 2 files changed, 6 insertions(+), 16 deletions(-) diff --git a/backend/src/main/java/ru/micord/ervu/audit/service/impl/BaseAuditService.java b/backend/src/main/java/ru/micord/ervu/audit/service/impl/BaseAuditService.java index 2cbcc0c..090c7a6 100644 --- a/backend/src/main/java/ru/micord/ervu/audit/service/impl/BaseAuditService.java +++ b/backend/src/main/java/ru/micord/ervu/audit/service/impl/BaseAuditService.java @@ -33,7 +33,7 @@ import ru.micord.ervu.util.NetworkUtils; public class BaseAuditService implements AuditService { private static final Logger LOGGER = LoggerFactory.getLogger(BaseAuditService.class); private static final List IP_HEADERS = - Arrays.asList("X-Forwarded-For", "Proxy-Client-IP", "WL-Proxy-Client-IP", "HTTP_CLIENT_IP", "HTTP_X_FORWARDED_FOR", "X-CLIENT-IP"); + Arrays.asList("X-Forwarded-For", "WL-Proxy-Client-IP", "HTTP_CLIENT_IP", "HTTP_X_FORWARDED_FOR"); private final AuditKafkaPublisher auditPublisher; @@ -114,7 +114,7 @@ public class BaseAuditService implements AuditService { LOGGER.info("Thread {} - event published in {} ms", Thread.currentThread().getId(), System.currentTimeMillis() - startTime); - LOGGER.info("client ip from header: {}", getClientIp(request)); + IP_HEADERS.forEach(header -> LOGGER.info("Data from header: {} - {}", header, request.getHeader(header))); } @Override @@ -144,14 +144,4 @@ public class BaseAuditService implements AuditService { throw new RuntimeException(e); } } - - public String getClientIp(HttpServletRequest request) { - IP_HEADERS.forEach(header -> LOGGER.info("Data from header: {} - {}", header, request.getHeader(header))); - return IP_HEADERS.stream() - .map(request::getHeader) - .filter(Objects::nonNull) - .filter(ip -> !ip.isEmpty() && !ip.equalsIgnoreCase("unknown")) - .findFirst() - .orElseGet(request::getRemoteAddr); - } } diff --git a/backend/src/main/java/ru/micord/ervu/kafka/service/impl/BaseReplyingKafkaService.java b/backend/src/main/java/ru/micord/ervu/kafka/service/impl/BaseReplyingKafkaService.java index 96aacea..190ded5 100644 --- a/backend/src/main/java/ru/micord/ervu/kafka/service/impl/BaseReplyingKafkaService.java +++ b/backend/src/main/java/ru/micord/ervu/kafka/service/impl/BaseReplyingKafkaService.java @@ -29,13 +29,13 @@ public abstract class BaseReplyingKafkaService implements ReplyingKafkaSer try { ConsumerRecord result = Optional.ofNullable(replyFuture.get()) .orElseThrow(() -> new KafkaMessageException("Kafka return result is null")); - LOGGER.info("Thread {} - KafkaSendMessageAndGetReply: {} ms", - Thread.currentThread().getId(), System.currentTimeMillis() - startTime); + LOGGER.info("Thread {} - KafkaSendMessageAndGetReply: {} ms, replyTopic: {}", + Thread.currentThread().getId(), System.currentTimeMillis() - startTime, replyTopic); return result; } catch (InterruptedException | ExecutionException e) { - LOGGER.error("Thread {} - KafkaSendMessageAndGetReply: {} ms", - Thread.currentThread().getId(), System.currentTimeMillis() - startTime); + LOGGER.error("Thread {} - KafkaSendMessageAndGetReply: {} ms, replyTopic: {}", + Thread.currentThread().getId(), System.currentTimeMillis() - startTime, replyTopic); throw new KafkaMessageReplyTimeoutException(e); } } From 5afd866f8dda50a0f6c61589d0f94a16c559151e Mon Sep 17 00:00:00 2001 From: Zaripov Emil Date: Wed, 11 Jun 2025 11:02:04 +0300 Subject: [PATCH 06/10] set version 1.11.0-SNAPSHOT --- backend/pom.xml | 2 +- distribution/pom.xml | 2 +- frontend/pom.xml | 2 +- pom.xml | 2 +- resources/pom.xml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/backend/pom.xml b/backend/pom.xml index 168b29c..d44485b 100644 --- a/backend/pom.xml +++ b/backend/pom.xml @@ -5,7 +5,7 @@ ru.micord.ervu.lkrp fl - 1.10.0 + 1.11.0-SNAPSHOT ru.micord.ervu.lkrp.fl backend diff --git a/distribution/pom.xml b/distribution/pom.xml index 4ceb178..ded489c 100644 --- a/distribution/pom.xml +++ b/distribution/pom.xml @@ -4,7 +4,7 @@ ru.micord.ervu.lkrp fl - 1.10.0 + 1.11.0-SNAPSHOT ru.micord.ervu.lkrp.fl diff --git a/frontend/pom.xml b/frontend/pom.xml index 45fc8cb..4b50258 100644 --- a/frontend/pom.xml +++ b/frontend/pom.xml @@ -4,7 +4,7 @@ ru.micord.ervu.lkrp fl - 1.10.0 + 1.11.0-SNAPSHOT ru.micord.ervu.lkrp.fl diff --git a/pom.xml b/pom.xml index ecd89ee..d2ca9b7 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 ru.micord.ervu.lkrp fl - 1.10.0 + 1.11.0-SNAPSHOT pom backend diff --git a/resources/pom.xml b/resources/pom.xml index 1ab996b..ee39898 100644 --- a/resources/pom.xml +++ b/resources/pom.xml @@ -4,7 +4,7 @@ ru.micord.ervu.lkrp fl - 1.10.0 + 1.11.0-SNAPSHOT ru.micord.ervu.lkrp.fl From 2ad35748504901be94a06944bcba56cfb9a9bb70 Mon Sep 17 00:00:00 2001 From: Zaripov Emil Date: Tue, 24 Jun 2025 13:06:29 +0300 Subject: [PATCH 07/10] update kafka-clients 3.9.1 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d2ca9b7..a28992e 100644 --- a/pom.xml +++ b/pom.xml @@ -262,7 +262,7 @@ org.apache.kafka kafka-clients - 3.9.0 + 3.9.1 snappy-java From 7cdb83b60b489ba287b3cc99fcbd455aab35e3d7 Mon Sep 17 00:00:00 2001 From: Eduard Tihomirov Date: Thu, 10 Jul 2025 10:35:24 +0300 Subject: [PATCH 08/10] SUPPORT-9265: fix middlename --- .../micord/ervu/security/esia/controller/EsiaController.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/backend/src/main/java/ru/micord/ervu/security/esia/controller/EsiaController.java b/backend/src/main/java/ru/micord/ervu/security/esia/controller/EsiaController.java index c10fec8..652c545 100644 --- a/backend/src/main/java/ru/micord/ervu/security/esia/controller/EsiaController.java +++ b/backend/src/main/java/ru/micord/ervu/security/esia/controller/EsiaController.java @@ -71,6 +71,7 @@ public class EsiaController { public String getUserFullname(HttpServletRequest request) { String accessToken = jwtTokenService.getAccessToken(request); PersonModel personModel = personalDataService.getPersonModel(accessToken); - return personModel.getLastName() + " " + personModel.getFirstName().charAt(0) + ". " + personModel.getMiddleName().charAt(0) + "."; + String middleName = personModel.getMiddleName() != null ? personModel.getMiddleName().charAt(0) + "." : ""; + return personModel.getLastName() + " " + personModel.getFirstName().charAt(0) + ". " + middleName; } } From efb7cbf9af8cfd91ad0f80b37dc2c1810302bf0e Mon Sep 17 00:00:00 2001 From: gulnaz Date: Fri, 11 Jul 2025 11:22:28 +0300 Subject: [PATCH 09/10] SUPPORT-9267: replace client host name with client ip --- .../ervu/audit/service/impl/BaseAuditService.java | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/backend/src/main/java/ru/micord/ervu/audit/service/impl/BaseAuditService.java b/backend/src/main/java/ru/micord/ervu/audit/service/impl/BaseAuditService.java index 090c7a6..3810f35 100644 --- a/backend/src/main/java/ru/micord/ervu/audit/service/impl/BaseAuditService.java +++ b/backend/src/main/java/ru/micord/ervu/audit/service/impl/BaseAuditService.java @@ -1,8 +1,5 @@ package ru.micord.ervu.audit.service.impl; -import java.util.Arrays; -import java.util.List; -import java.util.Objects; import javax.servlet.http.HttpServletRequest; import com.fasterxml.jackson.core.JsonProcessingException; @@ -32,8 +29,6 @@ import ru.micord.ervu.util.NetworkUtils; @Conditional(AuditEnabledCondition.class) public class BaseAuditService implements AuditService { private static final Logger LOGGER = LoggerFactory.getLogger(BaseAuditService.class); - private static final List IP_HEADERS = - Arrays.asList("X-Forwarded-For", "WL-Proxy-Client-IP", "HTTP_CLIENT_IP", "HTTP_X_FORWARDED_FOR"); private final AuditKafkaPublisher auditPublisher; @@ -89,12 +84,6 @@ public class BaseAuditService implements AuditService { LOGGER.info("Thread {} - server host name {} got in {} ms", Thread.currentThread().getId(), serverHostName, System.currentTimeMillis() - startTime); - startTime = System.currentTimeMillis(); - String clientHostName = NetworkUtils.getHostName(clientIp); - LOGGER.info("Thread {} - client host name {} got in {} ms", Thread.currentThread().getId(), clientHostName, - System.currentTimeMillis() - startTime); - startTime = System.currentTimeMillis(); - AuditAuthorizationEvent event = new AuditAuthorizationEvent( personModel.getPrnsId(), DateUtils.getClientTimeFromRequest(request), @@ -107,14 +96,12 @@ public class BaseAuditService implements AuditService { serverIp, serverHostName, clientIp, - clientHostName + clientIp ); String message = convertToMessage(event); auditPublisher.publishEvent(authorizationTopic, message); LOGGER.info("Thread {} - event published in {} ms", Thread.currentThread().getId(), System.currentTimeMillis() - startTime); - - IP_HEADERS.forEach(header -> LOGGER.info("Data from header: {} - {}", header, request.getHeader(header))); } @Override From b551504a859c50f95e29ca9c93d24b75d56d087f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A5=D0=B0=D0=BB=D1=82=D0=BE=D0=B1=D0=B8=D0=BD=20=D0=95?= =?UTF-8?q?=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9?= Date: Tue, 15 Jul 2025 09:04:23 +0300 Subject: [PATCH 10/10] added jmx exporter agent --- config/Dockerfile.backend | 9 +++++++-- config/jmx_exporter.yaml | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 config/jmx_exporter.yaml diff --git a/config/Dockerfile.backend b/config/Dockerfile.backend index c823625..eab55b5 100644 --- a/config/Dockerfile.backend +++ b/config/Dockerfile.backend @@ -6,7 +6,8 @@ FROM $BUILDER_IMAGE AS builder ARG MVN_FLAGS="-Pprod" RUN apt-get update \ - && apt-get -y install git glibc-locales java-17-openjdk-devel maven node \ + && apt-get -y install git glibc-locales java-17-openjdk-devel maven node curl \ + && curl --location --insecure https://github.com/prometheus/jmx_exporter/releases/download/1.3.0/jmx_prometheus_javaagent-1.3.0.jar -o jmx_prometheus_javaagent.jar \ && apt-get clean ENV JAVA_HOME=/usr/lib/jvm/java @@ -22,7 +23,6 @@ RUN mkdir -p $HOME/.m2 \ && mvn clean \ && mvn package -T4C ${MVN_FLAGS} - FROM $RUNTIME_IMAGE ARG ADMIN_PASSWORD=Secr3t @@ -30,11 +30,16 @@ USER root COPY config/tomcat / +ENV CATALINA_OPTS="-javaagent:/opt/jmx_exporter/jmx_prometheus_javaagent.jar=8081:/opt/jmx_exporter/config.yaml" + RUN cat /etc/tomcat/webbpm.properties >> /etc/tomcat/catalina.properties \ && sed -i -r "s//$ADMIN_PASSWORD/g" /etc/tomcat/tomcat-users.xml \ && chown root:tomcat /var/lib/tomcat/webapps \ && chmod g+rw /var/lib/tomcat/webapps +COPY --from=builder jmx_prometheus_javaagent.jar /opt/jmx_exporter/jmx_prometheus_javaagent.jar +COPY config/jmx_exporter.yaml /opt/jmx_exporter/config.yaml + USER tomcat COPY --from=builder /app/backend/target/fl*.war /var/lib/tomcat/webapps/fl.war diff --git a/config/jmx_exporter.yaml b/config/jmx_exporter.yaml new file mode 100644 index 0000000..1dec7af --- /dev/null +++ b/config/jmx_exporter.yaml @@ -0,0 +1,39 @@ +lowercaseOutputLabelNames: true +lowercaseOutputName: true +whitelistObjectNames: ["java.lang:type=OperatingSystem", "Catalina:*"] +blacklistObjectNames: [] +rules: + - pattern: 'Catalina<>serverInfo: (.+)' + name: tomcat_serverinfo + value: 1 + labels: + serverInfo: "$1" + type: COUNTER + - pattern: 'Catalina<>(\w+):' + name: tomcat_$3_total + labels: + port: "$2" + protocol: "$1" + help: Tomcat global $3 + type: COUNTER + - pattern: 'Catalina<>(requestCount|processingTime|errorCount):' + name: tomcat_servlet_$3_total + labels: + module: "$1" + servlet: "$2" + help: Tomcat servlet $3 total + type: COUNTER + - pattern: 'Catalina<>(currentThreadCount|currentThreadsBusy|keepAliveCount|connectionCount|acceptCount|acceptorThreadCount|pollerThreadCount|maxThreads|minSpareThreads):' + name: tomcat_threadpool_$3 + labels: + port: "$2" + protocol: "$1" + help: Tomcat threadpool $3 + type: GAUGE + - pattern: 'Catalina<>(processingTime|sessionCounter|rejectedSessions|expiredSessions):' + name: tomcat_session_$3_total + labels: + context: "$2" + host: "$1" + help: Tomcat session $3 total + type: COUNTER \ No newline at end of file