数行のコードとアプリケーションがメトリックを生成します。
prometheus_方法を理解するためにはflask_輸出は動作しますが、最低限の例は十分です。
from flask import Flask
from prometheus_flask_exporter import PrometheusMetrics
app = Flask(__name__)
metrics = PrometheusMetrics(app)
@app.route('/')
def main():
return 'OK'
始めるために必要なのはそれだけです!インポートとPrometheusMetricsを初期化する行を追加することにより、登録されているFlaskアプリケーションの/メトリックエンドポイントに表示される要求期間メトリックと要求カウンター、および基盤となるPrometheusクライアントライブラリから取得するデフォルトメトリックを取得します。
PrometheusとGrafanaのインスタンスをデモアプリケーションとともに起動して次のようなメトリックを生成するGitHubリポジトリに、使いやすい例があります。
README , , Prometheus, .
, README .
. PrometheusMetrics, metrics, , , :
@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
/collection/10002/item/76 , cnt_collection{collection = "10002", status = "200"}, ( ) :
flask_http_request_duration_seconds
- HTTP- Flask ,flask_http_request_total
- HTTP-
, , , . README , , .
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. , .
, /metrics Flask, Prometheus.
Prometheus Flask :
scrape_configs:
- job_name: 'example'
dns_sd_configs:
- names: ['app']
port: 5000
type: A
refresh_interval: 5s
GitHub. , Prometheus Flask http://app:5000/metrics, IP-, , Kubernetes Docker Swarm.
, , , , path=None PrometheusMetrics.
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(port), HTTP-, 5099 . , , Flask, /metrics, URI , register_endpoint(..), .
rycus86/prometheus_flask_exporter - Prometheus
PyPIのprometheus-flask-exporter- このプロジェクトはPyPIにあります
prometheus / client_python -Python用の公式Prometheusクライアントライブラリ
試してみることにした場合は、GitHubで問題を開くか、コメント、フィードバック、提案を残してください。