使用ELK做日志记录,配置其实很简单。这里用的docker部署ELK。
1、部署ELK.
在dockerhub拉取ELK镜像。
docker run -d -p 9200:9200 -p 5601:5601 nshou/elasticsearch-kibana
部署完成后,通过网页测试kibana。比如服务器ip是192.168.1.99。我们访问http://192.168.1.99:5601会出现kibana页面。
2、.net core 代码。这里不用logstash来记录日志,而是使用serilog来集成日志到ES。具体步骤如下:
一、新建一个webapi项目,安装nuget包
<PackageReference Include="Serilog.AspNetCore" Version="2.1.1" />
<PackageReference Include="Serilog.Enrichers.Environment" Version="2.1.3" />
<PackageReference Include="Serilog.Settings.Configuration" Version="3.0.1" />
<PackageReference Include="Serilog.Sinks.Console" Version="3.1.1" />
<PackageReference Include="Serilog.Sinks.Seq" Version="4.0.0" />
<PackageReference Include="Serilog.Sinks.Http" Version="4.2.1" />
<PackageReference Include="Serilog.Sinks.ElasticSearch" Version="8.1.0-alpha0002" />
二、打开Program.cs文件,添加黑色粗体代码。
public class Program { public static void Main(string[] args) { var configuration = GetConfiguration(); Log.Logger = CreateSerilogLogger(configuration); CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .UseSerilog(); private static Serilog.ILogger CreateSerilogLogger(IConfiguration configuration) { var seqServerUrl = configuration["Serilog:SeqServerUrl"]; var esUrl = configuration["Serilog:EsUrl"]; return new LoggerConfiguration() .MinimumLevel.Verbose() .MinimumLevel.Override("Microsoft", LogEventLevel.Warning) .MinimumLevel.Override("System", LogEventLevel.Warning) .Enrich.FromLogContext() .WriteTo.Console() .WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri(string.IsNullOrWhiteSpace(esUrl) ? "http://logstash:8080" : esUrl)) { MinimumLogEventLevel = LogEventLevel.Information, AutoRegisterTemplate = true, IndexFormat = "project-{0:yyyy.MM.dd}" }) .CreateLogger(); } private static IConfiguration GetConfiguration() { var builder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddEnvironmentVariables(); return builder.Build(); } }
三、添加配置文件
appsettings.json配置如下,同样是添加粗体部分的配置。EsUrl是elasticsearch接口url,用来写入日志数据。
{ "Logging": { "LogLevel": { "Default": "Warning" } }, "Serilog": { "SeqServerUrl": "", "EsUrl": "http://192.168.2.175:9200" }, "AllowedHosts": "*" }
四、api页面记录日志与普通的日志记录没有变化,如下图
五、运行代码,访问api,写入日志。
六、打开kibana,添加索引,查询日志。
创建索引
索引名字,用前面运行一次后的前缀名字,如果project-*
后面索然自动生成规则选timestamp
最终的主界面日志如下,可以看到我们前面在示例接口中记录的日志