اكتشاف جيد ولكن إذا حاولت استهداف هذا المنفذ المحدد، أحصل على رسالة “تم رفض الاتصال”.
Get "http://discourse_app:9405/metrics": dial tcp 172.20.0.2:9405: connect: connection refused
تم الاختبار باستخدام wget من داخل حاوية prometheus أيضًا للتأكد.
/prometheus # ping discourse_app
PING discourse_app (172.20.0.2): 56 data bytes
64 bytes from 172.20.0.2: seq=0 ttl=64 time=0.223 ms
64 bytes from 172.20.0.2: seq=1 ttl=64 time=0.270 ms
^C
--- discourse_app ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.223/0.246/0.270 ms
/prometheus # wget discourse_app:9405/metrics
Connecting to discourse_app:9405 (172.20.0.2:9405)
wget: can't connect to remote host (172.20.0.2): Connection refused
نعم، تم الاختبار باستخدام wget بدلاً من ذلك (حاوية prometheus هي busybox بسيطة) ولكن تم الوصول إلى المقاييس على أي حال.
إذًا، ما تقوله هو أنه يجب عليّ إيجاد طريقة لجعل الحاوية التي تشغل prometheus تحتوي على إدخال في /etc/hosts يحل… لقد فقدتك هناك آسف ![]()
ما قمت به هو إضافة حاوية Docker أخرى تحتوي ببساطة على nginx وتقديم تكوين وكيل أمامي يضيف الرأس Host إلى الطلبات التي يتلقاها. لا يكشف أي منفذ لذلك يمكن الوصول إليه فقط من خلال الشبكة الافتراضية الداخلية على أي حال.
إذًا كيف تتغير الأمور؟
Prometheus Job:
- job_name: discourse_exporter_proxy
scheme: http
static_configs:
- targets:
- 'discourse_forward_proxy:8080'
docker-compose.yaml (الجزء الخاص بالوكيل فقط)
version: "3"
services:
# [...]
discourse_forward_proxy:
image: nginx:latest
container_name: discourse_forward_proxy
restart: unless-stopped
volumes:
- ./discourse_forward_proxy/:/etc/nginx/conf.d
networks:
- prometheus-discourse_forward_proxy
- discourse
# [...]
networks:
prometheus-discourse_forward_proxy:
internal: true
discourse:
external: true
في الدليل الذي يوجد به ملف docker-compose.yaml الخاص بك، قم بإنشاء ./discourse_forward_proxy/discourse_forward_proxy.conf
server {
listen 8080;
location /metrics {
proxy_set_header Host "YOUR_DOMAIN_HERE.COM";
proxy_pass https://discourse_app/metrics;
}
}
ها أنت ذا:
