我已在我的应用程序(ASP.NET Core)上使用elasticsearch将nlog配置为nlog.config,如下所示:
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
autoReload="true"
internalLogLevel="Trace"
internalLogFile="\\{ipmachine}\c\Log\internal-nlog.txt">
<extensions>
<add assembly="NLog.Targets.ElasticSearch"/>
</extensions>
<targets>
<target name="ElasticSearch" xsi:type="BufferingWrapper" flushTimeout="5000">
<target xsi:type="ElasticSearch"/>
</target>
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="ElasticSearch" />
</rules>
</nlog>
应用程序上的设置是:“ElasticsearchUrl”:http://localhost:9200“
当我通过dotnet-run运行应用程序时,我有一只麋鹿在这样的码头工人那里长大——https://github.com/deviantony/docker-elk
所有日志都会被保存。
但当我将我的应用程序添加到docker映像时,它就不起作用了。
尝试在docker-composs上的相同网络上配置它,我用link做了同样的事情。
...
elasticsearch:
...
networks:
- elk
...
myapp:
networks:
- elk
depends_on:
- elasticsearch
networks:
elk:
driver: bridge
甚至在docker上检查elacticsearch的ip,并将应用设置更改为"Elasticsearch chUrl":"http://172.21.0.2:9200"
然后我在docker compose上添加了FileBeat:
filebeat:
image: docker.elastic.co/beats/filebeat:6.3.2
#command: "filebeat -e -c /etc/filebeat/filebeat.yml"
environment:
HOSTNAME: "my-server"
LOGSTASH_HOST: "localhost"
LOGSTASH_PORT: "5044"
volumes:
- "./filebeat/config/filebeat.yml:/etc/filebeat/filebeat.yml:rw"
使用filebeat.yml-
output:
logstash:
enabled: true
hosts:
- elk:5000
ssl:
certificate_authorities:
- /etc/pki/tls/certs/logstash-beats.crt
timeout: 15
filebeat:
prospectors:
-
paths:
- /var/log/syslog
- /var/log/auth.log
document_type: syslog
-
paths:
- "/var/log/nginx/*.log"
document_type: nginx-access
并且日志仍然没有保存在elasticsearch中。它只在我运行应用程序时工作,而不是通过Docker。我在征求意见。
我的端口:
应用程序上的设置是:“ElasticsearchUrl”:http://localhost:9200“
这对于容器网络是不正确的,这里的localhost将只与您的容器通信,而不是与主机通信,而不是与其他容器通信。使用用户创建的网络,在撰写文件中使用服务名称elasticsearch
,您需要连接到“ElasticsearchUrl”:http://elasticsearch:9200“
。
然后我在docker compose上添加了FileBeat
我建议你朝这个方向走。从每个应用程序中删除日志处理,集中检索所有容器日志,并将它们从docker引擎发送到elastic。要做到这一点,只需让您的应用程序登录到stdout,而不是直接登录到elastic。在swarm模式下,我使用撰写文件的以下部分部署filebeat:
filebeat:
image: docker.elastic.co/beats/filebeat:${ELASTIC_VER:-6.2.4}
deploy:
mode: global
configs:
- source: filebeat_yml
target: /usr/share/filebeat/filebeat.yml
mode: 0444
- source: filebeat_prospector_yml
target: /usr/share/filebeat/prospectors.d/default.yml
mode: 0444
volumes:
- '/var/run:/host/var/run:ro'
- '/var/lib/docker:/host/var/lib/docker:ro'
我的filebeat.yml文件包含:
filebeat.config:
prospectors:
path: ${path.config}/prospectors.d/*.yml
reload.enabled: false
modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
#processors:
#- add_cloud_metadata:
output.elasticsearch:
hosts: ['elasticsearch:9200']
username: elastic
password: changeme
然后将explorer default.yml配置为从每个容器中提取日志:
- type: log
paths:
- '/host/var/lib/docker/containers/*/*.log'
json.message_key: log
json.keys_under_root: true
请注意,我使用的是configs,但是您可以轻松地切换它,以将这些文件作为卷装载到容器中。
在我的应用程序中,我希望在崩溃时将日志发送到远程服务器。我添加了try-catch块,并在catch中向服务器发送日志。我想知道我应该抓住哪些例外。我需要日志以防每次崩溃,这样我就能修复它。捕捉所有异常是一种好的做法吗? 提前感谢。
问题内容: 我正在尝试在docker容器中运行用golang编写的服务器。例如: 如果我在本地计算机上运行此代码,则可以将其发送给with ,它将关闭应用程序。当我在docker容器中运行它时,我似乎无法使用杀死它。 然后,我继续使用docker向容器发送信号。 仍在运行… 仍在运行… 终于死了。 我没有在代码中捕获任何信号并忽略它们。我什至尝试增强上面的代码以捕获信号并将其打印出来(这在我的主机
我有一个nodejs应用程序,它只不过是一个使用微软botbuilder框架构建的机器人。我创建了azure应用程序服务来托管此应用程序。我想找到一种方法,将所有应用程序日志和web服务器日志(如果可能的话)持久化到某个持久化存储中。就像本地web应用程序一样,我们可以在应用程序服务器上查找日志 在做了一些研究之后,我找到了微软关于这方面的官方文件,但看起来它有以下局限性。 我们不能使用应用程序服
我不确定我遇到的问题是概念问题还是技术问题,因为配置错误。 目标是在应用程序容器中托管的Java EE应用程序(特别是WildFly)和独立运行的Java SE应用程序之间发送双向消息,都使用标准JMS协议和主题。我认为这应该是可能的,只要他们都使用相同的经纪人和相同的主题。 因此,我有一个外部 Artemis 实例作为消息代理运行,并在 Java EE 应用程序的单独 Bean 中成功设置了生产
我知道和都在/usr/local/Spark/jars中,尽管在pom.xml中排除了这些jar,但Spark很可能引用了这些jar,因为如果删除它们,在spark-submit的运行时会给出一个ClassNotFoundException。 我的问题是:有没有一种方法可以在我的应用程序中使用Logback实现本机日志记录,同时保留Spark的内部日志记录功能。理想情况下,我希望将我的日志返回应用
这类似于Docker守护程序日志在哪里?。但更多适用于Mac Docker Desktop。 在哪里可以找到Docker Desktop for Mac的守护程序日志?