Language Guide Python 2.x How to send metrics using Python
Interesting Python Graphite Libraries
Diamond - Send system metrics to Graphite
Diamond - A really useful Python daemon to send system metrics such as CPU usage, load, Disk IO, etc.
Sending a metric via TCP
Copy import socket
conn = socket.create_connection(("YOUR-UID.carbon.hostedgraphite.com", 2003))
conn.send("YOUR-API-KEY.foo.py-tcp 1.2\n")
conn.close()
Sending a metric via UDP
Copy import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto("YOUR-API-KEY.foo.py-udp 1.2\n", ("YOUR-UID.carbon.hostedgraphite.com", 2003))
Sending a metric using HTTP POST
Copy import urllib2, base64
url = "https://www.hostedgraphite.com/api/v1/sink"
api_key = "YOUR-API-KEY"
request = urllib2.Request(url, "foo.py-http 1.2")
request.add_header("Authorization", "Basic %s" % base64.encodestring(api_key).strip())
result = urllib2.urlopen(request)
Sending a metric via TCP over TLS tunnel
Copy import socket, ssl
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ssl_sock = ssl.wrap_socket(s)
ssl_sock.connect(("YOUR-UID.carbon.hostedgraphite.com", 20030))
ssl_sock.write("YOUR-API-KEY.foo.py-tls 1.2\n")
Your API key can be found on your account home page.
Python 3.x
Sending a metric via TCP
Copy import socket
conn = socket.create_connection(("YOUR-UID.carbon.hostedgraphite.com", 2003))
conn.send("YOUR-API-KEY.foo.py3-tcp 1\n".encode('utf-8'))
conn.close()
Sending a metric via UDP
Copy import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto("YOUR-API-KEY.foo.py3-udp 1\n".encode('utf-8'), ("YOUR-UID.carbon.hostedgraphite.com", 2003))
Sending a metric using HTTP POST
With the requests module:
Copy import requests
response = requests.put("http://www.hostedgraphite.com/api/v1/sink", auth = ("YOUR-API-KEY", ""),
data = "foo.py3-http 1")
Using only stdlib modules: (Contributed by Waldo , thanks!)
Copy import urllib.request
from base64 import b64encode
url = "https://www.hostedgraphite.com/api/v1/sink"
api_key = b'YOUR-API-KEY'
metric = "foo 1.2".encode('utf-8')
headers = {'Authorization': b'Basic ' + b64encode(api_key)}
request = urllib.request.Request(url, metric, headers)
result = urllib.request.urlopen(request)
Sending a metric via TCP over TLS tunnel
Copy import socket, ssl
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ssl_sock = ssl.wrap_socket(s)
ssl_sock.connect(("YOUR-UID.carbon.hostedgraphite.com", 20030))
ssl_sock.write("YOUR-API-KEY.foo.py3-tls 1.2\n".encode("UTF-8"))
Sending a metric via StatsD
Copy import socket, ssl
import socket
statsd_host = 'statsd.hostedgraphite.com'
statsd_port = 8125
metric_key = 'YOUR-API-KEY.foo.py3-statsd'
metric_value = 1.2
metric_message = f"{metric_key}:{metric_value}|c"
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(metric_message.encode('utf-8'), (statsd_host, statsd_port))
sock.close()
When sending StatsD metrics, make sure to specify counters (c), gauges (g), or timers (ms).
Your API key can be found on your account home page.
Last updated 10 months ago