telegraf输出到Elasticsearch:“运行状况检查超时:没有可用的Elasticsearch节点”

时间:2019-10-19 18:25:56

标签: elasticsearch telegraf telegraf-plugins telegraf-output-plugins

我无法通过Telegraf输出插件连接到Elasticsearch实例。

我通过Elasticsearch服务创建了Elasticsearch设置。我在Kibana中为此创建了用户名和密码(连接到角色)。

然后我为其设置Telegraf输出:

  [[outputs.elasticsearch]]
  urls = [ "https://hostname:port" ] # required.

  timeout = "5s"

  enable_sniffer = false

  health_check_interval = "10s"

  ## HTTP basic authentication details.
  username = "my_username"
  password = "my_password"

  index_name = "device_logs" # required.

  insecure_skip_verify = true

  manage_template = true

  template_name = "telegraf"

  overwrite_template = false

但是当我尝试以此启动Telegraf时,它只会显示错误

  

[agent]无法连接到[outputs.elasticsearch],在15秒内重试,错误是“运行状况检查超时:没有可用的Elasticsearch节点”

连接失败似乎起源于golang的net / http库的肠子,我现在不知道如何获得更多有用的输出。

我尝试过的事情:

第一件事:我测试了cURL:

curl -u my_username:my_password -X POST "https://hostname:port/device_logs/_doc" -H 'Content-Type: application/json' -d'
    {
        "name": "John Doe"
    }'

这很好。

事物2 :我创建了一个简单的Go程序,以从Go连接到elasticsearch:

package main

import (
    "log"
    "time"
    "gopkg.in/olivere/elastic.v3"
)

func main() {
    // configure connection to ES
    client, err := elastic.NewClient(elastic.SetURL("https://hostname:port"))
    if err != nil {
      panic(err)
    }
    log.Printf("client.running? %v",client.IsRunning())
    if ! client.IsRunning() {
      panic("Could not make connection, not running")
    }
}

..,它以相同的“没有可用的Elasticsearch节点”命中第一个恐慌。

问题#3 :我尝试在该Go程序上运行gdb进行调试。 我一呼叫NewClient,它就会跳到汇编中,所以我真的无法了解net / http肠子里正在发生什么。

我以前从未使用过Go,所以我希望避免花费数小时来学习Go,进行拼写和调试,以解决可能是这里很简单的问题。

关于如何在此处获取更多信息或失败的任何想法?我可以使用Go的构建或运行时标志吗? gdb-with-Go调试技巧,这样我就可以进入Go库代码了吗? Elasticsearch客户专有技术?

1 个答案:

答案 0 :(得分:0)

要回答我自己的问题,这里的问题原来是角色权限。用于Elasticsearch的Telegraf输出插件需要同时启用 monitor manage_index_templates 权限,否则它将在没有打印任何有关为什么原因的信息时无法连接到Elasticsearch服务器。

BTW:构建golang代码并能够对其调用的库进行调试: go build -gcflags=all="-N -l"