ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana
安装 Elasticsearch Kibana 的方法我前面文章有写
Abp中加入Logstash
Serilog.AspNetCore
Serilog.Formatting.Elasticsearch
Serilog.Sinks.Async
Serilog.Sinks.Elasticsearch
public class Program
{
public async static Task<int> Main(string[] args)
{
Log.Logger = new LoggerConfiguration()
#if DEBUG
.MinimumLevel.Debug()
#else
.MinimumLevel.Information()
#endif
.Enrich.FromLogContext()
.MinimumLevel.Override("Microsoft", LogEventLevel.Information)
.MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning)
.WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri("Elasticsearch端口"))
{
AutoRegisterTemplate = true,
EmitEventFailure = EmitEventFailureHandling.WriteToSelfLog |
EmitEventFailureHandling.WriteToFailureSink |
EmitEventFailureHandling.RaiseCallback,
ModifyConnectionSettings =
conn =>
{
conn.ServerCertificateValidationCallback((source, certificate, chain, sslPolicyErrors) => true);
conn.BasicAuthentication("账号", "密码");
return conn;
}
})
.WriteTo.Console()
.WriteTo.Async(c => c.File($@"{AppContext.BaseDirectory}Log/log.log"))
.WriteTo.Async(c => c.Console())
.CreateLogger();
// 也可以修改默认日志 和控制台打印
try
{
Log.Information("Starting CloudMgt.HttpApi.Host.");
var builder = WebApplication.CreateBuilder(args);
builder.Host.AddAppSettingsSecretsJson()
.UseAutofac()
.UseSerilog();
await builder.AddApplicationAsync<CloudMgtHttpApiHostModule>();
var app = builder.Build();
await app.InitializeApplicationAsync();
await app.RunAsync();
return 0;
}
catch (Exception ex)
{
Log.Fatal(ex, "Host terminated unexpectedly!");
return 1;
}
finally
{
Log.CloseAndFlush();
}
}
}
Kibana 查看日志
kibana新建索引 logstash-*
然后点击下一步即可 我这边是已经创建完毕了
查看日志
这样咱们就完成ELK 的初步搭建和 后续学习 ES ,因为一个好的架构是采用到合适的技术栈才有用,采用ELK理由
1 在Docker 中部署应用查看起日志起来比较麻烦 因为是多个API 端口会导致排查线上问题很慢
2 ELK也是比较成熟的方案
3 后续需要考虑到的问题 ELK 日志服务需要单独部署出来
4 对于 ES 准备采用独立服务器的模式
学习总结 :追求好的架构的情况下 要保证系统的稳定性和健壮性 这个的考虑是要优先级高于一些所谓高大上技术的,下一步进军WPF。