lith 3 gadi atpakaļ
vecāks
revīzija
65d6342ef0

+ 1 - 1
dotnet/Library/Sers/Sers.Core/Sers.Core/Module/ApiTrace/Collector/ElasticSearchCollector.appsettings.json

@@ -19,7 +19,7 @@
             // es address, example:"http://192.168.20.20:9200"
             "url": "http://192.168.20.20:9200",
             //es index, example:"dev"
-            "index": "dev_apiTrace",
+            "index": "dev_apitrace",
             //es type, example:"_doc"
             //"type": "_doc",
             //若指定则在指定时间间隔统一推送数据,若不指定则立即推送。单位:ms

+ 3 - 12
dotnet/Library/Sers/Sers.Core/Sers.Core/Module/ApiTrace/Collector/ElasticSearchCollector.cs

@@ -55,24 +55,15 @@ namespace Sers.Core.Module.ApiTrace.Collector
 
         public void Init(JObject arg)
         {
-            Logger.Info("[ApiTrace.ElasticSearchCollector]初始化中");
-            client = arg["client"].Deserialize<ElasticSearchClient>();
+            Logger.Info("[ApiTrace.ElasticSearchCollector] init ...");
+            client = arg["server"].Deserialize<ElasticSearchClient>();
 
             appInfo = arg?["appInfo"]?.Deserialize<JObject>();
             tagsTemplate = arg?["tags"]?.Deserialize<IDictionary<string, string>>();
 
             client?.Init();
         }
-
-        public void AppBeforeStart()
-        {
-            Logger.Info("[ApiTrace.ElasticSearchCollector]初始化成功");
-        }
-
-        public void AppBeforeStop()
-        {
-
-        }
+        
 
         public object TraceStart(RpcContextData rpcData)
         {

+ 0 - 10
dotnet/Library/Sers/Sers.Core/Sers.Core/Module/ApiTrace/Collector/IApiTraceCollector.cs

@@ -11,20 +11,10 @@ namespace Sers.Core.Module.ApiTrace.Collector
     {
         void Init(JObject config);
 
-        void AppBeforeStart();
-
-        void AppBeforeStop();
-
-
-
-
  
         object TraceStart(RpcContextData rpcData);
 
  
         void TraceEnd(object traceData, RpcContextData rpcData, ApiMessage apiRequestMessage, Func<ApiMessage> GetApiReplyMessage);
-
-
-
     }
 }

+ 1 - 11
dotnet/Library/Sers/Sers.Core/Sers.Core/Module/ApiTrace/Collector/SplunkCollector.cs

@@ -52,7 +52,7 @@ namespace Sers.Core.Module.ApiTrace.Collector
 
         public void Init(JObject arg)
         {
-            Logger.Info("[ApiTrace.SplunkCollector]初始化中");
+            Logger.Info("[ApiTrace.SplunkCollector] init ...");
             client = arg["server"].Deserialize<SplunkClient>();
 
             hostInfo = arg?["hostInfo"]?.Deserialize<SplunkRecord>();
@@ -62,16 +62,6 @@ namespace Sers.Core.Module.ApiTrace.Collector
             client?.Init();
         }
 
