.net core ELK

使用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

最终的主界面日志如下,可以看到我们前面在示例接口中记录的日志

posted @ 2019-11-19 13:56  清晨时光  阅读(1244)  评论(2编辑  收藏  举报