14

我正在尝试将 Logstash 与 Elasticsearch 连接,但无法使其正常工作。

这是我的logstash conf:

input {
  stdin {
    type => "stdin-type"
  }

  file {
    type => "syslog-ng"

    # Wildcards work, here :)
    path => [ "/var/log/*.log", "/var/log/messages", "/var/log/syslog" ]
  }
}

output {
  stdout { }
  elasticsearch{
        type => "all"
        embedded => false
        host => "192.168.0.23"
        port => "9300"
        cluster => "logstash-cluster"
        node_name => "logstash"
        }
}

我只在我的 elasticsearch.yml 中更改了这些细节

cluster.name: logstash-cluster
node.name: "logstash"
node.master: false
network.bind_host: 192.168.0.23
network.publish_host: 192.168.0.23
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["localhost"]

使用这些配置,我无法让 Logstash 连接到 ES。有人可以建议我哪里出错了吗?

4

7 回答 7

17

首先,我建议匹配你的“类型”属性。在您的输入中,您有 2 种不同的类型,而在您的输出中,您有一种在任何输入中都不存在的类型。

对于测试,将输出更改为:

output {
stdout { }
elasticsearch{
    type => "stdin-type"
    embedded => false
    host => "192.168.0.23"
    port => "9300"
    cluster => "logstash-cluster"
    node_name => "logstash"
    }
}

那么,您是否在 ES 实例上创建了索引?

从我使用的指南和我自己的经验(其他人可能有另一种工作方式)我一直使用索引,以便当我将某些内容推送到 ES 时,我可以使用 ES API 并快速检查数据是否有进与不进。

另一个建议是简单地运行带有调试标志的 Logstash 转发器和索引器,以查看幕后发生的情况。

你可以连接到 127.0.0.1 上的 ES 实例吗?此外,尝试使用端口和主机进行试验。作为一个相当新的 Logstash 系统用户,我发现我一开始的理解与设置的现实背道而驰。有时主机 IP 不是您认为的那样,以及端口。如果您愿意检查您的网络并确定侦听端口和 IP,那么您可以解决这个问题,否则进行一些智能试验和错误。

我强烈推荐本指南作为全面的起点。我提到的两点都在指南中直接涉及。虽然该指南的起点稍微复杂一些,但其中的想法和概念是彻底的。

于 2013-06-13T18:10:09.667 回答
11

我无法让 Logstash 连接到 ES

当我的logstash 和 elasticsearch 版本不同步时,这发生在我身上

来自文档:

版本说明:您的 Elasticsearch 集群必须运行 Elasticsearch 1.1.1。如果您使用任何其他版本的 Elasticsearch,则应protocol => http在此插件中进行设置。

protocol => http如上所述明确设置为我修复了它。

于 2014-05-27T22:23:30.500 回答
4

正如亚当所说,事情是协议设置,所以我只是为了测试:

logstash -e 'input { stdin { } } output { elasticsearch { host => localhost protocol => "http" port => "9200" } }'

这似乎适用于 OSX。问题在这里

于 2014-10-01T16:11:27.987 回答
3

以下测试在

弹性搜索:5.4.0

日志存储:5.4.0

(我在 OpenStack 上使用过 docker 容器)

对于弹性搜索:

/usr/share/elasticsearch/config/elasticsearch.yml应该如下所示 -

cluster.name: "docker-cluster"
network.host: 0.0.0.0
discovery.zen.minimum_master_nodes: 1

/usr/share/elasticsearch/config/不需要更改任何其他文件

使用简单的命令运行 Elasticsearch -

sudo docker run --name elasticsearch -p 9200:9200 docker.elastic.co/elasticsearch/elasticsearch:5.4.0

对于 Logstash:

/usr/share/logstash/config/logstash.yml应该如下所示 -

http.host: "0.0.0.0"
path.config: /usr/share/logstash/pipeline

# http://111.*.*.11:9200 is the IP & Port of Elasticsearch's server 
xpack.monitoring.elasticsearch.url: http://111.*.*.11:9200

# "elastic" is the user name of Elasticsearch's account
xpack.monitoring.elasticsearch.username: elastic 

# "changeme" is the password of Elasticsearch's "elastic" user 
xpack.monitoring.elasticsearch.password: changeme

/usr/share/logstash/config/不需要更改任何其他文件

/usr/share/logstash/pipeline/logstash.conf应该如下所示 -

input {
        file {
                path => "/usr/share/logstash/test_i.log"

        }
}


output {

        elasticsearch {
                # http://111.*.*.11:9200 is the IP & Port of Elasticsearch's server
                hosts => ["http://111.*.*.11:9200"]

                # "elastic" is the user name of Elasticsearch's account
                user => "elastic"

                # "changeme" is the password of Elasticsearch's "elastic" user
                password => "changeme"
        }
}

使用简单的命令运行 Logstash -

sudo docker run --name logstash --expose 25826 -p 25826:25826 docker.elastic.co/logstash/logstash:5.4.0 --debug

注意:在运行 Docker 容器之前不需要做任何配置。首先使用上面提到的简单命令运行容器。然后转到相应的目录,进行所需的更改,保存它,退出容器并重新启动容器,更改将被反映。

于 2017-05-12T20:36:36.403 回答
1

我收到了同样的错误消息,我花了一段时间才在 elasticsearch 的发现过程的 TRACE 日志中发现,logstash 使用的 IP 地址不正确。

我有几个 IP 地址,而 logstash 使用了错误的一个。之后,一切顺利。

于 2013-12-20T14:25:43.827 回答
1

首先,您不需要在 ES 中创建索引。

因为,你不需要在elasticsearch中创建“索引”;当logstash分配索引时,索引会自动创建。

顺便说一句,如果您没有设置索引值,它将被设置为默认值“logstash-%{+YYYY.MM.dd}”

在此处输入图像描述

(你可以在logstash官方指南中查看)~

其次,你可能不会让你的“弹性类型”和你的“输入类型”保持相同的类型;你也可以这样写你的输出:

output {
stdout { }
elasticsearch{
    embedded => false
    host => "192.168.0.23"
    port => "9300"
    index => "a_new_index"
    cluster => "logstash-cluster"
    node_name => "logstash"
    document_type =>"my-own-type"
    }
}

使用“ document_type ”,您可以将您的日志保存为您想要的任何类型~

最后,如果您不想分配“document_type”;它将与您的“输入类型”设置相同

甚至你忘记在“所有配置文件”中指定类型;类型将被设置为日志的默认值~

好的,享受吧~

于 2016-08-11T04:05:12.557 回答
0

我有一个两个节点的 elastisearch 集群,只有一个用于 logstatsh。

这个配置对我有用:

节点elk1:

#/etc/elasticsearch/elasticsearch.yml

script.disable_dynamic: true
cluster.name: elk-fibra 
node.name: "elk1"
node.master: true
node.data: true
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["elk1.lab.fibra"]

根@elk1:

#/etc/logstash/conf.d/30-lumberjack-output.conf
output {
  elasticsearch { host => localhost protocol => "http" port => "9200" }
  stdout { codec => rubydebug }
}

节点elk2:

#/etc/elasticsearch/elasticsearch.yml

script.disable_dynamic: true
cluster.name: elk-fibra
node.name: "elk2"
node.master: false
node.data: true
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["elk1.lab.fibra"]
于 2014-10-10T11:55:08.220 回答