Skip to content

Instantly share code, notes, and snippets.

@aksh-at
Created May 26, 2024 01:20
Show Gist options
  • Save aksh-at/aa671853c970f3edbced34a222f67ce4 to your computer and use it in GitHub Desktop.
Save aksh-at/aa671853c970f3edbced34a222f67ce4 to your computer and use it in GitHub Desktop.
Modal Datadog setup
from modal import Image, Secret, Stub, enter, exit, method
app_name = "modal-datadog-demo"
DD_ENV = Secret.from­_dict(
{
"DD­_SITE": "datadoghq.com",
"DD­_ENV": "prod",
"DD­_SERVICE": app­_name,
"DD­_LOGS­_ENABLED": "true",
"DD­_TRACE­_ENABLED": "true",
}
)
image = (
Image.debian­_slim(python­_version="3.11")
.dockerfile­_commands(
["COPY --from=datadog/serverless-init /datadog-init /app/datadog-init", 'ENTRYPOINT ["/app/datadog-init"]']
)
.pip­_install("ddtrace~=2.6.5")
)
stub = Stub(name=app­_name, image=image)
with image.imports():
import logging
from ddtrace import patch, tracer
patch(logging=True)
tracer.configure(enabled=True)
root = tracer.trace("root")
FORMAT = ('%(asctime)s %(levelname)s [%(name)s] [%(filename)s:%(lineno)d] '
'[dd.service=%(dd.service)s dd.env=%(dd.env)s '
'dd.version=%(dd.version)s '
'dd.trace­_id=%(dd.trace­_id)s dd.span­_id=%(dd.span­_id)s] '
'- %(message)s')
logging.basicConfig(format=FORMAT)
log = logging.getLogger()
log.level = logging.INFO
# (Secrets include DD­_API­_KEY and DD­_APP­_KEY.)
@stub.cls(secrets=[Secret.from­_name("datadog-secret"), DD­_ENV])
class Class:
@enter()
@tracer.wrap("modal-init")
def init(self):
log.info('hello from init()')
@method()
@tracer.wrap("modal-f1")
async def f1(self):
log.info('hello from f1() outer')
with tracer.trace("modal-f1-inner"):
span = tracer.current­_span()
span.set­_tag("tag", "value")
span.set­_metric("metric", 1)
log.info('hello from f1() inner')
await self.f2.local()
@method()
@tracer.wrap("modal-f2")
async def f2(self):
log.info('hello from f2()')
@exit()
@tracer.wrap("modal-exit")
async def finish(self):
root.finish()
tracer.shutdown()
log.info('hello from finish()')
@stub.local­_entrypoint()
def local():
c = Class()
c.f1.remote()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment