node_exporter icon indicating copy to clipboard operation
node_exporter copied to clipboard

HTTP2 not working

Open dnmvisser opened this issue 3 years ago • 1 comments

Host operating system: output of uname -a

Linux ip-172-16-209-7 5.10.0-11-cloud-amd64 #1 SMP Debian 5.10.92-1 (2022-01-18) x86_64 GNU/Linux

node_exporter version: output of node_exporter --version

node_exporter, version 1.3.1 (branch: HEAD, revision: a2321e7b940ddcff26873612bccdf7cd4c42b6b6)
  build user:       root@243aafa5525c
  build date:       20211205-11:09:49
  go version:       go1.17.3
  platform:         linux/amd64

node_exporter command line flags

--web.listen-address=0.0.0.0:9100 --log.level=debug --web.config=/etc/prometheus/exporters/web.yml

Are you running node_exporter in Docker?

No

What did you do that produced an error?

As per docs I am using a web.conf file, which looks like this:

http_server_config:
    http2: true
tls_server_config:
    cert_file: /etc/prometheus/exporters/node_exporter.crt
    key_file: /etc/prometheus/exporters/node_exporter.key

This does work, but not on HTTP2:

curl -Ivk https://localhost:9100/metrics
*   Trying 127.0.0.1:9100...
* Connected to localhost (127.0.0.1) port 9100 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256
* ALPN, server did not agree to a protocol
* Server certificate:
*  subject: CN=ip-172-16-209-7.eu-central-1.compute.internal prometheus node exporter
*  start date: Feb  9 21:31:32 2022 GMT
*  expire date: Feb  7 21:31:32 2032 GMT
*  issuer: CN=ip-172-16-209-7.eu-central-1.compute.internal prometheus node exporter
*  SSL certificate verify result: self signed certificate (18), continuing anyway.
> HEAD /metrics HTTP/1.1
> Host: localhost:9100
> User-Agent: curl/7.74.0
> Accept: */*
> 
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
HTTP/1.1 200 OK
< Content-Type: text/plain; version=0.0.4; charset=utf-8
Content-Type: text/plain; version=0.0.4; charset=utf-8
< Date: Wed, 09 Feb 2022 21:42:12 GMT
Date: Wed, 09 Feb 2022 21:42:12 GMT

< 
* Connection #0 to host localhost left intact

FYI, this is my curl:

curl 7.74.0 (x86_64-pc-linux-gnu) libcurl/7.74.0 OpenSSL/1.1.1k zlib/1.2.11 brotli/1.0.9 libidn2/2.3.0 libpsl/0.21.0 (+libidn2/2.3.0) libssh2/1.9.0 nghttp2/1.43.0 librtmp/2.3
Release-Date: 2020-12-09
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps mqtt pop3 pop3s rtmp rtsp scp sftp smb smbs smtp smtps telnet tftp 
Features: alt-svc AsynchDNS brotli GSS-API HTTP2 HTTPS-proxy IDN IPv6 Kerberos Largefile libz NTLM NTLM_WB PSL SPNEGO SSL TLS-SRP UnixSockets

What did you expect to see?

A response over HTTP2

What did you see instead?

A response over HTTP/1.1

dnmvisser avatar Feb 09 '22 21:02 dnmvisser

This error seems to be caused by the version of prometheus/exporter-toolkit. I upgrade it to v0.7.1 (which is used on current master branch) and then I can get HTTP/2 response. Tested on commit a2321e7b940ddcff26873612bccdf7cd4c42b6b6

#2409 discussed about the new release. @dnmvisser maybe you can wait for that?

Bogay avatar Sep 12 '22 10:09 Bogay

Yeah should be fixed in 1.4.0. Can you try the rc? Or the final release will go out today or in the next few days.

discordianfish avatar Sep 24 '22 14:09 discordianfish