https://github.com/arnauld/haproxy-telemetry
HAproxy SPOA implementation in RUST - for open-telemetry
https://github.com/arnauld/haproxy-telemetry
haproxy open-telemetry rust spoa
Last synced: 6 months ago
JSON representation
HAproxy SPOA implementation in RUST - for open-telemetry
- Host: GitHub
- URL: https://github.com/arnauld/haproxy-telemetry
- Owner: Arnauld
- Created: 2022-05-03T17:06:06.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2022-05-20T16:03:13.000Z (over 3 years ago)
- Last Synced: 2025-04-06T06:44:15.979Z (6 months ago)
- Topics: haproxy, open-telemetry, rust, spoa
- Language: Rust
- Homepage:
- Size: 104 KB
- Stars: 3
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.adoc
Awesome Lists containing this project
README
# HAProxy Telemetry
## HAProxy SPOE events/OTEL spans mapping
[plantuml, target=overview, format=svg]
....
@startuml
participant UserUser -> HAProxy: tcp
activate HAProxyHAProxy -> SPOA: on-client-session
activate SPOA
SPOA -> "SPAN/HAProxy session"
activate "SPAN/HAProxy session"
"SPAN/HAProxy session" -> "SPAN/Client session": child-of
activate "SPAN/Client session"
SPOA --> HAProxy
deactivate SPOAHAProxy -> SPOA: on-frontend-tcp-request
activate SPOA
SPOA --> "SPAN/Client session"
"SPAN/Client session" -> "SPAN/Frontend TCP request": child-of
activate "SPAN/Frontend TCP request"
HAProxy -> HAProxy: frontend/tcp-request content rules
SPOA --> HAProxy
deactivate SPOAHAProxy -> SPOA: on-frontend-http-request
activate SPOA
SPOA --> "SPAN/Frontend TCP request"
"SPAN/Frontend TCP request" -> "SPAN/Frontend HTTP request": follows from
activate "SPAN/Frontend HTTP request"
deactivate "SPAN/Frontend TCP request"
SPOA --> HAProxy
deactivate SPOA
HAProxy -> HAProxy: frontend/http-request content rulesHAProxy -> SPOA: on-backend-tcp-request
activate SPOA
SPOA --> "SPAN/Frontend HTTP request"
"SPAN/Frontend HTTP request" -> "SPAN/Backend TCP request": follows from
activate "SPAN/Backend TCP request"
deactivate "SPAN/Frontend HTTP request"
SPOA --> HAProxy
deactivate SPOA
HAProxy -> HAProxy: backend/tcp-request content rulesHAProxy -> SPOA: on-backend-http-request
activate SPOA
SPOA --> "SPAN/Backend TCP request"
"SPAN/Backend TCP request" -> "SPAN/Backend HTTP request": follows from
activate "SPAN/Backend HTTP request"
deactivate "SPAN/Backend TCP request"
SPOA --> HAProxy
deactivate SPOA
HAProxy -> HAProxy: backend/http-request content rulesHAProxy -> SPOA: on-server-session
activate SPOA
SPOA --> "SPAN/HAProxy session"
"SPAN/HAProxy session" -> "SPAN/Server session": child-of
activate "SPAN/Server session"
SPOA --> "SPAN/Backend HTTP request"
deactivate "SPAN/Backend HTTP request"
SPOA --> HAProxy
deactivate SPOAHAProxy -> SPOA: on-tcp-response
activate SPOA
SPOA --> "SPAN/Server session"
"SPAN/Server session" -> "SPAN/TCP response": child of
activate "SPAN/TCP response"
SPOA --> HAProxy
deactivate SPOAHAProxy -> SPOA: on-http-response
activate SPOA
SPOA --> "SPAN/TCP response"
"SPAN/TCP response" -> "SPAN/HTTP response"
activate "SPAN/HTTP response"
deactivate "SPAN/TCP response"
SPOA --> "SPAN/Server session"
deactivate "SPAN/Server session"
SPOA --> "SPAN/HTTP response"
deactivate "SPAN/HTTP response"
SPOA --> "SPAN/Client session"
deactivate "SPAN/Client session"
SPOA --> "SPAN/HAProxy session"
deactivate "SPAN/HAProxy session"
SPOA --> HAProxy
deactivate SPOAHAProxy -> User: http/response
deactivate HAProxy
@enduml
....## Development setup
### Overview
[ditaa, target=ditaa, format=svg]
....
| |
| |
7001v v8001
+-----------------+
| HAProxy~1 |
| |
| +------+ |
| | SPOE | |
| +----+-+ |
| | |
| v |
| +----+----+-----+
| | | | cBLU|
+-+-+--+--+-+--+--+ +-------------------+
| | | | 700x with SPOA {d}|
| | \-------\ | 800x no SPOA cFE7|
7002v v8002 | +-------------------/
+-----------------+ |
| HAProxy~2 | |
| | |
| +------+ | | (devenv/conf/haproxy~2.conf)
| | SPOE | | | (devenv/conf/spoe.cfg)
| +----+-+ | |
| | | |
| backends v | |
| +-------+-----+ |
| | | cBLU| | +-------------+
+---+--+----+--+--+ \-->| SPOA |
| | :7000 | |
| +---------->| cBLU |
| SPOP +-----+-------+
| |
:8080 v v
+------------+ +-------------+
| FakeServer +------------>| OTEL/jaeger |
+------------+ +-------------+
....### Start local setup
Start local `haproxy` + `fake-server` + `jaeger`
[source,bash]
....
cd devenv/
docker-compose up -d
curl http://localhost:7000
....[cols="1,2"]
|===
| Jaeger UI
| http://localhost:16686/| HAProxy stats
| http://localhost:7004/;norefresh| Rust SPOA
| :7001|===
### Start SPOA
[source,bash]
....
RUST_BACKTRACE=1 cargo run
....## Resources
* SPOP specifications: http://www.haproxy.org/download/2.6/doc/SPOE.txt
* _"Official"_ HAProxy SPOA "sample" (in c): https://github.com/haproxy/spoa-example
* _"Official"_ HAProxy SPOA open tracing "sample" (in c): https://github.com/haproxytech/spoa-opentracing
* HAProxy SPOA example (in rust): https://github.com/vkill/haproxy-spoa-example
* "Extending HAProxy with the Stream Processing Offload Engine" : https://www.haproxy.com/fr/blog/extending-haproxy-with-the-stream-processing-offload-engine/