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

北京网站制作报价网站备案查询工信部官网

北京网站制作报价,网站备案查询工信部官网,平阳住房和城乡规划建设局网站,网站布局和建站的区别🚀 ABP vNext Sentry ELK Stack:打造高可用异常跟踪与日志可视化平台 🎉 📚 目录 🚀 ABP vNext Sentry ELK Stack:打造高可用异常跟踪与日志可视化平台 🎉技术选型系统架构图依赖安装与多环…

🚀 ABP vNext + Sentry + ELK Stack:打造高可用异常跟踪与日志可视化平台 🎉


📚 目录

  • 🚀 ABP vNext + Sentry + ELK Stack:打造高可用异常跟踪与日志可视化平台 🎉
    • 技术选型
    • 系统架构图
    • 依赖安装与多环境配置 🧰
    • 安全日志配置 🔐
      • appsettings.Development.json
      • appsettings.Production.json
      • Elasticsearch 索引模板 📑
    • 程序启动与 DI 注册 ⚙️
    • 日志增强与异常捕获 🛡️
      • 自定义 TenantLogEnricher
      • 全局异常订阅器
    • APM 事务监控示例 🔍
    • HealthChecks 与 UI 🩺
    • 日志生命周期管理 (ILM) 🔄
    • 容器化部署示例 🐳
    • Kubernetes 部署示例 ☸️


技术选型

🛠️ 工具功能适用场景
ABP vNext模块化应用框架多租户、多模块
Serilog.NET 结构化日志库支持多种 Sink
Sentry异常与性能链路监控异常聚合、Trace 分析
Elasticsearch日志索引引擎大规模写入与检索
Kibana日志可视化面板仪表盘和图表展示
HealthChecks UI可视化健康检查服务可用性与探针监控

系统架构图

写日志
写入
上报
捕获
探针
ABP vNext App
Serilog Logging
Elasticsearch Sink
Elasticsearch
Kibana Dashboard
Sentry SDK
Sentry Dashboard
IExceptionSubscriber
HealthChecks UI

依赖安装与多环境配置 🧰

dotnet add package Sentry.AspNetCore
dotnet add package Serilog.Sinks.Elasticsearch
dotnet add package Serilog.Enrichers.Environment
dotnet add package Serilog.Enrichers.Thread
dotnet add package Serilog.Enrichers.CorrelationId
dotnet add package Volo.Abp.Serilog
dotnet add package AspNetCore.HealthChecks.UI
// Program.cs - 配置读取顺序
var builder = WebApplication.CreateBuilder(args);builder.Configuration.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true).AddJsonFile($"appsettings.{builder.Environment.EnvironmentName}.json", optional: true).AddEnvironmentVariables();

安全日志配置 🔐

appsettings.Development.json

{"Sentry": {"Dsn": "${SENTRY_DSN}","TracesSampleRate": 1.0,"Debug": true},"Serilog": {"MinimumLevel": { "Default": "Debug" },"WriteTo": [ { "Name": "Console" } ]}
}

appsettings.Production.json

