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 8 months ago