最近园子里看到一篇<.Net Core with 微服务 - Elastic APM> 的文章(主要用于对接口的调用链、性能进行监控),非常实用,这里讲解.NetCore将日志写入ElasticSearch,并用Kibana搜索日志
部署环境centos
依赖环境dockerdocker-compose.net core 3.1
使用部署 1.创建 docker-compose.yml 文件注意事项:
注意事项:
1.新建一个.net core web程序(.net core3.1)
2.将以下 Serilog 包添加到项目中
- Serilog.AspNetCore
- Serilog.Enrichers.Environment
- Serilog.Sinks.Debug
- Serilog.Sinks.ElasticSearch
3.删除 appsettings.json 中的 Logging 部分并将其替换为以下配置,如果是dev环境,则修改appsettings.Development.json文件
{ "Serilog": { "MinimumLevel": { "Default": "Information", "Override": { "Microsoft": "Information", "System": "Warning" } } }, "ElasticConfiguration": { "Uri": "http://localhost:9200" //这里填写es地址 }, "AllowedHosts": "*" }4.在 Program.cs 中配置登录注意在es中创建的索引,这里的索引是it-tibos-api,可以根据业务进行修改
public class Program { public static void Main(string[] args) { //configure logging first ConfigureLogging(); //then create the host, so that if the host fails we can log errors CreateHost(args); } private static void ConfigureLogging() { var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); var configuration = new ConfigurationBuilder() .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddJsonFile( $"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json", optional: true) .Build(); Log.Logger = new LoggerConfiguration() .Enrich.FromLogContext() .Enrich.WithExceptionDetails() .Enrich.WithMachineName() //.WriteTo.Debug() .WriteTo.Console() .WriteTo.Elasticsearch(ConfigureElasticSink(configuration, environment)) .Enrich.WithProperty("Environment", environment) .ReadFrom.Configuration(configuration) .CreateLogger(); } private static ElasticsearchSinkOptions ConfigureElasticSink(IConfigurationRoot configuration, string environment) { return new ElasticsearchSinkOptions(new Uri(configuration["ElasticConfiguration:Uri"])) { AutoRegisterTemplate = true, IndexFormat = $"it-tibos-api" //索引 }; } private static void CreateHost(string[] args) { try { CreateHostBuilder(args).Build().Run(); } catch (System.Exception ex) { Log.Fatal($"Failed to start {Assembly.GetExecutingAssembly().GetName().Name}", ex); throw; } } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }) .ConfigureAppConfiguration(configuration => { configuration.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true); configuration.AddJsonFile( $"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json", optional: true); }) .UseSerilog(); }5.在action里记录日志,并运行程序
_logger.LogInformation($"这是一条测试日志,发送时间{DateTime.Now}"); _logger.LogWarning($"这是一条测试警告日志,发送时间{DateTime.Now}"); try { throw new Exception("Some bad code was executed"); } catch (Exception ex) { _logger.LogError($"这是一条异常日志,发送时间{DateTime.Now}"); }6.在Kibana添加ElasticSearch索引
7.搜索日志
8.管理索引
- .net core 使用阿里云日志,可以阅读这篇文章
- 推荐我自己写的一个Redis消息队列中间件InitQ, *** 作简单可以下载的玩玩
- .Net Core with 微服务 - Elastic APM
- .使用 ElasticSearch、Kibana、ASP.NET Core 和 Docker 进行日志记录
.NetCore使用Docker安装ElasticSearch、Kibana 记录日志
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)