标签: elastic-stack

使用ELK堆栈的最佳Docker日志记录架构

最近我试图找到使用ELK堆栈的最佳Docker日志记录机制.我对公司在生产中使用的最佳工作流程有一些疑问.我们的系统有典型的软件堆栈,包括Tomcat,PostgreSQL,MongoDB,Nginx,RabbitMQ,Couchbase等.截至目前,我们的堆栈在CoreOS集群中运行.请在下面找到我的问题

  1. 使用ELK堆栈,进行日志转发的最佳方法是什么 - 我应该使用Lumberjack吗?我问这个是因为我看过人​​们使用Syslog/Rsyslog将日志转发到logstash的工作流程.
  2. 由于我们所有的软件都是集装箱式的,我应该在所有容器中都包含Log-forwarder吗?我计划这样做,因为我的大多数容器都根据运行状况切换节点,因此我不热衷于将文件系统从容器安装到主机.
  3. 我应该使用redis作为代理来转发日志吗?如果是,为什么?
  4. 编写定义要转发到log-stash的日志格式的log-config文件有多难?

这是一个主观问题,但我确信这是人们很久以前解决的问题,我并不热衷于重新发明轮子.

rsyslog lumberjack docker logstash-forwarder elastic-stack

7
推荐指数
1
解决办法
2499
查看次数

使用filebeat或logstash打开gzip文件

