مقدمة
تتعلق هذه الملاحظة عمومًا بدفع Pushgateway ، ومع ذلك ، سأحذرك وأعترف على الفور بأن النص سيحتوي على مثال - نمط مضاد للدفع Pushgateway ، حيث يوصى باستخدام Pushgateway في حالة عدم عمل الخدمة باستمرار (أو لخدمة / مهمة بدأت بشكل عام لا توجد واجهة) ، مما يعني أنه من الأفضل لبروميثيوس ألا يطرق باستمرار على الأبواب المغلقة ولا يقوم بعمل غير ضروري.
المقدمة
لذا ، فإن pushgateway هي خدمة يمكنك من خلالها إسقاط المقاييس عندما لا يكون نموذج سحب بروميثيوس القياسي قابلاً للتطبيق (في المقدمة ، وصفت عمومًا كيف يمكن أن ينشأ مثل هذا الموقف وينظر إليه) بعد دخول المقاييس إلى بوابة الدفع ، يختارها بروميثيوس بالفعل من هناك ، وهذا يعني عدة قيود تتعلق بدفع المقاييس ، على سبيل المثال ، عدم وجود مقياس أعلى ، نظرًا لأنه يتم إنشاؤه بواسطة بروميثيوس نفسه للمثال الذي تم الاستطلاع عليه ، وفي هذه الحالة ، يكون فقط بوابة الدفع.
ملاحظة: على الرغم من أننا إذا تحدثنا عن مقياس الارتفاع ، فلن تكون هناك حاجة إذا كنت تستخدم Pushgateway بطريقة عملية.
إعداد بروميثيوس لمسح بوابة الدفع
لنفترض أن لدينا مؤلفًا مثل هذا باستخدام Prometheus و Pushgateway:
# ....( - ..) prometheus: restart: always image: bitnami/prometheus:latest links: - pushgateway volumes: - ./.prom.yml:/opt/bitnami/prometheus/conf/prometheus.yml pushgateway: restart: always image: bitnami/pushgateway:latest ports: - 9091:9091
prom.yml - , pushgateway:
global: null scrape_interval: 5s scrape_timeout: 2s evaluation_interval: 15s scrape_configs: - job_name: pushgateway honor_labels: true static_configs: - targets: - 'pushgateway:9091'
, honor_lables, , , , "X" pushgateway, "X", honor_lables=false "X" pushgateway "exported_X" , pushgateway, true ( , ).
p.s. pushgateway — - , , basic_auth.
, , , , , - , service_discovery ( , , ).
, , Faust ( swarm, ), consul prometheus, docker compose scale.
, , , , :
ports: - "9100-9200:6066"
prometheus .
async def push_metrics():
def auth_handler(url, method, timeout, headers, data):
return basic_auth_handler(url, method, timeout, headers, data, PUSHGATEWAY_USERNAME, PUSHGATEWAY_PASSWORD)
push_to_gateway(PUSHGATEWAY_URI, job=f"{WORKERS_APP_NAME}-{ENV}", registry=registry_metrics, handler=auth_handler)
@app.timer(interval=PUSH_METRICS_INTERVAL)
async def push_metrics_cron():
await push_metrics()
— job name ( — prometheus'), handler registry . , pushgateway - , , prometheus.
قررت أن أكتب ملاحظة ، نظرًا لأنني واجهت ملاحظة مماثلة في عملي ، سأقول على الفور أن الطريقة من المثال لن تدخل في الإنتاج ، ومع ذلك ، مثل استخدام pushgateway في حالة عدم وجود اكتشاف الخدمة ، لاختبارها يمكن أن تؤتي ثمارها.