{"Sentry": {"Dsn": "${SENTRY_DSN}","TracesSampleRate": 0.2,"SendDefaultPii": true,"AttachStacktrace": true,"Debug": false,"DiagnosticsLevel": "Error"},"Serilog": {"Using": [ "Serilog.Sinks.Elasticsearch" ],"MinimumLevel": {"Default": "Information","Override": { "Microsoft": "Warning" }},"WriteTo": [{"Name": "Elasticsearch","Args": {"NodeUris": "http://elasticsearch:9200","AutoRegisterTemplate": true,"AutoRegisterTemplateVersion": "ESv7","IndexFormat": "abp-logs-{0:yyyy.MM.dd}"}}],"Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ]}
}

秘钥注入
.NET 默认支持用环境变量 SENTRY__DSN(双下划线表示冒号)覆盖 Sentry:Dsn

export SENTRY__DSN=https://xxxx@sentry.io/project

Elasticsearch 索引模板 📑

curl -X PUT "localhost:9200/_template/abp-logs-template" -H "Content-Type: application/json" -d '
{"index_patterns": ["abp-logs-*"],"settings": { "number_of_shards": 3 },"mappings": {"properties": {"TenantId":  { "type": "keyword" },"Module":    { "type": "keyword" },"Timestamp": { "type": "date" },"Level":     { "type": "keyword" },"Message":   { "type": "text" }}}
}'

程序启动与 DI 注册 ⚙️

var builder = WebApplication.CreateBuilder(args);// 1. CorrelationId 中间件
builder.Services.AddCorrelationId();// 2. Sentry SDK
builder.Services.AddSentry(o =>
{o.Dsn = builder.Configuration["Sentry:Dsn"];o.TracesSampleRate = 0.2;o.AttachStacktrace = true;o.Debug = false;
});// 3. Serilog 注册
builder.Host.UseSerilog((ctx, lc) =>
{lc.ReadFrom.Configuration(ctx.Configuration).Enrich.WithCorrelationId().Enrich.WithMachineName().Enrich.WithEnvironmentUserName().Enrich.WithProcessId().Enrich.With<TenantLogEnricher>();
});// 4. 全局异常订阅
builder.Services.AddSingleton<IExceptionSubscriber, GlobalExceptionSubscriber>();// 5. HealthChecks + UI
builder.Services.AddHealthChecks().AddSqlServer(builder.Configuration.GetConnectionString("Default"), name: "SQL").AddRedis(builder.Configuration["Redis:Configuration"], name: "Redis").AddHealthChecksUI().AddSqlServerStorage(builder.Configuration.GetConnectionString("HealthChecksUI:Storage"));var app = builder.Build();// 6. 中间件顺序
app.UseCorrelationId();
app.UseSerilogRequestLogging();
app.UseSentryTracing();
app.UseRouting();app.UseEndpoints(endpoints =>
{endpoints.MapHealthChecks("/health", new HealthCheckOptions{ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse});endpoints.MapHealthChecksUI(options => { options.UIPath = "/health-ui"; });endpoints.MapControllers();
});app.Run();

日志增强与异常捕获 🛡️

自定义 TenantLogEnricher

public class TenantLogEnricher : ILogEventEnricher
{public void Enrich(LogEvent logEvent, ILogEventPropertyFactory factory){var tenantId    = CurrentTenant.Id?.ToString() ?? "host";var moduleName  = Assembly.GetEntryAssembly()?.GetName().Name ?? "unknown";logEvent.AddPropertyIfAbsent(factory.CreateProperty("TenantId", tenantId));logEvent.AddPropertyIfAbsent(factory.CreateProperty("Module", moduleName));}
}

全局异常订阅器

public class GlobalExceptionSubscriber : IExceptionSubscriber
{private readonly ILogger<GlobalExceptionSubscriber> _logger;public GlobalExceptionSubscriber(ILogger<GlobalExceptionSubscriber> logger)=> _logger = logger;public Task HandleAsync(ExceptionNotificationContext context){// 业务异常也记录,级别 Warning_logger.LogWarning(context.Exception, "业务异常:{Message}", context.Exception.Message);// 全部异常上报到 SentrySentrySdk.CaptureException(context.Exception);return Task.CompletedTask;}
}

APM 事务监控示例 🔍

using var tx = SentrySdk.StartTransaction("OrderProcess", "order.process");
try
{// … 业务逻辑 …tx.Finish(SpanStatus.Ok);
}
catch (Exception)
{tx.Finish(SpanStatus.InternalError);throw;
}

HealthChecks 与 UI 🩺

// healthchecks-settings.json
{"HealthChecksUI": {"HealthChecks": [{"Name": "ABP Core","Uri": "http://localhost:5000/health"}],"EvaluationTimeOnSeconds": 30,"MinimumSecondsBetweenFailureNotifications": 60,"Storage": {"ConnectionString": "Server=...;Database=HealthChecks;User Id=...;"}}
}

已在 Program.cs 中通过 .AddSqlServerStorage(...) 完成持久化配置。


日志生命周期管理 (ILM) 🔄

# 创建 ILM 策略
PUT _ilm/policy/abp-logs-policy
{"policy": {"phases": {"hot":    { "actions": { "rollover": { "max_age": "7d", "max_size": "50gb" } } },"warm":   { "actions": { "forcemerge": { "max_num_segments": 1 } } },"delete": { "actions": { "delete": { "min_age": "30d" } } }}}
}# 创建 Alias 并激活 Rollover
PUT /abp-logs-write
{"aliases": { "abp-logs": {} }
}

appsettings.Production.json 中,将 IndexFormat 修改为:

"IndexFormat": "abp-logs-write-{0:yyyy.MM.dd}"

容器化部署示例 🐳

version: '3.8'
services:elasticsearch:image: docker.elastic.co/elasticsearch/elasticsearch:7.17.10ports: ["9200:9200"]environment:- discovery.type=single-nodekibana:image: docker.elastic.co/kibana/kibana:7.17.10ports: ["5601:5601"]depends_on: ["elasticsearch"]logstash:  # 可选:集中化管道image: docker.elastic.co/logstash/logstash:7.17.10ports: ["5044:5044"]volumes:- ./logstash/pipeline/:/usr/share/logstash/pipeline/depends_on: ["elasticsearch"]app:image: yourorg/abp-sentry-elk-demo:latestports: ["5000:80"]environment:- ASPNETCORE_ENVIRONMENT=Production- SENTRY__DSN=${SENTRY__DSN}depends_on: ["elasticsearch"]
AppCluster
写日志
写日志
LoggingStack
Kibana
Elasticsearch
Logstash
App1
App2

Kubernetes 部署示例 ☸️

apiVersion: v1
kind: Secret
metadata:name: sentry-secret
stringData:DSN: https://xxxx@sentry.io/project
---
apiVersion: apps/v1
kind: Deployment
metadata:name: abp-elk-app
spec:replicas: 3strategy:type: RollingUpdaterollingUpdate:maxSurge: 1maxUnavailable: 0selector:matchLabels:app: abp-elktemplate:metadata:labels:app: abp-elkspec:containers:- name: appimage: yourorg/abp-sentry-elk-demo:latestenv:- name: ASPNETCORE_ENVIRONMENTvalue: Production- name: SENTRY__DSNvalueFrom:secretKeyRef:name: sentry-secretkey: DSNports:- containerPort: 80

http://www.dtcms.com/wzjs/178888.html

相关文章:

  • 旅游开发公司网站建设方案书必应搜索引擎入口
  • 广元做网站网站一级域名和二级域名
  • 做网站开发要学多久北京seo优化外包
  • 用asp做的网站运行完之后怎么生成一个可以打开的网站图标网站开发报价方案
  • 嘉兴 网站 制作简述网络营销的含义
  • .net网站开发是什么对象开发小广告清理
  • 买CAD设计图做的网站申请一个网站
  • 怎么通过数据库做网站的登录网络销售推广平台
  • 网站做以后怎么修改网站内容石家庄疫情最新情况
  • 供应邯郸专业做网站广州网站开发多少钱
  • 建筑工程招投标网南京百度快速排名优化
  • 公司网站建设好引擎搜索网站
  • 长沙制作公园仿竹护栏多少钱一米整站关键词排名优化
  • 网站建设公司销售招聘百家号seo怎么做
  • ui设计方向网站建设目标西安seo关键词推广
  • 做网站怎么备案互联网营销师培训教程
  • 深圳移动网站建站百度云盘下载
  • 网站建设公司介绍ppt百色seo快速排名
  • 灵溪网站建设百度热词指数
  • 国家知识产权局商标注册安卓优化大师官方下载
  • wordpress 搬家后宁波抖音seo搜索优化软件
  • 建设网站策划方案营销网站建设制作
  • 做网站需要的图片去哪找中国新闻发布
  • 深圳市网站开发运营推广seo招聘
  • 基于工作过程的商务网站建设 网页制作交换友情链接吧
  • 重庆正云环保建设网站百度秒收录软件工具
  • go语言 做网站百度广告怎么推广
  • 免费1级做爰片在线观看 历史网站市场营销七大策略
  • 网站关键词太多网址大全2345
  • 江西九江怎么样seo优化关键词是什么意思