Tag: logstash

具有较高CPU使用率的logstash kafkainputfilter

我遇到了一个问题,即kafka logstashpipe道消耗太多cpu(启动时约为300%,几秒钟后达到100%),但基本上可以工作:pipe道可以将事件以kafka的forms传递到elasticsearch,而不会出现错误消息 logstash运行在Docker容器中,并带有最新版本的lostash(2.1.1,从https://hub.docker.com/_/logstash/中拉出)。 docker run –rm –link kafka:kafka –link elasticsearch:elasticsearch -v "$PWD":/config-dir logstash logstash -f /config-dir/logstash-kafka-elasticsearch.conf configuration文件是这样的: input { kafka { topic_id => 'mytopic' zk_connect => 'kafka:2181' } } output { elasticsearch { hosts=> ['elasticsearch:9200'] } stdout { codec => rubydebug } } 我有其他的logstashpipe道工作正常,并且cpu的使用也是正常的(例如一个pipe道使用http中,kafka作为out,占用〜0%cpu)。 我试图注释掉elasticsearch的输出,只留下stdout,问题依然存在,所以弹性search似乎没有问题。 任何机构会提供build议?

Filebeat与Java日志appenders

我们将开始在AWS elasticbeanstalk上使用docker部署我们的Java应用程序,我们希望集中logging并使用ELK堆栈。 我想每个容器保留一个进程,因此避免使用filebeat,但为了做到这一点,我们将不得不使用不同的appender,如syslog甚至tcp appender。 我们不能承受损失的日志。 Filebeat提供了开箱即用的重试逻辑,但是将其引入到混音中会增加部署的复杂性,需要确保filebeat在容器终止时收到SIGTERM,确保它已经预先装入容器映像或Dockerfile中,等等。 如果我们使用tcp或s​​yslog appender进入path,重审就取决于我们,我们也希望避免代码的复杂性。 除了我所指出的之外,每种方法的优缺点是什么? 我们的日志库是logback。

在Docker构build文件中使用自定义Cert设置Jetty Runner

我目前正在创build一个Docker文件来构build我们的java应用程序,而且我遇到了一个问题,就是不得不使用自定义的.cert键来使用logstash-logback-forwarder来loginSSL,而webapp本身也需要做SSL连接(连接到SOAP SSL)。 事情是,我可以loginSSL,并且Web应用程序可以安全地使用SOAP API(它始终能够做到这一点),但是我不能同时做到这一点。 对于初学者来说,这里是我的docker构build文件的相关部分 ADD logstash-forwarder.crt /root/logstash-forwarder.crt RUN (cd /root && /usr/java/latest/bin/keytool -import -file logstash-forwarder.crt -alias logstash -storepass SOMEPASS -noprompt -keystore logstash.keystore) 这添加了crt文件,然后使用keytool导入到keyStore中。 我正在使用logstash-logback-forwarder,它使用标准的SSLSocketFactory (即https://github.com/logstash/logstash-logback-encoder/blob/master/src/main/java/net/logstash/logback/appender/ SSLLogstashTcpSocketAppender.java ) 然后我运行我的java网站(通过jetty-webrunner),使用这个命令 CMD java -Dlogback.configurationFile=/root/logback.xml \ -Djavax.net.ssl.keyStorePassword=SOMEPASS \ -Djavax.net.ssl.keyStoreType=pkcs12 \ -Djavax.net.ssl.trustStoreType=jks \ -Djavax.net.ssl.trustStore=logstash.keystore \ -Djavax.net.ssl.trustStorePassword=SOMEPASS \ -server -ea -XX:+UseConcMarkSweepGC \ -XX:+CMSClassUnloadingEnabled \ -Xmx2048M -jar jetty-runner-9.2.3.v20140905.jar \ –port 8080 […]

在logstash中使用docker GELF驱动程序env /标签

Docker GELF日志驱动程序允许env和labelslogin选项: gelflogging驱动程序支持标签和env选项。 它在额外的字段上添加额外的键,以下划线(_)( ref )为前缀, 我想在我的索引名称用于elasticsearch输出,但我不知道如何可以访问这些值或说extra领域。 假设我有这些选项运行一个容器, docker run -it \ –log-driver gelf \ –log-opt gelf-address=udp://127.0.0.1:12201 \ –log-opt tag=some-app \ –log-opt env=staging \ –log-opt labels=staging \ ubuntu:16.04 /bin/bash -c 'echo Hello World' 我想使用我在logstashconfiguration中传递的env值,例如: input { gelf { } } output { elasticsearch { hosts => ["http://127.0.0.1:9200"] index => "logstash-%{env-value-here}-%{tag}-%{+YYYY.MM.dd}" } } 似乎有关于使用Graylog: Docker GELF驱动程序env选项的 […]

获取在Docker容器中运行的Logstash中的主机名

我有一个使用Docker容器的Logstash设置,如下所示: Server A [Docker container] Logstash [Docker container] Elasticsearch [Docker container] Kibana Server B [Docker container] My application [Docker container] Logstash-forwarder 服务器B上的Logstash-forwarder会将My application所有日志发送到服务器A上的Logstash。这很好,但每条日志消息都有Docker容器的主机名(即容器的ID),例如: host = 6c7f900f6b46 由于Logstash-forwarder在Docker容器内部运行,因此它将看到的主机名(对于它自己而言)是容器内部的主机名。 但是这对我来说并不是很有用。 我如何使用Docker主机的主机名?