datadog
— The Datadog’s Python library¶
The datadog
module provides datadog.api
- a simple wrapper around Datadog’s HTTP API - datadog.threadstats
- a tool for collecting metrics in high performance applications - and datadog.dogstatsd
a DogStatsd Python client.
Installation¶
To install from source, download a distribution and run:
>>> sudo python setup.py install
If you use virtualenv you do not need to use sudo.
Datadog.api module¶
Datadog.api is a Python client library for Datadog’s HTTP API.
Datadog.api client requires to run datadog
initialize method first.
-
datadog.
initialize
(api_key=None, app_key=None, host_name=None, api_host=None, statsd_host=None, statsd_port=None, **kwargs)¶ Initialize and configure Datadog.api and Datadog.statsd modules
Parameters: - api_key (string) – Datadog API key
- app_key (string) – Datadog application key
- proxies (dictionary mapping protocol to the URL of the proxy.) – Proxy to use to connect to Datadog API
- api_host (url) – Datadog API endpoint
- statsd_host (address) – Host of DogStatsd server or statsd daemon
- statsd_port (port) – Port of DogStatsd server or statsd daemon
- cacert (path or boolean) – Path to local certificate file used to verify SSL certificates. Can also be set to True (default) to use the systems certificate store, or False to skip SSL verification
- mute (boolean) – Mute any exceptions before they escape from the library (default: True).
-
class
datadog.api.
Comment
¶ A wrapper around Comment HTTP API.
-
create
(attach_host_name=False, method='POST', id=None, params=None, **body)¶ Create a new API resource object
Parameters: - attach_host_name (bool) – link the new resource object to the host name
- method (HTTP method string) – HTTP method to use to contact API endpoint
- id (id) – create a new resource object as a child of the given object
- params (dictionary) – new resource object source
- body (dictionary) – new resource object attributes
Returns: JSON response from HTTP API request
-
delete
(id, **params)¶ Delete an API resource object
Parameters: id (id) – resource object to delete Returns: JSON response from HTTP API request
-
update
(id, params=None, **body)¶ Update an API resource object
Parameters: - params (dictionary) – updated resource object source
- body (dictionary) – updated resource object attributes
Returns: JSON response from HTTP API request
-
-
class
datadog.api.
Downtime
¶ A wrapper around Monitor Downtiming HTTP API.
-
create
(attach_host_name=False, method='POST', id=None, params=None, **body)¶ Create a new API resource object
Parameters: - attach_host_name (bool) – link the new resource object to the host name
- method (HTTP method string) – HTTP method to use to contact API endpoint
- id (id) – create a new resource object as a child of the given object
- params (dictionary) – new resource object source
- body (dictionary) – new resource object attributes
Returns: JSON response from HTTP API request
-
delete
(id, **params)¶ Delete an API resource object
Parameters: id (id) – resource object to delete Returns: JSON response from HTTP API request
-
get
(id, **params)¶ Get information about an API resource object
Parameters: - id (id) – resource object id to retrieve
- params (dictionary) – parameters to filter API resource stream
Returns: JSON response from HTTP API request
-
get_all
(**params)¶ List API resource objects
Parameters: params (dictionary) – parameters to filter API resource stream Returns: JSON response from HTTP API request
-
update
(id, params=None, **body)¶ Update an API resource object
Parameters: - params (dictionary) – updated resource object source
- body (dictionary) – updated resource object attributes
Returns: JSON response from HTTP API request
-
-
class
datadog.api.
Event
¶ A wrapper around Event HTTP API.
-
classmethod
create
(**params)¶ Post an event.
Parameters: - title (string) – title for the new event
- text (string) – event message
- date_happened (integer) – when the event occurred. if unset defaults to the current time. (POSIX timestamp)
- handle (string) – user to post the event as. defaults to owner of the application key used to submit.
- priority (string) – priority to post the event as. (“normal” or “low”, defaults to “normal”)
- related_event_id (id) – post event as a child of the given event
- tags (list of strings) – tags to post the event with
- host (list of strings) – host to post the event with
- device_name (list of strings) – device_name to post the event with
Returns: JSON response from HTTP request
>>> title = "Something big happened!" >>> text = 'And let me tell you all about it here!' >>> tags = ['version:1', 'application:web']
>>> api.Event.create(title=title, text=text, tags=tags)
-
get
(id, **params)¶ Get information about an API resource object
Parameters: - id (id) – resource object id to retrieve
- params (dictionary) – parameters to filter API resource stream
Returns: JSON response from HTTP API request
-
classmethod
query
(**params)¶ Get the events that occurred between the start and end POSIX timestamps, optional filtered by priority (“low” or “normal”), sources and tags.
See the event API documentation for the event data format.
Returns: JSON response from HTTP request >>> api.Event.query(start=1313769783, end=1419436870, priority="normal", tags=["application:web"])
-
classmethod
-
class
datadog.api.
Graph
¶ A wrapper around Graph HTTP API.
-
classmethod
create
(**params)¶ Take a snapshot of a graph, returning the full url to the snapshot.
Parameters: - metric_query (string query) – metric query
- start (POSIX timestamp) – query start timestamp
- end (POSIX timestamp) – query end timestamp
- event_query (string query) – a query that will add event bands to the graph
Returns: JSON response from HTTP API request
-
classmethod
status
(snapshot_url)¶ Returns the status code of snapshot. Can be used to know when the snapshot is ready for download.
Parameters: snapshot_url (string url) – snapshot URL to check Returns: JSON response from HTTP API request
-
classmethod
-
class
datadog.api.
Host
¶ A wrapper around Host HTTP API.
-
classmethod
mute
(host_name, **params)¶ Mute a host.
Parameters: - host_name (string) – hostname
- end (POSIX timestamp) – timestamp to end muting
- override (bool) – if true and the host is already muted, will override existing end on the host
- message (string) – message to associate with the muting of this host
Returns: JSON response from HTTP API request
-
classmethod
unmute
(host_name)¶ Unmute a host.
Parameters: host_name (string) – hostname Returns: JSON response from HTTP API request
-
classmethod
-
class
datadog.api.
Infrastructure
¶ A wrapper around Infrastructure HTTP API.
-
classmethod
search
(**params)¶ Search for entities in Datadog.
Parameters: q (string query) – a query to serch for host and metrics Returns: JSON response from HTTP API request
-
classmethod
-
class
datadog.api.
Metric
¶ A wrapper around Metric HTTP API
-
classmethod
query
(**params)¶ Query metrics from Datadog
Parameters: - start (POSIX timestamp) – query start timestamp
- end (POSIX timestamp) – query end timestamp
- query (string query) – metric query
Returns: JSON response from HTTP request
start and end should be less than 24 hours apart. It is not meant to retrieve metric data in bulk.
>>> api.Metric.query(start=int(time.time()) - 3600, end=int(time.time()), query='avg:system.cpu.idle{*}')
-
classmethod
send
(metrics=None, **single_metric)¶ Submit a metric or a list of metrics to the metric API
Parameters: - metric (string) – the name of the time series
- points (list) – list of points to submit
- host (string) – host name that produced the metric
- tags (string list) – list of tags associated with the metric.
- type (‘gauge’ or ‘counter’ string) – type of the metric
Returns: JSON response from HTTP request
-
classmethod
-
class
datadog.api.
Monitor
¶ A wrapper around Monitor HTTP API.
-
create
(attach_host_name=False, method='POST', id=None, params=None, **body)¶ Create a new API resource object
Parameters: - attach_host_name (bool) – link the new resource object to the host name
- method (HTTP method string) – HTTP method to use to contact API endpoint
- id (id) – create a new resource object as a child of the given object
- params (dictionary) – new resource object source
- body (dictionary) – new resource object attributes
Returns: JSON response from HTTP API request
-
delete
(id, **params)¶ Delete an API resource object
Parameters: id (id) – resource object to delete Returns: JSON response from HTTP API request
-
classmethod
get
(id, **params)¶ Get monitor’s details.
Parameters: - id (id) – monitor to retrieve
- group_states (string list, strings are chosen from one or more from ‘all’, ‘alert’, ‘warn’, or ‘no data’) – string list indicating what, if any, group states to include
Returns: JSON response from HTTP request
-
classmethod
get_all
(**params)¶ Get all monitor details.
Parameters: - group_states (string list, strings are chosen from one or more from ‘all’, ‘alert’, ‘warn’, or ‘no data’) – string list indicating what, if any, group states to include
- tags (string list) – tags to filter the list of monitors by scope
Returns: JSON response from HTTP request
-
classmethod
mute
(id, **params)¶ Mute a monitor.
Parameters: - scope (string) – scope to apply the mute
- end (POSIX timestamp) – timestamp for when the mute should end
Returns: JSON response from HTTP request
-
classmethod
mute_all
()¶ Globally mute monitors.
Returns: JSON response from HTTP request
-
classmethod
unmute
(id, **params)¶ Unmute a monitor.
Parameters: - scope (string) – scope to apply the unmute
- all_scopes (boolean) – if True, clears mute settings for all scopes
Returns: JSON response from HTTP request
-
classmethod
unmute_all
()¶ Cancel global monitor mute setting (does not remove mute settings for individual monitors).
Returns: JSON response from HTTP request
-
update
(id, params=None, **body)¶ Update an API resource object
Parameters: - params (dictionary) – updated resource object source
- body (dictionary) – updated resource object attributes
Returns: JSON response from HTTP API request
-
-
class
datadog.api.
Screenboard
¶ A wrapper around Screenboard HTTP API.
-
create
(attach_host_name=False, method='POST', id=None, params=None, **body)¶ Create a new API resource object
Parameters: - attach_host_name (bool) – link the new resource object to the host name
- method (HTTP method string) – HTTP method to use to contact API endpoint
- id (id) – create a new resource object as a child of the given object
- params (dictionary) – new resource object source
- body (dictionary) – new resource object attributes
Returns: JSON response from HTTP API request
-
delete
(id, **params)¶ Delete an API resource object
Parameters: id (id) – resource object to delete Returns: JSON response from HTTP API request
-
get
(id, **params)¶ Get information about an API resource object
Parameters: - id (id) – resource object id to retrieve
- params (dictionary) – parameters to filter API resource stream
Returns: JSON response from HTTP API request
-
get_all
(**params)¶ List API resource objects
Parameters: params (dictionary) – parameters to filter API resource stream Returns: JSON response from HTTP API request
-
classmethod
revoke
(board_id)¶ Revoke a shared screenboard with given id
Parameters: board_id (id) – screenboard to revoke Returns: JSON response from HTTP request
Share the screenboard with given id
Parameters: board_id (id) – screenboard to share Returns: JSON response from HTTP request
-
update
(id, params=None, **body)¶ Update an API resource object
Parameters: - params (dictionary) – updated resource object source
- body (dictionary) – updated resource object attributes
Returns: JSON response from HTTP API request
-
-
class
datadog.api.
ServiceCheck
¶ A wrapper around ServiceCheck HTTP API.
-
classmethod
check
(**params)¶ Post check statuses for use with monitors
Parameters: - check (string) – text for the message
- host_name (string) – name of the host submitting the check
- status (Options: ‘0’: OK, ‘1’: WARNING, ‘2’: CRITICAL, ‘3’: UNKNOWN) – integer for the status of the check
- timestamp (POSIX timestamp) – timestamp of the event
- message (string) – description of why this status occurred
- tags (string list) – list of tags for this check
Returns: JSON response from HTTP request
-
classmethod
-
class
datadog.api.
Tag
¶ A wrapper around Tag HTTP API.
-
classmethod
create
(host, **body)¶ Add tags to a host
Parameters: - tags (string list) – list of tags to apply to the host
- source (string) – source of the tags
Returns: JSON response from HTTP request
-
delete
(id, **params)¶ Delete an API resource object
Parameters: id (id) – resource object to delete Returns: JSON response from HTTP API request
-
get
(id, **params)¶ Get information about an API resource object
Parameters: - id (id) – resource object id to retrieve
- params (dictionary) – parameters to filter API resource stream
Returns: JSON response from HTTP API request
-
get_all
(**params)¶ List API resource objects
Parameters: params (dictionary) – parameters to filter API resource stream Returns: JSON response from HTTP API request
-
classmethod
update
(host, **body)¶ Update all tags for a given host
Parameters: - tags (string list) – list of tags to apply to the host
- source (string) – source of the tags
Returns: JSON response from HTTP request
-
classmethod
-
class
datadog.api.
Timeboard
¶ A wrapper around Timeboard HTTP API.
-
create
(attach_host_name=False, method='POST', id=None, params=None, **body)¶ Create a new API resource object
Parameters: - attach_host_name (bool) – link the new resource object to the host name
- method (HTTP method string) – HTTP method to use to contact API endpoint
- id (id) – create a new resource object as a child of the given object
- params (dictionary) – new resource object source
- body (dictionary) – new resource object attributes
Returns: JSON response from HTTP API request
-
delete
(id, **params)¶ Delete an API resource object
Parameters: id (id) – resource object to delete Returns: JSON response from HTTP API request
-
get
(id, **params)¶ Get information about an API resource object
Parameters: - id (id) – resource object id to retrieve
- params (dictionary) – parameters to filter API resource stream
Returns: JSON response from HTTP API request
-
get_all
(**params)¶ List API resource objects
Parameters: params (dictionary) – parameters to filter API resource stream Returns: JSON response from HTTP API request
-
update
(id, params=None, **body)¶ Update an API resource object
Parameters: - params (dictionary) – updated resource object source
- body (dictionary) – updated resource object attributes
Returns: JSON response from HTTP API request
-
-
class
datadog.api.
User
¶ A wrapper around User HTTP API.
-
classmethod
invite
(emails)¶ Send an invite to join datadog to each of the email addresses in the emails list. If emails is a string, it will be wrapped in a list and sent. Returns a list of email addresses for which an email was sent.
Parameters: emails (string list) – emails adresses to invite to join datadog Returns: JSON response from HTTP request
-
classmethod
Datadog.threadstats module¶
Datadog.threadstats is a tool for collecting application metrics without hindering performance. It collects metrics in the application thread with very little overhead and allows flushing metrics in process, in a thread or in a greenlet, depending on your application’s needs.
To run properly Datadog.threadstats requires to run datadog
initialize method first.
-
datadog.
initialize
(api_key=None, app_key=None, host_name=None, api_host=None, statsd_host=None, statsd_port=None, **kwargs) Initialize and configure Datadog.api and Datadog.statsd modules
Parameters: - api_key (string) – Datadog API key
- app_key (string) – Datadog application key
- proxies (dictionary mapping protocol to the URL of the proxy.) – Proxy to use to connect to Datadog API
- api_host (url) – Datadog API endpoint
- statsd_host (address) – Host of DogStatsd server or statsd daemon
- statsd_port (port) – Port of DogStatsd server or statsd daemon
- cacert (path or boolean) – Path to local certificate file used to verify SSL certificates. Can also be set to True (default) to use the systems certificate store, or False to skip SSL verification
- mute (boolean) – Mute any exceptions before they escape from the library (default: True).
-
class
datadog.threadstats.base.
ThreadStats
¶ -
decrement
(metric_name, value=1, timestamp=None, tags=None, sample_rate=1, host=None)¶ Decrement a counter, optionally setting a value, tags and a sample rate.
>>> stats.decrement('files.remaining') >>> stats.decrement('active.connections', 2)
-
event
(title, text, alert_type=None, aggregation_key=None, source_type_name=None, date_happened=None, priority=None, tags=None, hostname=None)¶ Send an event. Attributes are the same as the Event API. (http://docs.datadoghq.com/api/) >>> stats.event(‘Man down!’, ‘This server needs assistance.’) >>> stats.event(‘The web server restarted’, ‘The web server is up again’, alert_type=’success’)
-
flush
(timestamp=None)¶ Flush and post all metrics to the server. Note that this is a blocking call, so it is likely not suitable for user facing processes. In those cases, it’s probably best to flush in a thread or greenlet.
-
gauge
(metric_name, value, timestamp=None, tags=None, sample_rate=1, host=None)¶ Record the current
value
of a metric. They most recent value in a given flush interval will be recorded. Optionally, specify a set of tags to associate with the metric. This should be used for sum values such as total hard disk space, process uptime, total number of active users, or number of rows in a database table.>>> stats.gauge('process.uptime', time.time() - process_start_time) >>> stats.gauge('cache.bytes.free', cache.get_free_bytes(), tags=['version:1.0'])
-
histogram
(metric_name, value, timestamp=None, tags=None, sample_rate=1, host=None)¶ Sample a histogram value. Histograms will produce metrics that describe the distribution of the recorded values, namely the minimum, maximum, average, count and the 75th, 85th, 95th and 99th percentiles. Optionally, specify a list of
tags
to associate with the metric.>>> stats.histogram('uploaded_file.size', uploaded_file.size())
-
increment
(metric_name, value=1, timestamp=None, tags=None, sample_rate=1, host=None)¶ Increment the counter by the given
value
. Optionally, specify a list oftags
to associate with the metric. This is useful for counting things such as incrementing a counter each time a page is requested.>>> stats.increment('home.page.hits') >>> stats.increment('bytes.processed', file.size())
-
start
(flush_interval=10, roll_up_interval=10, device=None, flush_in_thread=True, flush_in_greenlet=False, disabled=False)¶ Start the ThreadStats instance with the specified metric flushing method and preferences.
By default, metrics will be flushed in a thread.
>>> stats.start()
If you’re running a gevent server and want to flush metrics in a greenlet, set flush_in_greenlet to True. Be sure to import and monkey patch gevent before starting ThreadStats.
>>> from gevent import monkey; monkey.patch_all() >>> stats.start(flush_in_greenlet=True)
If you’d like to flush metrics in process, set flush_in_thread to False, though you’ll have to call
flush
manually to post metrics to the server.>>> stats.start(flush_in_thread=False)
If for whatever reason, you need to disable metrics collection in a hurry, set
disabled
to True and metrics won’t be collected or flushed.>>> stats.start(disabled=True)
- Note: Please remember to set your API key before,
- using datadog module
initialize
method.
>>> from datadog import initialize, ThreadStats >>> initialize(api_key='my_api_key') >>> stats = ThreadStats() >>> stats.start() >>> stats.increment('home.page.hits')
Parameters: - flush_interval (int) – The number of seconds to wait between flushes.
- flush_in_thread (bool) – True if you’d like to spawn a thread to flush metrics. It will run every flush_interval seconds.
- flush_in_greenlet (bool) – Set to true if you’d like to flush in a gevent greenlet.
- disabled (bool) – Disable metrics collection
-
timed
(metric_name, sample_rate=1, tags=None, host=None)¶ A decorator that will track the distribution of a function’s run time. Optionally specify a list of tags to associate with the metric.
@stats.timed('user.query.time') def get_user(user_id): # Do what you need to ... pass # Is equivalent to ... start = time.time() try: get_user(user_id) finally: stats.histogram('user.query.time', time.time() - start)
-
timer
(*args, **kwds)¶ A context manager that will track the distribution of the contained code’s run time. Optionally specify a list of tags to associate with the metric.
def get_user(user_id): with stats.timer('user.query.time'): # Do what you need to ... pass # Is equivalent to ... def get_user(user_id): start = time.time() try: # Do what you need to ... pass finally: stats.histogram('user.query.time', time.time() - start)
-
timing
(metric_name, value, timestamp=None, tags=None, sample_rate=1, host=None)¶ Record a timing, optionally setting tags and a sample rate.
>>> stats.timing("query.response.time", 1234)
-
Datadog.dogstatsd module¶
-
class
datadog.dogstatsd.base.
DogStatsd
(host='localhost', port=8125, max_buffer_size=50, constant_tags=None, use_ms=False)¶ -
close_buffer
()¶ Flush the buffer and switch back to single metric packets.
-
decrement
(metric, value=1, tags=None, sample_rate=1)¶ Decrement a counter, optionally setting a value, tags and a sample rate.
>>> statsd.decrement('files.remaining') >>> statsd.decrement('active.connections', 2)
-
event
(title, text, alert_type=None, aggregation_key=None, source_type_name=None, date_happened=None, priority=None, tags=None, hostname=None)¶ - Send an event. Attributes are the same as the Event API.
- http://docs.datadoghq.com/api/
>>> statsd.event('Man down!', 'This server needs assistance.') >>> statsd.event('The web server restarted', 'The web server is up again', alert_type='success') # NOQA
-
gauge
(metric, value, tags=None, sample_rate=1)¶ Record the value of a gauge, optionally setting a list of tags and a sample rate.
>>> statsd.gauge('users.online', 123) >>> statsd.gauge('active.connections', 1001, tags=["protocol:http"])
-
get_socket
()¶ Return a connected socket.
Note: connect the socket before assigning it to the class instance to avoid bad thread race conditions.
-
histogram
(metric, value, tags=None, sample_rate=1)¶ Sample a histogram value, optionally setting tags and a sample rate.
>>> statsd.histogram('uploaded.file.size', 1445) >>> statsd.histogram('album.photo.count', 26, tags=["gender:female"])
-
increment
(metric, value=1, tags=None, sample_rate=1)¶ Increment a counter, optionally setting a value, tags and a sample rate.
>>> statsd.increment('page.views') >>> statsd.increment('files.transferred', 124)
-
open_buffer
(max_buffer_size=50)¶ Open a buffer to send a batch of metrics in one packet.
You can also use this as a context manager.
>>> with DogStatsd() as batch: >>> batch.gauge('users.online', 123) >>> batch.gauge('active.connections', 1001)
-
service_check
(check_name, status, tags=None, timestamp=None, hostname=None, message=None)¶ Send a service check run.
>>> statsd.service_check('my_service.check_name', DogStatsd.WARNING)
-
set
(metric, value, tags=None, sample_rate=1)¶ Sample a set value.
>>> statsd.set('visitors.uniques', 999)
-
timed
(metric=None, tags=None, sample_rate=1, use_ms=None)¶ A decorator or context manager that will measure the distribution of a function’s/context’s run time. Optionally specify a list of tags or a sample rate. If the metric is not defined as a decorator, the module name and function name will be used. The metric is required as a context manager.
@statsd.timed('user.query.time', sample_rate=0.5) def get_user(user_id): # Do what you need to ... pass # Is equivalent to ... with statsd.timed('user.query.time', sample_rate=0.5): # Do what you need to ... pass # Is equivalent to ... start = time.time() try: get_user(user_id) finally: statsd.timing('user.query.time', time.time() - start)
-
timing
(metric, value, tags=None, sample_rate=1)¶ Record a timing, optionally setting tags and a sample rate.
>>> statsd.timing("query.response.time", 1234)
-
-
datadog.
statsd
¶ A global
DogStatsd
instance that is easily shared across an application’s modules. Initialize this once in your application’s set-up code and then other modules can import and use it without further configuration.>>> from datadog import initialize, statsd >>> initialize(statsd_host='localhost', statsd_port=8125) >>> statsd.increment('home.page.hits')
Get in Touch¶
If you’d like to suggest a feature or report a bug, please add an issue here. If you want to talk about Datadog in general, reach out at datadoghq.com.