文章内容
一、FRP基础信息
| 项目 | 信息 |
|---|---|
| FRP客户端路径 | <FRP安装目录>/frpc |
| 配置文件路径 | <配置文件目录>/frpc.ini |
| 日志文件路径 | <日志目录>/frpc.log |
| 远程服务器地址 | <服务器IP>:<服务端口> |
二、FRP状态检查
1. 检查FRP进程状态
ps aux | grep frp
预期输出:应该看到 frpc 进程正在运行
2. 检查网络连接状态
netstat -antp | grep <端口号>
预期输出:应该看到 ESTABLISHED 状态的连接
3. 检查FRP服务状态
systemctl status frpc
预期输出:Active: active (running)
三、连接状态查询
1. 查看实时日志
tail -f <日志文件路径>
2. 查询指定时间段连接状态
grep "2026/03/14 01:" <日志文件路径> | grep -iE 'disconnect|close|error|failed|lost|reconnect'
3. 统计断开次数
grep "2026/03/14 0[1-5]:" <日志文件路径> | grep -iE 'work connection closed' | wc -l
4. 按小时统计断开情况
grep "2026/03/14 0[1-5]:" <日志文件路径> | grep -iE 'work connection closed' | awk '{print $2}' | cut -d: -f1 | sort | uniq -c
四、重连时间分析
1. 查看断开和重连记录
grep "2026/03/14 0[1-5]:" <日志文件路径> | grep -E 'work connection closed|login to server success'
2. Python脚本计算重连时间
cat > /tmp/calc_reconnect_time.py << 'SCRIPT'
import re
from datetime import datetime
log_file = '<日志文件路径>'
with open(log_file, 'r') as f:
lines = f.readlines()
disconnect_times = []
reconnect_times = []
for line in lines:
if '2026/03/14 0[1-5]:' in line:
match = re.match(r'(\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2})', line)
if match:
time_str = match.group(1)
time_obj = datetime.strptime(time_str, '%Y/%m/%d %H:%M:%S')
if 'work connection closed' in line:
disconnect_times.append(time_obj)
elif 'login to server success' in line:
reconnect_times.append(time_obj)
print("断开时间\t\t\t重连成功时间\t\t\t耗时(秒)")
print("=" * 80)
total_disconnect = 0
total_reconnect_time = 0
max_time = 0
min_time = 999999
for i, disconnect_time in enumerate(disconnect_times):
for reconnect_time in reconnect_times:
if reconnect_time >= disconnect_time:
time_diff = (reconnect_time - disconnect_time).total_seconds()
if time_diff <= 120:
print(f"{disconnect_time}\t{reconnect_time}\t{time_diff:.0f}秒")
total_disconnect += 1
total_reconnect_time += time_diff
max_time = max(max_time, time_diff)
min_time = min(min_time, time_diff)
break
if total_disconnect >= 20:
break
print("=" * 80)
if total_disconnect > 0:
print(f"\n统计结果:")
print(f"总断开次数: {total_disconnect}")
print(f"平均重连时间: {total_reconnect_time/total_disconnect:.2f}秒")
print(f"最长重连时间: {max_time:.0f}秒")
print(f"最短重连时间: {min_time:.0f}秒")
SCRIPT
python3 /tmp/calc_reconnect_time.py
五、故障排查
1. FRP无法启动
# 检查配置文件
cat <配置文件路径>
# 手动启动测试
<FRP客户端路径> -c <配置文件路径>
2. 连接频繁断开
# 查看最近断开记录
tail -100 <日志文件路径> | grep -iE 'disconnect|close|error'
# 检查网络连通性
ping <服务器IP>
# 检查端口连通性
telnet <服务器IP> <端口号>
3. 重启FRP服务
# 使用systemctl重启
sudo systemctl restart frpc
# 或手动重启
sudo pkill frpc
nohup <FRP客户端路径> -c <配置文件路径> > <日志文件路径> 2>&1 &
六、FRP配置优化
当前配置参数
| 参数 | 当前值 | 说明 |
|---|---|---|
| heartbeat_interval | 3秒 | 心跳检测间隔 |
| heartbeat_timeout | 10秒 | 心跳超时时间 |
| reconnect_interval | 1秒 | 重连间隔 |
| reconnect_max_times | 0(无限) | 最大重连次数 |
| log_max_days | 7天 | 日志保留天数 |
查看完整配置
cat <配置文件路径>
七、监控指标参考
正常指标范围
- 重连时间 < 2秒
- 每小时断开 < 3次
- 连接状态:ESTABLISHED
- 进程状态:running
异常指标阈值
- 重连时间 > 5秒
- 每小时断开 > 10次
- 连接状态:CLOSE_WAIT
- 进程状态:stopped
八、常用命令速查
| 功能 | 命令 |
|---|---|
| 查看进程 | ps aux | grep frp |
| 查看连接 | netstat -antp | grep <端口号> |
| 实时日志 | tail -f <日志文件路径> |
| 统计断开 | grep "断开关键词" <日志文件路径> | wc -l |
| 重启服务 | sudo systemctl restart frpc |
| 查看配置 | cat <配置文件路径> |
九、总结
FRP连接监控的关键点:
- 快速重连:当前配置下,重连时间平均0.25秒,最长1秒
- 自动恢复:每次断开后都能自动重连,无需人工干预
- 日志分析:通过日志可以准确统计断开次数和重连时间
- 配置优化:当前配置已经非常优化,无需调整
建议:
- 保持当前配置
- 设置监控告警,当重连时间超过5秒时发送通知
- 定期检查日志,分析断开原因
文档版本:v2.0(安全版)
更新时间:2026年3月14日
评论列表
0 条评论