ELK日志

Docker:

步骤 0: 创建网络

docker network create elk-network

步骤 1: 拉取 Elasticsearch 镜像

docker pull docker.elastic.co/elasticsearch/elasticsearch:8.12.0
# 步骤 2: 创建并启动 Elasticsearch 容器
docker run -d --name elasticsearch --net elk-network -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e "xpack.security.enabled=false" docker.elastic.co/elasticsearch/elasticsearch:8.12.0
# 步骤 3: 拉取 Kibana 镜像
docker pull docker.elastic.co/kibana/kibana:8.12.0
# 步骤 4: 启动 Kibana
docker run -d --name kibana --net elk-network -p 5601:5601 -e "ELASTICSEARCH_HOSTS=http://elasticsearch:9200" docker.elastic.co/kibana/kibana:8.12.0
# 步骤 5: 拉取 Logstash 镜像
docker pull docker.elastic.co/logstash/logstash:8.12.0
# 步骤 6: 启动 Logstash 容器
docker run -d --name logstash --net elk-network -p 5044:5044 -p 9600:9600 -e "ELASTICSEARCH_HOSTS=http://elasticsearch:9200" docker.elastic.co/logstash/logstash:8.12.0
以下步骤为验证:
/////////////////////////////////////////////////////////////////
1、 查看所有容器状态
docker ps
2、 检查 Elasticsearch
curl http://localhost:9200/_cluster/health
3、 检查 Kibana
curl http://localhost:5601/api/status
4、 检查 Logstash
curl http://localhost:9600/_node/stats
////////////////////////////////////////////////////////////////////////
后端:
在配置文件中(appsettings.json):
"ELK": {
"ElaticSearchUrl": "http://ip地址:9200",(9200是我上面Elasticsearch创建的容器端口)
"UserName": "trace",(自己随意)
"Password": "123456"(自己随意)
}
安装NuGet包(版本最新即可)
Serilog (4.1.0)
Serilog.AspNetCore(8.0.0)
Serilog.Enrichers.Environment (2.3.0)
Serilog.Enrichers.Process (2.0.2)
Serilog.Enrichers.Thread (3.1.0)
Serilog.Sinks.Console (5.0.1)
Serilog.Sinks.Elasticsearch (10.0.0)
Serilog.Sinks.File (5.0.0)
在Program中:
var configuration = builder.Configuration;
// 配置Serilog
var elaUri = configuration["ELK:ElaticSearchUrl"];
var userName = configuration["ELK:UserName"];
var password = configuration["ELK:Password"];
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Information()
.MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
.Enrich.FromLogContext()
.Enrich.WithMachineName()
.Enrich.WithThreadId()
.Enrich.WithProcessId()
.WriteTo.Console(new Serilog.Formatting.Compact.CompactJsonFormatter())
.WriteTo.File("logs/traceability-.txt",
rollingInterval: RollingInterval.Day,
outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}")
.WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri(elaUri))
{
IndexFormat = "traceability-logs-{0:yyyy.MM.dd}",
AutoRegisterTemplate = true,
AutoRegisterTemplateVersion = AutoRegisterTemplateVersion.ESv7,
ModifyConnectionSettings = conn => conn.BasicAuthentication(userName, password),
BufferBaseFilename = "./logs/serilog-buffer",
Period = TimeSpan.FromSeconds(2)
})
.CreateLogger();

builder.Host.UseSerilog();
注:NLog可能回跟Serilog发生冲突builder.Host.UseNLog()可以选择舍弃,NLog.config亦是如此
//在控制台下创建一个Logs文件夹用来存放日志信息
接下来是网址的一些操作
a063ab60-b2d2-4dd2-8efb-a14e0fcecf33
这里就是按日期存储的一些日志,想要看日志的详细信息需要创建一个索引(相当于一个表)
 **注:如果右侧没有出现索引的文件的话必须去请求一个有ILogger日志的方法再继续执行
右边是你的所有log日志,你起的名字需要包含日志,比如有 a1,a2,b1,b2,c1,c2几个日志你起的名字是a那就代表你这个索引只能查看a1,a2的日志
创建索引完成之后就可以去这里查看详细日志信息
Serilog
Serilog 是一个开源的结构化日志记录库
与nlog日志的不同:Serilog 强调使用结构化数据,使日志更易于查询和分析
它可以将日志输出到多种目的地,包括控制台、文件、数据库等。

posted @ 2025-08-14 20:34    阅读(14)  评论(0)    收藏  举报