Merge pull request #5491 from offlinehacker/cadvisor
Add cadvisor package and nixos module
This commit is contained in:
commit
1b19b7a3bf
@ -174,6 +174,7 @@
|
|||||||
chronos = 164;
|
chronos = 164;
|
||||||
gitlab = 165;
|
gitlab = 165;
|
||||||
tox-bootstrapd = 166;
|
tox-bootstrapd = 166;
|
||||||
|
cadvisor = 167;
|
||||||
|
|
||||||
# When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399!
|
# When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399!
|
||||||
|
|
||||||
|
@ -197,6 +197,7 @@
|
|||||||
./services/misc/zookeeper.nix
|
./services/misc/zookeeper.nix
|
||||||
./services/monitoring/apcupsd.nix
|
./services/monitoring/apcupsd.nix
|
||||||
./services/monitoring/bosun.nix
|
./services/monitoring/bosun.nix
|
||||||
|
./services/monitoring/cadvisor.nix
|
||||||
./services/monitoring/collectd.nix
|
./services/monitoring/collectd.nix
|
||||||
./services/monitoring/dd-agent.nix
|
./services/monitoring/dd-agent.nix
|
||||||
./services/monitoring/graphite.nix
|
./services/monitoring/graphite.nix
|
||||||
|
106
nixos/modules/services/monitoring/cadvisor.nix
Normal file
106
nixos/modules/services/monitoring/cadvisor.nix
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
{ config, pkgs, lib, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
cfg = config.services.cadvisor;
|
||||||
|
|
||||||
|
in {
|
||||||
|
options = {
|
||||||
|
services.cadvisor = {
|
||||||
|
enable = mkOption {
|
||||||
|
default = false;
|
||||||
|
type = types.bool;
|
||||||
|
description = "Wherther to enable cadvisor service.";
|
||||||
|
};
|
||||||
|
|
||||||
|
host = mkOption {
|
||||||
|
default = "127.0.0.1";
|
||||||
|
type = types.str;
|
||||||
|
description = "Cadvisor listening host";
|
||||||
|
};
|
||||||
|
|
||||||
|
port = mkOption {
|
||||||
|
default = 8080;
|
||||||
|
type = types.int;
|
||||||
|
description = "Cadvisor listening port";
|
||||||
|
};
|
||||||
|
|
||||||
|
storageDriver = mkOption {
|
||||||
|
default = null;
|
||||||
|
type = types.nullOr types.str;
|
||||||
|
example = "influxdb";
|
||||||
|
description = "Cadvisor storage driver.";
|
||||||
|
};
|
||||||
|
|
||||||
|
storageDriverHost = mkOption {
|
||||||
|
default = "localhost:8086";
|
||||||
|
type = types.str;
|
||||||
|
description = "Cadvisor storage driver host.";
|
||||||
|
};
|
||||||
|
|
||||||
|
storageDriverDb = mkOption {
|
||||||
|
default = "root";
|
||||||
|
type = types.str;
|
||||||
|
description = "Cadvisord storage driver database name.";
|
||||||
|
};
|
||||||
|
|
||||||
|
storageDriverUser = mkOption {
|
||||||
|
default = "root";
|
||||||
|
type = types.str;
|
||||||
|
description = "Cadvisor storage driver username.";
|
||||||
|
};
|
||||||
|
|
||||||
|
storageDriverPassword = mkOption {
|
||||||
|
default = "root";
|
||||||
|
type = types.str;
|
||||||
|
description = "Cadvisor storage driver password.";
|
||||||
|
};
|
||||||
|
|
||||||
|
storageDriverSecure = mkOption {
|
||||||
|
default = false;
|
||||||
|
type = types.bool;
|
||||||
|
description = "Cadvisor storage driver, enable secure communication.";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
systemd.services.cadvisor = {
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
after = [ "network.target" "docker.service" "influxdb.service" ];
|
||||||
|
|
||||||
|
postStart = mkBefore ''
|
||||||
|
until ${pkgs.curl}/bin/curl -s -o /dev/null 'http://${cfg.host}:${toString cfg.port}/containers/'; do
|
||||||
|
sleep 1;
|
||||||
|
done
|
||||||
|
'';
|
||||||
|
|
||||||
|
serviceConfig = {
|
||||||
|
ExecStart = ''${pkgs.cadvisor}/bin/cadvisor \
|
||||||
|
-logtostderr=true \
|
||||||
|
-listen_ip=${cfg.host} \
|
||||||
|
-port=${toString cfg.port} \
|
||||||
|
${optionalString (cfg.storageDriver != null) ''
|
||||||
|
-storage_driver ${cfg.storageDriver} \
|
||||||
|
-storage_driver_user ${cfg.storageDriverHost} \
|
||||||
|
-storage_driver_db ${cfg.storageDriverDb} \
|
||||||
|
-storage_driver_user ${cfg.storageDriverUser} \
|
||||||
|
-storage_driver_password ${cfg.storageDriverPassword} \
|
||||||
|
${optionalString cfg.storageDriverSecure "-storage_driver_secure"}
|
||||||
|
''}
|
||||||
|
'';
|
||||||
|
User = "cadvisor";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
virtualisation.docker.enable = true;
|
||||||
|
|
||||||
|
users.extraUsers = singleton {
|
||||||
|
name = "cadvisor";
|
||||||
|
uid = config.ids.uids.cadvisor;
|
||||||
|
description = "Cadvisor user";
|
||||||
|
extraGroups = [ "docker" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
@ -242,6 +242,7 @@ in rec {
|
|||||||
tests.avahi = callTest tests/avahi.nix {};
|
tests.avahi = callTest tests/avahi.nix {};
|
||||||
tests.bittorrent = callTest tests/bittorrent.nix {};
|
tests.bittorrent = callTest tests/bittorrent.nix {};
|
||||||
tests.blivet = callTest tests/blivet.nix {};
|
tests.blivet = callTest tests/blivet.nix {};
|
||||||
|
tests.cadvisor = scrubDrv (import tests/cadvisor.nix { system = "x86_64-linux"; });
|
||||||
tests.chromium = callTest tests/chromium.nix {};
|
tests.chromium = callTest tests/chromium.nix {};
|
||||||
tests.cjdns = callTest tests/cjdns.nix {};
|
tests.cjdns = callTest tests/cjdns.nix {};
|
||||||
tests.containers = callTest tests/containers.nix {};
|
tests.containers = callTest tests/containers.nix {};
|
||||||
|
30
nixos/tests/cadvisor.nix
Normal file
30
nixos/tests/cadvisor.nix
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
import ./make-test.nix {
|
||||||
|
name = "cadvisor";
|
||||||
|
|
||||||
|
nodes = {
|
||||||
|
machine = { config, pkgs, ... }: {
|
||||||
|
services.cadvisor.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
influxdb = { config, pkgs, lib, ... }: with lib; {
|
||||||
|
services.cadvisor.enable = true;
|
||||||
|
services.cadvisor.storageDriver = "influxdb";
|
||||||
|
services.influxdb.enable = true;
|
||||||
|
systemd.services.influxdb.postStart = mkAfter ''
|
||||||
|
${pkgs.curl}/bin/curl -X POST 'http://localhost:8086/db?u=root&p=root' \
|
||||||
|
-d '{"name": "root"}'
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
testScript =
|
||||||
|
''
|
||||||
|
startAll;
|
||||||
|
$machine->waitForUnit("cadvisor.service");
|
||||||
|
$machine->succeed("curl http://localhost:8080/containers/");
|
||||||
|
|
||||||
|
$influxdb->waitForUnit("influxdb.service");
|
||||||
|
$influxdb->waitForUnit("cadvisor.service");
|
||||||
|
$influxdb->succeed("curl http://localhost:8080/containers/");
|
||||||
|
'';
|
||||||
|
}
|
34
pkgs/servers/monitoring/cadvisor/default.nix
Normal file
34
pkgs/servers/monitoring/cadvisor/default.nix
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
{ stdenv, lib, go, fetchFromGitHub }:
|
||||||
|
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
name = "cadvisor-${version}";
|
||||||
|
version = "0.7.1";
|
||||||
|
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "google";
|
||||||
|
repo = "cadvisor";
|
||||||
|
rev = "${version}";
|
||||||
|
sha256 = "1vc9fydi6wra45khxsmfw5mx2qyggi7cg6kgajzw518rqa52ivmg";
|
||||||
|
};
|
||||||
|
|
||||||
|
buildInputs = [ go ];
|
||||||
|
|
||||||
|
buildPhase = ''
|
||||||
|
mkdir -p Godeps/_workspace/src/github.com/google/
|
||||||
|
ln -s $(pwd) Godeps/_workspace/src/github.com/google/cadvisor
|
||||||
|
GOPATH=$(pwd)/Godeps/_workspace go build -v -o cadvisor github.com/google/cadvisor
|
||||||
|
'';
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p $out/bin
|
||||||
|
mv cadvisor $out/bin
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = with stdenv.lib; {
|
||||||
|
description = "Analyzes resource usage and performance characteristics of running docker containers.";
|
||||||
|
homepage = https://github.com/google/cadvisor;
|
||||||
|
license = licenses.asl20;
|
||||||
|
maintainers = with maintainers; [ offline ];
|
||||||
|
platforms = platforms.unix;
|
||||||
|
};
|
||||||
|
}
|
@ -7555,6 +7555,8 @@ let
|
|||||||
apacheHttpdPackages_2_2 = apacheHttpdPackagesFor pkgs.apacheHttpd_2_2 pkgs.apacheHttpdPackages_2_2;
|
apacheHttpdPackages_2_2 = apacheHttpdPackagesFor pkgs.apacheHttpd_2_2 pkgs.apacheHttpdPackages_2_2;
|
||||||
apacheHttpdPackages_2_4 = apacheHttpdPackagesFor pkgs.apacheHttpd_2_4 pkgs.apacheHttpdPackages_2_4;
|
apacheHttpdPackages_2_4 = apacheHttpdPackagesFor pkgs.apacheHttpd_2_4 pkgs.apacheHttpdPackages_2_4;
|
||||||
|
|
||||||
|
cadvisor = callPackage ../servers/monitoring/cadvisor { };
|
||||||
|
|
||||||
cassandra = callPackage ../servers/nosql/cassandra { };
|
cassandra = callPackage ../servers/nosql/cassandra { };
|
||||||
|
|
||||||
apache-jena = callPackage ../servers/nosql/apache-jena/binary.nix {
|
apache-jena = callPackage ../servers/nosql/apache-jena/binary.nix {
|
||||||
|
Loading…
Reference in New Issue
Block a user