Skip to main content

nameko-chassis provides an opinionated base class for building resilient, observable microservices.

Project description

docs

Documentation Status

tests

Github Actions Build Status
Coverage Status

package

PyPI Package latest release PyPI Wheel Supported versions Supported implementations
Commits since latest release

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

https://nameko-chassis.readthedocs.io/

Development

To run the all tests run:

tox

Authors

nameko-chassis is developed and maintained by Emplocity.

License

This work is released under the Apache 2.0 license.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nameko_chassis-3.1.0.tar.gz (20.3 kB view details)

Uploaded Source

Built Distribution

nameko_chassis-3.1.0-py3-none-any.whl (12.0 kB view details)

Uploaded Python 3

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

Hashes for nameko_chassis-3.1.0.tar.gz
Algorithm Hash digest
SHA256 8442041bb6b0ef7baa0781aa8491119785ffff4fcdecb6a2fdcc693be0447cfb
MD5 64b29d3ede99a107cd76d73286900e80
BLAKE2b-256 0c56ff8c575915b940a297e9db23b7207779d15ff1b552fd283252dd99f7b49b

See more details on using hashes here.

File details

Details for the file nameko_chassis-3.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for nameko_chassis-3.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6e3df2b4cae385b7e55074a5fe777df087f0b1db2fe1de78875fa5c7420cf245
MD5 8085edae344ee5bd9e09dd0ce7faef13
BLAKE2b-256 dc5ccdfe7448c4e3c21408f1f3734653b174e150ee84ba8903336a6b974d9cb4

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page