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