只需几行代码,您的应用程序就会生成指标,哇!
为了理解 prometheus_ 是如何工作的烧瓶_出口商一个最小的例子就足够了:
from flask import Flask
from prometheus_flask_exporter import PrometheusMetrics
app = Flask(__name__)
metrics = PrometheusMetrics(app)
@app.route('/')
def main():
return 'OK'
这就是您开始所需的全部内容! 通过添加导入和初始化行 普罗米修斯指标,你会得到指标 请求持续时间 и 请求计数器,显示在端点处 /指标 它注册的 Flask 应用程序,以及您从基础获取的所有默认指标
你可以找到
您还可以在以下位置找到指标列表:
调整
库中有很多配置选项,看一下
基本配置如上所示。 只需创建一个实例 普罗米修斯指标,我们称之为 度量,然后使用它通过装饰函数来定义您想要收集的其他指标:
-
@metrics.counter(..)
-
@metrics.gauge(..)
-
@metrics.summary(..)
-
@metrics.histogram(..)
计数器对呼叫进行计数,其他计数器则根据这些呼叫的持续时间收集指标。 您可以为每个标签定义标签,可能使用请求或响应属性。 例如:
from flask import Flask, request
from prometheus_flask_exporter import PrometheusMetrics
app = Flask(__name__)
# group by endpoint rather than path
metrics = PrometheusMetrics(app, group_by='endpoint')
@app.route('/collection/:collection_id/item/:item_id')
@metrics.counter(
'cnt_collection', 'Number of invocations per collection', labels={
'collection': lambda: request.view_args['collection_id'],
'status': lambda resp: resp.status_code
})
def get_item_from_collection(collection_id, item_id):
pass
在上面的示例中,单击端点 /集合/10002/项目/76 会导致计数器增加,例如 cnt_collection{集合=“10002”,状态=“200”},此外,您还将从默认库中获取默认指标(对于本例中的每个端点):
-
flask_http_request_duration_seconds
— 按方法、路径和状态列出的所有 Flask 请求的 HTTP 请求持续时间(以秒为单位) -
flask_http_request_total
— 按方法和状态划分的 HTTP 请求总数
有一些选项可以跳过对特定端点的跟踪、记录其他默认指标或跳过上面列出的指标,或者将相同的自定义指标应用于多个端点。 查看
app = Flask(__name__)
metrics = PrometheusMetrics(app)
@app.route('/')
def main():
pass # requests tracked by default
@app.route('/skip')
@metrics.do_not_track()
def skip():
pass # default metrics are not collected
# custom metric to be applied to multiple endpoints
common_counter = metrics.counter(
'by_endpoint_counter', 'Request count by endpoints',
labels={'endpoint': lambda: request.endpoint}
)
@app.route('/common/one')
@common_counter
def endpoint_one():
pass # tracked by the custom and the default metrics
@app.route('/common/two')
@common_counter
def endpoint_two():
pass # also tracked by the custom and the default metrics
# register additional default metrics
metrics.register_default(
metrics.counter(
'by_path_counter', 'Request count by request paths',
labels={'path': lambda: request.path}
)
)
该库对流行的多处理库(例如 uWSGI 和 Gunicorn)进行了方便的扩展。 您还可以找到目标用例的小示例,包括多重处理。
指标收集
如上所述,该库默认提供一个端点 /指标 在 Flask 应用程序中,它可以作为
在上面的仪表板示例中,您可以使用以下配置将 Prometheus 定位到具有默认设置的 Flask 应用程序:
scrape_configs:
- job_name: 'example'
dns_sd_configs:
- names: ['app']
port: 5000
type: A
refresh_interval: 5s
完整示例请参见
如果以这种方式公开指标端点不适合您,也许是因为您不想允许外部访问它,您可以通过传递轻松禁用它 路径=无 创建实例时 普罗米修斯指标.
from flask import Flask, request
from prometheus_flask_exporter import PrometheusMetrics
app = Flask(__name__)
metrics = PrometheusMetrics(app, path=None)
...
metrics.start_http_server(5099)
然后你可以使用 start_http_server(端口)要在不同的 HTTP 端口上打开此端点, 5099 在上面的例子中。 或者,如果您对同一 Flask 应用程序中的端点感到满意,但需要将其路径从 /指标,您可以传递另一个 URI 作为路径参数,或者使用 注册端点(..)以便稍后安装。
引用
-
rycus86/prometheus_flask_exporter — 普罗米修斯的这个瓶子出口商 -
普罗米修斯烧瓶出口商自述文件 — 用法、示例和配置选项 -
prometheus-flask-exporter 示例 — 以不同方式设置 Flask 应用程序监控的示例 -
PyPI 上的 prometheus-flask-exporter — 该项目位于 PyPI 上 -
普罗米修斯/client_python — Python 官方 Prometheus 客户端库
如果您决定尝试一下,请随时在 GitHub 上提出问题或留下您的评论、反馈和建议!
谢谢大家!
来源: habr.com