Skip to content

查询日志

查询日志模块记录所有经过 DNS-Go 的 DNS 查询请求,提供详细的查询分析和审计功能。

功能概述

查询日志模块提供:

  • 完整查询记录:记录所有 DNS 查询的详细信息
  • 实时日志推送:通过 WebSocket/SSE 实时查看查询日志
  • 多维度筛选:按时间、域名、IP、类型等筛选
  • 统计分析:查询量统计、热门域名排行
  • 日志导出:支持导出日志数据

记录内容

每条查询日志包含以下信息:

字段说明示例
查询时间查询发生的精确时间2025-01-15 10:30:25
客户端 IP发起查询的客户端地址192.168.1.100
查询域名被查询的域名www.example.com
查询类型DNS 查询类型AAAAAMX
响应结果返回的记录值192.168.1.50
响应时间查询处理耗时25ms
查询来源本地/上游/缓存cache
上游服务器使用的上游 DNS223.5.5.5
命中缓存是否命中缓存

日志查询

Web 界面查询

  1. 进入「日志分析」→「查询日志」
  2. 使用筛选条件缩小查询范围:

筛选条件:

条件说明示例
时间范围查询发生的时间段最近 1 小时、今天、自定义
客户端 IP查询来源 IP192.168.1.100
域名被查询的域名www.example.com
查询类型A、AAAA、MX 等A
响应来源本地/上游/缓存cache
状态成功/失败成功
  1. 点击「查询」按钮查看结果

高级搜索

支持模糊搜索和组合条件:

  • 域名模糊搜索:输入 example 可匹配所有包含该字符串的域名
  • IP 段搜索:输入 192.168.1. 可匹配该网段的所有 IP
  • 多条件组合:同时使用时间和域名筛选

实时日志

WebSocket 实时推送

DNS-Go 通过 WebSocket 实时推送查询日志到前端界面。

连接方式:

javascript
const ws = new WebSocket('ws://localhost:8085/api/logs/stream');

ws.onmessage = (event) => {
  const log = JSON.parse(event.data);
  console.log('新查询日志:', log);
};

日志数据格式:

json
{
  "timestamp": "2025-01-15T10:30:25.123Z",
  "client_ip": "192.168.1.100",
  "domain": "www.example.com",
  "query_type": "A",
  "response": "192.168.1.50",
  "response_time": 25,
  "source": "cache",
  "upstream": "",
  "cache_hit": true
}

SSE 实时推送

作为 WebSocket 的替代方案,也支持 SSE(Server-Sent Events):

javascript
const eventSource = new EventSource('http://localhost:8085/api/logs/sse');

eventSource.onmessage = (event) => {
  const log = JSON.parse(event.data);
  console.log('新查询日志:', log);
};

实时日志界面

Web 界面提供实时日志查看功能:

  • 自动刷新:新日志自动追加到列表顶部
  • 滚动锁定:可暂停自动滚动查看历史
  • 高亮显示:不同类型查询使用不同颜色标识

统计分析

查询量统计

查看指定时间段内的查询量趋势:

  • 按小时统计(24 小时视图)
  • 按天统计(7 天/30 天视图)
  • 按查询类型统计

热门域名排行

查看被查询次数最多的域名:

排名域名查询次数占比
1www.google.com15,23425%
2www.baidu.com12,56720%
3api.example.com8,90115%

客户端排行

查看查询量最大的客户端:

排名客户端 IP查询次数占比
1192.168.1.10025,67835%
2192.168.1.10118,23425%
3192.168.1.10212,45617%

日志导出

导出格式

支持多种导出格式:

  • CSV:逗号分隔值,适合 Excel 分析
  • JSON:结构化数据,适合程序处理
  • TXT:纯文本格式,方便查看

导出方式

  1. 界面导出

    • 在查询结果页面点击「导出」按钮
    • 选择导出格式和范围
    • 下载导出的文件
  2. API 导出

    bash
    GET /api/logs/export?format=csv&start=2025-01-01&end=2025-01-15