-        public void AppBeforeStart()
-        {
-            Logger.Info("[ApiTrace.SplunkCollector]初始化成功");
-        }
-
-        public void AppBeforeStop()
-        {
-
-        }
-
         public object TraceStart(RpcContextData rpcData)
         {
             return DateTime.Now;

+ 1 - 11
dotnet/Library/Sers/Sers.Core/Sers.Core/Module/ApiTrace/Collector/TxtCollector.cs

@@ -16,21 +16,11 @@ namespace Sers.Core.Module.ApiTrace.Collector
         IDictionary<string, string> tagsTemplate;
         public void Init(JObject arg)
         {
-            Logger.Info("[ApiTrace.TxtCollector]初始化中");
+            Logger.Info("[ApiTrace.TxtCollector] init ...");
 
             tagsTemplate = arg?["tags"]?.Deserialize<IDictionary<string, string>>();
         }
 
-        public void AppBeforeStart()
-        {
-            Logger.Info("[ApiTrace.TxtCollector]初始化成功");
-        }
-
-        public void AppBeforeStop()
-        {
-
-        }
-
         Vit.Core.Module.Log.LogCollector.TxtCollector logCollector = new Vit.Core.Module.Log.LogCollector.TxtCollector();
 
         public object TraceStart(RpcContextData rpcData)

+ 12 - 11
dotnet/Library/Vit/Vit.Core/Vit.Core/Module/Log/LogCollector/ElasticSearch/Client/ElasticSearchClient.cs

@@ -85,6 +85,7 @@ namespace Vit.Core.Module.Log.LogCollector.ElasticSearch.Client
         {
             if (intervalMs.HasValue && intervalMs.Value > 0)
             {
+                StringBuilder buffer = new StringBuilder();
                 recordList = new ConcurrentBag<ElasticSearchRecord>();
                 recordList_Swap = new ConcurrentBag<ElasticSearchRecord>();
                 time = new Util.Threading.Timer.SersTimer_SingleThread();
@@ -94,7 +95,8 @@ namespace Vit.Core.Module.Log.LogCollector.ElasticSearch.Client
                     (recordList_Swap, recordList) = (recordList, recordList_Swap);
                     if (recordList_Swap.Count > 0)
                     {
-                        SendToServer(recordList_Swap);
+                        lock(buffer)
+                             SendToServer(recordList_Swap, buffer);
                         while (recordList_Swap.TryTake(out _)) ;
                     }
                 };
@@ -106,28 +108,27 @@ namespace Vit.Core.Module.Log.LogCollector.ElasticSearch.Client
 
 
         private System.Net.Http.HttpClient httpClient = null;
-        private StringBuilder buffer = new StringBuilder();
 
         [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
-        private void SendToServer(IEnumerable<ElasticSearchRecord> records)
+        private void SendToServer(IEnumerable<ElasticSearchRecord> records, StringBuilder buffer = null)
         {
             var request = new HttpRequestMessage(HttpMethod.Post, bulkUrl);
-            lock (buffer)
+
+            if (buffer == null) buffer = new StringBuilder();
+            foreach (var record in records)
             {
-                buffer.Clear();
-                foreach (var record in records)
-                {
-                    buffer.AppendLine("{\"create\":{}}").AppendLine(record.Serialize());
-                }
-                request.Content = new StringContent(buffer.ToString(), Vit.Core.Module.Serialization.Serialization_Newtonsoft.defaultEncoding, "application/json");
-                buffer.Clear();
+                buffer.AppendLine("{\"create\":{}}").AppendLine(record.Serialize());
             }
+            request.Content = new StringContent(buffer.ToString(), Vit.Core.Module.Serialization.Serialization_Newtonsoft.defaultEncoding, "application/json");
+            buffer.Clear();
+
             // TODO:    retry when fail. 
             //          batch:  batchIntervalInSeconds, batchSizeLimit, queueLimit
             httpClient.SendAsync(request);
 
 
             //var response = httpClient.SendAsync(request).Result;
+            //var body = response.Content.ReadAsStringAsync().Result;
         }
     }
 }

+ 1 - 1
dotnet/Library/Vit/Vit.Core/Vit.Core/Module/Log/LogCollector/ElasticSearch/ElasticSearchCollector.cs

@@ -17,7 +17,7 @@ namespace Vit.Core.Module.Log.LogCollector.ElasticSearch
 
             this.config = config;
 
-            client = config["client"]?.Deserialize<ElasticSearchClient>();
+            client = config["server"]?.Deserialize<ElasticSearchClient>();
             appInfo = config["appInfo"]?.Deserialize<object>();
             client?.Init();
         }

+ 1 - 0
dotnet/Library/Vit/Vit.Core/Vit.Core/Module/Log/LogCollector/Splunk/Client/SplunkClient.cs

@@ -124,6 +124,7 @@ namespace Vit.Core.Module.Log.LogCollector.Splunk.Client
 
             //var strMsg = record.Serialize();
             //var response = httpClient.SendAsync(request).Result;
+            //var body = response.Content.ReadAsStringAsync().Result;
         }
     }
 }

+ 1 - 1
dotnet/Library/Vit/Vit.Core/Vit.Core/Module/Log/LogCollector/Vit.Logger.appsettings.json

@@ -47,7 +47,7 @@
           /* 在此Assembly中加载类 */
           "assemblyFile": "Vit.Core.dll",
           /* 动态加载的类名,必须继承接口 Vit.Core.Module.Log.LogCollector.ILogCollector */
