diff --git a/powerjob-server/pom.xml b/powerjob-server/pom.xml
index 08e6b04d..268dba77 100644
--- a/powerjob-server/pom.xml
+++ b/powerjob-server/pom.xml
@@ -21,6 +21,7 @@
powerjob-server-extension
powerjob-server-migrate
powerjob-server-core
+ powerjob-server-monitor
@@ -56,6 +57,11 @@
powerjob-server-common
${project.version}
+
+ tech.powerjob
+ powerjob-server-monitor
+ ${project.version}
+
tech.powerjob
powerjob-server-extension
diff --git a/powerjob-server/powerjob-server-monitor/pom.xml b/powerjob-server/powerjob-server-monitor/pom.xml
new file mode 100644
index 00000000..dce0a058
--- /dev/null
+++ b/powerjob-server/powerjob-server-monitor/pom.xml
@@ -0,0 +1,28 @@
+
+
+
+ powerjob-server
+ tech.powerjob
+ 4.1.0
+ ../pom.xml
+
+ 4.0.0
+
+ powerjob-server-monitor
+ ${project.parent.version}
+
+
+ 8
+ 8
+
+
+
+
+ tech.powerjob
+ powerjob-server-common
+
+
+
+
\ No newline at end of file
diff --git a/powerjob-server/powerjob-server-monitor/src/tech/powerjob/server/monitor/Event.java b/powerjob-server/powerjob-server-monitor/src/tech/powerjob/server/monitor/Event.java
new file mode 100644
index 00000000..e62a304f
--- /dev/null
+++ b/powerjob-server/powerjob-server-monitor/src/tech/powerjob/server/monitor/Event.java
@@ -0,0 +1,22 @@
+package tech.powerjob.server.monitor;
+
+/**
+ * 监控事件
+ *
+ * @author tjq
+ * @since 2022/9/6
+ */
+public interface Event {
+
+ /**
+ * 监控事件的类型
+ * @return 监控类型
+ */
+ String type();
+
+ /**
+ * 监控事件的内容
+ * @return 监控事件的内容
+ */
+ String message();
+}
diff --git a/powerjob-server/powerjob-server-monitor/src/tech/powerjob/server/monitor/Monitor.java b/powerjob-server/powerjob-server-monitor/src/tech/powerjob/server/monitor/Monitor.java
new file mode 100644
index 00000000..7d3a4de2
--- /dev/null
+++ b/powerjob-server/powerjob-server-monitor/src/tech/powerjob/server/monitor/Monitor.java
@@ -0,0 +1,16 @@
+package tech.powerjob.server.monitor;
+
+/**
+ * 监视器
+ *
+ * @author tjq
+ * @since 2022/9/6
+ */
+public interface Monitor {
+ /**
+ * 记录监控事件
+ * 请注意该方法务必异步不阻塞!!!
+ * @param event 事件
+ */
+ void record(Event event);
+}
diff --git a/powerjob-server/powerjob-server-monitor/src/tech/powerjob/server/monitor/monitors/ServerMonitor.java b/powerjob-server/powerjob-server-monitor/src/tech/powerjob/server/monitor/monitors/ServerMonitor.java
new file mode 100644
index 00000000..62f30035
--- /dev/null
+++ b/powerjob-server/powerjob-server-monitor/src/tech/powerjob/server/monitor/monitors/ServerMonitor.java
@@ -0,0 +1,39 @@
+package tech.powerjob.server.monitor.monitors;
+
+import com.google.common.collect.Lists;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import tech.powerjob.server.monitor.Event;
+import tech.powerjob.server.monitor.Monitor;
+
+import java.util.List;
+
+/**
+ * 服务端监视器
+ *
+ * @author tjq
+ * @since 2022/9/6
+ */
+@Slf4j
+@Component
+public class ServerMonitor implements Monitor {
+
+ private final List monitors = Lists.newLinkedList();
+
+ @Autowired
+ public ServerMonitor(List monitors) {
+ monitors.forEach(m -> {
+ if (m == this) {
+ return;
+ }
+ log.info("[ServerMonitor] register monitor: {}", m.getClass().getName());
+ this.monitors.add(m);
+ });
+ }
+
+ @Override
+ public void record(Event event) {
+ monitors.forEach(m -> m.record(event));
+ }
+}
diff --git a/powerjob-server/powerjob-server-monitor/src/tech/powerjob/server/monitor/monitors/impl/LogMonitor.java b/powerjob-server/powerjob-server-monitor/src/tech/powerjob/server/monitor/monitors/impl/LogMonitor.java
new file mode 100644
index 00000000..79e433bb
--- /dev/null
+++ b/powerjob-server/powerjob-server-monitor/src/tech/powerjob/server/monitor/monitors/impl/LogMonitor.java
@@ -0,0 +1,22 @@
+package tech.powerjob.server.monitor.monitors.impl;
+
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+import tech.powerjob.server.monitor.Event;
+import tech.powerjob.server.monitor.Monitor;
+
+/**
+ * 系统默认实现——基于日志的监控监视器
+ * 需要接入方自行基于类 ELK 系统采集
+ *
+ * @author tjq
+ * @since 2022/9/6
+ */
+@Component
+public class LogMonitor implements Monitor {
+
+ @Override
+ public void record(Event event) {
+ LoggerFactory.getLogger(event.type()).info(event.message());
+ }
+}
diff --git a/powerjob-server/powerjob-server-starter/pom.xml b/powerjob-server/powerjob-server-starter/pom.xml
index c1fb09f1..b6e95a20 100644
--- a/powerjob-server/powerjob-server-starter/pom.xml
+++ b/powerjob-server/powerjob-server-starter/pom.xml
@@ -31,6 +31,10 @@
tech.powerjob
powerjob-server-common
+
+ tech.powerjob
+ powerjob-server-monitor
+
tech.powerjob
powerjob-server-persistence