打开/关闭搜索
搜索
打开/关闭菜单
56
718
72
2203
md5.pw
导航
首页
最近更改
随机页面
MediaWiki帮助
特殊页面
上传文件
打开/关闭外观设置菜单
通知
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。
user-interface-preferences
个人工具
登录
请求账号
查看“︁用Docker部署服务器TCP 延时监控”︁的源代码
来自md5.pw
分享此页面
更多语言
查看
阅读
查看源代码
查看历史
associated-pages
页面
讨论
更多操作
←
用Docker部署服务器TCP 延时监控
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
用 Docker / Docker Compose 部署“服务器延时(Latency)监控”**的常用方案:'''Prometheus + Blackbox Exporter + Grafana'''。Blackbox Exporter 负责对目标做 '''HTTP / TCP / ICMP(Ping)''' 探测并产出 <code>probe_*</code> 指标,Prometheus 抓取,Grafana 展示。 ---- == 1) 目录结构 == 在一台“监控机”(能访问你要监控的服务器/端口的那台机器)上建目录: <code>monitoring/ docker-compose.yml prometheus/ prometheus.yml rules/ blackbox-alerts.yml # 可选:告警规则 blackbox/ blackbox.yml grafana/ provisioning/ datasources/ datasource.yml</code> ---- == 2) docker-compose.yml == <blockquote>版本我这里选用: * Prometheus <code>prom/prometheus:v3.10.0</code>(示例;该 tag 存在于 Docker Hub)(Docker Hub) * Blackbox Exporter <code>prom/blackbox-exporter:v0.28.0</code>(Docker Hub) * Grafana <code>grafana/grafana:12.3-ubuntu</code>(你也可换成 <code>12.3</code> 等)(Docker Hub) * Alertmanager 可选 <code>prom/alertmanager:v0.31.1</code>(Docker Hub) </blockquote> <code>services: prometheus: image: prom/prometheus:v3.10.0 container_name: prometheus command: - --config.file=/etc/prometheus/prometheus.yml - --storage.tsdb.path=/prometheus - --web.enable-lifecycle volumes: - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro - ./prometheus/rules:/etc/prometheus/rules:ro - prometheus_data:/prometheus ports: - "9090:9090" restart: unless-stopped networks: [monitor] blackbox-exporter: image: prom/blackbox-exporter:v0.28.0 container_name: blackbox-exporter command: - --config.file=/etc/blackbox/blackbox.yml volumes: - ./blackbox/blackbox.yml:/etc/blackbox/blackbox.yml:ro # 建议:生产环境不对外暴露 9115;需要本机调试再开端口映射 ports: - "9115:9115" restart: unless-stopped networks: [monitor] # ICMP(ping) 需要额外权限(二选一:cap_add 更推荐;privileged 更大) cap_add: - NET_RAW # privileged: true grafana: image: grafana/grafana:12.3-ubuntu container_name: grafana environment: - GF_SECURITY_ADMIN_USER=admin - GF_SECURITY_ADMIN_PASSWORD=admin # 首次登录后务必修改 volumes: - grafana_data:/var/lib/grafana - ./grafana/provisioning:/etc/grafana/provisioning:ro ports: - "3000:3000" restart: unless-stopped networks: [monitor] # 可选:Prometheus 规则触发后,用 Alertmanager 分发通知 alertmanager: image: prom/alertmanager:v0.31.1 container_name: alertmanager # 先用默认示例配置也能跑起来;要发通知再挂载你自己的 alertmanager.yml ports: - "9093:9093" restart: unless-stopped networks: [monitor] networks: monitor: volumes: prometheus_data: grafana_data:</code> ---- == 3) blackbox.yml(探测模块配置) == Blackbox Exporter 支持 HTTP/HTTPS、TCP、ICMP、DNS、gRPC 等探测。(GitHub) 先放最常用的 3 个模块:HTTP 200、TCP 端口连通、ICMP ping。 <code>blackbox/blackbox.yml</code>: <code>modules: http_2xx: prober: http timeout: 5s http: preferred_ip_protocol: "ip4" valid_http_versions: ["HTTP/1.1", "HTTP/2"] method: GET no_follow_redirects: false tcp_connect: prober: tcp timeout: 5s icmp: prober: icmp timeout: 3s icmp: preferred_ip_protocol: "ip4"</code> <blockquote>'''ICMP 权限提示(很关键)''':在 Linux 上,ICMP 探测需要 <code>CAP_NET_RAW</code> 或 root 等权限;Docker 里通常用 <code>cap_add: NET_RAW</code> 或 <code>privileged</code> 解决。(GitHub)</blockquote> ---- == 4) prometheus.yml(抓取 blackbox 探测结果) == Prometheus 抓取 Blackbox Exporter 通常用 '''multi-target exporter pattern''':Prometheus 实际请求的是 blackbox 的 <code>/probe</code>,目标地址通过 <code>target</code> 参数传递,并通过 relabel 把目标写到 <code>instance</code> 标签。(Prometheus) <code>prometheus/prometheus.yml</code>: <code>global: scrape_interval: 15s scrape_timeout: 10s evaluation_interval: 15s rule_files: - /etc/prometheus/rules/*.yml scrape_configs: # 1) 抓 blackbox-exporter 自身 /metrics(白盒) - job_name: blackbox_exporter static_configs: - targets: ["blackbox-exporter:9115"] # 2) HTTP 延时(从监控机到目标 HTTP 服务的响应耗时) - job_name: blackbox_http metrics_path: /probe params: module: [http_2xx] static_configs: - targets: - <nowiki>https://example.com</nowiki> - <nowiki>https://api.example.com/health</nowiki> labels: group: web relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: blackbox-exporter:9115 # 3) TCP 端口连通 + 连接延时(适合 SSH/DB/Redis 等) - job_name: blackbox_tcp metrics_path: /probe params: module: [tcp_connect] static_configs: - targets: - 10.0.0.10:22 - 10.0.0.11:5432 labels: group: tcp relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: blackbox-exporter:9115 # 4) ICMP ping 延时(需要 NET_RAW 权限) - job_name: blackbox_icmp metrics_path: /probe params: module: [icmp] static_configs: - targets: - 10.0.0.10 - 10.0.0.11 labels: group: icmp relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: blackbox-exporter:9115</code> <blockquote>想把“不同模块、不同 targets”合并到一个 job 里也可以(用 <code>labels: module: xxx</code> + <code>__param_module</code> 注入),Prometheus 官方指南里有示例。(Prometheus)</blockquote> ---- == 5) Grafana:自动配置 Prometheus 数据源 == Grafana 支持通过 provisioning 文件自动创建数据源。(Grafana Labs) <code>grafana/provisioning/datasources/datasource.yml</code>: <code>apiVersion: 1 datasources: - name: Prometheus type: prometheus access: proxy url: <nowiki>http://prometheus:9090</nowiki> isDefault: true editable: false</code> ---- == 6) 启动 == 在 <code>monitoring/</code> 目录执行: <code>docker compose up -d</code> 打开: * Prometheus:<code>http://<监控机IP>:9090</code> * Grafana:<code>http://<监控机IP>:3000</code>(账号密码你在 compose 里设的 admin/admin) ---- == 7) 快速验证(建议你先做这一步排错) == === 7.1 直接访问 blackbox /probe 看输出 === Blackbox Exporter 支持直接访问 <code>/probe?target=...&module=...</code> 获取指标输出,<code>probe_success</code> 会告诉你探测是否成功。(GitHub) 例如(在监控机上): * <code><nowiki>http://localhost:9115/probe?target=prometheus.io&module=http_2xx</nowiki></code> * <code><nowiki>http://localhost:9115/probe?target=10.0.0.10&module=icmp</nowiki></code> === 7.2 Prometheus Targets 页面 === Prometheus UI → '''Status → Targets''' 看 <code>blackbox_http / blackbox_tcp / blackbox_icmp</code> 是否 <code>UP</code>。 ---- == 8) 在 Grafana 里看“延时”看哪些指标 == 最常用的两个: * '''是否可达''':<code>probe_success</code>(1=成功,0=失败)(Prometheus) * '''探测总耗时''':<code>probe_duration_seconds</code>(你要的“延时/Latency”核心指标)(Prometheus) PromQL 示例(Grafana 面板里直接用): * 某组目标最近 5 分钟平均延时: <code>avg_over_time(probe_duration_seconds{job="blackbox_icmp"}[5m])</code> * 最近 5 分钟最大延时(看尖刺): <code>max_over_time(probe_duration_seconds{job="blackbox_http"}[5m])</code> * 可用率(过去 10 分钟内成功率): <code>avg_over_time(probe_success{job="blackbox_http"}[10m]) * 100</code> === 想拆解 HTTP 延时(DNS/连接/TLS/传输) === Blackbox Exporter 还会给出 <code>probe_http_duration_seconds{phase="resolve|connect|tls|processing|transfer"}</code> 这种分阶段指标;这些 phase 含义在社区里有明确解释:resolve=DNS、connect=TCP 建连、tls=TLS 握手、processing=等待首字节、transfer=传输响应。(Google Groups) ---- == 9) 直接套用的 Grafana Dashboard == Grafana 官方仪表盘库里有现成的 '''Prometheus Blackbox Exporter''' dashboard(例如 ID:'''7587''')。你在 Grafana → '''Dashboards → Import''',输入 7587,然后选择 Prometheus 数据源即可。(Grafana Labs) ---- == 10) 可选:Prometheus 告警规则(延时过高 / 探测失败) == <code>prometheus/rules/blackbox-alerts.yml</code>: <code>groups: - name: blackbox <nowiki> </nowiki> rules: <nowiki> </nowiki> - alert: BlackboxProbeFailed <nowiki> </nowiki> expr: probe_success == 0 <nowiki> </nowiki> for: 2m <nowiki> </nowiki> labels: <nowiki> </nowiki> severity: critical <nowiki> </nowiki> annotations: <nowiki> </nowiki> summary: "探测失败: <nowiki>{{ $labels.instance }}</nowiki>" <nowiki> </nowiki> description: "job=<nowiki>{{ $labels.job }}</nowiki> 连续 2 分钟探测失败" <nowiki> </nowiki> - alert: BlackboxHighLatency <nowiki> </nowiki> expr: probe_duration_seconds > 0.5 <nowiki> </nowiki> for: 5m <nowiki> </nowiki> labels: <nowiki> </nowiki> severity: warning <nowiki> </nowiki> annotations: <nowiki> </nowiki> summary: "延时过高: <nowiki>{{ $labels.instance }}</nowiki>" <nowiki> </nowiki> description: "job=<nowiki>{{ $labels.job }}</nowiki> 延时 > 0.5s 持续 5 分钟"</code> <blockquote>Alertmanager 的作用是对 Prometheus 产生的告警做去重/分组/路由到邮件、PagerDuty、Webhook 等。(Prometheus) 如果你想我给你一份“发到企业微信/钉钉/飞书/Telegram/Webhook”的 alertmanager.yml,我也可以直接给模板。</blockquote> ---- == 11) 常见坑(你大概率会遇到) == # '''ICMP 全部失败''' 大概率是权限问题:Linux 下 ICMP 需要 <code>CAP_NET_RAW</code> / root / 或配置 <code>ping_group_range</code>;Docker 里通常加 <code>cap_add: NET_RAW</code>。(GitHub) # '''HTTP 探测失败但浏览器能打开''' 常见是:目标需要特定 Host/SNI、重定向、证书问题、内网 DNS 不通。可以先用 <code>/probe?...&debug=true</code> 看详细原因(blackbox 支持 debug 参数)。(GitHub) # '''Grafana 连不上 Prometheus''' 确认 datasource URL 用的是 Docker 网络内的 <code><nowiki>http://prometheus:9090</nowiki></code>(而不是 <code>localhost</code>)。 # '''不建议把 9115 暴露到公网''' Blackbox 会帮你去探测任意目标;暴露公网相当于给别人一个“探测器”。生产建议去掉 <code>ports: "9115:9115"</code> 或加防火墙/反代鉴权。 ----
返回
用Docker部署服务器TCP 延时监控
。
查看“︁用Docker部署服务器TCP 延时监控”︁的源代码
来自md5.pw