星尘监控用法标准化
This commit is contained in:
parent
76f9e4faeb
commit
e91e814459
|
@ -1,8 +1,4 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Net.Http;
|
||||
using System.Text;
|
||||
using System.Net.Http;
|
||||
using NewLife.Log;
|
||||
using Stardust.Monitors;
|
||||
using Xunit;
|
||||
|
|
|
@ -31,7 +31,7 @@ namespace StarAgent
|
|||
/// <summary>信息</summary>
|
||||
/// <returns></returns>
|
||||
[Api(nameof(Info))]
|
||||
public AgentInfo Info()
|
||||
public AgentInfo Info(AgentInfo info)
|
||||
{
|
||||
var p = Process.GetCurrentProcess();
|
||||
var asmx = AssemblyX.Entry;
|
||||
|
@ -44,6 +44,7 @@ namespace StarAgent
|
|||
{
|
||||
Version = asmx?.Version,
|
||||
ProcessId = p.Id,
|
||||
ProcessName = p.ProcessName,
|
||||
FileName = fileName,
|
||||
Arguments = args,
|
||||
Server = set.Server,
|
||||
|
|
|
@ -10,11 +10,9 @@ using Microsoft.Extensions.Hosting;
|
|||
using NewLife;
|
||||
using NewLife.Cube.WebMiddleware;
|
||||
using NewLife.Log;
|
||||
using NewLife.Remoting;
|
||||
using Stardust.Monitors;
|
||||
using Stardust.Server.Common;
|
||||
using Stardust.Server.Services;
|
||||
using XCode.DataAccessLayer;
|
||||
|
||||
namespace Stardust.Server
|
||||
{
|
||||
|
@ -28,18 +26,8 @@ namespace Stardust.Server
|
|||
{
|
||||
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
|
||||
|
||||
var set = Stardust.Setting.Current;
|
||||
if (!set.Server.IsNullOrEmpty())
|
||||
{
|
||||
// APM跟踪器
|
||||
var tracer = new StarTracer(set.Server) { Log = XTrace.Log };
|
||||
DefaultTracer.Instance = tracer;
|
||||
ApiHelper.Tracer = tracer;
|
||||
DAL.GlobalTracer = tracer;
|
||||
TracerMiddleware.Tracer = tracer;
|
||||
|
||||
services.AddSingleton<ITracer>(tracer);
|
||||
}
|
||||
var tracer = StarTracer.Register();
|
||||
services.AddSingleton<ITracer>(tracer);
|
||||
|
||||
var set2 = Stardust.Server.Setting.Current;
|
||||
|
||||
|
|
|
@ -23,18 +23,8 @@ namespace Stardust.Web
|
|||
|
||||
public void ConfigureServices(IServiceCollection services)
|
||||
{
|
||||
var set = Stardust.Setting.Current;
|
||||
if (!set.Server.IsNullOrEmpty())
|
||||
{
|
||||
// APM跟踪器
|
||||
var tracer = new StarTracer(set.Server) { Log = XTrace.Log };
|
||||
DefaultTracer.Instance = tracer;
|
||||
ApiHelper.Tracer = tracer;
|
||||
DAL.GlobalTracer = tracer;
|
||||
TracerMiddleware.Tracer = tracer;
|
||||
|
||||
services.AddSingleton<ITracer>(tracer);
|
||||
}
|
||||
var tracer = StarTracer.Register();
|
||||
services.AddSingleton<ITracer>(tracer);
|
||||
|
||||
// 统计
|
||||
var appService = new AppDayStatService();
|
||||
|
|
|
@ -17,7 +17,7 @@ namespace Stardust.DingTalk
|
|||
/// <summary>服务地址</summary>
|
||||
public String Url { get; set; } = "https://oapi.dingtalk.com/robot/send?access_token={access_token}";
|
||||
|
||||
/// <summary>性能跟踪</summary>
|
||||
/// <summary>性能追踪</summary>
|
||||
public ITracer Tracer { get; set; } = DefaultTracer.Instance;
|
||||
|
||||
private HttpClient _Client;
|
||||
|
|
|
@ -9,6 +9,7 @@ using NewLife;
|
|||
using NewLife.Http;
|
||||
using NewLife.Log;
|
||||
using NewLife.Net;
|
||||
using NewLife.Reflection;
|
||||
using NewLife.Remoting;
|
||||
using Stardust.Models;
|
||||
|
||||
|
@ -21,10 +22,31 @@ namespace Stardust
|
|||
/// <summary>代理信息</summary>
|
||||
public AgentInfo Info { get; private set; }
|
||||
|
||||
private AgentInfo _local;
|
||||
private ApiClient _client;
|
||||
#endregion
|
||||
|
||||
#region 构造
|
||||
/// <summary>实例化</summary>
|
||||
public LocalStarClient()
|
||||
{
|
||||
var p = Process.GetCurrentProcess();
|
||||
var asmx = AssemblyX.Entry;
|
||||
var fileName = p.MainModule.FileName;
|
||||
var args = Environment.CommandLine.TrimStart(Path.ChangeExtension(fileName, ".dll")).Trim();
|
||||
|
||||
var set = Stardust.Setting.Current;
|
||||
|
||||
_local = new AgentInfo
|
||||
{
|
||||
Version = asmx?.Version,
|
||||
ProcessId = p.Id,
|
||||
ProcessName = p.ProcessName,
|
||||
FileName = fileName,
|
||||
Arguments = args,
|
||||
Server = set.Server,
|
||||
};
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 方法
|
||||
|
@ -48,7 +70,7 @@ namespace Stardust
|
|||
{
|
||||
Init();
|
||||
|
||||
return Info = _client.Invoke<AgentInfo>("Info");
|
||||
return Info = _client.Invoke<AgentInfo>("Info", _local);
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
|
|
@ -8,6 +8,9 @@ namespace Stardust.Models
|
|||
/// <summary>进程标识</summary>
|
||||
public Int32 ProcessId { get; set; }
|
||||
|
||||
/// <summary>进程名称</summary>
|
||||
public String ProcessName { get; set; }
|
||||
|
||||
/// <summary>版本</summary>
|
||||
public String Version { get; set; }
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ namespace Stardust.Monitors
|
|||
/// <summary>诊断监听器的观察者</summary>
|
||||
public class DiagnosticListenerObserver : IObserver<DiagnosticListener>
|
||||
{
|
||||
/// <summary>跟踪器</summary>
|
||||
/// <summary>追踪器</summary>
|
||||
public ITracer Tracer { get; set; }
|
||||
|
||||
private readonly Dictionary<String, TraceDiagnosticListener> _listeners = new Dictionary<String, TraceDiagnosticListener>();
|
||||
|
@ -69,7 +69,7 @@ namespace Stardust.Monitors
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>跟踪诊断监听器</summary>
|
||||
/// <summary>追踪诊断监听器</summary>
|
||||
public class TraceDiagnosticListener : IObserver<KeyValuePair<String, Object>>
|
||||
{
|
||||
#region 属性
|
||||
|
@ -85,7 +85,7 @@ namespace Stardust.Monitors
|
|||
/// <summary>异常名称</summary>
|
||||
public String ErrorName { get; set; }
|
||||
|
||||
/// <summary>跟踪器</summary>
|
||||
/// <summary>追踪器</summary>
|
||||
public ITracer Tracer { get; set; }
|
||||
#endregion
|
||||
|
||||
|
|
|
@ -13,21 +13,12 @@ namespace Stardust.Monitors
|
|||
public class HttpDiagnosticListener : TraceDiagnosticListener
|
||||
{
|
||||
/// <summary>实例化</summary>
|
||||
public HttpDiagnosticListener()
|
||||
{
|
||||
Name = "HttpHandlerDiagnosticListener";
|
||||
}
|
||||
public HttpDiagnosticListener() => Name = "HttpHandlerDiagnosticListener";
|
||||
|
||||
/// <summary>下一步</summary>
|
||||
/// <param name="value"></param>
|
||||
public override void OnNext(KeyValuePair<String, Object> value)
|
||||
{
|
||||
//base.OnNext(value);
|
||||
|
||||
#if DEBUG
|
||||
XTrace.WriteLine(value.Key);
|
||||
#endif
|
||||
|
||||
switch (value.Key)
|
||||
{
|
||||
case "System.Net.Http.HttpRequestOut.Start":
|
||||
|
|
|
@ -12,7 +12,7 @@ using Stardust.Models;
|
|||
|
||||
namespace Stardust.Monitors
|
||||
{
|
||||
/// <summary>星尘性能跟踪器,跟踪数据提交到星尘平台</summary>
|
||||
/// <summary>星尘性能追踪器,追踪数据提交到星尘平台</summary>
|
||||
/// <remarks>其它项目有可能直接使用这个类代码,用于提交监控数据</remarks>
|
||||
public class StarTracer : DefaultTracer
|
||||
{
|
||||
|
@ -70,7 +70,7 @@ namespace Stardust.Monitors
|
|||
catch { }
|
||||
}
|
||||
|
||||
/// <summary>指定服务端地址来实例化跟踪器</summary>
|
||||
/// <summary>指定服务端地址来实例化追踪器</summary>
|
||||
/// <param name="server"></param>
|
||||
public StarTracer(String server) : this()
|
||||
{
|
||||
|
@ -236,17 +236,51 @@ namespace Stardust.Monitors
|
|||
#endregion
|
||||
|
||||
#region 全局注册
|
||||
/// <summary>全局注册星尘性能跟踪器</summary>
|
||||
/// <param name="server">星尘监控中心地址</param>
|
||||
/// <summary>全局注册星尘性能追踪器</summary>
|
||||
/// <param name="server">星尘监控中心地址,为空时自动从本地探测</param>
|
||||
/// <returns></returns>
|
||||
public static StarTracer Register(String server)
|
||||
public static StarTracer Register(String server = null)
|
||||
{
|
||||
if (server.IsNullOrEmpty())
|
||||
{
|
||||
var set = Setting.Current;
|
||||
server = set.Server;
|
||||
}
|
||||
if (server.IsNullOrEmpty())
|
||||
{
|
||||
var local = new LocalStarClient();
|
||||
var inf = local.GetInfo();
|
||||
server = inf?.Server;
|
||||
|
||||
if (!server.IsNullOrEmpty()) XTrace.WriteLine("星尘探测:{0}", server);
|
||||
}
|
||||
if (server.IsNullOrEmpty()) return null;
|
||||
|
||||
if (Instance is StarTracer tracer && tracer.Client is ApiHttpClient) return tracer;
|
||||
|
||||
tracer = new StarTracer(server) { Log = XTrace.Log };
|
||||
DefaultTracer.Instance = tracer;
|
||||
ApiHelper.Tracer = tracer;
|
||||
|
||||
#if NET50
|
||||
// 订阅Http事件
|
||||
var observer = new DiagnosticListenerObserver { Tracer = tracer };
|
||||
observer.Subscribe(new HttpDiagnosticListener());
|
||||
#endif
|
||||
|
||||
// 反射处理XCode追踪
|
||||
{
|
||||
var type = "XCode.DataAccessLayer.DAL".GetTypeEx(false);
|
||||
var pi = type?.GetPropertyEx("GlobalTracer");
|
||||
if (pi != null && pi.PropertyType == typeof(ITracer)) pi.SetValue(null, tracer);
|
||||
}
|
||||
|
||||
// 反射处理Cube追踪
|
||||
{
|
||||
var type = "NewLife.Cube.WebMiddleware.TracerMiddleware".GetTypeEx(false);
|
||||
var pi = type?.GetPropertyEx("Tracer");
|
||||
if (pi != null && pi.PropertyType == typeof(ITracer)) pi.SetValue(null, tracer);
|
||||
}
|
||||
|
||||
return tracer;
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@ using Stardust.Models;
|
|||
|
||||
namespace Stardust.Monitors
|
||||
{
|
||||
/// <summary>跟踪请求模型</summary>
|
||||
/// <summary>追踪请求模型</summary>
|
||||
public class TraceModel
|
||||
{
|
||||
/// <summary>应用标识</summary>
|
||||
|
@ -22,11 +22,11 @@ namespace Stardust.Monitors
|
|||
/// <summary>应用信息</summary>
|
||||
public AppInfo Info { get; set; }
|
||||
|
||||
/// <summary>跟踪数据</summary>
|
||||
/// <summary>追踪数据</summary>
|
||||
public ISpanBuilder[] Builders { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>跟踪响应模型</summary>
|
||||
/// <summary>追踪响应模型</summary>
|
||||
public class TraceResponse
|
||||
{
|
||||
/// <summary>采样周期。默认15s</summary>
|
||||
|
|
|
@ -12,13 +12,13 @@ using System.Windows.Forms;
|
|||
|
||||
namespace Stardust.Services
|
||||
{
|
||||
/// <summary>跟踪服务</summary>
|
||||
/// <summary>追踪服务</summary>
|
||||
public class TraceService
|
||||
{
|
||||
/// <summary>消息服务</summary>
|
||||
public IQueueService<CommandModel> Queue { get; set; }
|
||||
|
||||
/// <summary>跟踪结果回调</summary>
|
||||
/// <summary>追踪结果回调</summary>
|
||||
public Action<Int32, Byte[]> Callback { get; set; }
|
||||
|
||||
private String _clientId;
|
||||
|
|
|
@ -364,7 +364,7 @@ namespace Stardust
|
|||
private async Task<PingResponse> PingAsync(PingInfo inf) => await PostAsync<PingResponse>("Node/Ping", inf);
|
||||
|
||||
private TraceService _trace;
|
||||
/// <summary>使用跟踪服务</summary>
|
||||
/// <summary>使用追踪服务</summary>
|
||||
public void UseTrace()
|
||||
{
|
||||
_trace = new TraceService
|
||||
|
|
|
@ -7,8 +7,8 @@
|
|||
<Description>星尘,分布式服务框架。分布式资源调度,服务自动注册和发现,负载均衡,动态伸缩,故障转移,性能监控。</Description>
|
||||
<Company>新生命开发团队</Company>
|
||||
<Copyright>©2002-2021 NewLife</Copyright>
|
||||
<Version>1.2.2021.0103</Version>
|
||||
<FileVersion>1.2.2021.0103</FileVersion>
|
||||
<Version>1.3.2021.0224-beta1</Version>
|
||||
<FileVersion>1.3.2021.0224</FileVersion>
|
||||
<AssemblyVersion>1.2.*</AssemblyVersion>
|
||||
<Deterministic>false</Deterministic>
|
||||
<OutputPath>..\Bin</OutputPath>
|
||||
|
@ -24,7 +24,7 @@
|
|||
<RepositoryUrl>https://github.com/NewLifeX/Stardust</RepositoryUrl>
|
||||
<RepositoryType>git</RepositoryType>
|
||||
<PackageTags>新生命团队;X组件;NewLife;$(AssemblyName)</PackageTags>
|
||||
<PackageReleaseNotes>支持.NET5.0;增加客户端连接本地代理</PackageReleaseNotes>
|
||||
<PackageReleaseNotes>星尘监控用法标准化</PackageReleaseNotes>
|
||||
<PackageLicenseExpression>MIT</PackageLicenseExpression>
|
||||
<AllowedOutputExtensionsInPackageBuildOutputFolder>$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder>
|
||||
<PublishRepositoryUrl>true</PublishRepositoryUrl>
|
||||
|
|
|
@ -16,7 +16,7 @@ namespace Stardust.WeiXin
|
|||
/// <summary>服务地址</summary>
|
||||
public String Url { get; set; } = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key={key}";
|
||||
|
||||
/// <summary>性能跟踪</summary>
|
||||
/// <summary>性能追踪</summary>
|
||||
public ITracer Tracer { get; set; } = DefaultTracer.Instance;
|
||||
|
||||
private HttpClient _Client;
|
||||
|
|
|
@ -46,11 +46,13 @@ namespace Test
|
|||
|
||||
static void Test2()
|
||||
{
|
||||
var tracer = new StarTracer { Log = XTrace.Log };
|
||||
var http = tracer.CreateHttpClient();
|
||||
http.GetStringAsync("https://x.newlifex.com").Wait();
|
||||
//var tracer = new StarTracer { Log = XTrace.Log };
|
||||
//var http = tracer.CreateHttpClient();
|
||||
//http.GetStringAsync("https://x.newlifex.com").Wait();
|
||||
|
||||
Thread.Sleep(10_000);
|
||||
//Thread.Sleep(10_000);
|
||||
|
||||
var tracer = StarTracer.Register();
|
||||
}
|
||||
|
||||
static void Test3()
|
||||
|
|
Loading…
Reference in New Issue