Python 如何为prometheus客户端创建循环healthcheck并获取枚举值
下面这个例子: 我们正在使用Python尝试并创建一个healthcheck应用程序,该应用程序可以抓取网页并测试成功登录。然后,我们希望使用Prometheus_客户端包将healthcheck的状态发送给Prometheus 我们有Python 如何为prometheus客户端创建循环healthcheck并获取枚举值,python,python-3.x,flask,prometheus,Python,Python 3.x,Flask,Prometheus,下面这个例子: 我们正在使用Python尝试并创建一个healthcheck应用程序,该应用程序可以抓取网页并测试成功登录。然后,我们希望使用Prometheus_客户端包将healthcheck的状态发送给Prometheus 我们有app.py,它基本上是FlaskAPI端点,普罗米修斯将在这里获取度量。我们还提出了生成一个子流程来运行无限测试循环的想法 来自烧瓶导入烧瓶,响应 从中间件导入设置\u度量 导入prometheus_客户端 导入子流程 CONTENT\u TYPE\u LATE
app.py
,它基本上是FlaskAPI端点,普罗米修斯将在这里获取度量。我们还提出了生成一个子流程来运行无限测试循环的想法
来自烧瓶导入烧瓶,响应
从中间件导入设置\u度量
导入prometheus_客户端
导入子流程
CONTENT\u TYPE\u LATEST=str('text/plain;version=0.0.4;charset=utf-8')
app=烧瓶(名称)
设置度量(应用程序)
Popen(['python',“/usr/src/tasks/selenium\u login.py”])
@app.route(“/metrics”)
def metrics():
返回响应(
prometheus_客户端。生成_最新版本(),
mimetype=内容\类型\最新版本)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
#启动服务器以公开度量。
app.run(host='0.0.0.0',debug=True)#本地主机
我们有middleware.py
,它计算并报告度量
来自flask导入请求
从普罗米修斯客户导入计数器,直方图
导入时间
导入系统
HEALTHCHECK_STATE=Enum(
“我的任务状态”,
'枚举说明:healthcheck状态',
状态=[‘开始’、‘运行’、‘停止’])
def将_state_设置为_running():
HEALTHCHECK\u STATE.STATE('running')
def将_state_设置为_stopped():
HEALTHCHECK\u STATE.STATE('stopped')
def设置_指标(应用程序):
应用程序请求后(后状态)
我们有selenium\u login.py
,它运行测试登录脚本并传递或输出异常
#/usr/bin/env python
从selenium导入webdriver
从selenium.webdriver.common.keys导入密钥
导入时间
导入base64
从中间件导入将\u state\u设置为\u running,将\u state\u设置为\u stopped
def login():
时间。睡眠(20)
尝试:
driver=webdriver.Chrome()
driver.get('webpage.com')
#做登录的事情
driver.quit()
将_state_设置为_running()
除:
将_state_设置为_stopped()
如果名称=“\uuuuu main\uuuuuuuu”:
尽管如此:
登录()
我们试图解决的问题是将状态从selenium\u login.py
文件传递到middleware.py
,以便在无限登录循环运行时更新度量值,要么通过,要么失败。到目前为止,达到指标终点只会让我们:
my_task_state{my_task_state="starting"} 1.0
my_task_state{my_task_state="running"} 0.0
my_task_state{my_task_state="stopped"} 0.0
我们希望跑步是“1.0”。有人能帮我们解释一下逻辑吗?您不需要将登录作为单独的脚本运行。尝试在单独的威胁上运行测试,但仍在同一脚本中:
def infinite_loop():
尽管如此:
登录()
时间。睡眠(20)
线程=线程(目标=无限循环,
args=(),
kwargs={})
thread.daemon=True
thread.start()
这样,您就可以访问主脚本上定义的所有元素