refactor the compose files in modules and start to generate prometheus scrape targets. added haproxy.

This commit is contained in:
Your Name
2022-02-13 20:49:01 +01:00
parent 34ad7988b4
commit 51c432ae78
7 changed files with 328 additions and 0 deletions

7
haproxy/Dockerfile Normal file
View File

@@ -0,0 +1,7 @@
FROM haproxy:alpine
USER root
RUN apk add --no-cache curl bash jq
USER haproxy
CMD ["haproxy", "-f", "/usr/local/etc/haproxy/haproxy.cfg"]

25
haproxy/ethereum-healthcheck.sh Executable file
View File

@@ -0,0 +1,25 @@
#!/bin/bash
# $1 = Virtual Service IP (VIP)
# $2 = Virtual Service Port (VPT)
# $3 = Real Server IP (RIP)
# $4 = Real Server Port (RPT)
# $5 = Check Source IP
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
VIP=$1
VPT=$2
RIP=$3
RPT=$4
# RPT=8545
# Run curl with appropriate options
curl -s -X POST -H "Content-Type: application/json" -m 2 -d '{"jsonrpc":"2.0","method":"eth_syncing","params": [],"id":1}' https://$HAPROXY_SERVER_NAME:$RPT/$HAPROXY_PROXY_NAME 2>/dev/null | jq '.result' -r | grep -q false
exit1=$?
peers=$(curl -s -X POST -H "Content-Type: application/json" -m 2 -d '{"jsonrpc":"2.0","method":"net_peerCount","params": [],"id":1}' https://$HAPROXY_SERVER_NAME:$RPT/$HAPROXY_PROXY_NAME 2>/dev/null | jq '.result' -r)
# If any of the above tests failed, then exit 1.
if [[ "$exit1" -ne 0 ]]; then exit 1; fi
if [[ `printf "%d" $peers` == "0" || `printf "%d" $peers` == "1" ]]; then exit 1; fi
exit 0

View File

@@ -0,0 +1,83 @@
global
#nbthread 2
cpu-map auto:1/1-2 0-1
log /dev/log local0
log /dev/log local1 notice
#chroot /var/lib/haproxy
user haproxy
group haproxy
daemon
external-check
insecure-fork-wanted
defaults
mode http
log global
option httplog
option http-keep-alive
option dontlognull
option redispatch
option contstats
retries 3
backlog 10000
timeout client 50s
timeout connect 5s
timeout server 50s
timeout tunnel 3600s
timeout http-keep-alive 2s
timeout http-request 15s
timeout queue 30s
timeout tarpit 60s
default-server inter 3s rise 2 fall 3
option forwardfor
listen stats
bind *:9600
stats enable
stats uri /stats
stats realm Haproxy\ Statistics
stats auth pocket:P@ssw0rd00!
frontend stats2
bind *:8404
#option http-use-htx
http-request use-service prometheus-exporter if { path /metrics }
stats enable
stats uri /stats
stats refresh 10s
frontend rpc-frontend
bind *:80
acl host_is_erigon path_beg /erigon
#acl host_is_goerli path_beg /goerli
#acl host_is_avalanche path_beg /avalanche
#acl host_is_ropsten path_beg /ropsten
#acl host_is_geth path_beg /geth
#acl host_is_rinkeby path_beg /rinkeby
use_backend erigon if host_is_erigon
#use_backend goerli if host_is_goerli
#use_backend avalanche if host_is_avalanche
#use_backend ropsten if host_is_ropsten
#use_backend geth if host_is_geth
#use_backend rinkeby if host_is_rinkeby
default_backend backend-no-match
backend backend-no-match
http-request deny deny_status 400
backend erigon
mode http
balance roundrobin
option external-check
external-check path "/usr/bin:/bin"
external-check command /usr/local/etc/haproxy/ethereum-healthcheck.sh
http-send-name-header Host
server rpc-de-1.stakesquid-db.ml rpc-de-1.stakesquid-db.ml:443 check inter 10000 fall 3 rise 2 maxconn 2000 ssl verify none
server rpc-fi-1.stakesquid-db.ml rpc-fi-1.stakesquid-db.ml:443 check inter 10000 fall 3 rise 2 maxconn 2000 ssl verify none backup