AD画PCB实战案例:四层板叠层结构设计
2026/1/10 2:56:05
在开发分布式系统时,日志分散在多个服务节点中,传统轮询查询方式存在延迟高、资源浪费的问题。某次线上故障中,因未能实时发现错误日志,导致问题排查时间延长2小时。因此,决定自研一套低成本、实时性高的日志监控系统。
json
// 日志索引模板(按时间分片) PUT /log-template { "index_patterns": ["logs-*"], "settings": { "number_of_shards": 3 }, "mappings": { "properties": { "timestamp": { "type": "date" }, "level": { "type": "keyword" }, "message": { "type": "text", "analyzer": "ik_max_word" } } } }javascript
// Node.js WebSocket服务器 const WebSocket = require('ws'); const wss = new WebSocket.Server({ port: 8080 }); wss.on('connection', (ws) => { console.log('New client connected'); // 订阅Elasticsearch日志变更(通过_changes API或轮询模拟) setInterval(() => { // 模拟获取新日志(实际可通过ES的search_after或滚动查询) const newLogs = fetchNewLogsFromES(); ws.send(JSON.stringify(newLogs)); }, 1000); });javascript
// Vue.js WebSocket客户端 const socket = new WebSocket('ws://localhost:8080'); socket.onmessage = (event) => { const logs = JSON.parse(event.data); // 使用虚拟滚动列表优化性能(避免DOM爆炸) this.logs.unshift(...logs); // 追加到列表顶部 if (this.logs.length > 1000) this.logs.pop(); // 限制数量 };search_after替代from/size,避免深度分页性能问题。