我正在尝试在python中使用kafka主题并使用prometheus客户端通过http服务,但我似乎被阻止了主题消费。我让一些占位符只是简单地添加指标,但看起来该部分被阻止了。
import os
from pykafka import KafkaClient
import threading
from kafka import KafkaConsumer
from prometheus_client import start_http_server, Metric, REGISTRY
class CustomCollector(threading.Thread):
daemon = True
def collect(self):
client = KafkaClient(hosts=os.environ['KAFKA_ADDRESS'])
topic = client.topics[b'os.environ['KAFKA_TOPIC']
consumer = topic.get_simple_consumer()
for message in consumer:
if message is not None:
print(message.value)
metric = Metric('test_name', 'description', 'summary')
metric.add_sample('test_name', 'description', 'summary')
yield metric
if __name__ == '__main__':
start_http_server(9998)
REGISTRY.register(CustomCollector())
while True: time.sleep(1)
如果我运行代码,我会看到主题数据按预期流式传输到控制台。但是,我的度量标准端点从未填充,并且对Web服务器的任何请求都会挂起,直到我终止该应用程序,它会使用库中的标准指标进行响应。
答案 0 :(得分:0)
每个消费的消息应该构建一个Metric
实例。也就是说,Metric()
调用应该在for message in consumer
循环内。此外,您可能希望在创建message.value
实例时以某种方式使用Metric
。