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
File details
Details for the file nameko_chassis-3.1.0.tar.gz
.
File metadata
- Download URL: nameko_chassis-3.1.0.tar.gz
- Upload date:
- Size: 20.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8442041bb6b0ef7baa0781aa8491119785ffff4fcdecb6a2fdcc693be0447cfb |
|
MD5 | 64b29d3ede99a107cd76d73286900e80 |
|
BLAKE2b-256 | 0c56ff8c575915b940a297e9db23b7207779d15ff1b552fd283252dd99f7b49b |
File details
Details for the file nameko_chassis-3.1.0-py3-none-any.whl
.
File metadata
- Download URL: nameko_chassis-3.1.0-py3-none-any.whl
- Upload date:
- Size: 12.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6e3df2b4cae385b7e55074a5fe777df087f0b1db2fe1de78875fa5c7420cf245 |
|
MD5 | 8085edae344ee5bd9e09dd0ce7faef13 |
|
BLAKE2b-256 | dc5ccdfe7448c4e3c21408f1f3734653b174e150ee84ba8903336a6b974d9cb4 |