From b6c3fb03eccb8474ae7f15d34a78491f662292ae Mon Sep 17 00:00:00 2001 From: "minghua.xie" Date: Fri, 6 May 2022 17:32:46 +0800 Subject: [PATCH 1/7] log appender metric --- .../io/seata/core/event/ExceptionEvent.java | 19 +++++++ .../java/io/seata/metrics/IdConstants.java | 2 + .../appender/MetricLogbackAppender.java | 54 +++++++++++++++++++ .../server/metrics/MeterIdConstants.java | 4 ++ .../server/metrics/MetricsSubscriber.java | 8 +++ server/src/main/resources/logback-spring.xml | 6 +++ 6 files changed, 93 insertions(+) create mode 100644 core/src/main/java/io/seata/core/event/ExceptionEvent.java create mode 100644 server/src/main/java/io/seata/server/logging/logback/appender/MetricLogbackAppender.java diff --git a/core/src/main/java/io/seata/core/event/ExceptionEvent.java b/core/src/main/java/io/seata/core/event/ExceptionEvent.java new file mode 100644 index 00000000000..b8ca2b81254 --- /dev/null +++ b/core/src/main/java/io/seata/core/event/ExceptionEvent.java @@ -0,0 +1,19 @@ +package io.seata.core.event; + +/** + * Event data for exception. + * + * @author Bughue + */ +public class ExceptionEvent implements Event{ + + private String name; + + public ExceptionEvent(String code){ + this.name = code; + } + + public String getName(){ + return name; + } +} diff --git a/metrics/seata-metrics-api/src/main/java/io/seata/metrics/IdConstants.java b/metrics/seata-metrics-api/src/main/java/io/seata/metrics/IdConstants.java index c3d003a6619..77decde7883 100644 --- a/metrics/seata-metrics-api/src/main/java/io/seata/metrics/IdConstants.java +++ b/metrics/seata-metrics-api/src/main/java/io/seata/metrics/IdConstants.java @@ -23,6 +23,8 @@ public interface IdConstants { String SEATA_TRANSACTION = "seata.transaction"; + String SEATA_EXCEPTION = "seata.exception"; + String APP_ID_KEY = "applicationId"; String GROUP_KEY = "group"; diff --git a/server/src/main/java/io/seata/server/logging/logback/appender/MetricLogbackAppender.java b/server/src/main/java/io/seata/server/logging/logback/appender/MetricLogbackAppender.java new file mode 100644 index 00000000000..f8b9dde0d5f --- /dev/null +++ b/server/src/main/java/io/seata/server/logging/logback/appender/MetricLogbackAppender.java @@ -0,0 +1,54 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.seata.server.logging.logback.appender; + + +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.spi.ILoggingEvent; +import ch.qos.logback.classic.spi.ThrowableProxy; +import ch.qos.logback.core.AppenderBase; +import ch.qos.logback.core.LogbackException; +import io.seata.core.event.EventBus; +import io.seata.core.event.ExceptionEvent; +import io.seata.server.event.EventBusManager; + +/** + * The type metric logback appender + * + * @author Bughue + */ +public class MetricLogbackAppender extends AppenderBase { + + private EventBus eventBus = EventBusManager.get(); + + @Override + protected void append(ILoggingEvent event) { + try { + Level level = event.getLevel(); + + if (level.isGreaterOrEqual(Level.ERROR)) { + ThrowableProxy info = (ThrowableProxy) event.getThrowableProxy(); + + if (info != null) { + Throwable throwable = info.getThrowable(); + eventBus.post(new ExceptionEvent(throwable.getClass().getName())); + } + } + } catch (Exception ex) { + throw new LogbackException(event.getFormattedMessage(), ex); + } + } +} diff --git a/server/src/main/java/io/seata/server/metrics/MeterIdConstants.java b/server/src/main/java/io/seata/server/metrics/MeterIdConstants.java index 29d55af24cc..5525d716291 100644 --- a/server/src/main/java/io/seata/server/metrics/MeterIdConstants.java +++ b/server/src/main/java/io/seata/server/metrics/MeterIdConstants.java @@ -105,4 +105,8 @@ public interface MeterIdConstants { .withTag(IdConstants.METER_KEY, IdConstants.METER_VALUE_TIMER) .withTag(IdConstants.STATUS_KEY, IdConstants.STATUS_VALUE_AFTER_COMMITTED_KEY); + + Id SUMMARY_EXP = new Id(IdConstants.SEATA_EXCEPTION) + .withTag(IdConstants.ROLE_KEY, IdConstants.ROLE_VALUE_TC) + .withTag(IdConstants.METER_KEY, IdConstants.METER_VALUE_SUMMARY); } diff --git a/server/src/main/java/io/seata/server/metrics/MetricsSubscriber.java b/server/src/main/java/io/seata/server/metrics/MetricsSubscriber.java index 4c48f802f11..840c748e470 100644 --- a/server/src/main/java/io/seata/server/metrics/MetricsSubscriber.java +++ b/server/src/main/java/io/seata/server/metrics/MetricsSubscriber.java @@ -21,6 +21,7 @@ import java.util.function.Consumer; import com.google.common.eventbus.Subscribe; +import io.seata.core.event.ExceptionEvent; import io.seata.core.event.GlobalTransactionEvent; import io.seata.core.model.GlobalStatus; import io.seata.metrics.registry.Registry; @@ -200,6 +201,13 @@ public void recordGlobalTransactionEventForMetrics(GlobalTransactionEvent event) } } + + @Subscribe + public void exceptionEventForMetrics(ExceptionEvent event) { + registry.getSummary(MeterIdConstants.SUMMARY_EXP + .withTag(APP_ID_KEY, event.getName())).increase(1); + } + @Override public boolean equals(Object obj) { return this.getClass().getName().equals(obj.getClass().getName()); diff --git a/server/src/main/resources/logback-spring.xml b/server/src/main/resources/logback-spring.xml index 7d7c2cf21ad..27ad57a5d55 100644 --- a/server/src/main/resources/logback-spring.xml +++ b/server/src/main/resources/logback-spring.xml @@ -43,6 +43,9 @@ + + + @@ -57,5 +60,8 @@ + + + From 86369c4963a81fe359b900817636f1346bff9b36 Mon Sep 17 00:00:00 2001 From: "minghua.xie" Date: Wed, 25 May 2022 18:46:53 +0800 Subject: [PATCH 2/7] white space --- .../io/seata/core/event/ExceptionEvent.java | 18 +++++++++++++++--- .../appender/MetricLogbackAppender.java | 2 +- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/io/seata/core/event/ExceptionEvent.java b/core/src/main/java/io/seata/core/event/ExceptionEvent.java index b8ca2b81254..8fc6187986a 100644 --- a/core/src/main/java/io/seata/core/event/ExceptionEvent.java +++ b/core/src/main/java/io/seata/core/event/ExceptionEvent.java @@ -1,3 +1,15 @@ +/* + * Copyright 1999-2019 Seata.io Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ package io.seata.core.event; /** @@ -5,15 +17,15 @@ * * @author Bughue */ -public class ExceptionEvent implements Event{ +public class ExceptionEvent implements Event { private String name; - public ExceptionEvent(String code){ + public ExceptionEvent(String code) { this.name = code; } - public String getName(){ + public String getName() { return name; } } diff --git a/server/src/main/java/io/seata/server/logging/logback/appender/MetricLogbackAppender.java b/server/src/main/java/io/seata/server/logging/logback/appender/MetricLogbackAppender.java index f8b9dde0d5f..ecdbd9cadf1 100644 --- a/server/src/main/java/io/seata/server/logging/logback/appender/MetricLogbackAppender.java +++ b/server/src/main/java/io/seata/server/logging/logback/appender/MetricLogbackAppender.java @@ -40,7 +40,7 @@ protected void append(ILoggingEvent event) { Level level = event.getLevel(); if (level.isGreaterOrEqual(Level.ERROR)) { - ThrowableProxy info = (ThrowableProxy) event.getThrowableProxy(); + ThrowableProxy info = (ThrowableProxy)event.getThrowableProxy(); if (info != null) { Throwable throwable = info.getThrowable(); From b5ed1c433d9d091e8b5eff3fad0a6c8af421b27a Mon Sep 17 00:00:00 2001 From: "minghua.xie" Date: Fri, 6 May 2022 17:32:46 +0800 Subject: [PATCH 3/7] log appender metric --- .../server/logging/logback/appender/MetricLogbackAppender.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/main/java/io/seata/server/logging/logback/appender/MetricLogbackAppender.java b/server/src/main/java/io/seata/server/logging/logback/appender/MetricLogbackAppender.java index ecdbd9cadf1..f8b9dde0d5f 100644 --- a/server/src/main/java/io/seata/server/logging/logback/appender/MetricLogbackAppender.java +++ b/server/src/main/java/io/seata/server/logging/logback/appender/MetricLogbackAppender.java @@ -40,7 +40,7 @@ protected void append(ILoggingEvent event) { Level level = event.getLevel(); if (level.isGreaterOrEqual(Level.ERROR)) { - ThrowableProxy info = (ThrowableProxy)event.getThrowableProxy(); + ThrowableProxy info = (ThrowableProxy) event.getThrowableProxy(); if (info != null) { Throwable throwable = info.getThrowable(); From d8ce7387be75b4f1b650222c39eae087721863bc Mon Sep 17 00:00:00 2001 From: "minghua.xie" Date: Wed, 25 May 2022 18:46:53 +0800 Subject: [PATCH 4/7] white space --- .../server/logging/logback/appender/MetricLogbackAppender.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/main/java/io/seata/server/logging/logback/appender/MetricLogbackAppender.java b/server/src/main/java/io/seata/server/logging/logback/appender/MetricLogbackAppender.java index f8b9dde0d5f..ecdbd9cadf1 100644 --- a/server/src/main/java/io/seata/server/logging/logback/appender/MetricLogbackAppender.java +++ b/server/src/main/java/io/seata/server/logging/logback/appender/MetricLogbackAppender.java @@ -40,7 +40,7 @@ protected void append(ILoggingEvent event) { Level level = event.getLevel(); if (level.isGreaterOrEqual(Level.ERROR)) { - ThrowableProxy info = (ThrowableProxy) event.getThrowableProxy(); + ThrowableProxy info = (ThrowableProxy)event.getThrowableProxy(); if (info != null) { Throwable throwable = info.getThrowable(); From 73f6c563ccdf04c8984f04a18130895c13ae3b9f Mon Sep 17 00:00:00 2001 From: "minghua.xie" Date: Thu, 23 Feb 2023 14:36:23 +0800 Subject: [PATCH 5/7] xml --- server/src/main/resources/logback-spring.xml | 8 +++---- .../resources/logback/metric-appender.xml | 22 +++++++++++++++++++ 2 files changed, 26 insertions(+), 4 deletions(-) create mode 100644 server/src/main/resources/logback/metric-appender.xml diff --git a/server/src/main/resources/logback-spring.xml b/server/src/main/resources/logback-spring.xml index 27ad57a5d55..d2e62173191 100644 --- a/server/src/main/resources/logback-spring.xml +++ b/server/src/main/resources/logback-spring.xml @@ -43,8 +43,8 @@ - - + + @@ -61,7 +61,7 @@ - - + + diff --git a/server/src/main/resources/logback/metric-appender.xml b/server/src/main/resources/logback/metric-appender.xml new file mode 100644 index 00000000000..0108c8c1b08 --- /dev/null +++ b/server/src/main/resources/logback/metric-appender.xml @@ -0,0 +1,22 @@ + + + + + + + + From 27d0cb03be68b0edd64c401cc4147c677018f1d1 Mon Sep 17 00:00:00 2001 From: "minghua.xie" Date: Thu, 23 Feb 2023 14:36:23 +0800 Subject: [PATCH 6/7] log appender metric --- server/src/main/resources/logback/metric-appender.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/server/src/main/resources/logback/metric-appender.xml b/server/src/main/resources/logback/metric-appender.xml index 0108c8c1b08..5527239e184 100644 --- a/server/src/main/resources/logback/metric-appender.xml +++ b/server/src/main/resources/logback/metric-appender.xml @@ -18,5 +18,4 @@ - From 38b9b9fbd7337bfe28f50dac5e810bdcb6437c40 Mon Sep 17 00:00:00 2001 From: "minghua.xie" Date: Tue, 28 Feb 2023 14:28:49 +0800 Subject: [PATCH 7/7] changes --- changes/en-us/2.0.0.md | 1 + changes/zh-cn/2.0.0.md | 1 + 2 files changed, 2 insertions(+) diff --git a/changes/en-us/2.0.0.md b/changes/en-us/2.0.0.md index 93fa7199855..b863f1c9ea9 100644 --- a/changes/en-us/2.0.0.md +++ b/changes/en-us/2.0.0.md @@ -18,6 +18,7 @@ The version is updated as follows: - [[#5165](https://github.com/seata/seata/pull/5165)] optimize TCC structure, supporting API access. add integration layer module(seata-integration-tx-api) for transaction process definition and proxy enhancement. - [[#5352](https://github.com/seata/seata/pull/5352)] add jackson json parser and gson json parser for tcc business action context - [[#5377](https://github.com/seata/seata/pull/5377)] make AbstractHttpExecutor.class support http put +- [[#5396](https://github.com/seata/seata/pull/5396)] TC log appender metric ### bugfix: - [[#5194](https://github.com/seata/seata/pull/5194)] fix wrong keyword order for oracle when creating a table diff --git a/changes/zh-cn/2.0.0.md b/changes/zh-cn/2.0.0.md index 71be339ee37..a1d134ac669 100644 --- a/changes/zh-cn/2.0.0.md +++ b/changes/zh-cn/2.0.0.md @@ -18,6 +18,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#5165](https://github.com/seata/seata/pull/5165)] TCC结构拆分,支持API方式接入。增加集成层模块(seata-integration-tx-api),对事务流程定义以及代理部分增强。 - [[#5352](https://github.com/seata/seata/pull/5352)] 在TCC Business Action Context中集成jackson和gson序列化功能 - [[#5377](https://github.com/seata/seata/pull/5377)] 使AbstractHttpExecutor类支持PUT方式的请求 +- [[#5396](https://github.com/seata/seata/pull/5396)] TC 异常日志指标采集 ### bugfix: - [[#5194](https://github.com/seata/seata/pull/5194)] 修复使用Oracle作为服务端DB存储时的建表失败问题