68 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
import ./make-test.nix {
 | 
						|
  name = "prometheus-2";
 | 
						|
 | 
						|
  nodes = {
 | 
						|
    one = { pkgs, ... }: {
 | 
						|
      environment.systemPackages = [ pkgs.jq ];
 | 
						|
      services.prometheus2 = {
 | 
						|
        enable = true;
 | 
						|
        scrapeConfigs = [
 | 
						|
          {
 | 
						|
            job_name = "prometheus";
 | 
						|
            static_configs = [
 | 
						|
              {
 | 
						|
                targets = [ "127.0.0.1:9090" ];
 | 
						|
                labels = { instance = "localhost"; };
 | 
						|
              }
 | 
						|
            ];
 | 
						|
          }
 | 
						|
          {
 | 
						|
            job_name = "pushgateway";
 | 
						|
            scrape_interval = "1s";
 | 
						|
            static_configs = [
 | 
						|
              {
 | 
						|
                targets = [ "127.0.0.1:9091" ];
 | 
						|
              }
 | 
						|
            ];
 | 
						|
          }
 | 
						|
        ];
 | 
						|
        rules = [
 | 
						|
          ''
 | 
						|
            groups:
 | 
						|
              - name: test
 | 
						|
                rules:
 | 
						|
                  - record: testrule
 | 
						|
                    expr: count(up{job="prometheus"})
 | 
						|
          ''
 | 
						|
        ];
 | 
						|
      };
 | 
						|
      services.prometheus.pushgateway = {
 | 
						|
        enable = true;
 | 
						|
        persistMetrics = true;
 | 
						|
        persistence.interval = "1s";
 | 
						|
        stateDir = "prometheus-pushgateway";
 | 
						|
      };
 | 
						|
    };
 | 
						|
  };
 | 
						|
 | 
						|
  testScript = ''
 | 
						|
    startAll;
 | 
						|
    $one->waitForUnit("prometheus2.service");
 | 
						|
    $one->waitForOpenPort(9090);
 | 
						|
    $one->succeed("curl -s http://127.0.0.1:9090/metrics");
 | 
						|
 | 
						|
    # Let's test if pushing a metric to the pushgateway succeeds
 | 
						|
    # and whether that metric gets ingested by prometheus.
 | 
						|
    $one->waitForUnit("pushgateway.service");
 | 
						|
    $one->succeed(
 | 
						|
      "echo 'some_metric 3.14' | " .
 | 
						|
      "curl --data-binary \@- http://127.0.0.1:9091/metrics/job/some_job");
 | 
						|
    $one->waitUntilSucceeds(
 | 
						|
      "curl -sf 'http://127.0.0.1:9090/api/v1/query?query=some_metric' " .
 | 
						|
      "| jq '.data.result[0].value[1]' | grep '\"3.14\"'");
 | 
						|
 | 
						|
    # Let's test if the pushgateway persists metrics to the configured location.
 | 
						|
    $one->waitUntilSucceeds("test -e /var/lib/prometheus-pushgateway/metrics");
 | 
						|
  '';
 | 
						|
}
 |