nameko-chassis provides an opinionated base class for building resilient, observable microservices.
Project description
docs |
|
---|---|
tests |
|
package |
nameko-chassis provides an opinionated base class for building resilient, observable microservices with the nameko framework.
nameko-chassis releases and distributed tracing
We’ve changed the approach to distributed tracing over a few releases. Here’s an overview:
0.9.0 supports only nameko 2 and has Zipkin integration
1.0 supports both nameko 2 and 3 RC, while dropping Zipkin. If you need Zipkin support and your service is still on nameko 2, either stay on nameko-chassis 0.9, or upgrade to 1.x and manage nameko-zipkin yourself.
2.0 supports only nameko v3 and provides a predefined OpenTelemetry integration to base Service class. You can still use OpenTelemetry with nameko-chassis 1.0 (provided you’re using nameko 3), but before 2.0 you’ll need to set it up yourself.
Features
By using nameko_chassis.service.Service, you’ll get:
error reporting using Sentry
integrated metrics endpoint for Prometheus
helpers for service discovery
partial* support for OpenTelemetry tracing
*You’ll need to call the instrumentors yourself, but we provide basic configuration as a dependency provider.
Installation
pip install nameko-chassis
You can also install the in-development version with:
pip install https://github.com/Emplocity/nameko-chassis/archive/master.zip
Usage
Base service class
from nameko.rpc import rpc
from nameko_chassis.service import Service
class MyService(Service):
name = "my_service"
@rpc
def my_method(self):
try:
do_something()
except Exception:
self.sentry.captureException()
Distributed tracing
Since nameko-chassis 2.0, we provide an opinionated setup of OpenTelemetry. Your services will export traces over HTTP to an endpoint defined in OTEL_EXPORTER_OTLP_ENDPOINT environment variable. However, you need to call instrumentors yourself, for example:
from nameko_chassis.service import Service
from nameko_opentelemetry import NamekoInstrumentor
from opentelemetry.instrumentation.logging import LoggingInstrumentor
LoggingInstrumentor().instrument()
NamekoInstrumentor().instrument(
send_headers=True,
send_request_payloads=True,
send_response_payloads=True,
max_truncate_length=1000,
)
class MyService(Service):
name = "my_service"
Backdoor debugging
nameko-chassis.debug includes helpers for introspecting running services with nameko backdoor feature. For example if your service exposes backdoor on port 12345:
$ rlwrap nc -v localhost 12345 Connection to localhost 12345 port [tcp/*] succeeded! Python 3.8.8 (default, Mar 23 2021, 11:02:14) [GCC 9.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>> from nameko_chassis.debug import debug_runner >>> debug_runner(runner) ╭──────────────────────────── sleeping_http_service ───────────────────────────╮ │ 19 entrypoints │ │ 15 dependencies │ │ running 1/10 worker threads │ │ ╭────────────────── Thread #0: SleepingHttpService.sleep ──────────────────╮ │ │ │ │ │ │ │ Args: ["<Request 'http://127.0.0.1:8000/sleep/500' [GET]>"] │ │ │ │ Kwargs: {'duration': '500'} │ │ │ │ Context data: {'X-B3-ParentSpanId': '1058ef878ab0fe32'} │ │ │ │ │ │ │ │ Traceback: │ │ │ │ File │ │ │ │ "/home/zbigniewsiciarz/v/sleephttp/lib/python3.8/site-packages/eventlet… │ │ │ │ line 221, in main │ │ │ │ result = function(*args, **kwargs) │ │ │ │ File │ │ │ │ "/home/zbigniewsiciarz/v/sleephttp/lib/python3.8/site-packages/nameko/c… │ │ │ │ line 392, in _run_worker │ │ │ │ result = method(*worker_ctx.args, **worker_ctx.kwargs) │ │ │ │ File "./app/service.py", line 73, in sleep │ │ │ │ time.sleep(duration) │ │ │ │ File │ │ │ │ "/home/zbigniewsiciarz/v/sleephttp/lib/python3.8/site-packages/eventlet… │ │ │ │ line 36, in sleep │ │ │ │ hub.switch() │ │ │ │ File │ │ │ │ "/home/zbigniewsiciarz/v/sleephttp/lib/python3.8/site-packages/eventlet… │ │ │ │ line 313, in switch │ │ │ │ return self.greenlet.switch() │ │ │ │ │ │ │ ╰──────────────────────────────────────────────────────────────────────────╯ │ ╰──────────────────────────────────────────────────────────────────────────────╯
Documentation
Development
To run the all tests run:
tox
License
This work is released under the Apache 2.0 license.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for nameko_chassis-3.0.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a556486b4260ac3d2f41636bcc0eebbd6eb9aadde490760bcd7388de3a177c32 |
|
MD5 | cfec8fe09f8f1b9af75f6c166749e038 |
|
BLAKE2b-256 | aa032953b85c5f3f7a4a7e737c5c06845e24733926e512284c55186741fc7b6e |