public-access-proxy: collect haproxy stats
This commit is contained in:
parent
d72ae64d7d
commit
7830b1a2b3
|
@ -3,6 +3,7 @@
|
|||
{
|
||||
imports = [
|
||||
./proxy.nix
|
||||
./stats.nix
|
||||
];
|
||||
|
||||
networking.hostName = "public-access-proxy";
|
||||
|
@ -40,5 +41,4 @@
|
|||
networking.firewall.allowedTCPPorts = [ 80 443 ];
|
||||
|
||||
system.stateVersion = "18.09";
|
||||
|
||||
}
|
||||
|
|
43
hosts/containers/public-access-proxy/haproxy-stats.rb
Executable file
43
hosts/containers/public-access-proxy/haproxy-stats.rb
Executable file
|
@ -0,0 +1,43 @@
|
|||
#!/usr/bin/env ruby
|
||||
|
||||
require 'socket'
|
||||
|
||||
HOSTNAME = IO::readlines("/proc/sys/kernel/hostname").join.chomp
|
||||
INTERVAL = 60
|
||||
|
||||
def read_stats
|
||||
sock = UNIXSocket.new("/run/haproxy/haproxy-stats.sock")
|
||||
sock.send "show stat\n", 0
|
||||
data = sock.read()
|
||||
sock.close
|
||||
|
||||
cols = []
|
||||
results = []
|
||||
data.lines.each do |line|
|
||||
line.chomp!
|
||||
if line =~ /^#\s*(.+)$/
|
||||
cols = $1.split(/,/)
|
||||
else
|
||||
rec = {}
|
||||
cols.zip(line.split(/,/)).each do |col,val|
|
||||
rec[col] = val if val and not val.empty?
|
||||
end
|
||||
results << rec
|
||||
end
|
||||
end
|
||||
results
|
||||
end
|
||||
|
||||
loop do
|
||||
read_stats.each do |rec|
|
||||
pxname = rec['pxname']
|
||||
svname = rec['svname']
|
||||
rec.each do |key,val|
|
||||
next if key == 'pxname' or key == 'svname' or not val =~ /^\d+$/
|
||||
|
||||
puts "PUTVAL \"#{HOSTNAME}/haproxy_#{pxname}-#{svname}/current-#{key}\" interval=#{INTERVAL} N:#{val}"
|
||||
end
|
||||
end
|
||||
|
||||
sleep INTERVAL
|
||||
end
|
14
hosts/containers/public-access-proxy/stats.nix
Normal file
14
hosts/containers/public-access-proxy/stats.nix
Normal file
|
@ -0,0 +1,14 @@
|
|||
{ pkgs, lib, ... }:
|
||||
{
|
||||
c3d2.hq.statistics.enable = true;
|
||||
|
||||
services.collectd.plugins.exec = ''
|
||||
Exec "collectd" "${pkgs.ruby}/bin/ruby" "${./haproxy-stats.rb}"
|
||||
'';
|
||||
|
||||
# add a socket that is world-accessible
|
||||
services.haproxy.config = ''
|
||||
global
|
||||
stats socket /run/haproxy/haproxy-stats.sock mode 666
|
||||
'';
|
||||
}
|
Loading…
Reference in New Issue
Block a user