TCP-зонд Prometheus Blackbox Exporter возвращает значение 0, даже если порт открыт (сервер Iperf3)
У меня есть странная проблема, над которой я копался последние пару дней.
Установка
У меня есть сервер Iperf3, работающий в Docker по этому внутреннему адресу и порту:
У меня также есть Prometheus и Grafana, работающие в Docker, для мониторинга различных сервисов.
Все работает, включая экспортер конечных точек Prometheus и экспортер Prometheus Blackbox для HTTP и HTTPS.
Однако я также хочу отслеживать этот сервер Iperf3, используя простой TCP-зонд с экспортером Blackbox.
Вот мои файлы конфигурации как для Prometheus в целом, так и для экспортера Blackbox.
Prometheus.yml
: (Задание Blackbox в конфигурациях очистки)
- job_name: 'blackbox-tcp'
scrape_interval: 60s
metrics_path: /probe
params:
module: [tcp_connect] # Look for TCP response
static_configs:
- targets:
- http://10.10.2.2:5201 # Iperf3 server
- http://10.10.2.4:9201 # Portainer agent
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 10.10.2.4:9095 # The blackbox exporter's real hostname:port.
: (Определенные модули)
modules:
http_2xx:
prober: http
http:
method: GET
http_post_2xx:
prober: http
http:
method: POST
tcp_connect:
prober: tcp
timeout: 5s
pop3s_banner:
prober: tcp
tcp:
query_response:
- expect: "^+OK"
tls: true
tls_config:
insecure_skip_verify: false
ssh_banner:
prober: tcp
tcp:
query_response:
- expect: "^SSH-2.0-"
icmp:
prober: icmp
Просто чтобы продемонстрировать, что Prometheus запущен и работает, вот раздел HTTP- и TCP-зондов, подключенных к экспортеру:
Наконец, я могу проверить TCP через Netcat и Telnet, чтобы убедиться, что служба действительно работает:
$ if nc -w 3 -z 10.10.2.2 5201; then echo "1"; fi
1
$ if echo -e '\x1dclose\x0d' | telnet 10.10.2.2 5201 > /dev/null; then echo "1"; fi
1
Проблема
И вот беда: Когда я пытаюсь следить за целью10.10.2.2:5201
в Grafana он показывает значение запроса, также известное как Down.
Кроме того, когда я пытаюсь запустить инспектор запросов или выполнить запрос непосредственно в Prometheus, я получаю подтверждение, что он возвращает значение0
.
Я считаю, что я сделал все, как описано, и эта ветка также подтверждает, что моя конфигурация должна быть правильной для зондов TCP.
Я просто не понимаю, как заставить Прометея возвращать значение запроса1
, что указывает на то, что порт открыт и служба Iperf3 в данном случае запущена?
Я задавался вопросом, есть ли какие-нибудьsend
иexpect
команды, которые мне нужно добавитьBlackbox.yml
подquery_response
, но мне не повезло. Любой вклад и помощь очень ценятся!