我很难用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的时候,它只是给出了错误,
代理未能连接到outputs.elasticsearch,在15s中重试,错误是“健康检查超时:没有可用的Elasticsearch节点”
连接失败似乎起源于golang的net/http库的深处,我不知道如何在这一点上获得更有用的输出。
我尝试过的事情:
Thing #1:我测试了cURL:
curl -u my_username:my_password -X POST "https://hostname:port/device_logs/_doc" -H 'Content-Type: application/json' -d'
{
"name": "John Doe"
}'
这个很好用。
Thing #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节点”相同。
Thing #3:我尝试在Go程序上运行gdb来调试它。当我调用NewClient时,它会跳到程序集中,所以我无法真正了解在net/http的中心发生了什么。
我以前从未使用过Go,所以我希望避免花上几个小时学习Go、拼写和调试,以解决这里希望是一个简单的问题。
关于如何在这里获得更多的信息,或者为什么失败的原因,有什么想法吗?是否有用于Go的生成或运行时标志可以使用?gdb调试技巧,这样我就可以进入Go库代码了吗?Elasticsearch客户技术?
发布于 2019-10-19 23:35:11
为了回答我自己的问题,这里的问题是角色权限。用于Elasticsearch的Telegraf输出插件需要启用监视器和权限,否则它将无法连接到Elasticsearch服务器,而不打印任何有关原因的信息。
顺便说一句:构建golang代码并能够调试到它调用的库:go build -gcflags=all="-N -l"
https://stackoverflow.com/questions/58466777
复制相似问题