我无法通过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客户专有技术?
答案 0 :(得分:0)
要回答我自己的问题,这里的问题原来是角色权限。用于Elasticsearch的Telegraf输出插件需要同时启用 monitor 和 manage_index_templates 权限,否则它将在没有打印任何有关为什么原因的信息时无法连接到Elasticsearch服务器。
BTW:构建golang代码并能够对其调用的库进行调试:
go build -gcflags=all="-N -l"