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

3d 网站设计企业管理软件排名

3d 网站设计,企业管理软件排名,网站版面如何布局,网站平台免费🚀 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.tj-hxxt.cn/news/64221.html

相关文章:

  • 创新的营销型网站seo的流程是怎么样的
  • 网站流量外流seo高效优化
  • 电子商城 网站开发 支持手机端googlechrome
  • 可以做四级听力的网站站长工具是做什么的
  • 网站搭建语言seo优化师是什么
  • 做地铁建设的公司网站建立网站
  • 做网站需要什么人才百度手机应用市场
  • 用宝塔给远程网站做备份简述网站制作的步骤
  • 昆山做百度网站谷歌seo需要做什么的
  • 网站建设四个阶段seo关键词推广价格
  • 济南免费做网站360营销平台
  • 找个公司做网站需要注意什么谷歌seo排名工具
  • 网站开发数据库设计武汉seo搜索引擎
  • 网站友情链接怎么做百度做广告费用
  • dz论坛中英文网站怎么做推广平台网站
  • 企业常用系统各系统介绍优化设计三年级上册语文答案
  • 网站建设与管理教学视频下载店铺在百度免费定位
  • 网站开发vue版本是什么张雪峰谈广告学专业
  • ps免抠素材网站大全网站推广的基本方法有
  • 吉工之家找工作建筑工作360优化大师安卓手机版下载安装
  • 做网站全部乱码怎么办seo快速排名上首页
  • 有哪些网站有做网页用的小图片百度问问首页
  • 在线制图网seo外链工具软件
  • 电子商务网站怎么做整站seo教程
  • 我想创业做网站今天刚刚的最新新闻
  • 郑州郑东新区网站建设平台接广告在哪里接的
  • 自己做的网站如何放到微信宁波seo外包推广排名
  • 南山网站制作培训网登录入口
  • 荔湾区做网站公司网站优化培训班
  • 怎么做网站扫码支付卖友情链接赚钱