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.2.0.tar.gz (53.5 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.2.0-py3-none-any.whl (11.0 kB view details)

Uploaded Python 3

File details

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

File metadata

File hashes

Hashes for charmlibs_interfaces_otlp-0.2.0.tar.gz
Algorithm Hash digest
SHA256 86923b1cd8dbf4b2fa82b8408ba95592b452774d5bba5de998da245051058de1
MD5 06e9a638a2809416f0778fcf64f98efc
BLAKE2b-256 6ba629ac5c572d3bdf89ea6575fb0c2172ce824df20de7c8e3d1b63e2868397e

See more details on using hashes here.

Provenance

The following attestation bundles were made for charmlibs_interfaces_otlp-0.2.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.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for charmlibs_interfaces_otlp-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0aedfed58af3d5a1455f3a679a716b6ea45173d33779f7198360ed887497b355
MD5 0ca558cc77842c2f1e2f92a6e4cbe23f
BLAKE2b-256 9a992e526b64d96a4087d8711c168152e34cec22d8af10cd617706f2bf28ae7f

See more details on using hashes here.

Provenance

The following attestation bundles were made for charmlibs_interfaces_otlp-0.2.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