如何从多个 python-flask 子进程收集普罗米修斯指标?

2024-01-12

我有 main() 函数,它生成两个单独的子进程。这两个子流程共享指标。如何共享两个流程的指标并保持更新? 这是我的片段,以供更多理解。

from multiprocessing import Process
import prometheus_client as prom
from prometheus_client import Counter

# Metrics
c1 = prom.gauge('Counter1', 'Number of Request')
c2 = prom.gauge('Gauge1', 'Processing time in Seconds')

def process_abc():
  while True:
    #Some operations
    c1.set(some_value)
    c2.set(some_value)
    time.sleep(10)

def process_xyz():
   while True:
     #Some operations
     c1.set(some_value)
     c2.set(some_value)
     time.sleep(10)

def main():
  prom.start_http_server(8080)

  Process(target=process_abc).start()
  Process(target=process_xyz).start()

if __name__ == "__main__":
  main()

我能够在端点看到指标名称,但计数始终为零意味着它永远不会被子流程更新。


The prometheus_client图书馆文档 https://github.com/prometheus/client_python#multiprocess-mode-eg-gunicorn解决这个案例:

Prometheus 客户端库假定采用线程模型,其中指标在工作人员之间共享。这对于 Python 等语言来说效果不太好,因为在这种语言中,通常使用进程而不是线程来处理大量工作负载。

我不会在这里复制解释(针对gunicorn)用例,但基本上,您需要:

  • 定义一个包含要使用的目录的环境变量:因为您正在使用Process你自己可以在代码中设置
os.environ["PROMETHEUS_MULTIPROC_DIR"] = "/path/to/writeable/tmp/"
  • 每个进程必须有自己的收集器,在启动时注册它并在退出时注销它:
from prometheus_client import multiprocess

def called_from_process():
    registry = CollectorRegistry()
    multiprocess.MultiProcessCollector(CollectorRegistry())

def process_exit(process):
    if process.pid is not None:
        multiprocess.mark_process_dead(process.pid)

p = Process(target=f)
# f calls called_from_process
p.start()
p.join()
process_exit(process)

请参阅有关如何处理仪表和任何其他怪癖的完整文档。

