frp监控与告警系统搭建:实时掌握服务运行状态

frp监控与告警系统搭建:实时掌握服务运行状态

【免费下载链接】frp frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议,且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。 【免费下载链接】frp 项目地址: https://gitcode.com/GitHub_Trending/fr/frp

你是否曾因frp服务突然中断而影响业务?是否想实时了解内网穿透的流量变化?本文将带你从零构建frp全链路监控告警体系,通过Prometheus+Grafana实现可视化监控,搭配简单脚本完成异常告警,让你轻松掌控服务状态。

监控体系架构

frp监控系统主要包含三个核心组件:

  • 数据采集层:frps内置Prometheus指标暴露
  • 数据存储与可视化层:Prometheus+Grafana
  • 告警层:Prometheus Alertmanager或自定义脚本

frp架构图

核心监控指标说明

frp提供丰富的原生指标,主要分为以下几类:

  • 代理连接状态(在线/离线数量)
  • 流量统计(入站/出站带宽、总传输量)
  • 系统性能(CPU/内存占用、连接数)
  • 错误统计(认证失败、连接超时次数)

服务端监控配置

启用Prometheus指标暴露

修改frps配置文件启用监控功能,完整配置示例可参考conf/frps_full_example.toml

# 启用Dashboard和Prometheus
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "admin"
enablePrometheus = true  # 关键配置:开启Prometheus指标

# 基础认证配置(可选)
auth.method = "token"
auth.token = "your_secure_token"

启动frps后,访问http://frps_ip:7500/metrics即可获取指标数据,例如:

# HELP frp_server_proxy_total Total number of proxies
# TYPE frp_server_proxy_total gauge
frp_server_proxy_total{type="tcp"} 3
# HELP frp_server_traffic_incoming_bytes Total incoming traffic in bytes
# TYPE frp_server_traffic_incoming_bytes counter
frp_server_traffic_incoming_bytes{proxy_name="ssh_proxy"} 12560

配置Prometheus采集

创建Prometheus配置文件frp-prometheus.yml

scrape_configs:
  - job_name: 'frp'
    static_configs:
      - targets: ['frps_ip:7500']
    basic_auth:
      username: 'admin'
      password: 'admin'

启动Prometheus:

prometheus --config.file=frp-prometheus.yml

可视化监控面板

Grafana面板导入

  1. 访问Grafana控制台(默认地址http://localhost:3000
  2. 导入frp专用仪表盘(Dashboard ID: 13978)
  3. 配置Prometheus数据源,完成面板加载

frp仪表盘

关键监控面板说明

Grafana仪表盘主要包含以下视图:

  • 代理状态概览:所有代理的在线状态和流量排行
  • 流量趋势图:入站/出站带宽实时监控
  • 连接统计:活跃连接数、连接成功率
  • 错误告警:认证失败、连接超时等异常指标

告警配置

自定义告警脚本

创建简单的Python告警脚本frp_alert.py,监控代理离线状态:

import requests
import smtplib
from email.mime.text import MIMEText

# 配置
FRPS_METRICS_URL = "http://frps_ip:7500/metrics"
ADMIN_EMAIL = "your@email.com"
ALERT_THRESHOLD = 5  # 连续5次检测失败触发告警

def check_proxy_status():
    try:
        response = requests.get(FRPS_METRICS_URL, auth=('admin', 'admin'))
        metrics = response.text
        
        # 检查关键代理是否在线
        if 'frp_server_proxy_online{proxy_name="web_proxy"} 1' not in metrics:
            send_alert("web_proxy离线", "web_proxy已超过5分钟未连接")
    except Exception as e:
        send_alert("监控异常", f"无法获取指标数据: {str(e)}")

def send_alert(subject, content):
    # 实现邮件发送逻辑
    msg = MIMEText(content)
    msg['Subject'] = subject
    msg['From'] = ADMIN_EMAIL
    msg['To'] = ADMIN_EMAIL
    
    with smtplib.SMTP('smtp.example.com', 587) as server:
        server.starttls()
        server.login("your_email", "your_password")
        server.send_message(msg)

if __name__ == "__main__":
    check_proxy_status()

添加crontab定时任务:

*/5 * * * * python3 /path/to/frp_alert.py

Prometheus Alertmanager配置(进阶)

对于生产环境,推荐使用Prometheus Alertmanager,创建告警规则文件alert.rules.yml

groups:
- name: frp_alerts
  rules:
  - alert: ProxyOffline
    expr: frp_server_proxy_online{proxy_name=~"web_proxy|ssh_proxy"} == 0
    for: 5m
    labels:
      severity: critical
    annotations:
      summary: "代理 {{ $labels.proxy_name }} 离线"
      description: "代理已离线超过5分钟,请检查服务状态"

最佳实践与注意事项

性能优化建议

  • 监控采样间隔建议设置为15-30秒,避免影响frps性能
  • 对流量大的代理单独配置流量告警阈值
  • 定期清理Prometheus历史数据(建议保留7天)

安全加固措施

  • 通过防火墙限制7500端口仅允许Prometheus服务器访问
  • 使用HTTPS加密Dashboard流量(配置webServer.tls.certFile)
  • 定期轮换认证token和Dashboard密码

总结

通过本文配置,你已拥有:

  1. 实时可视化监控面板,直观掌握服务状态
  2. 多维度性能指标,提前发现潜在问题
  3. 灵活的告警机制,及时响应异常情况

完整监控方案代码和配置示例可在frp官方文档中找到更多细节。如需进一步定制监控指标,可参考server/metrics/metrics.go中的指标定义实现自定义扩展。

提示:关注frp项目Release.md获取最新监控功能更新,v0.52+版本新增了更多流量分析指标。

【免费下载链接】frp frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议,且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。 【免费下载链接】frp 项目地址: https://gitcode.com/GitHub_Trending/fr/frp

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值