-          "className": "Vit.Core.Module.Log.LogCollector.ElasticSearch.ElasticSearchCollector",
+          //"className": "Vit.Core.Module.Log.LogCollector.ElasticSearch.ElasticSearchCollector",
 
           "server": {
             // es address, example:"http://192.168.20.20:9200"

+ 2 - 2
dotnet/ServiceCenter/App.ServiceCenter/appsettings.json

@@ -511,7 +511,7 @@
             // es address, example:"http://192.168.20.20:9200"
             "url": "http://192.168.20.20:9200",
             //es index, example:"dev"
-            "index": "dev_apiTrace",
+            "index": "dev_apitrace",
             //es type, example:"_doc"
             //"type": "_doc",
             //若指定则在指定时间间隔统一推送数据,若不指定则立即推送。单位:ms
@@ -758,7 +758,7 @@
           /* 在此Assembly中加载类 */
           "assemblyFile": "Vit.Core.dll",
           /* 动态加载的类名,必须继承接口 Vit.Core.Module.Log.LogCollector.ILogCollector */
-          "className": "Vit.Core.Module.Log.LogCollector.ElasticSearch.ElasticSearchCollector",
+          //"className": "Vit.Core.Module.Log.LogCollector.ElasticSearch.ElasticSearchCollector",
 
           "server": {
             // es address, example:"http://192.168.20.20:9200"

+ 18 - 9
dotnet/ServiceCenter/Sers.ServiceCenter/Sers.ApiTrace.Collector.Zipkin/ZipKinCollector.cs

@@ -16,17 +16,19 @@ using zipkin4net.Transport.Http;
 
 namespace Sers.ApiTrace.Collector.Zipkin
 {
-    public class ZipKinCollector : IApiTraceCollector
+    public class ZipKinCollector : IApiTraceCollector,IDisposable
     {
-        public void Init(JObject arg)
+        ~ZipKinCollector() 
         {
-            config = arg.Deserialize<Config>();
-            if (string.IsNullOrEmpty(config.rpcName)) config.rpcName = "ServiceCenter";
-            Logger.Info("[ApiTrace.ZipKinCollector]加载中", config);
+            Dispose();
         }
 
-        public void AppBeforeStart()
+        public void Init(JObject arg)
         {
+            config = arg.Deserialize<Config>();
+            if (string.IsNullOrEmpty(config.rpcName)) config.rpcName = "ServiceCenter";
+            Logger.Info("[ApiTrace.ZipKinCollector] init ...", config);
+ 
             if (config == null) return;
             #region (x.1)注册和启动 Zipkin
             if (config.SamplingRate <= 0) config.SamplingRate = 1;
@@ -41,12 +43,19 @@ namespace Sers.ApiTrace.Collector.Zipkin
             TraceManager.Start(new MyLogger());
             #endregion
 
-            Logger.Info("[ApiTrace.ZipKinCollector]加载成功");
+            Logger.Info("[ApiTrace.ZipKinCollector] init success.");
         }
 
-        public void AppBeforeStop()
+        public void Dispose()
         {
-            TraceManager.Stop();
+            try
+            {
+                TraceManager.Stop();
+            }
+            catch (Exception ex)
+            {
+                Logger.Error("[ApiTrace.ZipKinCollector] Dispose", ex);
+            }
         }
 
 

+ 2 - 2
dotnet/ServiceStation/Demo/SersLoader/Did.SersLoader.Demo/appsettings.json

@@ -444,7 +444,7 @@
             // es address, example:"http://192.168.20.20:9200"
             "url": "http://192.168.20.20:9200",
             //es index, example:"dev"
-            "index": "dev_apiTrace",
+            "index": "dev_apitrace",
             //es type, example:"_doc"
             //"type": "_doc",
             //若指定则在指定时间间隔统一推送数据,若不指定则立即推送。单位:ms
@@ -550,7 +550,7 @@
           /* 在此Assembly中加载类 */
           "assemblyFile": "Vit.Core.dll",
           /* 动态加载的类名,必须继承接口 Vit.Core.Module.Log.LogCollector.ILogCollector */
-          "className": "Vit.Core.Module.Log.LogCollector.ElasticSearch.ElasticSearchCollector",
+          //"className": "Vit.Core.Module.Log.LogCollector.ElasticSearch.ElasticSearchCollector",
 
           "server": {
             // es address, example:"http://192.168.20.20:9200"

+ 2 - 2
dotnet/ServiceStation/Demo/Serslot/Did.Serslot.Demo/appsettings.json

@@ -322,7 +322,7 @@
             // es address, example:"http://192.168.20.20:9200"
             "url": "http://192.168.20.20:9200",
             //es index, example:"dev"
-            "index": "dev_apiTrace",
+            "index": "dev_apitrace",
             //es type, example:"_doc"
             //"type": "_doc",
             //若指定则在指定时间间隔统一推送数据,若不指定则立即推送。单位:ms
@@ -403,7 +403,7 @@
           /* 在此Assembly中加载类 */
           "assemblyFile": "Vit.Core.dll",
           /* 动态加载的类名,必须继承接口 Vit.Core.Module.Log.LogCollector.ILogCollector */
-          "className": "Vit.Core.Module.Log.LogCollector.ElasticSearch.ElasticSearchCollector",
+          //"className": "Vit.Core.Module.Log.LogCollector.ElasticSearch.ElasticSearchCollector",
 
           "server": {
             // es address, example:"http://192.168.20.20:9200"