at 23.11-beta 2.1 kB view raw
1import ./make-test-python.nix ({ pkgs, ...} : let 2 port = 4318; 3in { 4 name = "opentelemetry-collector"; 5 meta = with pkgs.lib.maintainers; { 6 maintainers = [ tylerjl ]; 7 }; 8 9 nodes.machine = { ... }: { 10 networking.firewall.allowedTCPPorts = [ port ]; 11 services.opentelemetry-collector = { 12 enable = true; 13 settings = { 14 exporters.logging.verbosity = "detailed"; 15 receivers.otlp.protocols.http = {}; 16 service = { 17 pipelines.logs = { 18 receivers = [ "otlp" ]; 19 exporters = [ "logging" ]; 20 }; 21 }; 22 }; 23 }; 24 virtualisation.forwardPorts = [{ 25 host.port = port; 26 guest.port = port; 27 }]; 28 }; 29 30 extraPythonPackages = p: [ 31 p.requests 32 p.types-requests 33 ]; 34 35 # Send a log event through the OTLP pipeline and check for its 36 # presence in the collector logs. 37 testScript = /* python */ '' 38 import requests 39 import time 40 41 from uuid import uuid4 42 43 flag = str(uuid4()) 44 45 machine.wait_for_unit("opentelemetry-collector.service") 46 machine.wait_for_open_port(${toString port}) 47 48 event = { 49 "resourceLogs": [ 50 { 51 "resource": {"attributes": []}, 52 "scopeLogs": [ 53 { 54 "logRecords": [ 55 { 56 "timeUnixNano": str(time.time_ns()), 57 "severityNumber": 9, 58 "severityText": "Info", 59 "name": "logTest", 60 "body": { 61 "stringValue": flag 62 }, 63 "attributes": [] 64 }, 65 ] 66 } 67 ] 68 } 69 ] 70 } 71 72 response = requests.post("http://localhost:${toString port}/v1/logs", json=event) 73 assert response.status_code == 200 74 assert flag in machine.execute("journalctl -u opentelemetry-collector")[-1] 75 ''; 76})