nixos/vector: journald-clickhouse test:

* Add boot_id to ORDER BY key
* Add ACL configuration to ClickHouse

Changed files
+57 -3
nixos
+57 -3
nixos/tests/vector/journald-clickhouse.nix
···
m = {}
m.app = .SYSLOG_IDENTIFIER
m.host = .host
+
m.boot_id = ._BOOT_ID
m.severity = to_int(.PRIORITY) ?? 0
m.level = to_syslog_level(m.severity) ?? ""
m.message = strip_ansi_escape_codes!(.message)
···
"vector_source"
];
endpoint = "http://localhost:8123";
+
auth = {
+
strategy = "basic";
+
user = "vector";
+
password = "helloclickhouseworld";
+
};
database = "journald";
table = "logs";
date_time_best_effort = true;
···
services.clickhouse = {
enable = true;
};
+
+
# ACL configuration for Vector
+
environment = {
+
etc."clickhouse-server/users.d/vector.xml".text = ''
+
<clickhouse>
+
<users>
+
<vector>
+
<password>helloclickhouseworld</password>
+
+
<access_management>0</access_management>
+
+
<quota>default</quota>
+
<default_database>journald</default_database>
+
+
<grants>
+
<query>GRANT INSERT ON journald.logs</query>
+
</grants>
+
</vector>
+
</users>
+
</clickhouse>
+
'';
+
+
# ACL configuration for read-only client
+
etc."clickhouse-server/users.d/grafana.xml".text = ''
+
<clickhouse>
+
<users>
+
<grafana>
+
<password>helloclickhouseworld2</password>
+
+
<access_management>0</access_management>
+
+
<quota>default</quota>
+
<default_database>journald</default_database>
+
+
<grants>
+
<query>GRANT SELECT ON journald.logs</query>
+
</grants>
+
</grafana>
+
</users>
+
</clickhouse>
+
'';
+
};
};
vector =
···
databaseDDL = pkgs.writeText "database.sql" "CREATE DATABASE IF NOT EXISTS journald";
# https://clickhouse.com/blog/storing-log-data-in-clickhouse-fluent-bit-vector-open-telemetry
+
# ORDER BY advice: https://kb.altinity.com/engines/mergetree-table-engine-family/pick-keys/
tableDDL = pkgs.writeText "table.sql" ''
CREATE TABLE IF NOT EXISTS journald.logs (
timestamp DateTime64(6),
+
host LowCardinality(String),
+
boot_id LowCardinality(String),
app LowCardinality(String),
-
host LowCardinality(String),
level LowCardinality(String),
severity UInt8,
message String,
···
pid UInt32,
)
ENGINE = MergeTree()
-
ORDER BY (host, app, timestamp)
+
ORDER BY (host, boot_id, toStartOfHour(timestamp), app, timestamp)
PARTITION BY toYYYYMM(timestamp)
'';
···
"journalctl -o cat -u vector.service | grep 'Vector has started'"
)
+
clickhouse.fail(
+
"cat ${selectQuery} | clickhouse-client --user vector --password helloclickhouseworld | grep 2"
+
)
+
clickhouse.wait_until_succeeds(
-
"cat ${selectQuery} | clickhouse-client | grep 2"
+
"cat ${selectQuery} | clickhouse-client --user grafana --password helloclickhouseworld2 | grep 2"
)
'';
}