Metricbeat не может подключиться к Kibana – “Подключение отклонено” на http://localhost:5601

Вопрос или проблема

Я пытался настроить Metricbeat с моей конфигурацией Elastic Stack, используя Docker, но постоянно получаю ошибку, из-за которой Metricbeat не может подключиться к Kibana. Вот журнал ошибок:

{"log.level":"error","@timestamp":"2024-10-24T22:41:29.959Z","log.origin":{"file.name":"instance/beat.go","file.line":1142},"message":"Выход: ошибка подключения к Kibana: не удалось получить версию Kibana: HTTP GET запрос к http://localhost:5601/api/status не удался: не удалось выполнить HTTP GET запрос: Получить \"http://localhost:5601/api/status\": соединение tcp 127.0.0.1:5601: подключение отклонено (статус=0). Ответ: ","service.name":"metricbeat","ecs.version":"1.6.0"}

Похоже, что Metricbeat пытается подключиться к Kibana, используя localhost:5601, но соединение отклоняется. Я использую Docker Compose для настройки, и вот мой файл docker-compose.yml:

version: "3.8"

networks:
  default:
    name: elastic
    external: false

services:
  metricbeat:
    depends_on:
      - kibana
    image: docker.elastic.co/beats/metricbeat:8.7.1
    user: root
    environment:
      - KIBANA_HOSTS=http://kibana:5601
    volumes:
      - ./metricbeatdata01:/usr/share/metricbeat/data
      - "./metricbeat.yml:/usr/share/metricbeat/metricbeat.yml:ro"
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
      - "/sys/fs/cgroup:/hostfs/sys/fs/cgroup:ro"
      - "/proc:/hostfs/proc:ro"
      - "/:/hostfs:ro"
    restart: on-failure
  
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.7.1
    container_name: elasticsearch
    volumes:
      - es_data:/usr/share/elasticsearch/data
    environment:
      - discovery.type=single-node
      - xpack.security.enabled=false
      - network.host=0.0.0.0
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ports:
      - 9200:9200

  kibana:
    depends_on:
      - elasticsearch
    image: docker.elastic.co/kibana/kibana:8.7.1
    volumes:
      - kibanadata:/usr/share/kibana/data
    ports:
      - 5601:5601
    environment:
      - SERVERNAME=kibana
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
    healthcheck:
      test:
        [
          "CMD-SHELL",
          "curl -s -I http://localhost:5601 | grep -q 'HTTP/1.1 302 Found'",
        ]
      interval: 10s
      timeout: 10s
      retries: 120

volumes:
  es_data:
    driver: local
  kibanadata:
    driver: local

А вот мой metricbeat.yml:

metricbeat.modules:
- module: docker
  metricsets: ["container", "cpu", "diskio", "info", "memory", "network"]
  hosts: ["unix:///var/run/docker.sock"]
  period: 5s

output.elasticsearch:
  hosts: ["elasticsearch:9200"]

setup.kibana:
  hosts: kibana:5601

setup.dashboards.enabled: true
  • Убедился, что setup.kibana.hosts указывает на kibana:5601 в metricbeat.yml.
  • Проверил, что сервис Kibana работает.
  • Увеличил количество повторов и интервалы в проверке работоспособности Kibana.
  • Дважды проверил, что Kibana доступна из других сервисов по адресу http://kibana:5601 внутри сети Docker.
  • Однако Metricbeat все еще пытается подключиться к localhost:5601 вместо kibana:5601. – Я не уверен, почему это происходит, и застрял на этом этапе.

Есть идеи, что может быть причиной того, что Metricbeat не может подключиться к Kibana?

Ответ или решение

Решение проблемы подключения Metricbeat к Kibana: «Соединение отвергнуто» на http://localhost:5601

Если вы столкнулись с ошибкой подключения Metricbeat к Kibana в Docker, где выводится сообщение "Connection refused" при попытке доступа к http://localhost:5601, возможно, несколько факторов мешают корректной работе. Важным аспектом этого процесса является правильная конфигурация сетевых адресов и переменных окружения.

Причины проблемы

  1. Неверный Host для Kibana: В вашем конфигурационном файле metricbeat.yml указано:

    setup.kibana:
     hosts: kibana:5601

    Но, несмотря на это, Metricbeat пытается подключиться к http://localhost:5601, что наводит на мысль о возможной конфигурационной ошибке или конфликтах при запуске контейнеров.

  2. Некорректная конфигурация окружения в Docker: Параметр KIBANA_HOSTS в вашем docker-compose.yml задает адрес для подключения к Kibana следующим образом:

    environment:
     - KIBANA_HOSTS=http://kibana:5601

    Тем не менее, Metricbeat может не принимать это значение.

Шаги для диагностики и решения

  1. Проверьте сетевое соединение:
    Убедитесь, что соединение между контейнерами функционирует должным образом. Заведите команду внутри контейнера Metricbeat:

    docker exec -it <metricbeat_container_name> curl http://kibana:5601/api/status

    Это подтвердит, что контейнер Metricbeat способен достучаться до Kibana.

  2. Обновление параметров конфигурации:
    Убедитесь, что в вашем metricbeat.yml указаны правильные значения:

    setup.kibana:
     hosts: ["http://kibana:5601"]

    Убедитесь, что синтаксис соответствует требованиям YAML и правильно отформатирован.

  3. Перезапуск Docker Compose:
    После внесения изменений, выполните команду для перезапуска Docker Compose:

    docker-compose down
    docker-compose up -d

    Этот шаг гарантирует, что все контейнеры перезапустятся с новыми конфигурациями.

  4. Проверка здоровья Kibana:
    Следите за статусом контейнера Kibana. Он должен быть в состоянии Healthy после развертывания. Используйте команду:

    docker ps

    чтобы увидеть статус контейнеров.

  5. Логи Metricbeat:
    Проверьте логи Metricbeat для получения дополнительной информации о возможных ошибках:

    docker logs <metricbeat_container_name>
  6. Версия контейнеров: Убедитесь, что вы используете совместимые версии образов elastic, так как различия в версиях могут вызывать проблемы совместимости.

  7. Проверка Docker Network:
    Убедитесь, что все сервисы находятся в одной сети Docker и могут обмениваться данными. Используйте команду:

    docker network inspect elastic

    для проверки созданной сети.

Заключение

Если после выполнения всех вышеперечисленных шагов проблема не исчезнет, рекомендуется проверить настройки Docker специфичных для вашей ОС или обратиться к официальной документации Elastic для дальнейшего устранения неполадок. Работая с контейнерами, важно помнить о конфигурации сетей и переменных окружения, так как они являются частью ключевых аспектов успешного развертывания Elastic Stack.

Поддерживайте вашу инфраструктуру актуальной и следите за совместимостью компонентов для поддержания стабильной и эффективной работы системы.

Оцените материал
Добавить комментарий

Капча загружается...