当前位置: 首页 > 科技观察

使用Python和Prometheus追踪天气

时间:2023-03-14 11:10:10 科技观察

创建自定义Prometheus集成以追踪最好的云提供商:地球母亲。开源监控系统Prometheus集成了多种类型的时间序列数据,但如果您想要的不存在,构建一个也很容易。一个经常使用的示例使用云提供商的自定义集成,该集成使用提供商的API抓取特定指标。然而,在这个例子中,我们将与最好的云提供商集成:Earth。幸运的是,美国政府已经测量了天气并提供了一个简单的API用于集成。在RedHat总部获取下一小时的天气预报很容易。importrequestsHOURLY_RED_HAT=""defget_temperature():result=requests.get(HOURLY_RED_HAT)returnresult.json()["属性"]["periods"][0]["temperature"]现在我们已经完成了与地球的整合,是时候确保普罗米修斯了解我们想要什么了。我们可以使用PrometheusPython库中的gauge创建一个注册表项:RedHat总部的温度。fromprometheus_clientimportCollectorRegistry,Gaugedefprometheus_temperature(num):registry=CollectorRegistry()g=Gauge("red_hat_temp","TemperatureatRedHatHQ",registry=registry)g.set(num)返回注册表***,我们需要以某种方式将它连接到普罗米修斯。这在某种程度上取决于Prometheus的网络拓扑:是Prometheus更容易与我们的服务通信,还是相反。第一种是普遍推荐的情况,如果可能的话,我们需要构建一个暴露注册表项的Web服务器,并配置Prometheus来抓取它。我们可以使用Pyramid构建一个简单的Web服务器。frompyramid.configimportConfiguratorfrompyramid.responseimportResponsefromprometheus_clientimportgenerate_latest,CONTENT_TYPE_LATESTdefmetrics_web(request):registry=prometheus_temperature(get_temperature())返回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()这可以与任何Web网关接口(WSGI)服务器一起运行。例如,假设我们将代码放在earth.py中,我们可以使用python-mtwistedweb--wsgiearth.app运行它。或者,如果我们的代码更容易连接到Prometheus,我们可以定期将其推送到Prometheus的推送网关。importtimefromprometheus_clientimportpush_to_gatewaydefpush_temperature(url):whileTrue:registry=prometheus_temperature(get_temperature())push_to_gateway(url,"temperaturecollector",registry)time.sleep(60*60)其中URL是推送网关的URL.它通常以:9091结尾。祝您构建自定义Prometheus集成以跟踪一切!