导出限制

  • 单次导出最大条数:100,000 条
  • 导出时间范围:最长 30 天
  • 大容量导出建议分批进行

日志清理

自动清理

可配置自动清理策略,防止日志数据无限增长:

清理策略:

策略说明建议
保留天数保留最近 N 天的日志7-30 天
最大条数保留最近 N 条日志100 万条
定时清理每天/每周定时清理每天凌晨

配置方式:

  1. 进入「系统管理」→「日志配置」
  2. 设置清理策略
  3. 保存配置

手动清理

手动删除指定时间范围的日志:

  1. 进入「日志分析」→「查询日志」
  2. 选择「日志清理」功能
  3. 选择要清理的时间范围
  4. 确认清理操作

⚠️ 警告:清理操作不可恢复,请谨慎操作!

API 接口

查询日志列表

bash
GET /api/logs/list?page=1&pageSize=50&start_time=2025-01-01&end_time=2025-01-15

请求参数:

参数类型说明
pageint页码
pageSizeint每页数量
start_timestring开始时间
end_timestring结束时间
client_ipstring客户端 IP(可选)
domainstring域名(可选)
query_typestring查询类型(可选)

响应示例:

json
{
  "code": 200,
  "data": {
    "list": [
      {
        "id": 1,
        "timestamp": "2025-01-15T10:30:25Z",
        "client_ip": "192.168.1.100",
        "domain": "www.example.com",
        "query_type": "A",
        "response": "192.168.1.50",
        "response_time": 25,
        "source": "cache",
        "upstream": "",
        "cache_hit": true
      }
    ],
    "total": 15000
  }
}

获取统计信息

bash
GET /api/logs/stats?start=2025-01-01&end=2025-01-15

响应示例:

json
{
  "code": 200,
  "data": {
    "total_queries": 150000,
    "cache_hit_rate": 65.5,
    "avg_response_time": 12.5,
    "top_domains": [
      {"domain": "www.google.com", "count": 15234},
      {"domain": "www.baidu.com", "count": 12567}
    ],
    "top_clients": [
      {"ip": "192.168.1.100", "count": 25678},
      {"ip": "192.168.1.101", "count": 18234}
    ]
  }
}

WebSocket 实时日志

javascript
// 连接实时日志 WebSocket
const ws = new WebSocket('ws://localhost:8085/api/logs/stream');

ws.onopen = () => {
  console.log('WebSocket 连接成功');
};

ws.onmessage = (event) => {
  const log = JSON.parse(event.data);
  // 处理日志数据
};

ws.onclose = () => {
  console.log('WebSocket 连接关闭');
};

导出日志

bash
GET /api/logs/export?format=csv&start=2025-01-01&end=2025-01-15&domain=example.com

最佳实践

日志保留策略

根据存储资源和业务需求制定保留策略:

场景保留时间说明
生产环境7-30 天平衡存储和审计需求
开发测试1-3 天节省存储空间
安全审计90 天以上满足合规要求

性能优化

减少日志写入压力:

  • 设置合理的日志采样率(如每 100 条记录 1 条)
  • 关闭非必要的字段记录
  • 使用异步日志写入

查询性能优化:

  • 为常用查询条件建立索引
  • 定期归档历史日志
  • 大数据量查询使用分页

安全考虑

敏感信息处理:

  • 避免记录敏感域名的查询日志
  • 内网域名查询可适当减少记录
  • 定期审计日志访问权限

故障排查

日志不记录

问题原因解决方案
日志功能未启用配置中关闭了日志在系统设置中启用
存储空间不足磁盘已满清理日志或扩容磁盘
数据库连接失败数据库异常检查数据库状态

查询速度慢

问题原因解决方案
数据量过大未清理历史日志执行日志清理
缺少索引查询条件未索引添加索引
时间范围太大查询范围过宽缩小查询范围

实时日志不更新

问题原因解决方案
WebSocket 断开网络问题重新连接
浏览器兼容不支持 WebSocket更换浏览器
服务异常后端服务故障检查服务状态

相关文档

基于 MIT 许可发布