当前位置: 首页 > news >正文

公维金如何上传建设局网站网站开发常见技术问题

公维金如何上传建设局网站,网站开发常见技术问题,医院内网网站建设,怎么把qq空间做成企业网站本文主要讲解使用ZipKin构建NetCore分布式链路跟踪场景因为最近公司业务量增加#xff0c;而项目也需要增大部署数量#xff0c;K8S中Pod基本都扩容了一倍#xff0c;新增了若干物理机#xff0c;部分物理机网络通信存在问题#xff0c;导致部分请求打入有问题的物理机时总… 本文主要讲解使用ZipKin构建NetCore分布式链路跟踪场景因为最近公司业务量增加而项目也需要增大部署数量K8S中Pod基本都扩容了一倍新增了若干物理机部分物理机网络通信存在问题导致部分请求打入有问题的物理机时总会出现超时的情况由于之前系统中没有使用链路跟踪导致排查问题比较慢所以就去研究了市面上的链路框架结果发现了ZipKin这款比较轻量级的链路跟踪框架。实例代码本文日志系统采用Exceplesstion示例代码请求链路为SimpleZipkin(网关服务)---WebApi(Api服务)---OrderApi(订单服务)首先创建公用类库引用以下包(本文以1.5.0版本为例)如果部署Zipkin使用的是Mysql作为存储切记Mysql版本不要高于8.0,Zipkin暂不支持8.0的版本zipkin4net zipkin4net.middleware.aspnetcore创建ZipKin帮助类public static class ZipKinExtensions{public static IServiceCollection AddZipKin(this IServiceCollection services){return services.AddSingletonHttpDiagnosticSourceObserver ();}public static IApplicationBuilder UseZipKin(this IApplicationBuilder app, IHostApplicationLifetime lifetime, ILoggerFactory loggerFactory, string serviceName, string zipKinUrl){DiagnosticListener.AllListeners.Subscribe(app?.ApplicationServices?.GetServiceTraceObserver());lifetime.ApplicationStarted.Register(() {TraceManager.SamplingRate 1.0f;//记录数据密度1.0代表全部记录var logger new TracingLogger(loggerFactory, zipkin4net);var httpSender new HttpZipkinSender(zipKinUrl, application/json);var tracer new ZipkinTracer(httpSender, new JSONSpanSerializer(), new Statistics());var consoleTracer new zipkin4net.Tracers.ConsoleTracer();TraceManager.RegisterTracer(tracer);TraceManager.RegisterTracer(consoleTracer);TraceManager.Start(logger);});lifetime.ApplicationStopped.Register(() TraceManager.Stop());app.UseTracing(serviceName);//这边的名字可自定义return app;}}Exceptionless帮助类/// summary/// 日志扩展类/// /summarypublic static class LogHelper{/// summary/// 记录Info日志/// /summary/// param namelogger/param/// param namemessage/parampublic static void InformationToException(this ILogger logger, string message){var tranceId Trace.Current?.CurrentSpan.TraceId.ToString(x16);logger.LogInformation($tranceId{tranceId}日志主体为{message});}/// summary/// 记录Debug日志/// /summary/// param namelogger/param/// param namemessage/parampublic static void DebugToException(this ILogger logger, string message){var tranceId Trace.Current?.CurrentSpan.TraceId.ToString(x16);logger.LogDebug($tranceId{tranceId}日志主体为{message});}/// summary/// 记录错误日志/// /summary/// param namelogger/param/// param namemessage/parampublic static void ErrorToException(this ILogger logger, string message){var tranceId Trace.Current?.CurrentSpan.TraceId.ToString(x16);logger.LogError($tranceId{tranceId}日志主体为{message});}/// summary/// 记录追踪日志/// /summary/// param namelogger/param/// param namemessage/parampublic static void TraceToException(this ILogger logger, string message){var tranceId Trace.Current?.CurrentSpan.TraceId.ToString(x16);logger.LogTrace($tranceId{tranceId}日志主体为{message});}/// summary/// 记录警告日志/// /summary/// param namelogger/param/// param namemessage/parampublic static void WarningToException(this ILogger logger, string message){var tranceId Trace.Current?.CurrentSpan.TraceId.ToString(x16);logger.LogWarning($tranceId{tranceId}日志主体为{message});}}接下来创建SimpleZipkin、WebApi、OrderApi等项目(因为结构一致所以本文只创建一个)首先引用Exceplesstionpublic class Program{public static void Main(string[] args){CreateHostBuilder(args).Build().Run();}public static IHostBuilder CreateHostBuilder(string[] args) Host.CreateDefaultBuilder(args).ConfigureLogging((hostContext, configLogging) {configLogging.AddConfiguration(hostContext.Configuration.GetSection(Logging));configLogging.AddConsole();configLogging.AddDebug();configLogging.AddExceptionless();ExceptionlessClient.Default.Configuration.SetDefaultMinLogLevel(Exceptionless.Logging.LogLevel.Debug);configLogging.SetMinimumLevel(LogLevel.Debug); }).ConfigureWebHostDefaults(webBuilder {webBuilder.UseStartupStartup();});}接下来在Startup中引入ZipKinpublic void ConfigureServices(IServiceCollection services){// 注入Rpc//AppContext.SetSwitch(System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport, true);//services.AddGrpcClientHelloServer.HelloServerClient((p, o) //{// o.Address new Uri(http://127.0.0.1:3848);//});//.AddHttpMessageHandler(provider TracingHandler.WithoutInnerHandler(RpcService));services.AddControllers();services.AddZipKin();services.AddSingletonIDiagnosticSource, HttpDiagnosticSourceDemo();services.AddHttpClient(webApi, client { client.BaseAddress new Uri($http://localhost:5001); });services.AddSwaggerGen(c {c.SwaggerDoc(v1, new OpenApiInfo { Title SimpleZipKin, Version v1 });});}public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory,IHostApplicationLifetime lifetime){if (env.IsDevelopment()){app.UseDeveloperExceptionPage();app.UseSwagger();app.UseSwaggerUI(c c.SwaggerEndpoint(/swagger/v1/swagger.json, SimpleZipkin v1));}Configuration.GetSection(ExceptionLess).Bind(ExceptionlessClient.Default.Configuration);ExceptionlessClient.Default.Configuration.SetDefaultMinLogLevel(Exceptionless.Logging.LogLevel.Debug);app.UseZipKin(lifetime, loggerFactory, SimpleZip, http://127.0.0.1:9411);//SimpleZip修改为对应的应用名称127.0.0.1地址切换为自己的zipkin地址 app.UseRouting();app.UseAuthorization();app.UseEndpoints(endpoints { endpoints.MapControllers(); });}接下来创建对应的Controller[Route(/api/Home)]public class HomeController : Controller{private readonly IHttpClientFactory _httpClientFactory;private readonly ILogger _logger;/// summary/// 构造函数/// /summary/// param namehttpClientFactory/param/// param namelogger/parampublic HomeController(IHttpClientFactory httpClientFactory, ILoggerHomeController logger){_httpClientFactory httpClientFactory;//_helloServerClient helloServerClient;_logger logger;}[HttpGet(GetZipKin)]public async Taskstring GetZipKin(){_logger.InformationToException($这里是SimpleZipKinApi);var httpClient _httpClientFactory.CreateClient(webApi);var httpResult await httpClient.GetAsync($api/order/getorder);var result await httpResult.Content.ReadAsStringAsync();return result;} }最后在appsettings.json中加入对应的Exceplesstionless配置ExceptionLess: {ApiKey: ****************************,ServerUrl: http://127.0.0.1:5000}OrderApi、WebApi如法炮制修改对应的请求链路信息接下来我们使用DiagnosticAdapter做链路记载在公共类库中创建HttpDiagnosticListener类DiagnosticSource是Runtime层提供应用层可以通过它与系统集成、事件日志、以及性能计数器进行交互。DiagnosticSource官方介绍https://docs.microsoft.com/zh-cn/dotnet/api/system.diagnostics.diagnosticsource?viewnet-5.0关于DiagnosticSource设计参考原有yi念之间大佬的文章https://www.cnblogs.com/wucy/p/13532534.htmlpublic class HttpDiagnosticSourceDemo : IDiagnosticSourceDemo{public string DiagnosticName HttpDiagnosticSourceDemo;private ClientTrace _clientTrace;private readonly IInjectorHttpHeaders _injector Propagations.B3String.InjectorHttpHeaders((carrier, key, value) carrier.Add(key, value));[DiagnosticName(System.Net.Http.Request)]public void HttpRequest(HttpRequestMessage request){_clientTrace new ClientTrace(simpleZipKin, request.Method.Method);if (_clientTrace.Trace ! null){_injector.Inject(_clientTrace.Trace.CurrentSpan, request.Headers);}}[DiagnosticName(System.Net.Http.Response)]public void HttpResponse(HttpResponseMessage response){if (_clientTrace.Trace ! null){_clientTrace.AddAnnotation(Annotations.Tag(zipkinCoreConstants.HTTP_PATH, response.RequestMessage.RequestUri.LocalPath));_clientTrace.AddAnnotation(Annotations.Tag(zipkinCoreConstants.HTTP_METHOD, response.RequestMessage.Method.Method));_clientTrace.AddAnnotation(Annotations.Tag(zipkinCoreConstants.HTTP_HOST, response.RequestMessage.RequestUri.Host));if (!response.IsSuccessStatusCode){_clientTrace.AddAnnotation(Annotations.Tag(zipkinCoreConstants.HTTP_STATUS_CODE, ((int)response.StatusCode).ToString()));}}}[DiagnosticName(System.Net.Http.Exception)]public void HttpException(HttpRequestMessage request, Exception exception){}}IDiagnosticSourceDemo接口信息如下public interface IDiagnosticSourceDemo{string DiagnosticName { get; }}HttpDiagnosticSourceObserver方法如下public class HttpDiagnosticSourceObserver : IObserverDiagnosticListener{private IEnumerableIDiagnosticSourceDemo _diagnosticSourceDemo;public HttpDiagnosticSourceObserver (IEnumerableIDiagnosticSourceDemo diagnosticSourceDemo){_diagnosticSourceDemo diagnosticSourceDemo;}public void OnCompleted(){}public void OnError(Exception error){}public void OnNext(DiagnosticListener listener){var diagnosticSource _diagnosticSourceDemo.FirstOrDefault(i i.DiagnosticName listener.Name);if (traceDiagnostic ! null){//适配订阅listener.SubscribeWithAdapter(diagnosticSource);}}}最终运行结果如下Zipkin为Exceplesstion日志记录信息为通过Exceptionless记录的环境信息也能将对应的机器定位参考本文引用文章连接如下DiagnosticSource官方介绍https://docs.microsoft.com/zh-cn/dotnet/api/system.diagnostics.diagnosticsource?viewnet-5.0DiagnosticSource参考连接https://www.cnblogs.com/wucy/p/13532534.html                   https://sudonull.com/post/3671-Using-the-DiagnosticSource-in-NET-Core-Theory                   https://andrewlock.net/logging-using-diagnosticsource-in-asp-net-core/docker部署Zipkinhttps://www.cnblogs.com/binz/p/12658020.htmldocekr部署exceptionlesshttps://www.cnblogs.com/edisonchou/p/exceptionless_v5_deployment_introduction.html
http://www.zqtcl.cn/news/410907/

