Haproxy before InfluxDB
What we have: Telegraf with send stats to two influxdb servers and dashboard with we need point to only one server. Also we have Nagios as InfluxDB health monitoring.
Nagios check (as main trigger for influx health)
#cat /srv/check_influx.sh #!/bin/bash # # Script to make a proxy (ie HAProxy) capable of monitoring incoming InfluxDB data amount # Demonized via Xinetd STATE_OK=0 STATE_CRITICAL=2 STATE_UNKNOWN=3 USER_PASS="login:pass" HOST="https://127.0.0.1:8086" exec 2>/dev/null ping() { echo `curl -s -o /dev/null -w "%{http_code}" -k $HOST/ping -u $USER_PASS` } get() { echo `curl -s -G -k $HOST/query?pretty=true -u $USER_PASS --data-urlencode "$1" --data-urlencode "q=$2"` } main() { ping_hrsp=$(ping) ERR=0 if [ $ping_hrsp == '204' ]; then records=$(get "db=tcp_telegraf" "select count(*) from net where time > now() - 5m;" | jq ".results | .[0].series | .[0].values | .[] | .[length-1]" 2>/dev/null) #" if [ $records -ge 10000 ]; then OUT_HEAD="HTTP/1.1 200 OK $ping_hrsp $records\r\n" OUT_TEXT="OK Ping hrsp: $ping_hrsp ($records)\r\n" else OUT_HEAD="HTTP/1.1 503 ERR $ping_hrsp $records\r\n" OUT_TEXT="ERR Ping hrsp: $ping_hrsp ($records)\r\n" ERR=1 fi else OUT_HEAD="HTTP/1.1 503 ERR $ping_hrsp\r\n" OUT_TEXT="ERR Ping hrsp: $ping_hrsp\r\n" ERR=1 fi echo -en "$OUT_HEAD" echo -en "Content-Type: text/plain\r\n" echo -en "Connection: close\r\n" echo -en "Content-Length: $(echo "$OUT_TEXT" | wc -c)\r\n" echo -en "\r\n" echo -en "$OUT_TEXT" logger -i -t "check_influx.sh" "$OUT_TEXT" sleep 0.1 if [ $ERR == 0 ]; then exit $STATE_OK else exit $STATE_CRITICAL fi } case "$1" in check) main ;; *) echo "Usage: $0 check" ;; esac exit $STATE_UNKNOWN
Script return OK if we have more then 10k records.
Bad answer
#/srv/check_influx.sh check HTTP/1.1 503 ERR 204 179 Content-Type: text/plain Connection: close Content-Length: 29 ERR Ping hrsp: 204 (179)
Good answer
#curl http://1.1.1.1:9200 --head HTTP/1.1 200 OK 204 33452 Content-Type: text/plain Connection: close Content-Length: 30
Demonization via xinetd
# cat /etc/xinetd.d/influxchk service influxchk { disable = no flags = REUSE socket_type = stream type = UNLISTED port = 9200 wait = no user = nagios server = /srv/check_influx.sh server_args = check log_on_failure += USERID only_from = 0.0.0.0/0 per_source = UNLIMITED }
Haproxy backend
... listen influx_8086 mode http bind *:8086 ssl crt /etc/haproxy/ssl/cert.pem timeout client 10800s timeout server 10800s option forwardfor option httpchk default-server port 9200 inter 2s downinter 5s fall 3 rise 2 server aaa 1.1.1.1:8086 ssl verify none check server bbb 2.2.2.2:8086 ssl verify none check ...
Comments
Post a Comment