Я только начал играть с logstash, и у меня возникла проблема с получением процесса отправителя журнала для отправки событий на сервер Redis на другом хосте.
В output
раздел моего файла конфигурации logstash читает
output { redis { host => "11.22.33.44" data_type => "list" key => "logstash" } }
Однако, когда я запускаю процесс logstash, я получаю сообщения об ошибках, содержащие
:exception=>#<SocketError: Network is unreachable>
Немного strace
ing показывает, что здесь он не работает:
connect(13, {sa_family=AF_INET6, sin6_port=htons(6379), inet_pton(AF_INET6, "::ffff:11.22.33.44", &sin6_addr) = -1 ENETUNREACH (Network is unreachable)
то есть он пытается подключиться к хосту redis по IPv4-адресу, отображаемому в ipv6. У хоста нет собственного IPv6-адреса, и соединение не устанавливается.
Как я могу заставить процесс использовать AF_INET
вместо того AF_INET6
, или как-то настроить мой хост, чтобы обойти проблему?
Если это актуально, моя версия Java
java version "1.6.0_18" OpenJDK Runtime Environment (IcedTea6 1.8.13) (6b18-1.8.13-0+squeeze2) OpenJDK 64-Bit Server VM (build 14.0-b16, mixed mode)
Это вызвано эта ошибка: the sysctl
установка net.ipv6.bindv6only=1
нарушает работу сети Java в Debian squeeze (и, возможно, на других платформах).
Эта настройка имеет значение только для людей, которые хотят различать соединения ipv6 и ipv4. Меня это особо не волнует, поэтому я
$ sudo sysctl -w net.ipv6.bindv6only=0
запустил агент logstash, и он заработал!
Создатель logstash впоследствии любезно сказал мне, что вы также можете добавить -Djava.net.preferIPv4Stack=true
в командную строку.