вывод телеграфа в Elasticsearch: «тайм-аут проверки работоспособности: узел Elasticsearch недоступен» - PullRequest
0 голосов
/ 19 октября 2019

У меня проблемы с подключением к экземпляру Elasticsearch с помощью выходного плагина Telegraf.

Я создал настройку Elasticsearch через службу Elasticsearch. Я создал для него пользователя и пароль (связанный с ролью) в Кибане.

Затем я настраиваю выход 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 с этим, он просто выдает ошибку,

[агент] Не удалось подключиться к [output.elasticsearch], повторная попытка произошла через 15 секунд, ошибка была «время ожидания проверки работоспособности: узел Elasticsearch недоступен»

Ошибка подключения, по-видимому, возникает глубоко в недрах сети Голанга/ http библиотеки, и я не знаю, как получить более полезный вывод на данный момент.

Вещи, которые я пробовал:

Вещи # 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 для подключения кasticsearch из Go:

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 : Я попытался запустить gdb в этой программе Go для отладки. Он переходит к сборке, как только я вызываю NewClient, поэтому я не могу понять, что происходит в недрах net / http.

Я никогда раньше не использовал Go, поэтому надеюсьИзбегайте часов обучения Go, spelunking и отладки, чтобы обойти то, что, как мы надеемся, является простой проблемой здесь.

Есть идеи о том, как получить больше информации здесь или почему это не помогает? Есть ли флаги сборки или времени выполнения для Go, которые я могу использовать? Советы по отладке gdb-with-Go, чтобы я мог шагнуть в код библиотеки Go? Ноу-хау клиента Elasticsearch?

1 Ответ

0 голосов
/ 20 октября 2019

Чтобы ответить на мой собственный вопрос, проблема здесь заключалась в разрешениях ролей. Плагин вывода Telegraf для Elasticsearch требует разрешения monitor и manage_index_templates , иначе он не сможет подключиться к серверу Elasticsearch без вывода информации о причинах.

Кстати: для создания кода golang и возможности отладки в вызываемых им библиотеках: go build -gcflags=all="-N -l"

...