From d5ddc376f4fe28daf9b9397e700fe45e2ccfeb15 Mon Sep 17 00:00:00 2001 From: kyao Date: Sat, 25 Feb 2023 22:24:38 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E4=BB=BB=E5=8A=A1=E6=89=A7=E8=A1=8C?= =?UTF-8?q?=E8=B6=85=E6=97=B6=E5=91=8A=E8=AD=A6=E5=A2=9E=E5=8A=A0tid?= =?UTF-8?q?=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/dtp/common/constant/DingNotifyConst.java | 3 ++- .../main/java/com/dtp/common/constant/DynamicTpConst.java | 2 ++ .../java/com/dtp/common/constant/LarkNotifyConst.java | 2 +- .../java/com/dtp/common/constant/WechatNotifyConst.java | 3 ++- .../java/com/dtp/core/notify/AbstractDtpNotifier.java | 6 +++++- .../java/com/dtp/core/notify/manager/AlarmManager.java | 5 +++-- .../java/com/dtp/core/support/runnable/MdcRunnable.java | 5 ++++- core/src/main/java/com/dtp/core/thread/DtpExecutor.java | 4 +++- .../dtp/extension/notify/email/base/DtpEmailNotifier.java | 4 ++++ .../extension/skywalking/wrapper/SwTraceTaskWrapper.java | 8 +++++++- 10 files changed, 33 insertions(+), 9 deletions(-) diff --git a/common/src/main/java/com/dtp/common/constant/DingNotifyConst.java b/common/src/main/java/com/dtp/common/constant/DingNotifyConst.java index b9af752c..7bd18b5a 100644 --- a/common/src/main/java/com/dtp/common/constant/DingNotifyConst.java +++ b/common/src/main/java/com/dtp/common/constant/DingNotifyConst.java @@ -45,7 +45,8 @@ public final class DingNotifyConst { "上次报警时间:%s \n\n" + "报警时间:%s \n\n" + "接收人:@%s \n\n" + - "报警间隔:%ss \n\n"; + "报警间隔:%ss \n\n" + + "tid:%s \n\n";; public static final String DING_CHANGE_NOTICE_TEMPLATE = "【通知】 动态线程池参数变更 \n\n " + diff --git a/common/src/main/java/com/dtp/common/constant/DynamicTpConst.java b/common/src/main/java/com/dtp/common/constant/DynamicTpConst.java index f74e36ed..6682c3d7 100644 --- a/common/src/main/java/com/dtp/common/constant/DynamicTpConst.java +++ b/common/src/main/java/com/dtp/common/constant/DynamicTpConst.java @@ -30,6 +30,8 @@ public final class DynamicTpConst { public static final String VALUE = "value"; + public static final String SW_TRACE_ID = "swTraceId"; + /** * Dtp executor properties const. */ diff --git a/common/src/main/java/com/dtp/common/constant/LarkNotifyConst.java b/common/src/main/java/com/dtp/common/constant/LarkNotifyConst.java index 22b555f4..0a1afb7a 100644 --- a/common/src/main/java/com/dtp/common/constant/LarkNotifyConst.java +++ b/common/src/main/java/com/dtp/common/constant/LarkNotifyConst.java @@ -47,7 +47,7 @@ public class LarkNotifyConst { * lark alarm json str */ public static final String LARK_ALARM_JSON_STR = - "{\"msg_type\":\"interactive\",\"card\":{\"config\":{\"wide_screen_mode\":true},\"header\":{\"template\":\"red\",\"title\":{\"tag\":\"plain_text\",\"content\":\"【报警】 动态线程池告警\"}},\"elements\":[{\"tag\":\"div\",\"fields\":[{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"**服务名称:**\\n%s\"}},{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"**实例信息:**\\n%s\"}}]},{\"tag\":\"div\",\"fields\":[{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"**环境:**\\n%s\"}},{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"**线程池名称:**\\n%s\"}}]},{\"tag\":\"div\",\"fields\":[{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"alarmType **报警类型:**\\n%s\"}},{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"threshold **报警阈值:**\\n%s\"}}]},{\"tag\":\"hr\"},{\"tag\":\"div\",\"fields\":[{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"corePoolSize **核心线程数:**\\n%s\"}},{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"maximumPoolSize **最大线程数:**\\n%s\"}}]},{\"tag\":\"div\",\"fields\":[{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"poolSize **当前线程数:**\\n%s\"}},{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"activeCount **活跃线程数:**\\n%s\"}}]},{\"tag\":\"div\",\"fields\":[{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"**历史最大线程数:**\\n%s\"}},{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"**任务总数:**\\n%s\"}}]},{\"tag\":\"div\",\"fields\":[{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"**执行完成任务数:**\\n%s\"}},{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"**等待执行任务数:**\\n%s\"}}]},{\"tag\":\"hr\"},{\"tag\":\"div\",\"fields\":[{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"queueType **队列类型:**\\n%s\"}},{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"queueCapacity **队列容量:**\\n%s\"}}]},{\"tag\":\"div\",\"fields\":[{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"queueSize **队列任务数量:**\\n%s\"}},{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"queueRemaining **队列剩余容量:**\\n%s\"}}]},{\"tag\":\"div\",\"fields\":[{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"rejectType **拒绝策略:**\\n%s\"}},{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"rejectCount **拒绝任务数量:**\\n%s\"}}]},{\"tag\":\"div\",\"fields\":[{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"runTimeoutCount **执行超时任务数量:**\\n%s\"}},{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"queueTimeoutCount **等待超时任务数量:**\\n%s\"}}]},{\"tag\":\"hr\"},{\"tag\":\"div\",\"fields\":[{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"**上次报警时间:**\\n %s\"}},{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"**报警时间:**\\n %s\"}}]},{\"tag\":\"div\",\"fields\":[{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"**接收人:**\\n %s\"}},{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"**报警间隔:**\\n %ss\"}}]}]}}"; + "{\"msg_type\":\"interactive\",\"card\":{\"config\":{\"wide_screen_mode\":true},\"header\":{\"template\":\"red\",\"title\":{\"tag\":\"plain_text\",\"content\":\"【报警】 动态线程池告警\"}},\"elements\":[{\"tag\":\"div\",\"fields\":[{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"**服务名称:**\\n%s\"}},{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"**实例信息:**\\n%s\"}}]},{\"tag\":\"div\",\"fields\":[{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"**环境:**\\n%s\"}},{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"**线程池名称:**\\n%s\"}}]},{\"tag\":\"div\",\"fields\":[{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"alarmType **报警类型:**\\n%s\"}},{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"threshold **报警阈值:**\\n%s\"}}]},{\"tag\":\"hr\"},{\"tag\":\"div\",\"fields\":[{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"corePoolSize **核心线程数:**\\n%s\"}},{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"maximumPoolSize **最大线程数:**\\n%s\"}}]},{\"tag\":\"div\",\"fields\":[{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"poolSize **当前线程数:**\\n%s\"}},{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"activeCount **活跃线程数:**\\n%s\"}}]},{\"tag\":\"div\",\"fields\":[{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"**历史最大线程数:**\\n%s\"}},{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"**任务总数:**\\n%s\"}}]},{\"tag\":\"div\",\"fields\":[{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"**执行完成任务数:**\\n%s\"}},{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"**等待执行任务数:**\\n%s\"}}]},{\"tag\":\"hr\"},{\"tag\":\"div\",\"fields\":[{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"queueType **队列类型:**\\n%s\"}},{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"queueCapacity **队列容量:**\\n%s\"}}]},{\"tag\":\"div\",\"fields\":[{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"queueSize **队列任务数量:**\\n%s\"}},{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"queueRemaining **队列剩余容量:**\\n%s\"}}]},{\"tag\":\"div\",\"fields\":[{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"rejectType **拒绝策略:**\\n%s\"}},{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"rejectCount **拒绝任务数量:**\\n%s\"}}]},{\"tag\":\"div\",\"fields\":[{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"runTimeoutCount **执行超时任务数量:**\\n%s\"}},{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"queueTimeoutCount **等待超时任务数量:**\\n%s\"}}]},{\"tag\":\"hr\"},{\"tag\":\"div\",\"fields\":[{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"**上次报警时间:**\\n %s\"}},{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"**报警时间:**\\n %s\"}}]},{\"tag\":\"div\",\"fields\":[{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"**接收人:**\\n %s\"}},{\"is_short\":true,\"text\":{\"tag\":\"lark_md\",\"content\":\"**报警间隔:**\\n %ss\"},{\"is_short\": true,\"text\": {\"tag\": \"lark_md\",\"content\": \"**tid:**\\n %s\"}}]}]}}"; /** * lark notice json str diff --git a/common/src/main/java/com/dtp/common/constant/WechatNotifyConst.java b/common/src/main/java/com/dtp/common/constant/WechatNotifyConst.java index 89604076..19354b36 100644 --- a/common/src/main/java/com/dtp/common/constant/WechatNotifyConst.java +++ b/common/src/main/java/com/dtp/common/constant/WechatNotifyConst.java @@ -45,7 +45,8 @@ public final class WechatNotifyConst { "> 上次报警时间:%s \n" + "> 报警时间:%s \n" + "> 接收人:@%s \n" + - "> 报警间隔:%ss \n"; + "> 报警间隔:%ss \n" + + "> tid:%s \n"; public static final String WECHAT_CHANGE_NOTICE_TEMPLATE = "【通知】 动态线程池参数变更 \n" + diff --git a/core/src/main/java/com/dtp/core/notify/AbstractDtpNotifier.java b/core/src/main/java/com/dtp/core/notify/AbstractDtpNotifier.java index c94e5145..a8867162 100644 --- a/core/src/main/java/com/dtp/core/notify/AbstractDtpNotifier.java +++ b/core/src/main/java/com/dtp/core/notify/AbstractDtpNotifier.java @@ -22,15 +22,18 @@ import lombok.extern.slf4j.Slf4j; import lombok.val; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.Pair; +import org.slf4j.MDC; import java.lang.reflect.Field; import java.util.Arrays; import java.util.List; +import java.util.Optional; import java.util.Set; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; +import static com.dtp.common.constant.DynamicTpConst.SW_TRACE_ID; import static com.dtp.common.constant.DynamicTpConst.UNKNOWN; import static com.dtp.common.constant.LarkNotifyConst.*; import static com.dtp.core.notify.manager.NotifyHelper.getAlarmKeys; @@ -134,7 +137,8 @@ public abstract class AbstractDtpNotifier implements DtpNotifier { alarmInfo.getLastAlarmTime() == null ? UNKNOWN : alarmInfo.getLastAlarmTime(), DateUtil.now(), receivesStr, - notifyItem.getInterval() + notifyItem.getInterval(), + Optional.ofNullable(MDC.get(SW_TRACE_ID)).orElse("") ); return highlightAlarmContent(content, notifyItemEnum); } diff --git a/core/src/main/java/com/dtp/core/notify/manager/AlarmManager.java b/core/src/main/java/com/dtp/core/notify/manager/AlarmManager.java index 38e7ae95..7151100e 100644 --- a/core/src/main/java/com/dtp/core/notify/manager/AlarmManager.java +++ b/core/src/main/java/com/dtp/core/notify/manager/AlarmManager.java @@ -12,6 +12,7 @@ import com.dtp.core.notify.alarm.AlarmCounter; import com.dtp.core.notify.alarm.AlarmLimiter; import com.dtp.core.support.ExecutorWrapper; import com.dtp.core.support.ThreadPoolBuilder; +import com.dtp.core.support.runnable.MdcRunnable; import com.dtp.core.thread.DtpExecutor; import lombok.extern.slf4j.Slf4j; import lombok.val; @@ -61,7 +62,7 @@ public class AlarmManager { public static void doAlarmAsync(DtpExecutor executor, NotifyItemEnum notifyType) { AlarmCounter.incAlarmCounter(executor.getThreadPoolName(), notifyType.getValue()); - ALARM_EXECUTOR.execute(() -> doAlarm(ExecutorWrapper.of(executor), notifyType)); + ALARM_EXECUTOR.execute(MdcRunnable.get(() -> doAlarm(ExecutorWrapper.of(executor), notifyType))); } public static void doAlarmAsync(DtpExecutor executor, List notifyItemEnums) { @@ -69,7 +70,7 @@ public class AlarmManager { } public static void doAlarmAsync(ExecutorWrapper executorWrapper, List notifyItemEnums) { - ALARM_EXECUTOR.execute(() -> notifyItemEnums.forEach(x -> doAlarm(executorWrapper, x))); + ALARM_EXECUTOR.execute(MdcRunnable.get(() -> notifyItemEnums.forEach(x -> doAlarm(executorWrapper, x)))); } public static void doAlarm(ExecutorWrapper executorWrapper, NotifyItemEnum notifyItemEnum) { diff --git a/core/src/main/java/com/dtp/core/support/runnable/MdcRunnable.java b/core/src/main/java/com/dtp/core/support/runnable/MdcRunnable.java index 8ffa78e6..dc083d29 100644 --- a/core/src/main/java/com/dtp/core/support/runnable/MdcRunnable.java +++ b/core/src/main/java/com/dtp/core/support/runnable/MdcRunnable.java @@ -4,6 +4,7 @@ import org.apache.commons.collections.MapUtils; import org.slf4j.MDC; import java.util.Map; +import static com.dtp.common.constant.DynamicTpConst.SW_TRACE_ID; /** * MdcRunnable related @@ -47,7 +48,9 @@ public class MdcRunnable implements Runnable { } finally { // Remove MDC value at the end of execution for (Map.Entry entry : parentMdc.entrySet()) { - MDC.remove(entry.getKey()); + if (!SW_TRACE_ID.equals(entry.getKey())) { + MDC.remove(entry.getKey()); + } } } } diff --git a/core/src/main/java/com/dtp/core/thread/DtpExecutor.java b/core/src/main/java/com/dtp/core/thread/DtpExecutor.java index afe929b5..5454618a 100644 --- a/core/src/main/java/com/dtp/core/thread/DtpExecutor.java +++ b/core/src/main/java/com/dtp/core/thread/DtpExecutor.java @@ -16,6 +16,7 @@ import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; +import org.slf4j.MDC; import java.util.List; import java.util.concurrent.BlockingQueue; @@ -24,6 +25,7 @@ import java.util.concurrent.ThreadFactory; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.LongAdder; +import static com.dtp.common.constant.DynamicTpConst.SW_TRACE_ID; import static com.dtp.common.em.NotifyItemEnum.QUEUE_TIMEOUT; import static com.dtp.common.em.NotifyItemEnum.RUN_TIMEOUT; @@ -154,7 +156,7 @@ public class DtpExecutor extends DtpLifecycleSupport implements SpringExecutor { } } } - + MDC.remove(SW_TRACE_ID); super.afterExecute(r, t); } diff --git a/extension/extension-notify-email/src/main/java/com/dtp/extension/notify/email/base/DtpEmailNotifier.java b/extension/extension-notify-email/src/main/java/com/dtp/extension/notify/email/base/DtpEmailNotifier.java index 346f8b9b..6cd0edc1 100644 --- a/extension/extension-notify-email/src/main/java/com/dtp/extension/notify/email/base/DtpEmailNotifier.java +++ b/extension/extension-notify-email/src/main/java/com/dtp/extension/notify/email/base/DtpEmailNotifier.java @@ -18,13 +18,16 @@ import com.dtp.core.support.ExecutorWrapper; import lombok.extern.slf4j.Slf4j; import lombok.val; import org.apache.commons.lang3.tuple.Pair; +import org.slf4j.MDC; import org.thymeleaf.context.Context; import java.util.Collections; import java.util.List; +import java.util.Optional; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import static com.dtp.common.constant.DynamicTpConst.SW_TRACE_ID; import static com.dtp.common.constant.DynamicTpConst.UNKNOWN; import static com.dtp.core.notify.manager.NotifyHelper.getAlarmKeys; @@ -94,6 +97,7 @@ public class DtpEmailNotifier extends AbstractDtpNotifier { context.setVariable("lastAlarmTime", alarmInfo.getLastAlarmTime() == null ? UNKNOWN : alarmInfo.getLastAlarmTime()); context.setVariable("alarmTime", DateTime.now()); context.setVariable("alarmInterval", notifyItem.getInterval()); + context.setVariable("tid", Optional.ofNullable(MDC.get(SW_TRACE_ID)).orElse("")); context.setVariable("highlightVariables", getAlarmKeys(notifyItemEnum)); return ((EmailNotifier) notifier).processTemplateContent("alarm", context); } diff --git a/extension/extension-skywalking/src/main/java/com/dtp/extension/skywalking/wrapper/SwTraceTaskWrapper.java b/extension/extension-skywalking/src/main/java/com/dtp/extension/skywalking/wrapper/SwTraceTaskWrapper.java index cf62d773..009f710d 100644 --- a/extension/extension-skywalking/src/main/java/com/dtp/extension/skywalking/wrapper/SwTraceTaskWrapper.java +++ b/extension/extension-skywalking/src/main/java/com/dtp/extension/skywalking/wrapper/SwTraceTaskWrapper.java @@ -1,7 +1,12 @@ package com.dtp.extension.skywalking.wrapper; +import com.dtp.core.support.runnable.MdcRunnable; import com.dtp.core.support.wrapper.TaskWrapper; import org.apache.skywalking.apm.toolkit.trace.RunnableWrapper; +import org.apache.skywalking.apm.toolkit.trace.TraceContext; +import org.slf4j.MDC; + +import static com.dtp.common.constant.DynamicTpConst.SW_TRACE_ID; /** * SwTraceTaskWrapper related @@ -20,6 +25,7 @@ public class SwTraceTaskWrapper implements TaskWrapper { @Override public Runnable wrap(Runnable runnable) { - return new RunnableWrapper(runnable); + MDC.put(SW_TRACE_ID, TraceContext.traceId()); + return MdcRunnable.get(new RunnableWrapper(runnable)); } } -- Gitee