nixosTests.elk: port to python
This commit is contained in:
parent
c44331dd5d
commit
8ecd07f9e3
@ -6,20 +6,12 @@
|
|||||||
# NIXPKGS_ALLOW_UNFREE=1 nix-build nixos/tests/elk.nix -A ELK-6 --arg enableUnfree true
|
# NIXPKGS_ALLOW_UNFREE=1 nix-build nixos/tests/elk.nix -A ELK-6 --arg enableUnfree true
|
||||||
}:
|
}:
|
||||||
|
|
||||||
with import ../lib/testing.nix { inherit system pkgs; };
|
|
||||||
with pkgs.lib;
|
|
||||||
|
|
||||||
let
|
let
|
||||||
esUrl = "http://localhost:9200";
|
esUrl = "http://localhost:9200";
|
||||||
|
|
||||||
totalHits = message :
|
|
||||||
"curl --silent --show-error '${esUrl}/_search' -H 'Content-Type: application/json' " +
|
|
||||||
''-d '{\"query\" : { \"match\" : { \"message\" : \"${message}\"}}}' '' +
|
|
||||||
"| jq .hits.total";
|
|
||||||
|
|
||||||
mkElkTest = name : elk :
|
mkElkTest = name : elk :
|
||||||
let elasticsearchGe7 = builtins.compareVersions elk.elasticsearch.version "7" >= 0;
|
let elasticsearchGe7 = builtins.compareVersions elk.elasticsearch.version "7" >= 0;
|
||||||
in makeTest {
|
in import ./make-test-python.nix ({
|
||||||
inherit name;
|
inherit name;
|
||||||
meta = with pkgs.stdenv.lib.maintainers; {
|
meta = with pkgs.stdenv.lib.maintainers; {
|
||||||
maintainers = [ eelco offline basvandijk ];
|
maintainers = [ eelco offline basvandijk ];
|
||||||
@ -50,15 +42,15 @@ let
|
|||||||
elk.journalbeat.version "6" < 0; in {
|
elk.journalbeat.version "6" < 0; in {
|
||||||
enable = true;
|
enable = true;
|
||||||
package = elk.journalbeat;
|
package = elk.journalbeat;
|
||||||
extraConfig = mkOptionDefault (''
|
extraConfig = pkgs.lib.mkOptionDefault (''
|
||||||
logging:
|
logging:
|
||||||
to_syslog: true
|
to_syslog: true
|
||||||
level: warning
|
level: warning
|
||||||
metrics.enabled: false
|
metrics.enabled: false
|
||||||
output.elasticsearch:
|
output.elasticsearch:
|
||||||
hosts: [ "127.0.0.1:9200" ]
|
hosts: [ "127.0.0.1:9200" ]
|
||||||
${optionalString lt6 "template.enabled: false"}
|
${pkgs.lib.optionalString lt6 "template.enabled: false"}
|
||||||
'' + optionalString (!lt6) ''
|
'' + pkgs.lib.optionalString (!lt6) ''
|
||||||
journalbeat.inputs:
|
journalbeat.inputs:
|
||||||
- paths: []
|
- paths: []
|
||||||
seek: cursor
|
seek: cursor
|
||||||
@ -130,11 +122,23 @@ let
|
|||||||
};
|
};
|
||||||
|
|
||||||
testScript = ''
|
testScript = ''
|
||||||
startAll;
|
import json
|
||||||
|
|
||||||
# Wait until elasticsearch is listening for connections.
|
|
||||||
$one->waitForUnit("elasticsearch.service");
|
def total_hits(message):
|
||||||
$one->waitForOpenPort(9200);
|
dictionary = {"query": {"match": {"message": message}}}
|
||||||
|
return (
|
||||||
|
"curl --silent --show-error '${esUrl}/_search' "
|
||||||
|
+ "-H 'Content-Type: application/json' "
|
||||||
|
+ "-d '{}' ".format(json.dumps(dictionary))
|
||||||
|
+ "| jq .hits.total"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
start_all()
|
||||||
|
|
||||||
|
one.wait_for_unit("elasticsearch.service")
|
||||||
|
one.wait_for_open_port(9200)
|
||||||
|
|
||||||
# Continue as long as the status is not "red". The status is probably
|
# Continue as long as the status is not "red". The status is probably
|
||||||
# "yellow" instead of "green" because we are using a single elasticsearch
|
# "yellow" instead of "green" because we are using a single elasticsearch
|
||||||
@ -142,42 +146,43 @@ let
|
|||||||
#
|
#
|
||||||
# TODO: extend this test with multiple elasticsearch nodes
|
# TODO: extend this test with multiple elasticsearch nodes
|
||||||
# and see if the status turns "green".
|
# and see if the status turns "green".
|
||||||
$one->waitUntilSucceeds(
|
one.wait_until_succeeds(
|
||||||
"curl --silent --show-error '${esUrl}/_cluster/health' " .
|
"curl --silent --show-error '${esUrl}/_cluster/health' | jq .status | grep -v red"
|
||||||
"| jq .status | grep -v red");
|
)
|
||||||
|
|
||||||
# Perform some simple logstash tests.
|
with subtest("Perform some simple logstash tests"):
|
||||||
$one->waitForUnit("logstash.service");
|
one.wait_for_unit("logstash.service")
|
||||||
$one->waitUntilSucceeds("cat /tmp/logstash.out | grep flowers");
|
one.wait_until_succeeds("cat /tmp/logstash.out | grep flowers")
|
||||||
$one->waitUntilSucceeds("cat /tmp/logstash.out | grep -v dragons");
|
one.wait_until_succeeds("cat /tmp/logstash.out | grep -v dragons")
|
||||||
|
|
||||||
# See if kibana is healthy.
|
with subtest("Kibana is healthy"):
|
||||||
$one->waitForUnit("kibana.service");
|
one.wait_for_unit("kibana.service")
|
||||||
$one->waitUntilSucceeds(
|
one.wait_until_succeeds(
|
||||||
"curl --silent --show-error 'http://localhost:5601/api/status' " .
|
"curl --silent --show-error 'http://localhost:5601/api/status' | jq .status.overall.state | grep green"
|
||||||
"| jq .status.overall.state | grep green");
|
)
|
||||||
|
|
||||||
# See if logstash messages arive in elasticsearch.
|
with subtest("Logstash messages arive in elasticsearch"):
|
||||||
$one->waitUntilSucceeds("${totalHits "flowers"} | grep -v 0");
|
one.wait_until_succeeds(total_hits("flowers") + " | grep -v 0")
|
||||||
$one->waitUntilSucceeds("${totalHits "dragons"} | grep 0");
|
one.wait_until_succeeds(total_hits("dragons") + " | grep 0")
|
||||||
|
|
||||||
# Test if a message logged to the journal
|
with subtest(
|
||||||
# is ingested by elasticsearch via journalbeat.
|
"A message logged to the journal is ingested by elasticsearch via journalbeat"
|
||||||
$one->waitForUnit("journalbeat.service");
|
):
|
||||||
$one->execute("echo 'Supercalifragilisticexpialidocious' | systemd-cat");
|
one.wait_for_unit("journalbeat.service")
|
||||||
$one->waitUntilSucceeds(
|
one.execute("echo 'Supercalifragilisticexpialidocious' | systemd-cat")
|
||||||
"${totalHits "Supercalifragilisticexpialidocious"} | grep -v 0");
|
one.wait_until_succeeds(
|
||||||
|
total_hits("Supercalifragilisticexpialidocious") + " | grep -v 0"
|
||||||
'' + optionalString (!elasticsearchGe7) ''
|
)
|
||||||
# Test elasticsearch-curator.
|
'' + pkgs.lib.optionalString (!elasticsearchGe7) ''
|
||||||
$one->systemctl("stop logstash");
|
with subtest("Elasticsearch-curator works"):
|
||||||
$one->systemctl("start elasticsearch-curator");
|
one.systemctl("stop logstash")
|
||||||
$one->waitUntilSucceeds(
|
one.systemctl("start elasticsearch-curator")
|
||||||
"! curl --silent --show-error '${esUrl}/_cat/indices' " .
|
one.wait_until_succeeds(
|
||||||
"| grep logstash | grep -q ^$1");
|
'! curl --silent --show-error "${esUrl}/_cat/indices" | grep logstash | grep -q ^'
|
||||||
|
)
|
||||||
'';
|
'';
|
||||||
};
|
}) {};
|
||||||
in mapAttrs mkElkTest {
|
in pkgs.lib.mapAttrs mkElkTest {
|
||||||
ELK-6 =
|
ELK-6 =
|
||||||
if enableUnfree
|
if enableUnfree
|
||||||
then {
|
then {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user