开源监视系统Prometheus具有集成功能,可以跟踪许多类型的时间序列数据,但是如果您想要一个尚不存在的集成,则很容易构建。 一个经常使用的示例是与云提供商的自定义集成,该提供商使用提供商的API来获取特定指标。 但是,在此示例中,我们将与所有最大的云提供商集成:Earth。
幸运的是,美国政府已经测量了天气,并提供了易于集成的API。 在Red Hat总部获取下一小时的天气预报非常简单。
import requests
HOURLY_RED_HAT
=
"https://api.weather.gov/gridpoints/RAH/73,57/forecast/hourly"
def get_temperature
(
) :
result
= requests.
get
( HOURLY_RED_HAT
)
return result.
json
(
)
[
"properties"
]
[
"periods"
]
[
0
]
[
"temperature"
]
现在,我们与地球的整合已经完成,是时候确保Prometheus能够理解我们在说什么了。 我们可以使用Prometheus Python库创建一个具有以下规格的注册表:Red Hat HQ的温度。
from prometheus_client
import CollectorRegistry
, Gauge
def prometheus_temperature
( num
) :
registry
= CollectorRegistry
(
)
g
= Gauge
(
"red_hat_temp"
,
"Temperature at Red Hat HQ"
, registry
= registry
)
g.
set
( num
)
return registry
最后,我们需要以某种方式将其连接到Prometheus。 这在某种程度上取决于Prometheus的网络拓扑:Prometheus与我们的服务进行通讯是否更容易,或者反向操作是否更容易。
第一种情况是通常建议的一种情况(如果可能),因此我们需要构建一个公开注册表的Web服务器,然后配置Prometheus对其进行抓取 。
我们可以使用Pyramid构建一个简单的Web服务器。
from pyramid.
config
import Configurator
from pyramid.
response
import Response
from prometheus_client
import generate_latest
, CONTENT_TYPE_LATEST
def metrics_web
( request
) :
registry
= prometheus_temperature
( get_temperature
(
)
)
return Response
( generate_latest
( registry
)
,
content_type
= CONTENT_TYPE_LATEST
)
config
= Configurator
(
)
config.
add_route
(
'metrics'
,
'/metrics'
)
config.
add_view
( metrics_web
, route_name
=
'metrics'
)
app
= config.
make_wsgi_app
(
)
假设我们将代码放在earth.py中 ,则python -m twisted web --wsgi earth.app可以运行它。
另外,如果我们的代码更容易连接到Prometheus,则可以定期将其推送到Prometheus的Push网关 。
import
time
from prometheus_client
import push_to_gateway
def push_temperature
( url
) :
while
True :
registry
= prometheus_temperature
( get_temperature
(
)
)
push_to_gateway
( url
,
"temperature collector"
, registry
)
time .
sleep
(
60 *
60
)
URL是用于Push网关的URL; 它通常以:9091结尾。
祝您建立自己的自定义Prometheus集成好运,以便您可以跟踪所有内容!
翻译自: https://opensource.com/article/19/4/weather-python-prometheus