我可能在这里要求太多,我认为它还没有实现,但我的ELK堆栈设置与本教程的工作方式类似(几乎相同):( https://www.digitalocean.com/community/tutorials/how -to-install-elasticsearch-logstash-and-kibana-elk-stack-on-ubuntu-14-04)基本上,我在客户端计算机上安装了文件,并将文件夹中的所有日志文件发送到logstash on服务器电脑.

我想要做的是能够将gzip文件(包含文本文件)和文本文件放在目录中,并且能够将它们全部发送到带有filebeat的logstash.所以我需要filebeat发送一个unziped文件,或者logstash能够查看gzip文件并获取其中的文本文件.
我环顾网络,这似乎还没有实现,但我发现的大多数是日志转发器和logstash而不是filebeat,所以我只是希望有一种方法可以使用filebeat.

我可能只是在这里过于充满希望.如果您不知道这样做的方法,那么我也想知道.

elasticsearch logstash lumberjack logstash-forwarder elastic-stack

7
推荐指数
1
解决办法
6175
查看次数

适用于ELK的AWS设置良好

我们正在考虑在亚马逊上设置ELK堆栈,但我们并不知道我们需要什么样的机器来顺利处理它.现在我知道如果它没有顺利进行会变得明显,但我们仍希望了解我们对我们的情况需要什么.

所以我们4台服务器以自定义格式生成日志文件.每天大约有大约4500万行日志,产生大约4个文件600mb(gzip),所以每天约有24GB的日志.

现在我们正在研究ELK堆栈并希望Kibana的仪表板显示实时数据,因此我考虑使用syslog进行日志记录.

4台服务器 - > Rsyslog(在这4台服务器上) - > Logstash(AWS) - > ElasticSearch(AWS) - > Kibana(AWS)

所以现在我们需要弄清楚我们在AWS中需要什么样的硬件来处理这个问题.

我读了ElasticSearch的3个主人和最少2个数据节点.那么Kibana共有5台服务器+ 1台服务器,Logstash共有1台服务器?所以我需要总共7台服务器才能开始,但这有点像是有点过分了吗?我想保留我的数据1个月,所以最多31天,所以我在弹性搜索中会有大约1.4TB的原始日志数据(~45GB x 31)

但是,由于我并不知道最佳设置是什么,所以任何提示/提示/信息都是受欢迎的.

此外,为我处理此问题的系统或工具(节点故障等)可能很有用.

提前致谢,

darkownage

hardware amazon-ec2 amazon-web-services elastic-stack

7
推荐指数
1
解决办法
3529
查看次数

org.apache.kafka.common.network.InvalidReceiveException:接收无效(大小= 30662099大于30662028)

我正在尝试使用Kafka接收器将数据从Flume通道推送到Kafka集群,我可以将相关数据看到相关主题,但同时我在Kafka日志中过于频繁地观察下面提到的异常跟踪,

[2017-03-21 16:47:56,250] WARN Unexpected error from /10.X.X.X; closing connection (org.apache.kafka.common.network.Selector)
org.apache.kafka.common.network.InvalidReceiveException: Invalid receive (size = 30662099 larger than 30662028)
        at org.apache.kafka.common.network.NetworkReceive.readFromReadableChannel(NetworkReceive.java:91)
        at org.apache.kafka.common.network.NetworkReceive.readFrom(NetworkReceive.java:71)
        at org.apache.kafka.common.network.KafkaChannel.receive(KafkaChannel.java:153)
        at org.apache.kafka.common.network.KafkaChannel.read(KafkaChannel.java:134)
        at org.apache.kafka.common.network.Selector.poll(Selector.java:286)
        at kafka.network.Processor.run(SocketServer.scala:413)
        at java.lang.Thread.run(Thread.java:745)  
Run Code Online (Sandbox Code Playgroud)

初步分析让我看到我的Flume日志,并在其中观察到异常跟踪,

21 Mar 2017 16:25:32,560 ERROR [SinkRunner-PollingRunner-DefaultSinkProcessor] (org.apache.flume.SinkRunner$PollingRunner.run:158)  - Unable to deliver event. Exception follows.
org.apache.flume.EventDeliveryException: Failed to publish events
        at org.apache.flume.sink.kafka.KafkaSink.process(KafkaSink.java:252)
        at org.apache.flume.sink.DefaultSinkProcessor.process(DefaultSinkProcessor.java:67)
        at org.apache.flume.SinkRunner$PollingRunner.run(SinkRunner.java:145)
        at java.lang.Thread.run(Thread.java:745)
Caused by: java.util.concurrent.ExecutionException: org.apache.kafka.common.errors.NetworkException: The server disconnected before a response was received.
        at org.apache.kafka.clients.producer.internals.FutureRecordMetadata.valueOrError(FutureRecordMetadata.java:56)
        at org.apache.kafka.clients.producer.internals.FutureRecordMetadata.get(FutureRecordMetadata.java:43)
        at org.apache.kafka.clients.producer.internals.FutureRecordMetadata.get(FutureRecordMetadata.java:25) …
Run Code Online (Sandbox Code Playgroud)

bigdata apache-kafka flume-ng devops elastic-stack

7
推荐指数
0
解决办法
4869
查看次数

如何动态(通过环境变量)激活/停用 logback 或 logback 附加程序?

有没有办法通过环境变量选择是否有 logback 附加程序?

我有一个 dockerized spring boot 微服务,现在添加了 ELK 堆栈。
到目前为止效果很好。
但现在如果我想在没有 ELK 堆栈的情况下启动服务,应用程序会抛出一个错误,它不知道 Logstash 的主机:

app | 10:09:23,537 |-ERROR in ch.qos.logback.classic.net.SyslogAppender[SYSLOG] - Could not create SyslogWriter java.net.UnknownHostException: logstash: Name or service not known
app |   at java.net.UnknownHostException: logstash: Name or service not known
Run Code Online (Sandbox Code Playgroud)

这是我的 logback.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <appender name="SYSLOG" class="ch.qos.logback.classic.net.SyslogAppender">
        <syslogHost>logstash</syslogHost>
        <port>5000</port>
        <facility>LOCAL1</facility>
        <suffixPattern>[%thread] %logger %msg</suffixPattern>
    </appender>

    <root level="INFO">
        <appender-ref ref="SYSLOG"/>
    </root>

</configuration>
Run Code Online (Sandbox Code Playgroud)

我知道这是一个非常简单的版本,但我是使用 logback/ELK 堆栈进行日志记录的新手。

那么有没有一种方法可以像 yaml 文件一样使用环境变量注入一些东西,例如active=${LOGBACK_ACTIVE:false}我可以使用我的 prometheus 指标来做到这一点?

logging logback spring-boot docker-compose elastic-stack

7
推荐指数
1
解决办法
7176
查看次数

在没有试用许可证的情况下运行Elastic

背景: 我正在尝试使用弹性堆栈(Elastic,Logstash和Kibana),但是我没有钱可支付。我不介意使用封闭源代码的部件,只要它们是免费的即可。在这方面,我试图了解弹性许可的工作原理。

我们打开X-Pack似乎建议在Elastic 6.3之后包含X-Pack代码(尽管使用不同的许可证)。我也了解X-Pack的某些部分是免费的,而其他部分则不是免费的。这有点令人困惑。

目标: 我想使用所有免费的东西,而不使用任何付费的东西来运行Elastic stack。

到目前为止,我已经完成的工作: 我正在Linux上,但是我选择不使用分发软件包存储库,即我想使用Elastic Co提供的下载。对于Elastic和Kibana,我已经下载并解压缩了tar.gz版本6.5.4 GA从https://www.elastic.co/downloads/elasticsearchhttps://www.elastic.co/downloads/kibana发行大部分情况下,我没有设置任何选项,因此我假设设置为使用默认值。Elastic和Kibana均已启动,没有任何问题。我现在在命令行上运行它们。

从日志中,我注意到该安装已获得14天的试用版许可证。由于我不想使用许可证,因此我使用了删除许可证API,即我运行了

curl -X DELETE "localhost:9200/_xpack/license"
Run Code Online (Sandbox Code Playgroud)

从某种意义上说,这是可行的,即我得到了{“ acknowledged”:true}的答复。我认为这将摆脱不是免费的xpack内容,但不幸的是,事实并非如此。我仍然在启动中看到一些x-pack的东西。

然后,我尝试执行“ 卸载X-Pack”中提到的操作。我知道这是旧的,但是我不知道在新版本中该如何做。无论如何,如果我运行命令:

bin/elasticsearch-plugin remove x-pack
Run Code Online (Sandbox Code Playgroud)

我得到错误:

错误:找不到插件[x-pacl];运行“ elasticsearch-plugin list”以获取已安装插件的列表

而且 elasticsearch-plugin list不返回任何东西。如果我跑步

bin/kibana-plugin remove x-pack
Run Code Online (Sandbox Code Playgroud)

我得到:

由于出现以下错误,无法删除插件:“您使用的是kibana的标准发行版。请安装仅OSS发行版以删除X-Pack功能。”

现在我的Kibana无法运行,抱怨:

Elasticsearch集群未响应许可证信息。

即它确实启动了,但是当您转到网页时,它告诉我它无法连接到Elastic集群

问题:

  • 什么是仅OSS发行版,我该在哪里下载?
  • 无论如何,是否不使用Elastic的试用版许可证,而使用所有免费的部件(如成本/价格),并且在x天后不会过期?我想使用所有免费的X-Pack东西,而不要使用付费的X-Pack东西。

elasticsearch elastic-stack

7
推荐指数
1
解决办法
6474
查看次数

如何修复我对 Elastic search 的一半请求中的“400 Bad request”?

我正在使用具有单个文档的单个索引的弹性搜索云。我正在使用@elastic/elasticsearch最新版本。我从 Firebase 云函数调用弹性搜索。

这是我的弹性客户端在云函数中的初始化方式

const { Client, errors } = require('@elastic/elasticsearch');
const elasticClient = new Client({
    cloud: {
        id: 'xxxxxxxx',
    },
    auth: {
        username: 'xxxx',
        password: 'xxxxxx'
    },
    maxRetries: 5,
    requestTimeout: 60000,
});
Run Code Online (Sandbox Code Playgroud)

这是查询elasticsearch的云函数

exports.stickerSearch = functions.runWith(runtimeOpts).https.onRequest(async (req, res) => {
    try {
        const searchQuery = req.query.query;
        const searchResult = await elasticClient.search(
            {
                index: "packs",
                from: 0,
                q: searchQuery,
                size: 20,
                sort: 'dataCreatedAt'
            });
        res.status(searchResult.statusCode).send(searchResult.body.hits);
    }
    catch (e) {        
        console.log("search error", e)
        res.status(200).send({ "total": { "value": 0, "relation": …
Run Code Online (Sandbox Code Playgroud)

javascript elasticsearch elasticjs elastic-stack google-cloud-functions

7
推荐指数
0
解决办法
5459
查看次数

Logstash 错误:无法发布事件,原因是:写入 tcp YY.YY.YY.YY:40912-&gt;XX.XX.XX.XX:5044:写入:连接被对等方重置

我正在使用 filebeat 使用 Logstash 将日志推送到 elasticsearch,并且之前的设置对我来说工作正常。我Failed to publish events error现在正在得到。

filebeat       | 2020-06-20T06:26:03.832969730Z 2020-06-20T06:26:03.832Z    INFO    log/harvester.go:254    Harvester started for file: /logs/app-service.log
filebeat       | 2020-06-20T06:26:04.837664519Z 2020-06-20T06:26:04.837Z    ERROR   logstash/async.go:256   Failed to publish events caused by: write tcp YY.YY.YY.YY:40912->XX.XX.XX.XX:5044: write: connection reset by peer
filebeat       | 2020-06-20T06:26:05.970506599Z 2020-06-20T06:26:05.970Z    ERROR   pipeline/output.go:121  Failed to publish events: write tcp YY.YY.YY.YY:40912->XX.XX.XX.XX:5044: write: connection reset by peer
filebeat       | 2020-06-20T06:26:05.970749223Z 2020-06-20T06:26:05.970Z    INFO    pipeline/output.go:95   Connecting to backoff(async(tcp://xx.com:5044))
filebeat       | 2020-06-20T06:26:05.972790871Z 2020-06-20T06:26:05.972Z    INFO    pipeline/output.go:105  Connection to backoff(async(tcp://xx.com:5044)) established …
Run Code Online (Sandbox Code Playgroud)

elasticsearch logstash elastic-stack filebeat

7
推荐指数
1
解决办法
1万
查看次数

在ELK中配置number_of_shards和number_of_replicas

我一直在研究ELK Stack,遇到了一个小问题。

我已经阅读了所有可能的文档,它非常强调分片副本的重要性。但没有地方说如何配置每一个的数量。我读过一些网站说最好将其保留为自动,而其他网站则说如何在 5.8 版本中配置它,但不再有效。

因此,如果有人可以向我解释,我将非常感激。

cluster-computing elasticsearch elastic-stack elk elasticsearch-7

7
推荐指数
2
解决办法
9421
查看次数

即使使用 update_by_query 顺序更新文档时,Elastic Search 也会出现版本冲突

我正在尝试使用 update_by_query 更新文档的嵌套类型字段。我正在使用以下脚本查询:

POST test/_update_by_query
{
  "script": {
    "source": "ctx._source.address = params.address",
    "params": {
              "address": [{"city":"Mumbai"}]
    }
  },
  "query": {
    "bool": {
      "must": [
        {
                        "term": {
                            "uid": "b123"
                        }
                    }
      ]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

version conflict, required seqNo [607], primary term [16]. current document has seqNo [608] and primary term [16]
Run Code Online (Sandbox Code Playgroud)

此问题的原因是什么以及如何解决此问题?我可以在这里使用任何其他查询来代替 _update_by_query 吗?请在这里帮助我

elasticsearch kibana elastic-stack elasticsearch-5

7
推荐指数
2
解决办法
1万
查看次数