如何使用 Python 和 Prometheus Pushgateway 推送指标
How to push metrics with Python and Prometheus Pushgateway
我希望使用 Pushgateway 将多标签指标推送到 Prometheus。该文档提供了一个 curl 示例,但我需要通过 Python 发送它。另外,我想在指标中嵌入多个标签。
这是我最终做的事情 - 花了一段时间才做对。虽然理想情况下我会使用专门为此目的设计的 Prometheus python 客户端,但在某些情况下它似乎不支持多个标签并且文档几乎不存在 - 所以我选择了自制的解决方案。
下面的代码使用 gevent 并支持多个(逗号分隔)pushgateway url(如 "pushgateway1.my.com:9092, pushgateway2.my.com:9092")。
import gevent
import requests
def _submit_wrapper(urls, job_name, metric_name, metric_value, dimensions):
dim = ''
headers = {'X-Requested-With': 'Python requests', 'Content-type': 'text/xml'}
for key, value in dimensions.iteritems():
dim += '/%s/%s' % (key, value)
for url in urls:
requests.post('http://%s/metrics/job/%s%s' % (url, job_name, dim),
data='%s %s\n' % (metric_name, metric_value), headers=headers)
def submit_metrics(job_name, metric_name, metric_value, dimensions={}):
from ..app import config
cfg = config.init()
urls = cfg['PUSHGATEWAY_URLS'].split(',')
gevent.spawn(_submit_wrapper, urls, job_name, metric_name, metric_value, dimensions)
这是为 Python 客户端记录的:https://github.com/prometheus/client_python#exporting-to-a-pushgateway
第一步:安装客户端:
pip install prometheus_client
第二步:将以下内容粘贴到 Python 解释器中:
from prometheus_client import CollectorRegistry, Gauge, push_to_gateway
registry = CollectorRegistry()
g = Gauge('job_last_success_unixtime', 'Last time a batch job successfully finished', registry=registry)
g.set_to_current_time()
push_to_gateway('localhost:9091', job='batchA', registry=registry)
如果您不能使用 prometheus_client
,这里是 requests
的简短版本:
import requests
headers = {'X-Requested-With': 'Python requests', 'Content-type': 'text/xml'}
url = "https://pushgateway.example.com/metrics/job/job_name/instance/instance_name"
data = "websites_offline{website=\"example.com\"} 0\n"
r = requests.post(url, headers=headers, data=data)
print(r.reason)
print(r.status_code)
可以在数据变量的 \n
(新行)之后添加更多项目。
我希望使用 Pushgateway 将多标签指标推送到 Prometheus。该文档提供了一个 curl 示例,但我需要通过 Python 发送它。另外,我想在指标中嵌入多个标签。
这是我最终做的事情 - 花了一段时间才做对。虽然理想情况下我会使用专门为此目的设计的 Prometheus python 客户端,但在某些情况下它似乎不支持多个标签并且文档几乎不存在 - 所以我选择了自制的解决方案。
下面的代码使用 gevent 并支持多个(逗号分隔)pushgateway url(如 "pushgateway1.my.com:9092, pushgateway2.my.com:9092")。
import gevent
import requests
def _submit_wrapper(urls, job_name, metric_name, metric_value, dimensions):
dim = ''
headers = {'X-Requested-With': 'Python requests', 'Content-type': 'text/xml'}
for key, value in dimensions.iteritems():
dim += '/%s/%s' % (key, value)
for url in urls:
requests.post('http://%s/metrics/job/%s%s' % (url, job_name, dim),
data='%s %s\n' % (metric_name, metric_value), headers=headers)
def submit_metrics(job_name, metric_name, metric_value, dimensions={}):
from ..app import config
cfg = config.init()
urls = cfg['PUSHGATEWAY_URLS'].split(',')
gevent.spawn(_submit_wrapper, urls, job_name, metric_name, metric_value, dimensions)
这是为 Python 客户端记录的:https://github.com/prometheus/client_python#exporting-to-a-pushgateway
第一步:安装客户端:
pip install prometheus_client
第二步:将以下内容粘贴到 Python 解释器中:
from prometheus_client import CollectorRegistry, Gauge, push_to_gateway
registry = CollectorRegistry()
g = Gauge('job_last_success_unixtime', 'Last time a batch job successfully finished', registry=registry)
g.set_to_current_time()
push_to_gateway('localhost:9091', job='batchA', registry=registry)
如果您不能使用 prometheus_client
,这里是 requests
的简短版本:
import requests
headers = {'X-Requested-With': 'Python requests', 'Content-type': 'text/xml'}
url = "https://pushgateway.example.com/metrics/job/job_name/instance/instance_name"
data = "websites_offline{website=\"example.com\"} 0\n"
r = requests.post(url, headers=headers, data=data)
print(r.reason)
print(r.status_code)
可以在数据变量的 \n
(新行)之后添加更多项目。