相关文章:

  • 购物网站建设资讯原创文章代写
  • 门票预订网站建设wordpress siren主题
  • 单位建设网站装修公司需要什么资质
  • 做做做网站做网站赚外快
  • 网站备案后应该做什么网站流量监测
  • 开发网站用什么语言做名片的网站叫什么来着
  • 织梦做网站好不好iis中的网站启动不了
  • 临汾住房与城乡建设厅网站迎访问中国建设银行网站_
  • 织梦做的网站首页幻灯片怎么不能显示北大青鸟网站建设课程
  • 做淘客的网站有哪些延安市住建建设网站
  • 南京林业大学实验与建设网站现在都用什么软件搜索附近的人
  • 建站系统wordpress下载亚马逊雨林十大恐怖生物
  • 凡科网做网站怎么样专业团队电影
  • 有什么有趣的网站移动网站排名怎么做
  • 深圳网站建设专家wordpress 4.5下载地址
  • 网站建设公司公司我我提供一个平台wordpress如何去版权信息
  • seo怎么给网站做外链受欢迎的网站建设教程
  • 网站建设使用多语言河南电商网站设计
  • 网站搭建有免费的吗网站地图生成代码
  • 建设公司网站要注意什么投资小利润高的小生意
  • 网站建设需要做哪些工作做胃镜需那好天津津门网站A
  • 做网站申请域名的流程辽宁省工程造价网
  • 网站系统维护一般多长时间金华高端网站设计
  • 做网站公司销售开场白企业网站规划与开发
  • 兰州新区建站不锈钢网站建设
  • 淘宝小网站怎么做的电商网站有哪些
  • 哪些网站可以做画赚钱wordpress go跳转页
  • 怎么做新网站上线通稿深圳罗湖区网站建设公司
  • php 企业网站做网站可以赚钱吗
  • 局域网视频网站建设点播系统长沙3合1网站建设价格