docker - docker下运行API时Kibana没有日志
问题描述
美好时光。我想在 Kibana 中查看我的日志。为了查看它们,我使用 Serilog 并在 docker 中运行我的应用程序、Elasticsearch 和 Kibana。不幸的是,Kibana 中没有出现日志。我也找不到lett-api
kibana索引。
有我的Program
文件:
public class Program
{
public static int Main(string[] args)
{
CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("en-GB");
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Verbose()
.Enrich.FromLogContext()
.MinimumLevel.Override("Microsoft", LogEventLevel.Information)
.Enrich.WithProperty("app", "Lett.Api")
.WriteTo.Elasticsearch(new ElasticsearchSinkOptions(
new Uri("http://elasticsearch:9200"))
{
AutoRegisterTemplate = true,
IndexFormat = "lett-api",
FailureCallback = e => Console.WriteLine("Unable to submit event " + e.MessageTemplate),
EmitEventFailure = EmitEventFailureHandling.WriteToSelfLog |
EmitEventFailureHandling.WriteToFailureSink |
EmitEventFailureHandling.RaiseCallback,
FailureSink = new FileSink("./failures.txt", new JsonFormatter(), null)
})
.CreateLogger();
try
{
BuildWebHost(args).Run();
return 0;
}
finally
{
Log.CloseAndFlush();
}
}
private static IWebHost BuildWebHost(string[] args)
{
return new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseSerilog()
.ConfigureAppConfiguration((ctx, builder) =>
{
builder
.SetBasePath(ctx.HostingEnvironment.ContentRootPath)
.AddJsonFile("appsettings.json", true)
.AddEnvironmentVariables("Docker:");
})
.UseStartup<Startup>()
.Build();
}
}
我的docker-compose
文件:
version: '3.7'
services:
postgres:
container_name: postgresql
image: postgres:alpine
environment:
- POSTGRES_PASSWORD=12345
- POSTGRES_USER=postgres
ports:
- 5432:5432
api:
container_name: lett-api
image: lett:latest
restart: on-failure
build:
context: .
dockerfile: ./Lett.Api.Dockerfile
depends_on:
- postgres
- elasticsearch
ports:
- 5000:80
environment:
Docker:ConnectionString: "Host=postgres;Username=postgres;Password=12345;Database=Lett"
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.2.0
container_name: elasticsearch
environment:
- node.name=elasticsearch
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- discovery.zen.minimum_master_nodes=1
- discovery.type=single-node
ulimits:
memlock:
soft: -1
hard: -1
ports:
- "9200:9200"
volumes:
- elasticsearch-data:/usr/share/elasticsearch/data
networks:
- docker-network
kibana:
image: docker.elastic.co/kibana/kibana:7.2.0
container_name: kibana
depends_on:
- elasticsearch
environment:
elasticsearch.url: "http://elasticsearch:9200"
elasticsearch.hosts: "http://elasticsearch:9200"
xpack.security.enabled: "false"
xpack.monitoring.enabled: "false"
xpack.ml.enabled: "false"
xpack.graph.enabled: "false"
xpack.reporting.enabled: "false"
xpack.grokdebugger.enabled: "false"
ports:
- "5601:5601"
networks:
- docker-network
volumes:
elasticsearch-data:
driver: local
networks:
docker-network:
driver: bridge
但是ElasticsearchUri = http://localhost:9200
当我在本地(使用)运行我的应用程序时,lett-api
会出现索引并记录。
有谁知道热是什么问题?
谢谢!
更新我检查了 docker 输出并发现以下内容:
lett-api | Unable to submit event {HostingRequestStartingLog:l}
lett-api | Unable to submit event {HostingRequestFinishedLog:l}
lett-api | Unable to submit event {HostingRequestStartingLog:l}
lett-api | Unable to submit event {HostingRequestFinishedLog:l}
lett-api | Unable to submit event {HostingRequestStartingLog:l}
lett-api | Unable to submit event CORS policy execution successful.
lett-api | Unable to submit event Route matched with {RouteData}. Executing controller action with signature {MethodInfo} on controller {Controller} ({AssemblyName}).
lett-api | Unable to submit event Executing action method {ActionName} - Validation state: {ValidationState}
lett-api | Unable to submit event Executed action method {ActionName}, returned result {ActionResult} in {ElapsedMilliseconds}ms.
lett-api | Unable to submit event Executing ObjectResult, writing value of type '{Type}'.
lett-api | Unable to submit event Executed action {ActionName} in {ElapsedMilliseconds}ms
lett-api | Unable to submit event {HostingRequestFinishedLog:l}
解决方案
日志没有写入 kibana,因为lett-api
不在docker-network
.
有一个正确的docker-compose
文件:
version: '3.7'
services:
postgres:
container_name: postgresql
image: postgres:alpine
environment:
- POSTGRES_PASSWORD=12345
- POSTGRES_USER=postgres
ports:
- 5432:5432
api:
container_name: lett-api
image: lett:latest
restart: on-failure
build:
context: .
dockerfile: ./Lett.Api.Dockerfile
depends_on:
- postgres
- elasticsearch
ports:
- 5000:80
environment:
Docker:ConnectionString: "Host=postgres;Username=postgres;Password=12345;Database=Lett"
networks:
- docker-network
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.2.0
container_name: elasticsearch
environment:
- node.name=elasticsearch
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- discovery.zen.minimum_master_nodes=1
- discovery.type=single-node
ulimits:
memlock:
soft: -1
hard: -1
ports:
- "9200:9200"
volumes:
- elasticsearch-data:/usr/share/elasticsearch/data
networks:
- docker-network
kibana:
image: docker.elastic.co/kibana/kibana:7.2.0
container_name: kibana
depends_on:
- elasticsearch
environment:
elasticsearch.url: "http://elasticsearch:9200"
elasticsearch.hosts: "http://elasticsearch:9200"
xpack.security.enabled: "false"
xpack.monitoring.enabled: "false"
xpack.ml.enabled: "false"
xpack.graph.enabled: "false"
xpack.reporting.enabled: "false"
xpack.grokdebugger.enabled: "false"
ports:
- "5601:5601"
networks:
- docker-network
volumes:
elasticsearch-data:
driver: local
networks:
docker-network:
driver: bridge
推荐阅读
- node.js - Mongoose find - 使用返回的数据并将其添加到变量中
- spring - Spring Reactive MongoDB不保存文档
- java - 文件到 MultipartFile 抛出 NullPointerException
- travis-ci - 测试运行完成后一秒 Jest 没有退出(使用 Nuxt 和 Jest)
- django - 部署到 Appengine 标准环境后应用程序无法运行
- lotus-domino - 如何从 TYPE_MIME_PART 项目中读取数据?
- entity-framework - 如何在 Entity Framework Core 中以编程方式使用迁移
- c# - 使用引发事件的 ASP.NET Core Web API 控制器时,如何连接事件处理程序?
- twig - Sonata 的 Currency Twig Helper 返回错误的格式
- javascript - 无法使用javascript将数组存储在本地存储中