首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从Prometheus HTTP Server获取查询密钥或JSON密钥

无法从Prometheus HTTP Server获取查询密钥或JSON密钥
EN

Stack Overflow用户
提问于 2021-07-28 03:15:39
回答 2查看 149关注 0票数 0

我想从Prometheus HTTP Server获取某个指标:zcash_difficulty_gauge,但我面临这些错误: i) JSON不可用ii)请求URL不返回指标,而是返回整个指标页面。

我的代码:

代码语言:javascript
复制
query = "http://localhost:8094/api/v1/query\?query\=zcash_difficulty_gauge"
response = requests.get(query)

然后,我遇到以下命令的JSON错误:

代码语言:javascript
复制
In [39]: response.json()
---------------------------------------------------------------------------
JSONDecodeError                           Traceback (most recent call last)
<ipython-input-39-34c975fa6377> in <module>
----> 1 response.json()

~/workspace/source/graphstore/k8s/gcp/neo4j/venv/lib/python3.8/site-packages/requests/models.py in json(self, **kwargs)
    908                     # used.
    909                     pass
--> 910         return complexjson.loads(self.text, **kwargs)
    911
    912     @property

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/json/__init__.py in loads(s, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)
    355             parse_int is None and parse_float is None and
    356             parse_constant is None and object_pairs_hook is None and not kw):
--> 357         return _default_decoder.decode(s)
    358     if cls is None:
    359         cls = JSONDecoder

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/json/decoder.py in decode(self, s, _w)
    335
    336         """
--> 337         obj, end = self.raw_decode(s, idx=_w(s, 0).end())
    338         end = _w(s, end).end()
    339         if end != len(s):

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/json/decoder.py in raw_decode(self, s, idx)
    353             obj, end = self.scan_once(s, idx)
    354         except StopIteration as err:
--> 355             raise JSONDecodeError("Expecting value", s, err.value) from None
    356         return obj, end

JSONDecodeError: Expecting value: line 1 column 1 (char 0)

即使我尝试使用curl命令:

代码语言:javascript
复制
curl http://localhost:8094/api/v1/query\?query\=zcash_difficulty_gauge

我得到了整个页面的回报,而不仅仅是我想要的指标。

网址:localhost:8094是整个页面,如下所示:

代码语言:javascript
复制
# HELP python_gc_objects_collected_total Objects collected during gc
# TYPE python_gc_objects_collected_total counter
python_gc_objects_collected_total{generation="0"} 314.0
python_gc_objects_collected_total{generation="1"} 58.0
python_gc_objects_collected_total{generation="2"} 0.0
# HELP python_gc_objects_uncollectable_total Uncollectable object found during GC
# TYPE python_gc_objects_uncollectable_total counter
python_gc_objects_uncollectable_total{generation="0"} 0.0
python_gc_objects_uncollectable_total{generation="1"} 0.0
python_gc_objects_uncollectable_total{generation="2"} 0.0
# HELP python_gc_collections_total Number of times this generation was collected
# TYPE python_gc_collections_total counter
python_gc_collections_total{generation="0"} 36.0
python_gc_collections_total{generation="1"} 3.0
python_gc_collections_total{generation="2"} 0.0
# HELP python_info Python platform information
# TYPE python_info gauge
python_info{implementation="CPython",major="3",minor="8",patchlevel="2",version="3.8.2"} 1.0
# HELP zcash_difficulty_gauge zcash_difficulty_gauge gauge
# TYPE zcash_difficulty_gauge gauge
zcash_difficulty_gauge 1237.0

我的服务器脚本是:

代码语言:javascript
复制
from typing import Counter
from prometheus_client import start_http_server, Gauge
from time import sleep


start_http_server(8094)

ZCASH_DIFFICULTY_GAUGE = Gauge('zcash_difficulty_gauge', 'zcash_difficulty_gauge gauge')
counter = 0
while True:
    sleep(10)
    ZCASH_DIFFICULTY_GAUGE.set(1004 + counter)
    counter += 1

我试着阅读了这些文档,但基于这些文档,我似乎正在做正确的事情。我也试图理解another similar post说的话,但解决方案似乎就是我现在正在做的事情。

如何使用Python获取特定指标?

EN

回答 2

Stack Overflow用户

发布于 2021-07-28 05:11:58

这里似乎有一些关于端点的混淆。

http://localhost:8094不是普罗米修斯--那是由脚本(在start_http_server(8094)行中)启动的HTTP服务器。它没有"API";它只是发布一个指标列表。

普罗米修斯将使用抓取作业来收集这些指标。

普罗米修斯通常监听端口9090,尽管该端口可以更改。如果您已经配置了适当的抓取作业,并且prometheus暴露在localhost:9090上,那么下面的curl命令将查询prometheus以获取您的目标指标:

代码语言:javascript
复制
curl 'http://localhost:9090/api/v1/query?query=zcash_difficulty_gauge'
票数 1
EN

Stack Overflow用户

发布于 2021-07-28 05:35:48

有一个text formatter provided by Prometheus client可以解决这个问题。它加载所有的文本度量,您可以创建字典,json从中提取。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68550615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档