Asterisk CDR网页仅显示当日通话记录问题排查求助
排查Asterisk CDR网页端仅显示当日记录的问题
1. 检查CDR网页的日期筛选逻辑
默认的Asterisk CDR网页(如FreePBX的CDR界面或自定义PHP脚本)通常依赖日期参数或数据库查询条件:
- 查看后端代码(例如
cdr.php),确认是否存在硬编码的日期限制,比如仅查询DATE(calldate) = CURDATE(),未处理历史日期的参数传递。 - 检查前端日期选择控件是否失效,比如默认仅加载当日数据,且无法选择历史日期,或提交查询时未正确传递起始/结束日期参数。
2. 验证CDR数据库存储与查询
若CDR存储在数据库(如MySQL/MariaDB):
- 直接登录数据库执行查询:
SELECT * FROM cdr WHERE calldate < CURDATE() LIMIT 10;,确认历史记录是否存在于数据库中。 - 检查Asterisk的
cdr.conf配置,确认table参数指向正确的CDR表,且enable=yes,确保历史记录被正常写入。 - 核实网页使用的数据库账号权限,确认其拥有读取全表数据的权限,而非仅当日数据。
3. 检查文件存储的CDR读取逻辑
若CDR存储在文件系统(如/var/log/asterisk/cdr-csv/Master.csv):
- 确认网页脚本是否仅读取当日生成的CDR文件(如
Master_YYYYMMDD.csv),未遍历目录下的所有历史文件。 - 检查文件权限:
ls -l /var/log/asterisk/cdr-csv/,确保Apache运行用户(通常为apache或www-data)对所有历史CDR文件有读权限。 - 验证历史文件内容:
cat /var/log/asterisk/cdr-csv/Master_$(date -d "yesterday" +%Y%m%d).csv,确认文件包含有效通话记录。
4. 排查Apache或PHP的缓存/会话问题
- 重载Apache服务:
service apache2 reload(Debian/Ubuntu)或httpd reload(RHEL/CentOS),同时清除浏览器缓存后重新测试。 - 检查PHP会话变量,确认是否存在错误的日期参数被持久化,导致每次加载默认筛选当日数据。
5. 确认系统时间与时区一致性
- 检查Asterisk、数据库、Apache服务器的系统时区:
timedatectl(systemd系统)或date命令,确保三者时区一致。 - 查看PHP时区设置:
php -i | grep timezone,确保与系统时区匹配,避免日期解析错误导致历史记录被过滤。
内容的提问来源于stack exchange,提问作者Pandemic
相关产品推荐
相关产品推荐