我预计PROMETHEUS_MULTIPROC_DIR应在应用程序启动时进行清理,以处理应用程序先前运行无法执行此操作的奇怪情况。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从多个 python-flask 子进程收集普罗米修斯指标? 的相关文章

  • 将 transaction.commit_manually() 升级到 Django > 1.6

    我继承了为 Django 1 4 编写的应用程序的一些代码 我们需要更新代码库以使用 Django 1 7 并最终更新到 1 8 作为下一个长期支持版本 在一些地方它使用旧风格 transaction commit manually and
  • 将二维数组放入 Pandas 系列中

    我有一个 2D Numpy 数组 我想将其放入 pandas 系列 而不是 DataFrame 中 gt gt gt import pandas as pd gt gt gt import numpy as np gt gt gt a np
  • Python中列表中两个连续元素的平均值

    我有一个偶数个浮点数的列表 2 34 3 45 4 56 1 23 2 34 7 89 我的任务是计算 1 和 2 个元素 3 和 4 5 和 6 等元素的平均值 在 Python 中执行此操作的快捷方法是什么 data 2 34 3 45
  • 使用 Python 计算 Spark 中成对 (K,V) RDD 中每个 KEY 的平均值

    我想与 Python 共享这个特定的 Apache Spark 解决方案 因为它的文档非常贫乏 我想通过 KEY 计算 K V 对 存储在 Pairwise RDD 中 的平均值 示例数据如下所示 gt gt gt rdd1 take 10
  • CNTK 抱怨 LSTM 中的动态轴

    我正在尝试在 CNTK 中实现 LSTM 使用 Python 来对序列进行分类 Input 特征是固定长度的数字序列 时间序列 标签是 one hot 值的向量 Network input input variable input dim
  • Pandas:如何将数据框插入 Clickhouse

    我正在尝试将 Pandas 数据框插入 Clickhouse 这是我的代码 import pandas import sqlalchemy as sa uri clickhouse default localhost default ch
  • Alembic:如何迁移模型中的自定义类型?

    My User模型是 class User UserMixin db Model tablename users noinspection PyShadowingBuiltins uuid Column uuid GUID default
  • 如何使用 Bokeh 动态隐藏字形和图例项

    我正在尝试在散景中实现复选框 其中每个复选框应显示 隐藏与其关联的行 我知道可以通过图例来实现这一点 但我希望这种效果同时在两个图中发生 此外 图例也应该更新 在下面的示例中 出现了复选框 但不执行任何操作 我显然不明白如何更新用作源的数据
  • 迭代列表的奇怪速度差异

    我创建了两个重复两个不同值的长列表 在第一个列表中 值交替出现 在第二个列表中 一个值出现在另一个值之前 a1 object object 10 6 a2 a1 2 a1 1 2 然后我迭代它们 不对它们执行任何操作 for in a1 p
  • Pandas 堆积条形图中元素的排序

    我正在尝试绘制有关某个地区 5 个地区的家庭在特定行业赚取的收入比例的信息 我使用 groupby 按地区对数据框中的信息进行排序 df df orig groupby District Portion of income value co
  • GradientTape 根据损失函数是否被 tf.function 修饰给出不同的梯度

    我发现计算的梯度取决于 tf function 装饰器的相互作用 如下所示 首先 我为二元分类创建一些合成数据 tf random set seed 42 np random seed 42 x tf random normal 2 1 y
  • Python:我不明白 sum() 的完整用法

    当然 我明白你使用 sum 与几个数字 然后它总结所有 但我正在查看它的文档 我发现了这一点 sum iterable start 第二个参数 start 的作用是什么 这太尴尬了 但我似乎无法通过谷歌找到任何示例 并且对于尝试学习该语言的
  • 在 Spyder 的变量资源管理器中查看局部变量

    我是 python 新手 正在使用 Spyder 的 IDE 我欣赏它的一项功能是它的变量资源管理器 然而 根据一些研究 我发现它只显示全局变量 我找到的解决方法是使用检查模块 import inspect local vars def m
  • 使用 pybtex 将 bibtex 转换为格式化的 HTML 参考书目,例如哈佛风格

    我正在使用 Django 并将 bibtex 存储在我的模型中 并且希望能够以格式化 HTML 字符串的形式向我的视图传递引用 使其看起来像哈佛引用样式 使用中描述的方法Pybtex 无法识别 bibtex 条目 https stackov
  • 在 Windows 上使用带有对数刻度的 matplotlib 时出现 Unicode 错误

    我正在使用 python 2 6 和 matplotlib 如果我运行 matplotlib 库页面中提供的示例 histogram demo py 它工作正常 我已经大大简化了这个脚本 import numpy as np import
  • OSX 上的 locale.getlocale() 问题

    我需要获取系统区域设置来执行许多操作 最终我想使用 gettext 翻译我的应用程序 我打算在 Linux 和 OSX 上分发它 但我在 OSX Snow Leopard 上遇到了问题 python Python 2 5 2 r252 60
  • 导入错误:无法导入名称“时间戳”

    我使用以下代码在 python 3 6 3 中成功安装了 ggplot conda install c conda forge ggplot 但是当我使用下面的代码将其导入笔记本时 出现错误 from ggplot import Impor
  • bs4 `next_sibling` VS `find_next_sibling`

    我在使用时遇到困难next sibling 并且类似地与next element 如果用作属性 我不会得到任何返回 但如果用作find next sibling or find next 然后就可以了 来自doc https www cru
  • 使用 Python 将对象列表转为 JSON

    我在转换时遇到问题Object实例到 JSON ob Object list name scaping myObj base url u number page for ob in list name json string json du
  • tkinter:打开一个带有按钮提示的新窗口[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 用户如何按下 tkinter GUI 中的按钮来打开新窗口 我只需要非常简单的解决方案 如果代码也能被解释那就太好了 这

随机推荐

  • 确定可能的项目组的算法

    我正在摸不着头脑试图做到这一点 这让我筋疲力尽 我知道事情没那么复杂 我有很多物品 这个数量可以等于或大于三 然后我需要确定完成总数的项目组的可能组合 唯一的限制是小组应该有三个或更多项目 不超过 但包括 七个项目 例如 如果我有 7 个项
  • 为单词的前 n 个字符添加下划线

    我想在链接中的单词的前几个字符下划线 类似于 CSS 第一个字母的工作方式 但字母数量可变 或者 在单词字母的前半部分下划线可能会很有用 有什么方法可以使用 HTML CSS 或 Javascript 相对简单地完成此操作吗 我不是开发人员
  • Uncrustify 折叠 多行函数调用

    我的函数调用如下所示 没有明显的原因 func a b c 有没有办法让 uncrustify 将函数折叠成一行 我已经尝试了两天了 没有断断续续的 我让它适用于函数声明 但我没有让它适用于函数调用 当我们这样做时 我也有如下所示的函数 f
  • 为什么是语句(j++);禁止?

    下面的代码是错误的 看一下关于ideone http ideone com vSoRsM public class Test public static void Main int j 5 j if we remove the and th
  • 地点选择器启动后关闭

    我无法从我的片段启动 Google 地点选择器 按照所有步骤和论坛查找根本原因 但无法解决我的问题 Links 谷歌地点选择器 https developers google com places android api placepick
  • 领域:谓词返回 LazyFilterCollection - 如何转换为 Results

    我正在过滤我的数据库查询NSPredicate直接在数据库上 但我想进一步过滤返回的值 Results
  • 在react-navigation createStackNavigator中使用mobx存储

    我想在react navigation中的createStackNavigator中使用Mobx存储变量 具体来说 我想使用商店动态更改初始路线 以便用户可以更改初始屏幕 这可能吗 一些东西在 const stack createStack
  • 使用现有的 InputStream 作为附件内容通过 javax.mail 发送电子邮件

    是否可以使用发送电子邮件javax mail并使用 现有的 InputStream对于电子邮件附件内容 目前我正在构建电子邮件消息 如下所示 final MimeMessage message new MimeMessage session
  • 将水印图像放置在其他图像上(C#、ASP.Net)

    如何将水印图像添 加到其他图像上 我可以将文本作为水印放置在图像上 但现在我想将图像而不是文本放在那里 我如何在 C 中执行此操作 再说一次 我有图像 X 我想将其用作水印符号 我希望这个符号出现在我的网站上显示的所有图像上 所以我将在图像
  • 将标准输入(读取主机)重定向到 Powershell 脚本

    这是一个示例 powershell 脚本 in read host prompt input write host in 这是一个示例 test txt 文件 hello 我们想通过piped从 powershell 输入 这是我尝试过的一
  • 高效地从字符串流中读取格式化行

    为了从文本文件加载大量顶点 我将整个文件加载到内存中 然后我想扫描每一行以查找三个浮点数 以下有效 但我想知道它是好还是浪费 std stringstream sstr sstr lt lt file rdbuf file is an if
  • C++ 函数参数采用指针的地址作为参数。这是如何使用的?它是做什么用的?

    想象一个这样的函数 function Human human Implementation 你能解释一下 到底是什么吗 它有什么用 与仅传递指针或引用有何不同 您能提供一个小的且具有解释性的样本吗 谢谢 它就像一个双指针 您通过引用传递指针
  • 多目标和多类预测

    我对机器学习和张量流比较陌生 我想训练数据 以便可以进行 2 个目标和多个类别的预测 这是可以做的事情吗 我能够为 1 个目标实现该算法 但不知道如何为第二个目标实现该算法 数据集示例 一年中的某一天温度流量能见度 316 8 1 4 28
  • browser.tabs.sendMessage(): 错误:接收端不存在

    我尝试运行上面给出的示例代码tabs sendMessage MDN 页面 https developer mozilla org en US Add ons WebExtensions API tabs sendMessage 所以我的代
  • 设置和获取交集的 MySQL 字符串

    我有一个错误投影的数据库 其中在文本列中设置了 ID 例如 1 2 5 10 我需要获得以相同方式设置的两列的交集 我不喜欢使用 PHP 或其他脚本语言来完成它 我也不喜欢 MySQL 自定义函数 有没有办法获得由逗号分隔符字符串给出的两个
  • Spring Data REST:如何在一次调用中使用 Id 列表检索多个项目?

    我可以通过以下调用从 Spring Data REST 检索一本书籍 获取 书 id 现在 如果我知道两本书的 Id 并且想一次检索它们呢 应该打电话什么 我尝试了以下操作 但它返回的书籍与指定的书籍不同 GET book ids id1
  • 删除 EF4 中的实体而不加载整个实体

    我正在使用实体框架 4 并有以下设置和问题 我在 MySql 中有一个表 其中包含元数据字段和 blob 字段 使用所描述的表拆分技术here http blogs microsoft co il blogs gilf archive 20
  • Twitter 分享按钮不转发自定义文本

    我正在开发一个网站 为每个特定产品提供 Twitter 共享选项 我按照 Twitter API 说明进行推文共享 除了自定义文本显示之外 一切正常 例如 我希望用户像这样发推文 你觉得怎么样 我应该买这个吗 http url etc ht
  • 调整未知大小的张量流图像的大小

    我有一个张量流 UNet 风格的网络 目前我指定输入和目标图像如下 self inputTensors tf placeholder tf float32 None opt inputHeight opt inputWidth opt in
  • 如何从多个 python-flask 子进程收集普罗米修斯指标?

    我有 main 函数 它生成两个单独的子进程 这两个子流程共享指标 如何共享两个流程的指标并保持更新 这是我的片段 以供更多理解 from multiprocessing import Process import prometheus c