Skip to content

Commit

Permalink
Merge pull request #1 from baumandm/datadog_monitoring
Browse files Browse the repository at this point in the history
fix: Make Datadog requirements optional
  • Loading branch information
jij1949 authored Jan 22, 2024
2 parents 0efaad9 + 8b25c98 commit 1091818
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 25 deletions.
46 changes: 26 additions & 20 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,26 +20,6 @@ x-querybook-volumes: &querybook-volumes
# - file:/opt/store/

services:
datadog:
image: gcr.io/datadoghq/agent:latest
ports:
- 8125:8125/udp
expose:
- 8125/udp
environment:
DD_DOGSTATSD_NON_LOCAL_TRAFFIC: true
DD_USE_DOGSTATSD: true
DD_APM_ENABLED: false
DD_AC_EXCLUDE: '.*'
DD_ENV: 'dev'
DD_SERVICE: 'federated-querybook'
DD_VERSION: 'latest'
env_file:
- ./.env.local
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /proc/:/host/proc/:ro
- /sys/fs/cgroup:/host/sys/fs/cgroup:ro
web:
container_name: querybook_web
image: *querybook-image
Expand Down Expand Up @@ -147,6 +127,32 @@ services:
timeout: 30s
retries: 3

#
# OPTIONAL SERVICES
# Start separately if you need them via `docker compose up <service>`
#

datadog:
image: gcr.io/datadoghq/agent:latest
ports:
- 8125:8125/udp
expose:
- 8125/udp
environment:
DD_DOGSTATSD_NON_LOCAL_TRAFFIC: true
DD_USE_DOGSTATSD: true
DD_APM_ENABLED: false
DD_AC_EXCLUDE: '.*'
DD_ENV: 'dev'
DD_SERVICE: 'querybook'
DD_VERSION: 'latest'
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /proc/:/host/proc/:ro
- /sys/fs/cgroup:/host/sys/fs/cgroup:ro
profiles:
- datadog

# EMAIL SERVER EXAMPLE
# If you need email to work use this
# dockerhostforward:
Expand Down
35 changes: 30 additions & 5 deletions querybook/server/lib/stats_logger/loggers/datadog_stats_logger.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,28 @@
from lib.stats_logger.base_stats_logger import BaseStatsLogger
from datadog import initialize, statsd
from env import QuerybookSettings
from lib.logger import get_logger

LOG = get_logger(__file__)


class DatadogStatsLogger(BaseStatsLogger):
"""
Stats Logger implemention for Datadog using DogStatsD.
Required environment variables:
- DD_API_KEY: The API key for Datadog.
- DD_AGENT_HOST: The host of the Datadog agent.
- DD_DOGSTATSD_PORT: The port of the Datadog agent, defaults to 8125.
- DD_SERVICE: The service name.
Optional environment variables:
- DD_PREFIX: The prefix for all metrics.
- DD_TAGS: Additional tags to be added to all metrics.
"""

metric_prefix = ""
dd_tags = []
_statsd = None

def metric_prefix_helper(self, key):
return self.metric_prefix + "." + key
Expand All @@ -19,6 +33,15 @@ def tag_helper(self, tags):
return []

def initialize(self):
try:
from datadog import initialize, statsd

self._statsd = statsd
except ImportError:
raise ImportError(
"Datadog is not installed. Please install `requirements/datadog/datadog.txt` to use the Datadog stats logger."
)

if QuerybookSettings.DD_AGENT_HOST and QuerybookSettings.DD_DOGSTATSD_PORT:
LOG.info("Initializing Datadog")

Expand Down Expand Up @@ -46,23 +69,25 @@ def logger_name(self) -> str:
return "datadog"

def incr(self, key: str, tags: dict[str, str] = None) -> None:
statsd.increment(
self._statsd.increment(
self.metric_prefix_helper(key),
1,
tags=self.tag_helper(tags),
)

def decr(self, key: str, tags: dict[str, str] = None) -> None:
statsd.decrement(
self._statsd.decrement(
self.metric_prefix_helper(key),
1,
tags=self.tag_helper(tags),
)

def timing(self, key: str, value: float, tags: dict[str, str] = None) -> None:
statsd.histogram(
self._statsd.histogram(
self.metric_prefix_helper(key), value, tags=self.tag_helper(tags)
)

def gauge(self, key: str, value: float, tags: dict[str, str] = None) -> None:
statsd.gauge(self.metric_prefix_helper(key), value, tags=self.tag_helper(tags))
self._statsd.gauge(
self.metric_prefix_helper(key), value, tags=self.tag_helper(tags)
)

0 comments on commit 1091818

Please sign in to comment.