Skip to main content

The charmlibs.interfaces.otlp package.

Project description

charmlibs.interfaces.otlp

The otlp library.

OTLP integration library for Juju charms, providing OTLP endpoint information for communicating OTLP data and associated Loki and Prometheus rules.

Features

  • Provider/Requirer pattern: Enables charms to share OTLP endpoint information and rules content
  • Define endpoint support: Providers and requirers define what OTLP protocols and telemetries they support.
  • Rules interface: Add rules to a 'RuleStore' object and provide that to the requirer for publishing.
  • Automatic topology injection: Inject Juju topology labels into rule expressions and labels with metadata if the labels are not already labeled.

Getting started

To install, add charmlibs-interfaces-otlp to your Python dependencies. Then in your Python code, import as:

from charmlibs.interfaces.otlp import OtlpProvider, OtlpRequirer

Provider Side

from charmlibs.interfaces.otlp import OtlpProvider

class MyOtlpServer(CharmBase):
    def __init__(self, *args):
        super().__init__(*args)
        self.framework.observe(self.on.ingress_ready, self._publish_endpoints)
        self.framework.observe(self.on.update_status, self._access_rules)

    def _publish_endpoints(self, event):
        OtlpProvider(self).add_endpoint(
            protocol="grpc",
            endpoint="https://my-app.ingress:4317",
            telemetries=["logs", "metrics"],
        ).add_endpoint(
            protocol="http",
            endpoint="https://my-app.ingress:4318",
            telemetries=["traces"],
        ).publish()

    def _access_rules(self, event):
        OtlpProvider(self).rules("promql")
        OtlpProvider(self).rules("logql")

Requirer Side

from charmlibs.interfaces.otlp import OtlpRequirer, RulesStore

class MyOtlpSender(CharmBase):
    def __init__(self, framework: ops.Framework):
        super().__init__(framework)
        self.framework.observe(self.on.update_status, self._access_endpoints)
        self.framework.observe(self.on.update_status, self._publish_rules)

    def _publish_rules(self, _: ops.EventBase):
        rules = (
            RuleStore(JujuTopology.from_charm(self))
            .add_logql(SINGLE_LOGQL_ALERT, group_name='test_logql_alert')
            .add_promql(SINGLE_PROMQL_RECORD, group_name='test_promql_record')
            .add_logql(OFFICIAL_LOGQL_RULES)
        )
        OtlpRequirer(self, rules=rules).publish()

    def _access_endpoints(self, _: ops.EventBase):
        OtlpRequirer(
            self,
            protocols=["grpc", "http"],
            telemetries=["logs", "metrics", "traces"],
        ).endpoints

Documentation

For complete documentation, see the charmlibs documentation.

Contributing

See CONTRIBUTING.md in the repository root.

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

charmlibs_interfaces_otlp-0.3.0.tar.gz (53.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

charmlibs_interfaces_otlp-0.3.0-py3-none-any.whl (11.0 kB view details)

Uploaded Python 3

File details

Details for the file charmlibs_interfaces_otlp-0.3.0.tar.gz.

File metadata

File hashes

Hashes for charmlibs_interfaces_otlp-0.3.0.tar.gz
Algorithm Hash digest
SHA256 539634745ddf88be5d8db939daa013a0448316980ad85ad422e435230561fe1e
MD5 8918b11259c951c6cc6798eb7768544a
BLAKE2b-256 5b952b921e31e1e749ce660ad595ac269f0366bd37ea00a814e271063a5f0500

See more details on using hashes here.

Provenance

The following attestation bundles were made for charmlibs_interfaces_otlp-0.3.0.tar.gz:

Publisher: publish.yaml on canonical/charmlibs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file charmlibs_interfaces_otlp-0.3.0-py3-none-any.whl.

File metadata

File hashes

Hashes for charmlibs_interfaces_otlp-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a05ba34583210ae2fe761b89d8cc634cda2c9b1e3d66057ef5d5129782520c9c
MD5 5a344784bc37f7a1da5d43c0dc3c0849
BLAKE2b-256 bff7431a7388ad4018f561afbdf7d0c556d47f43d5d56fe72cc239ffef26326d

See more details on using hashes here.

Provenance

The following attestation bundles were made for charmlibs_interfaces_otlp-0.3.0-py3-none-any.whl:

Publisher: publish.yaml on canonical/charmlibs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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