This is an automated email from the ASF dual-hosted git repository.

zhangxiaowei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozhera.git


The following commit(s) were added to refs/heads/master by this push:
     new 8671ea4f feat: add machine information acquisition interface and 
optimize related functions (#589)
8671ea4f is described below

commit 8671ea4feb058106751056f41494ed07f873110f
Author: wtt <[email protected]>
AuthorDate: Wed Jun 18 15:53:39 2025 +0800

    feat: add machine information acquisition interface and optimize related 
functions (#589)
---
 ozhera-log/log-agent-server/pom.xml                |  1 +
 .../server/service/DefaultLogProcessCollector.java | 49 ++++++++++++++--
 .../service/DefaultPublishConfigService.java       |  2 +-
 ozhera-log/log-agent/pom.xml                       |  1 +
 .../log/agent/channel/AbstractChannelService.java  |  7 +++
 .../ozhera/log/agent/channel/ChannelEngine.java    | 68 ++++++++++++++++++++--
 .../log/agent/channel/ChannelServiceFactory.java   | 16 +++++
 .../ozhera/log/agent/channel/ChannelState.java     |  2 +
 .../listener/DefaultFileMonitorListener.java       |  2 +-
 .../ozhera/log/agent/extension/KafkaService.java   | 15 ++---
 .../log/agent/extension/RocketMQService.java       |  9 +--
 .../log/agent/rpc/processor/LogProcessor.java      |  4 +-
 .../agent/rpc/processor/NodeCollInfoProcessor.java | 67 +++++++++++++++++++++
 .../ozhera/log/agent/service/OutPutService.java    |  3 +-
 .../{vo/LogCmd.java => meta/NodeCollInfo.java}     | 38 +++++++++---
 .../org/apache/ozhera/log/api/model/vo/LogCmd.java |  9 +--
 .../log/api/service/LogProcessCollector.java       |  6 ++
 .../ozhera/log/api/service/LogProcessService.java  |  7 +++
 ozhera-log/log-manager/pom.xml                     |  2 +-
 .../manager/controller/MilogConfigController.java  | 30 ++++++++--
 .../ozhera/log/manager/dao/MilogLogTailDao.java    | 13 +++--
 .../ozhera/log/manager/domain/LogProcess.java      | 19 ++++--
 .../ozhera/log/manager/service/LogTailService.java |  2 +-
 .../service/impl/LogProcessServiceImpl.java        | 17 +++++-
 .../manager/service/impl/LogTailServiceImpl.java   |  4 +-
 .../nacos/impl/SpaceConfigNacosPublisher.java      | 24 +++++---
 26 files changed, 349 insertions(+), 68 deletions(-)

diff --git a/ozhera-log/log-agent-server/pom.xml 
b/ozhera-log/log-agent-server/pom.xml
index 3df58d0e..a60334ba 100644
--- a/ozhera-log/log-agent-server/pom.xml
+++ b/ozhera-log/log-agent-server/pom.xml
@@ -26,6 +26,7 @@ http://www.apache.org/licenses/LICENSE-2.0
         <version>2.2.6-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
+    <version>2.2.7-SNAPSHOT</version>
 
     <artifactId>log-agent-server</artifactId>
 
diff --git 
a/ozhera-log/log-agent-server/src/main/java/org/apache/ozhera/log/server/service/DefaultLogProcessCollector.java
 
b/ozhera-log/log-agent-server/src/main/java/org/apache/ozhera/log/server/service/DefaultLogProcessCollector.java
index 64803fda..7bc32451 100644
--- 
a/ozhera-log/log-agent-server/src/main/java/org/apache/ozhera/log/server/service/DefaultLogProcessCollector.java
+++ 
b/ozhera-log/log-agent-server/src/main/java/org/apache/ozhera/log/server/service/DefaultLogProcessCollector.java
@@ -19,17 +19,26 @@
 package org.apache.ozhera.log.server.service;
 
 import cn.hutool.core.util.NumberUtil;
+import cn.hutool.json.JSONUtil;
+import com.google.common.base.Stopwatch;
 import com.google.common.collect.Lists;
-import org.apache.ozhera.log.api.model.vo.AgentLogProcessDTO;
-import org.apache.ozhera.log.api.model.vo.TailLogProcessDTO;
-import org.apache.ozhera.log.api.model.vo.UpdateLogProcessCmd;
-import org.apache.ozhera.log.api.service.LogProcessCollector;
+import com.xiaomi.data.push.context.AgentContext;
+import com.xiaomi.data.push.rpc.RpcServer;
+import com.xiaomi.data.push.rpc.netty.AgentChannel;
+import com.xiaomi.data.push.rpc.protocol.RemotingCommand;
 import com.xiaomi.youpin.docean.anno.Component;
 import com.xiaomi.youpin.docean.plugin.dubbo.anno.Service;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.ozhera.log.api.model.meta.NodeCollInfo;
+import org.apache.ozhera.log.api.model.vo.AgentLogProcessDTO;
+import org.apache.ozhera.log.api.model.vo.LogCmd;
+import org.apache.ozhera.log.api.model.vo.TailLogProcessDTO;
+import org.apache.ozhera.log.api.model.vo.UpdateLogProcessCmd;
+import org.apache.ozhera.log.api.service.LogProcessCollector;
 
+import javax.annotation.Resource;
 import java.time.Instant;
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
@@ -37,6 +46,7 @@ import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 import static org.apache.ozhera.log.common.Constant.GSON;
+import static org.apache.ozhera.log.common.Constant.SYMBOL_COLON;
 
 /**
  * @author wtt
@@ -57,6 +67,9 @@ public class DefaultLogProcessCollector implements 
LogProcessCollector {
 
     private static final String PROCESS_SEPARATOR = "%";
 
+    @Resource
+    private RpcServer rpcServer;
+
     @Override
     public void collectLogProcess(UpdateLogProcessCmd cmd) {
         log.debug("[LogProcess.updateLogProcess] cmd:{} ", cmd);
@@ -181,6 +194,34 @@ public class DefaultLogProcessCollector implements 
LogProcessCollector {
         return tailProgressMap.get(ip);
     }
 
+    @Override
+    public List<String> getAllAgentList() {
+        return new ArrayList<>(getAgentChannelMap().keySet());
+    }
+
+    @Override
+    public NodeCollInfo getNodeCollInfo(String ip) {
+        RemotingCommand req = 
RemotingCommand.createRequestCommand(LogCmd.MACHINE_COLL_INFO);
+        req.setBody(ip.getBytes());
+        log.info("get NodeCollInfo,agent ip:{}", ip);
+        Map<String, AgentChannel> logAgentMap = getAgentChannelMap();
+        Stopwatch started = Stopwatch.createStarted();
+        RemotingCommand res = rpcServer.sendMessage(logAgentMap.get(ip), req, 
20000);
+        started.stop();
+        String response = new String(res.getBody());
+        log.info("get NodeCollInfo 
successfully---->{},duration:{}s,agentIp:{}", response, 
started.elapsed().getSeconds(), ip);
+        if (JSONUtil.isTypeJSON(response)) {
+            return GSON.fromJson(response, NodeCollInfo.class);
+        }
+        return new NodeCollInfo();
+    }
+
+    private Map<String, AgentChannel> getAgentChannelMap() {
+        Map<String, AgentChannel> logAgentMap = new HashMap<>();
+        AgentContext.ins().map.forEach((k, v) -> 
logAgentMap.put(StringUtils.substringBefore(k, SYMBOL_COLON), v));
+        return logAgentMap;
+    }
+
     /**
      * @param source    89%
      * @param targetNum 0.98
diff --git 
a/ozhera-log/log-agent-server/src/main/java/org/apache/ozhera/log/server/service/DefaultPublishConfigService.java
 
b/ozhera-log/log-agent-server/src/main/java/org/apache/ozhera/log/server/service/DefaultPublishConfigService.java
index 81850a79..e642988a 100644
--- 
a/ozhera-log/log-agent-server/src/main/java/org/apache/ozhera/log/server/service/DefaultPublishConfigService.java
+++ 
b/ozhera-log/log-agent-server/src/main/java/org/apache/ozhera/log/server/service/DefaultPublishConfigService.java
@@ -71,7 +71,7 @@ public class DefaultPublishConfigService implements 
PublishConfigService {
             if (logAgentMap.containsKey(agentCurrentIp)) {
                 String sendStr = GSON.toJson(logCollectMeta);
                 if 
(CollectionUtils.isNotEmpty(logCollectMeta.getAppLogMetaList())) {
-                    RemotingCommand req = 
RemotingCommand.createRequestCommand(LogCmd.logReq);
+                    RemotingCommand req = 
RemotingCommand.createRequestCommand(LogCmd.LOG_REQ);
                     req.setBody(sendStr.getBytes());
                     log.info("Send the configuration,agent ip:{},Configuration 
information:{}", agentCurrentIp, sendStr);
                     Stopwatch started = Stopwatch.createStarted();
diff --git a/ozhera-log/log-agent/pom.xml b/ozhera-log/log-agent/pom.xml
index ef1e4484..69031a1f 100644
--- a/ozhera-log/log-agent/pom.xml
+++ b/ozhera-log/log-agent/pom.xml
@@ -28,6 +28,7 @@ http://www.apache.org/licenses/LICENSE-2.0
     <modelVersion>4.0.0</modelVersion>
 
     <artifactId>log-agent</artifactId>
+    <version>2.2.7-SNAPSHOT</version>
 
     <properties>
         <maven.compiler.source>21</maven.compiler.source>
diff --git 
a/ozhera-log/log-agent/src/main/java/org/apache/ozhera/log/agent/channel/AbstractChannelService.java
 
b/ozhera-log/log-agent/src/main/java/org/apache/ozhera/log/agent/channel/AbstractChannelService.java
index 5fbf3fa3..009df07f 100644
--- 
a/ozhera-log/log-agent/src/main/java/org/apache/ozhera/log/agent/channel/AbstractChannelService.java
+++ 
b/ozhera-log/log-agent/src/main/java/org/apache/ozhera/log/agent/channel/AbstractChannelService.java
@@ -21,6 +21,7 @@ package org.apache.ozhera.log.agent.channel;
 import cn.hutool.core.io.FileUtil;
 import com.xiaomi.mone.file.ReadResult;
 import com.xiaomi.mone.file.common.FileInfoCache;
+import com.xiaomi.mone.file.common.FileUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.ozhera.log.agent.channel.memory.ChannelMemory;
 import org.apache.ozhera.log.agent.common.ChannelUtil;
@@ -30,6 +31,7 @@ import org.apache.ozhera.log.api.model.meta.LogPattern;
 import org.apache.ozhera.log.api.model.msg.LineMessage;
 import org.apache.ozhera.log.utils.NetUtil;
 
+import java.io.File;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -90,6 +92,11 @@ public abstract class AbstractChannelService implements 
ChannelService {
             }
             ChannelState.StateProgress stateProgress = new 
ChannelState.StateProgress();
             stateProgress.setCurrentFile(pattern);
+            File file = new File(pattern);
+            if (file.exists()) {
+                stateProgress.setFileInode(FileUtils.fileKey(file).toString());
+            }
+            file = null;
             stateProgress.setIp(getTailPodIp(pattern));
             stateProgress.setCurrentRowNum(fileProcess.getCurrentRowNum());
             stateProgress.setPointer(fileProcess.getPointer());
diff --git 
a/ozhera-log/log-agent/src/main/java/org/apache/ozhera/log/agent/channel/ChannelEngine.java
 
b/ozhera-log/log-agent/src/main/java/org/apache/ozhera/log/agent/channel/ChannelEngine.java
index e40c9ac1..9a023b54 100644
--- 
a/ozhera-log/log-agent/src/main/java/org/apache/ozhera/log/agent/channel/ChannelEngine.java
+++ 
b/ozhera-log/log-agent/src/main/java/org/apache/ozhera/log/agent/channel/ChannelEngine.java
@@ -50,10 +50,13 @@ import org.apache.ozhera.log.agent.input.Input;
 import org.apache.ozhera.log.agent.output.Output;
 import org.apache.ozhera.log.api.enums.LogTypeEnum;
 import org.apache.ozhera.log.api.enums.OperateEnum;
+import org.apache.ozhera.log.api.model.meta.NodeCollInfo;
 import org.apache.ozhera.log.api.model.vo.UpdateLogProcessCmd;
 import org.apache.ozhera.log.common.Constant;
 import org.apache.ozhera.log.utils.NetUtil;
 
+import java.io.IOException;
+import java.io.InputStream;
 import java.text.NumberFormat;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
@@ -258,7 +261,7 @@ public class ChannelEngine {
         try {
             preCheckChannelDefine(channelDefine);
             Output output = channelDefine.getOutput();
-            MsgExporter exporter = exporterTrans(output);
+            MsgExporter exporter = exporterTrans(output, 
channelDefine.getInput());
             if (null == exporter) {
                 throw new IllegalArgumentException("cant not trans to 
MsgExporter, output:" + gson.toJson(output));
             }
@@ -293,11 +296,11 @@ public class ChannelEngine {
         
OutPutServiceFactory.getOutPutService(output.getServiceName()).preCheckOutput(output);
     }
 
-    private MsgExporter exporterTrans(Output output) throws Exception {
+    private MsgExporter exporterTrans(Output output, Input input) throws 
Exception {
         if (null == output) {
             return null;
         }
-        return 
OutPutServiceFactory.getOutPutService(output.getServiceName()).exporterTrans(output);
+        return 
OutPutServiceFactory.getOutPutService(output.getServiceName()).exporterTrans(output,
 input);
     }
 
 
@@ -345,6 +348,63 @@ public class ChannelEngine {
         }
     }
 
+    private String getHostName() {
+        try {
+            Process process = Runtime.getRuntime().exec("hostname");
+            try (InputStream in = process.getInputStream()) {
+                return new String(in.readAllBytes()).trim();
+            }
+        } catch (Exception e) {
+            log.error("get hostname error", e);
+        }
+        return "unknown";
+    }
+
+    public NodeCollInfo getNodeCollInfo() {
+        NodeCollInfo machineCollInfo = new NodeCollInfo();
+        machineCollInfo.setHostIp(NetUtil.getLocalIp());
+
+        machineCollInfo.setHostName(getHostName());
+
+        List<NodeCollInfo.TailCollInfo> tailCollInfos = 
channelServiceList.stream()
+                .map(this::buildTailCollInfo)
+                .collect(Collectors.toList());
+
+        machineCollInfo.setTailCollInfos(tailCollInfos);
+        return machineCollInfo;
+    }
+
+    private NodeCollInfo.TailCollInfo buildTailCollInfo(ChannelService 
channelService) {
+        ChannelState channelState = channelService.state();
+
+        NodeCollInfo.TailCollInfo tailCollInfo = new 
NodeCollInfo.TailCollInfo();
+        tailCollInfo.setTailId(channelState.getTailId());
+        tailCollInfo.setTailName(channelState.getTailName());
+
+        List<NodeCollInfo.CollInfo> collInfos = 
channelState.getStateProgressMap().entrySet().stream()
+                .map(this::buildCollInfo)
+                .collect(Collectors.toList());
+
+        tailCollInfo.setCollInfos(collInfos);
+        return tailCollInfo;
+    }
+
+    private NodeCollInfo.CollInfo buildCollInfo(Map.Entry<String, 
ChannelState.StateProgress> entry) {
+        String fileName = entry.getKey();
+        ChannelState.StateProgress stateProgress = entry.getValue();
+
+        NodeCollInfo.CollInfo collInfo = new NodeCollInfo.CollInfo();
+        collInfo.setFileName(fileName);
+        collInfo.setFileNode(stateProgress.getFileInode());
+        collInfo.setCollProgress(getPercent(stateProgress.getPointer(), 
stateProgress.getFileMaxPointer()));
+        collInfo.setMaxPointer(stateProgress.getFileMaxPointer());
+        collInfo.setCurrentPointer(stateProgress.getPointer());
+        collInfo.setCurrentNumber(stateProgress.getCurrentRowNum());
+        collInfo.setCollTime(stateProgress.getCtTime());
+
+        return collInfo;
+    }
+
     /**
      * New configuration
      *
@@ -393,7 +453,7 @@ public class ChannelEngine {
                     SimilarComparator outputSimilarComparator = new 
OutputSimilarComparator(oldChannelDefine.getOutput());
                     FilterSimilarComparator filterSimilarComparator = new 
FilterSimilarComparator(oldChannelDefine.getFilters());
                     SimilarComparator logLevelSimilarComparator = new 
LogLevelSimilarComparator(oldChannelDefine.getFilterLogLevelList());
-                    if 
(appSimilarComparator.compare(newChannelDefine.getAppId()) && 
inputSimilarComparator.compare(newChannelDefine.getInput()) && 
outputSimilarComparator.compare(newChannelDefine.getOutput()) && 
logLevelSimilarComparator.compare(newChannelDefine.getFilterLogLevelList()) ) {
+                    if 
(appSimilarComparator.compare(newChannelDefine.getAppId()) && 
inputSimilarComparator.compare(newChannelDefine.getInput()) && 
outputSimilarComparator.compare(newChannelDefine.getOutput()) && 
logLevelSimilarComparator.compare(newChannelDefine.getFilterLogLevelList())) {
                         if 
(!filterSimilarComparator.compare(newChannelDefine.getFilters())) {
                             channelServiceList.stream().filter(channelService 
-> ((AbstractChannelService) 
channelService).getChannelDefine().getChannelId().equals(channelId)).findFirst().ifPresent(channelService
 -> channelService.filterRefresh(newChannelDefine.getFilters()));
                         }
diff --git 
a/ozhera-log/log-agent/src/main/java/org/apache/ozhera/log/agent/channel/ChannelServiceFactory.java
 
b/ozhera-log/log-agent/src/main/java/org/apache/ozhera/log/agent/channel/ChannelServiceFactory.java
index 6801aa6b..a3feea86 100644
--- 
a/ozhera-log/log-agent/src/main/java/org/apache/ozhera/log/agent/channel/ChannelServiceFactory.java
+++ 
b/ozhera-log/log-agent/src/main/java/org/apache/ozhera/log/agent/channel/ChannelServiceFactory.java
@@ -19,6 +19,8 @@
 package org.apache.ozhera.log.agent.channel;
 
 import cn.hutool.core.io.FileUtil;
+import com.google.common.collect.Lists;
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.ozhera.log.agent.channel.memory.AgentMemoryService;
 import org.apache.ozhera.log.agent.export.MsgExporter;
@@ -27,11 +29,13 @@ import org.apache.ozhera.log.agent.input.Input;
 import org.apache.ozhera.log.api.enums.LogTypeEnum;
 
 import java.util.Arrays;
+import java.util.List;
 import java.util.regex.Pattern;
 
 import static org.apache.ozhera.log.common.Constant.SYMBOL_COMMA;
 import static org.apache.ozhera.log.common.PathUtils.PATH_WILDCARD;
 import static org.apache.ozhera.log.common.PathUtils.SEPARATOR;
+import static org.apache.ozhera.log.utils.ConfigUtils.getConfigValue;
 
 /**
  * @author wtt
@@ -41,13 +45,21 @@ import static 
org.apache.ozhera.log.common.PathUtils.SEPARATOR;
  */
 public class ChannelServiceFactory {
 
+    private static final String DEFAULT_SPECIAL_FILE_SUFFIX_KEY = 
"special.file.suffix";
+
     private final AgentMemoryService agentMemoryService;
     private final String memoryBasePath;
     private static final Pattern regexCharsPattern = 
Pattern.compile("[*+?^${}()\\[\\]\\\\]");
 
+    private List<String> multiSpecialFileSuffix;
+
     public ChannelServiceFactory(AgentMemoryService agentMemoryService, String 
memoryBasePath) {
         this.agentMemoryService = agentMemoryService;
         this.memoryBasePath = memoryBasePath;
+        String specialFileSuffix = 
getConfigValue(DEFAULT_SPECIAL_FILE_SUFFIX_KEY);
+        if (StringUtils.isNotBlank(specialFileSuffix)) {
+            multiSpecialFileSuffix = 
Lists.newArrayList(specialFileSuffix.split(SYMBOL_COMMA));
+        }
     }
 
     public ChannelService createChannelService(ChannelDefine channelDefine,
@@ -60,6 +72,10 @@ public class ChannelServiceFactory {
         String logType = input.getType();
         String logPattern = input.getLogPattern();
 
+        if (CollectionUtils.isNotEmpty(multiSpecialFileSuffix) && 
multiSpecialFileSuffix.stream().anyMatch(logPattern::endsWith)) {
+            return createStandardChannelService(exporter, channelDefine, 
filterChain);
+        }
+
         if (LogTypeEnum.OPENTELEMETRY == LogTypeEnum.name2enum(logType) || 
FileUtil.exist(logPattern)) {
             return createStandardChannelService(exporter, channelDefine, 
filterChain);
         }
diff --git 
a/ozhera-log/log-agent/src/main/java/org/apache/ozhera/log/agent/channel/ChannelState.java
 
b/ozhera-log/log-agent/src/main/java/org/apache/ozhera/log/agent/channel/ChannelState.java
index bd4c40d9..9aa79825 100644
--- 
a/ozhera-log/log-agent/src/main/java/org/apache/ozhera/log/agent/channel/ChannelState.java
+++ 
b/ozhera-log/log-agent/src/main/java/org/apache/ozhera/log/agent/channel/ChannelState.java
@@ -65,6 +65,8 @@ public class ChannelState implements Serializable {
          * Current collection file
          */
         private String currentFile;
+
+        private String fileInode;
         /**
          * The latest line number currently being collected.
          */
diff --git 
a/ozhera-log/log-agent/src/main/java/org/apache/ozhera/log/agent/channel/listener/DefaultFileMonitorListener.java
 
b/ozhera-log/log-agent/src/main/java/org/apache/ozhera/log/agent/channel/listener/DefaultFileMonitorListener.java
index 5cc6ece7..0b9c6986 100644
--- 
a/ozhera-log/log-agent/src/main/java/org/apache/ozhera/log/agent/channel/listener/DefaultFileMonitorListener.java
+++ 
b/ozhera-log/log-agent/src/main/java/org/apache/ozhera/log/agent/channel/listener/DefaultFileMonitorListener.java
@@ -62,7 +62,7 @@ public class DefaultFileMonitorListener implements 
FileMonitorListener {
     /**
      * List of folders actually monitored
      */
-    List<String> pathList = new CopyOnWriteArrayList<>();
+    private List<String> pathList = new CopyOnWriteArrayList<>();
     /**
      * Actual listener map
      */
diff --git 
a/ozhera-log/log-agent/src/main/java/org/apache/ozhera/log/agent/extension/KafkaService.java
 
b/ozhera-log/log-agent/src/main/java/org/apache/ozhera/log/agent/extension/KafkaService.java
index 07ddd33f..bfb976d1 100644
--- 
a/ozhera-log/log-agent/src/main/java/org/apache/ozhera/log/agent/extension/KafkaService.java
+++ 
b/ozhera-log/log-agent/src/main/java/org/apache/ozhera/log/agent/extension/KafkaService.java
@@ -19,12 +19,6 @@
 package org.apache.ozhera.log.agent.extension;
 
 import com.google.common.base.Preconditions;
-import org.apache.ozhera.log.agent.export.MsgExporter;
-import org.apache.ozhera.log.agent.output.Output;
-import org.apache.ozhera.log.agent.service.OutPutService;
-import org.apache.ozhera.log.api.model.meta.LogPattern;
-import org.apache.ozhera.log.api.model.meta.MQConfig;
-import org.apache.ozhera.log.utils.KafkaUtils;
 import com.xiaomi.youpin.docean.anno.Service;
 import com.xiaomi.youpin.docean.plugin.config.anno.Value;
 import lombok.extern.slf4j.Slf4j;
@@ -32,6 +26,13 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.kafka.clients.producer.KafkaProducer;
 import org.apache.kafka.clients.producer.Producer;
 import org.apache.kafka.clients.producer.ProducerConfig;
+import org.apache.ozhera.log.agent.export.MsgExporter;
+import org.apache.ozhera.log.agent.input.Input;
+import org.apache.ozhera.log.agent.output.Output;
+import org.apache.ozhera.log.agent.service.OutPutService;
+import org.apache.ozhera.log.api.model.meta.LogPattern;
+import org.apache.ozhera.log.api.model.meta.MQConfig;
+import org.apache.ozhera.log.utils.KafkaUtils;
 
 import java.util.Objects;
 import java.util.Properties;
@@ -81,7 +82,7 @@ public class KafkaService implements OutPutService {
     }
 
     @Override
-    public MsgExporter exporterTrans(Output output) throws Exception {
+    public MsgExporter exporterTrans(Output output, Input input) throws 
Exception {
         KafkaOutput kafkaOutput = (KafkaOutput) output;
         String nameSrvAddr = kafkaOutput.getClusterInfo();
         String key = getKey(nameSrvAddr, kafkaOutput.getTopic(), 
kafkaOutput.getTag());
diff --git 
a/ozhera-log/log-agent/src/main/java/org/apache/ozhera/log/agent/extension/RocketMQService.java
 
b/ozhera-log/log-agent/src/main/java/org/apache/ozhera/log/agent/extension/RocketMQService.java
index 45f4b246..eb9cbc68 100644
--- 
a/ozhera-log/log-agent/src/main/java/org/apache/ozhera/log/agent/extension/RocketMQService.java
+++ 
b/ozhera-log/log-agent/src/main/java/org/apache/ozhera/log/agent/extension/RocketMQService.java
@@ -19,15 +19,16 @@
 package org.apache.ozhera.log.agent.extension;
 
 import com.google.common.base.Preconditions;
+import com.xiaomi.youpin.docean.anno.Service;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.ozhera.log.agent.exception.AgentException;
 import org.apache.ozhera.log.agent.export.MsgExporter;
+import org.apache.ozhera.log.agent.input.Input;
 import org.apache.ozhera.log.agent.output.Output;
 import org.apache.ozhera.log.agent.service.OutPutService;
 import org.apache.ozhera.log.api.model.meta.LogPattern;
 import org.apache.ozhera.log.api.model.meta.MQConfig;
-import com.xiaomi.youpin.docean.anno.Service;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
 import org.apache.rocketmq.acl.common.AclClientRPCHook;
 import org.apache.rocketmq.acl.common.SessionCredentials;
 import org.apache.rocketmq.client.exception.MQClientException;
@@ -83,7 +84,7 @@ public class RocketMQService implements OutPutService {
     }
 
     @Override
-    public MsgExporter exporterTrans(Output output) {
+    public MsgExporter exporterTrans(Output output, Input input) {
         RmqOutput rmqOutput = (RmqOutput) output;
         String nameSrvAddr = rmqOutput.getClusterInfo();
         DefaultMQProducer mqProducer = producerMap.get(nameSrvAddr);
diff --git 
a/ozhera-log/log-agent/src/main/java/org/apache/ozhera/log/agent/rpc/processor/LogProcessor.java
 
b/ozhera-log/log-agent/src/main/java/org/apache/ozhera/log/agent/rpc/processor/LogProcessor.java
index 3e54c277..37714d80 100644
--- 
a/ozhera-log/log-agent/src/main/java/org/apache/ozhera/log/agent/rpc/processor/LogProcessor.java
+++ 
b/ozhera-log/log-agent/src/main/java/org/apache/ozhera/log/agent/rpc/processor/LogProcessor.java
@@ -52,7 +52,7 @@ public class LogProcessor implements NettyRequestProcessor {
 
         log.info("logCollect config req:{}", GSON.toJson(req));
 
-        RemotingCommand response = 
RemotingCommand.createResponseCommand(LogCmd.logRes);
+        RemotingCommand response = 
RemotingCommand.createResponseCommand(LogCmd.LOG_REQ);
         response.setBody("ok".getBytes());
         log.info("【config change】receive data:{}", GSON.toJson(req));
         metaConfigEffect(req);
@@ -100,6 +100,6 @@ public class LogProcessor implements NettyRequestProcessor {
 
     @Override
     public int cmdId() {
-        return LogCmd.logReq;
+        return LogCmd.LOG_REQ;
     }
 }
diff --git 
a/ozhera-log/log-agent/src/main/java/org/apache/ozhera/log/agent/rpc/processor/NodeCollInfoProcessor.java
 
b/ozhera-log/log-agent/src/main/java/org/apache/ozhera/log/agent/rpc/processor/NodeCollInfoProcessor.java
new file mode 100644
index 00000000..a8e01d85
--- /dev/null
+++ 
b/ozhera-log/log-agent/src/main/java/org/apache/ozhera/log/agent/rpc/processor/NodeCollInfoProcessor.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.apache.ozhera.log.agent.rpc.processor;
+
+import com.xiaomi.data.push.rpc.netty.NettyRequestProcessor;
+import com.xiaomi.data.push.rpc.protocol.RemotingCommand;
+import com.xiaomi.youpin.docean.Ioc;
+import com.xiaomi.youpin.docean.anno.Component;
+import io.netty.channel.ChannelHandlerContext;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.ozhera.log.agent.channel.ChannelEngine;
+import org.apache.ozhera.log.api.model.meta.NodeCollInfo;
+import org.apache.ozhera.log.api.model.vo.LogCmd;
+
+import static org.apache.ozhera.log.common.Constant.GSON;
+
+/**
+ * @author wtt
+ * @version 1.0
+ * @description
+ * @date 2025/6/17 15:36
+ */
+@Slf4j
+@Component
+public class NodeCollInfoProcessor implements NettyRequestProcessor {
+    @Override
+    public RemotingCommand processRequest(ChannelHandlerContext ctx, 
RemotingCommand remotingCommand) throws Exception {
+
+        ChannelEngine channelEngine = Ioc.ins().getBean(ChannelEngine.class);
+        RemotingCommand response = 
RemotingCommand.createResponseCommand(LogCmd.MACHINE_COLL_INFO);
+        if (null != channelEngine) {
+            NodeCollInfo nodeCollInfo = channelEngine.getNodeCollInfo();
+            String collInfo = GSON.toJson(nodeCollInfo);
+            response.setBody(collInfo.getBytes());
+            log.info(" NodeCollInfo data:{}", collInfo);
+        } else {
+            response.setBody(GSON.toJson(new NodeCollInfo()).getBytes());
+        }
+        return response;
+    }
+
+    @Override
+    public boolean rejectRequest() {
+        return false;
+    }
+
+    @Override
+    public int cmdId() {
+        return LogCmd.MACHINE_COLL_INFO;
+    }
+}
diff --git 
a/ozhera-log/log-agent/src/main/java/org/apache/ozhera/log/agent/service/OutPutService.java
 
b/ozhera-log/log-agent/src/main/java/org/apache/ozhera/log/agent/service/OutPutService.java
index 2ac15908..1206d219 100644
--- 
a/ozhera-log/log-agent/src/main/java/org/apache/ozhera/log/agent/service/OutPutService.java
+++ 
b/ozhera-log/log-agent/src/main/java/org/apache/ozhera/log/agent/service/OutPutService.java
@@ -19,6 +19,7 @@
 package org.apache.ozhera.log.agent.service;
 
 import org.apache.ozhera.log.agent.export.MsgExporter;
+import org.apache.ozhera.log.agent.input.Input;
 import org.apache.ozhera.log.agent.output.Output;
 import org.apache.ozhera.log.api.model.meta.LogPattern;
 
@@ -46,7 +47,7 @@ public interface OutPutService {
      * @return
      * @throws Exception
      */
-    MsgExporter exporterTrans(Output output) throws Exception;
+    MsgExporter exporterTrans(Output output, Input input) throws Exception;
 
     /**
      * remove message producer based on configuration
diff --git 
a/ozhera-log/log-api/src/main/java/org/apache/ozhera/log/api/model/vo/LogCmd.java
 
b/ozhera-log/log-api/src/main/java/org/apache/ozhera/log/api/model/meta/NodeCollInfo.java
similarity index 50%
copy from 
ozhera-log/log-api/src/main/java/org/apache/ozhera/log/api/model/vo/LogCmd.java
copy to 
ozhera-log/log-api/src/main/java/org/apache/ozhera/log/api/model/meta/NodeCollInfo.java
index df4cb30c..4de6ff31 100644
--- 
a/ozhera-log/log-api/src/main/java/org/apache/ozhera/log/api/model/vo/LogCmd.java
+++ 
b/ozhera-log/log-api/src/main/java/org/apache/ozhera/log/api/model/meta/NodeCollInfo.java
@@ -16,18 +16,40 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.ozhera.log.api.model.vo;
+package org.apache.ozhera.log.api.model.meta;
 
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
 
 /**
- * @author [email protected]
+ * @author wtt
+ * @version 1.0
+ * @description
+ * @date 2025/6/17 14:20
  */
-public class LogCmd {
-
-
-    public static final int logReq = 3000;
-    public static final int logRes = 3001;
-
+@Data
+public class NodeCollInfo implements Serializable {
+    private String hostIp;
+    private String hostName;
+    private List<TailCollInfo> tailCollInfos;
 
+    @Data
+    public static class TailCollInfo implements Serializable {
+        private Long tailId;
+        private String tailName;
+        private List<CollInfo> collInfos;
+    }
 
+    @Data
+    public static class CollInfo implements Serializable {
+        private String fileName;
+        private String fileNode;
+        private String collProgress;
+        private Long maxPointer;
+        private Long currentPointer;
+        private Long currentNumber;
+        private Long collTime;
+    }
 }
diff --git 
a/ozhera-log/log-api/src/main/java/org/apache/ozhera/log/api/model/vo/LogCmd.java
 
b/ozhera-log/log-api/src/main/java/org/apache/ozhera/log/api/model/vo/LogCmd.java
index df4cb30c..e2302302 100644
--- 
a/ozhera-log/log-api/src/main/java/org/apache/ozhera/log/api/model/vo/LogCmd.java
+++ 
b/ozhera-log/log-api/src/main/java/org/apache/ozhera/log/api/model/vo/LogCmd.java
@@ -25,9 +25,10 @@ package org.apache.ozhera.log.api.model.vo;
 public class LogCmd {
 
 
-    public static final int logReq = 3000;
-    public static final int logRes = 3001;
-
-
+    public static final int LOG_REQ = 3000;
+    //send config
+    public static final int LOG_RES = 3001;
+    // machine info
+    public static final int MACHINE_COLL_INFO = 3002;
 
 }
diff --git 
a/ozhera-log/log-api/src/main/java/org/apache/ozhera/log/api/service/LogProcessCollector.java
 
b/ozhera-log/log-api/src/main/java/org/apache/ozhera/log/api/service/LogProcessCollector.java
index 72dfa2e9..482d5dca 100644
--- 
a/ozhera-log/log-api/src/main/java/org/apache/ozhera/log/api/service/LogProcessCollector.java
+++ 
b/ozhera-log/log-api/src/main/java/org/apache/ozhera/log/api/service/LogProcessCollector.java
@@ -18,6 +18,7 @@
  */
 package org.apache.ozhera.log.api.service;
 
+import org.apache.ozhera.log.api.model.meta.NodeCollInfo;
 import org.apache.ozhera.log.api.model.vo.AgentLogProcessDTO;
 import org.apache.ozhera.log.api.model.vo.TailLogProcessDTO;
 import org.apache.ozhera.log.api.model.vo.UpdateLogProcessCmd;
@@ -79,4 +80,9 @@ public interface LogProcessCollector {
      * @return
      */
     List<UpdateLogProcessCmd.CollectDetail> getAllCollectDetail(String ip);
+
+    List<String> getAllAgentList();
+
+    NodeCollInfo getNodeCollInfo(String ip);
+
 }
diff --git 
a/ozhera-log/log-api/src/main/java/org/apache/ozhera/log/api/service/LogProcessService.java
 
b/ozhera-log/log-api/src/main/java/org/apache/ozhera/log/api/service/LogProcessService.java
index 75bdb55d..fe41af65 100644
--- 
a/ozhera-log/log-api/src/main/java/org/apache/ozhera/log/api/service/LogProcessService.java
+++ 
b/ozhera-log/log-api/src/main/java/org/apache/ozhera/log/api/service/LogProcessService.java
@@ -18,8 +18,11 @@
  */
 package org.apache.ozhera.log.api.service;
 
+import org.apache.ozhera.log.api.model.meta.NodeCollInfo;
 import org.apache.ozhera.log.api.model.vo.UpdateLogProcessCmd;
 
+import java.util.List;
+
 public interface LogProcessService {
 
     /**
@@ -27,4 +30,8 @@ public interface LogProcessService {
      * @param cmd
      */
     void updateLogProcess(UpdateLogProcessCmd cmd);
+
+    List<String> getAllIps();
+
+    NodeCollInfo getNodeCollInfo(String ip);
 }
diff --git a/ozhera-log/log-manager/pom.xml b/ozhera-log/log-manager/pom.xml
index c6e3f3ea..2ae23f7b 100644
--- a/ozhera-log/log-manager/pom.xml
+++ b/ozhera-log/log-manager/pom.xml
@@ -28,7 +28,7 @@ http://www.apache.org/licenses/LICENSE-2.0
     <modelVersion>4.0.0</modelVersion>
 
     <artifactId>log-manager</artifactId>
-    <version>2.2.6-SNAPSHOT</version>
+    <version>2.2.7-SNAPSHOT</version>
 
     <properties>
         <maven.compiler.source>21</maven.compiler.source>
diff --git 
a/ozhera-log/log-manager/src/main/java/org/apache/ozhera/log/manager/controller/MilogConfigController.java
 
b/ozhera-log/log-manager/src/main/java/org/apache/ozhera/log/manager/controller/MilogConfigController.java
index 262a8f81..5280de41 100644
--- 
a/ozhera-log/log-manager/src/main/java/org/apache/ozhera/log/manager/controller/MilogConfigController.java
+++ 
b/ozhera-log/log-manager/src/main/java/org/apache/ozhera/log/manager/controller/MilogConfigController.java
@@ -18,6 +18,11 @@
  */
 package org.apache.ozhera.log.manager.controller;
 
+import cn.hutool.core.lang.Assert;
+import com.xiaomi.youpin.docean.anno.Controller;
+import com.xiaomi.youpin.docean.anno.RequestMapping;
+import com.xiaomi.youpin.docean.anno.RequestParam;
+import org.apache.ozhera.log.api.model.meta.NodeCollInfo;
 import org.apache.ozhera.log.api.model.vo.TailLogProcessDTO;
 import org.apache.ozhera.log.api.model.vo.UpdateLogProcessCmd;
 import org.apache.ozhera.log.common.Result;
@@ -26,7 +31,6 @@ import org.apache.ozhera.log.manager.model.bo.BatchQueryParam;
 import org.apache.ozhera.log.manager.model.bo.LogTailParam;
 import org.apache.ozhera.log.manager.model.bo.MlogParseParam;
 import org.apache.ozhera.log.manager.model.dto.*;
-import org.apache.ozhera.log.manager.model.dto.*;
 import org.apache.ozhera.log.manager.model.page.PageInfo;
 import org.apache.ozhera.log.manager.model.pojo.MilogLogStoreDO;
 import org.apache.ozhera.log.manager.model.vo.LogStoreParam;
@@ -36,9 +40,6 @@ import 
org.apache.ozhera.log.manager.service.impl.LogProcessServiceImpl;
 import org.apache.ozhera.log.manager.service.impl.LogSpaceServiceImpl;
 import org.apache.ozhera.log.manager.service.impl.LogStoreServiceImpl;
 import org.apache.ozhera.log.manager.service.impl.LogTailServiceImpl;
-import com.xiaomi.youpin.docean.anno.Controller;
-import com.xiaomi.youpin.docean.anno.RequestMapping;
-import com.xiaomi.youpin.docean.anno.RequestParam;
 
 import javax.annotation.Resource;
 import java.io.IOException;
@@ -188,9 +189,10 @@ public class MilogConfigController {
 
     @RequestMapping(path = "/milog/tail/getbypage", method = "get")
     public Result<Map<String, Object>> 
getLogTailByPage(@RequestParam("storeId") Long storeId,
+                                                        
@RequestParam("tailName") String tailName,
                                                         @RequestParam("page") 
int page,
                                                         
@RequestParam("pageSize") int pageSize) throws IOException {
-        return logTailService.getMilogLogBypage(storeId, page, pageSize);
+        return logTailService.getMilogLogBypage(storeId, tailName, page, 
pageSize);
     }
 
     @RequestMapping(path = "/milog/tail/getcntbystoreid", method = "get")
@@ -256,7 +258,7 @@ public class MilogConfigController {
     public Result<List<MilogAppEnvDTO>> getEnInfosByAppId(@RequestParam(value 
= "milogAppId") Long milogAppId,
                                                           @RequestParam(value 
= "deployWay") Integer deployWay,
                                                           @RequestParam(value 
= "machineRoom") String machineRoom) {
-        return logTailService.getEnInfosByAppId(milogAppId, 
deployWay,machineRoom);
+        return logTailService.getEnInfosByAppId(milogAppId, deployWay, 
machineRoom);
     }
 
     /**
@@ -370,4 +372,20 @@ public class MilogConfigController {
     public Result<String> redistributeStoreConfig(@RequestParam(value = 
"storeId") Long storeId) {
         return logStoreService.redistributeStoreConfig(storeId);
     }
+
+    /**
+     * agent机器配置相关
+     */
+    @RequestMapping(path = "/log/agent/ips", method = "get")
+    public Result<List<String>> getAllIps() {
+        List<String> ips = logProcessService.getAllIps();
+        return Result.success(ips);
+    }
+
+    @RequestMapping(path = "/log/agent/coll/info", method = "get")
+    public Result<NodeCollInfo> getNodeCollInfo(@RequestParam(value = "ip") 
String ip) {
+        Assert.notBlank("ip not blank");
+        NodeCollInfo nodeCollInfo = logProcessService.getNodeCollInfo(ip);
+        return Result.success(nodeCollInfo);
+    }
 }
diff --git 
a/ozhera-log/log-manager/src/main/java/org/apache/ozhera/log/manager/dao/MilogLogTailDao.java
 
b/ozhera-log/log-manager/src/main/java/org/apache/ozhera/log/manager/dao/MilogLogTailDao.java
index d74b3c32..4008f223 100644
--- 
a/ozhera-log/log-manager/src/main/java/org/apache/ozhera/log/manager/dao/MilogLogTailDao.java
+++ 
b/ozhera-log/log-manager/src/main/java/org/apache/ozhera/log/manager/dao/MilogLogTailDao.java
@@ -19,15 +19,15 @@
 package org.apache.ozhera.log.manager.dao;
 
 import com.google.common.collect.Lists;
+import com.xiaomi.youpin.docean.anno.Service;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.ozhera.log.api.enums.MachineTypeEnum;
 import org.apache.ozhera.log.api.enums.ProjectTypeEnum;
 import org.apache.ozhera.log.api.model.meta.FilterDefine;
 import org.apache.ozhera.log.manager.common.context.MoneUserContext;
 import org.apache.ozhera.log.manager.model.pojo.MilogLogTailDo;
-import com.xiaomi.youpin.docean.anno.Service;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.lang3.StringUtils;
 import org.nutz.dao.Chain;
 import org.nutz.dao.Cnd;
 import org.nutz.dao.FieldFilter;
@@ -118,8 +118,11 @@ public class MilogLogTailDao {
         return dao.query(MilogLogTailDo.class, Cnd.where("store_id", "in", 
ids).orderBy("ctime", "desc"));
     }
 
-    public List<MilogLogTailDo> getMilogLogtailByPage(Long storeId, int page, 
int pagesize) {
+    public List<MilogLogTailDo> getMilogLogtailByPage(Long storeId, String 
tailName, int page, int pagesize) {
         Cnd cnd = Cnd.where("store_id", EQUAL_OPERATE, storeId);
+        if (StringUtils.isNotBlank(tailName)) {
+            cnd = cnd.and("tail", "like", "%" + tailName + "%");
+        }
         return dao.query(MilogLogTailDo.class, cnd.orderBy("ctime", "desc"), 
new Pager(page, pagesize));
     }
 
diff --git 
a/ozhera-log/log-manager/src/main/java/org/apache/ozhera/log/manager/domain/LogProcess.java
 
b/ozhera-log/log-manager/src/main/java/org/apache/ozhera/log/manager/domain/LogProcess.java
index d2a443d7..a39e887a 100644
--- 
a/ozhera-log/log-manager/src/main/java/org/apache/ozhera/log/manager/domain/LogProcess.java
+++ 
b/ozhera-log/log-manager/src/main/java/org/apache/ozhera/log/manager/domain/LogProcess.java
@@ -19,17 +19,18 @@
 package org.apache.ozhera.log.manager.domain;
 
 import com.google.common.collect.Lists;
+import com.xiaomi.youpin.docean.anno.Service;
+import com.xiaomi.youpin.docean.common.StringUtils;
+import com.xiaomi.youpin.docean.plugin.dubbo.anno.Reference;
+import lombok.Getter;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.ozhera.log.api.model.meta.NodeCollInfo;
 import org.apache.ozhera.log.api.model.vo.AgentLogProcessDTO;
 import org.apache.ozhera.log.api.model.vo.TailLogProcessDTO;
 import org.apache.ozhera.log.api.model.vo.UpdateLogProcessCmd;
 import org.apache.ozhera.log.api.service.LogProcessCollector;
 import org.apache.ozhera.log.manager.dao.MilogLogTailDao;
 import org.apache.ozhera.log.manager.model.pojo.MilogLogTailDo;
-import com.xiaomi.youpin.docean.anno.Service;
-import com.xiaomi.youpin.docean.common.StringUtils;
-import com.xiaomi.youpin.docean.plugin.dubbo.anno.Reference;
-import lombok.Getter;
-import lombok.extern.slf4j.Slf4j;
 
 import javax.annotation.Resource;
 import java.util.ArrayList;
@@ -115,4 +116,12 @@ public class LogProcess {
     public List<UpdateLogProcessCmd.CollectDetail> 
getColProcessImperfect(Double progressRation) {
         return logProcessCollector.getColProcessImperfect(progressRation);
     }
+
+    public List<String> getAllAgentList() {
+        return logProcessCollector.getAllAgentList();
+    }
+
+    public NodeCollInfo getNodeCollInfo(String ip) {
+        return logProcessCollector.getNodeCollInfo(ip);
+    }
 }
diff --git 
a/ozhera-log/log-manager/src/main/java/org/apache/ozhera/log/manager/service/LogTailService.java
 
b/ozhera-log/log-manager/src/main/java/org/apache/ozhera/log/manager/service/LogTailService.java
index f9d2f60a..4d6d78d1 100644
--- 
a/ozhera-log/log-manager/src/main/java/org/apache/ozhera/log/manager/service/LogTailService.java
+++ 
b/ozhera-log/log-manager/src/main/java/org/apache/ozhera/log/manager/service/LogTailService.java
@@ -59,7 +59,7 @@ public interface LogTailService {
 
     Result<LogTailDTO> getMilogLogtailById(Long id);
 
-    Result<Map<String, Object>> getMilogLogBypage(Long storeId, int page, int 
pagesize);
+    Result<Map<String, Object>> getMilogLogBypage(Long storeId, String 
tailName, int page, int pagesize);
 
     Result<Map<String, Object>> getLogTailCountByStoreId(Long storeId);
 
diff --git 
a/ozhera-log/log-manager/src/main/java/org/apache/ozhera/log/manager/service/impl/LogProcessServiceImpl.java
 
b/ozhera-log/log-manager/src/main/java/org/apache/ozhera/log/manager/service/impl/LogProcessServiceImpl.java
index c07cd646..36fca47c 100644
--- 
a/ozhera-log/log-manager/src/main/java/org/apache/ozhera/log/manager/service/impl/LogProcessServiceImpl.java
+++ 
b/ozhera-log/log-manager/src/main/java/org/apache/ozhera/log/manager/service/impl/LogProcessServiceImpl.java
@@ -18,6 +18,10 @@
  */
 package org.apache.ozhera.log.manager.service.impl;
 
+import com.xiaomi.youpin.docean.anno.Service;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.ozhera.log.api.model.meta.NodeCollInfo;
 import org.apache.ozhera.log.api.model.vo.TailLogProcessDTO;
 import org.apache.ozhera.log.api.model.vo.UpdateLogProcessCmd;
 import org.apache.ozhera.log.api.service.LogProcessService;
@@ -27,9 +31,6 @@ import org.apache.ozhera.log.manager.domain.LogProcess;
 import org.apache.ozhera.log.manager.mapper.MilogLogProcessMapper;
 import org.apache.ozhera.log.manager.model.pojo.MilogLogProcessDOMybatis;
 import org.apache.ozhera.log.manager.model.pojo.MilogLogTailDo;
-import com.xiaomi.youpin.docean.anno.Service;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
 import org.jetbrains.annotations.Nullable;
 
 import javax.annotation.Resource;
@@ -64,6 +65,16 @@ public class LogProcessServiceImpl implements 
LogProcessService {
         }
     }
 
+    @Override
+    public List<String> getAllIps() {
+        return logProcess.getAllAgentList();
+    }
+
+    @Override
+    public NodeCollInfo getNodeCollInfo(String ip) {
+        return logProcess.getNodeCollInfo(ip);
+    }
+
     public MilogLogProcessDOMybatis getByIdFramework(Long id) {
         return processMapper.selectById(id);
     }
diff --git 
a/ozhera-log/log-manager/src/main/java/org/apache/ozhera/log/manager/service/impl/LogTailServiceImpl.java
 
b/ozhera-log/log-manager/src/main/java/org/apache/ozhera/log/manager/service/impl/LogTailServiceImpl.java
index 0ac1c429..a597683b 100644
--- 
a/ozhera-log/log-manager/src/main/java/org/apache/ozhera/log/manager/service/impl/LogTailServiceImpl.java
+++ 
b/ozhera-log/log-manager/src/main/java/org/apache/ozhera/log/manager/service/impl/LogTailServiceImpl.java
@@ -357,8 +357,8 @@ public class LogTailServiceImpl extends BaseService 
implements LogTailService {
     }
 
     @Override
-    public Result<Map<String, Object>> getMilogLogBypage(Long storeId, int 
page, int pagesize) {
-        List<MilogLogTailDo> ret = 
milogLogtailDao.getMilogLogtailByPage(storeId, page, pagesize);
+    public Result<Map<String, Object>> getMilogLogBypage(Long storeId, String 
tailName, int page, int pagesize) {
+        List<MilogLogTailDo> ret = 
milogLogtailDao.getMilogLogtailByPage(storeId, tailName, page, pagesize);
         ArrayList<LogTailDTO> res = Lists.newArrayList();
         ret.forEach(v -> {
             res.add(milogLogtailDO2DTO(v));
diff --git 
a/ozhera-log/log-manager/src/main/java/org/apache/ozhera/log/manager/service/nacos/impl/SpaceConfigNacosPublisher.java
 
b/ozhera-log/log-manager/src/main/java/org/apache/ozhera/log/manager/service/nacos/impl/SpaceConfigNacosPublisher.java
index 4298c02d..f2aa07b0 100644
--- 
a/ozhera-log/log-manager/src/main/java/org/apache/ozhera/log/manager/service/nacos/impl/SpaceConfigNacosPublisher.java
+++ 
b/ozhera-log/log-manager/src/main/java/org/apache/ozhera/log/manager/service/nacos/impl/SpaceConfigNacosPublisher.java
@@ -19,12 +19,11 @@
 package org.apache.ozhera.log.manager.service.nacos.impl;
 
 import com.alibaba.nacos.api.config.ConfigService;
-import com.alibaba.nacos.api.exception.NacosException;
+import lombok.Setter;
+import lombok.extern.slf4j.Slf4j;
 import 
org.apache.ozhera.log.manager.service.extension.common.CommonExtensionServiceFactory;
 import org.apache.ozhera.log.manager.service.nacos.DynamicConfigPublisher;
 import org.apache.ozhera.log.model.MilogSpaceData;
-import lombok.Setter;
-import lombok.extern.slf4j.Slf4j;
 
 import static org.apache.ozhera.log.common.Constant.DEFAULT_GROUP_ID;
 import static org.apache.ozhera.log.common.Constant.TAIL_CONFIG_DATA_ID;
@@ -43,12 +42,17 @@ public class SpaceConfigNacosPublisher implements 
DynamicConfigPublisher<MilogSp
 
     @Override
     public void publish(Long uniqueSpace, MilogSpaceData config) {
-        log.info("write the creation namespace configuration:{}", 
gson.toJson(config));
+        String configJson = gson.toJson(config);
+        log.info("write the creation namespace configuration:{}", configJson);
         String dataId = 
CommonExtensionServiceFactory.getCommonExtensionService().getLogManagePrefix() 
+ TAIL_CONFIG_DATA_ID + uniqueSpace;
         try {
-            configService.publishConfig(dataId, DEFAULT_GROUP_ID, 
gson.toJson(config));
-        } catch (NacosException e) {
-            log.error(String.format("Write the creation namespace 
configuration...,dataId:{},data:%s", dataId, gson.toJson(config)), e);
+            if (null != configService) {
+                configService.publishConfig(dataId, DEFAULT_GROUP_ID, 
gson.toJson(config));
+            } else {
+                log.warn("configService is null,uniqueSpace:{},config:{}", 
uniqueSpace, configJson);
+            }
+        } catch (Exception e) {
+            log.error(String.format("Write the creation namespace 
configuration...,dataId:%s,data:%s", dataId, configJson), e);
         }
     }
 
@@ -56,8 +60,10 @@ public class SpaceConfigNacosPublisher implements 
DynamicConfigPublisher<MilogSp
     public void remove(String spaceId) {
         String dataId = 
CommonExtensionServiceFactory.getCommonExtensionService().getLogManagePrefix() 
+ TAIL_CONFIG_DATA_ID + spaceId;
         try {
-            configService.removeConfig(dataId, DEFAULT_GROUP_ID);
-        } catch (NacosException e) {
+            if (null != configService) {
+                configService.removeConfig(dataId, DEFAULT_GROUP_ID);
+            }
+        } catch (Exception e) {
             log.error(String.format("Delete log configuration data data 
exceptions,param:%s", dataId), e);
         }
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to