rsyslog远程转发丢日志因未启用磁盘队列,需配置$actionqueuefilename、$actionqueuemaxdiskspace和$actionresumeretrycount,并检查防火墙514端口。

rsyslog 配置远程转发时收不到日志?检查 $ActionQueue* 参数和防火墙
默认 rsyslog 不启用磁盘队列,网络抖动或接收端宕机时日志直接丢弃,不是配置写错了,是没开可靠传输。
-
$ActionQueueFileName必须设置(如rsyslog_queue),否则队列仅在内存中,重启即清空 -
$ActionQueueMaxDiskSpace建议设为1g以上,小值会导致队列满后静默丢日志 -
$ActionResumeRetryCount -1让它无限重试,别用默认的 360 次(约 1 小时) - 确认
firewall-cmd --list-ports包含514/udp或514/tcp,UDP 转发尤其容易被防火墙吞掉包
用 Filebeat 抓 Nginx access.log 却漏日志?注意 logrotate 和 inotify 限制
Filebeat 默认靠 inotify 监听文件变化,但 logrotate 切日志时可能 rename + create,inotify 会丢失中间段;更糟的是,如果日志轮转太快,Filebeat 还没读完就被 mv 走了。
- 在
filebeat.yml的input下加close_inactive: 5m和clean_inactive: 72h,避免过早关闭或清理句柄 - 确保 logrotate 配置里有
copytruncate(不推荐)或改用create+delaycompress,让 Filebeat 能自然追到新文件 - 若日志量大、轮转频繁,把
harvester_buffer_size提到16384,减少 read() 系统调用次数
Logstash filter 中 grok 失败率高?先用 dissect 替代,再针对性补 grok
grok 在正则匹配上开销大,且一旦 pattern 写错就整条日志丢弃或卡住字段;而 Nginx、Syslog 这类结构化程度高的日志,dissect 更快更稳。
本文档主要讲述的是MATLAB与VB混合编程技术研究;着重探讨了在VB应用程序中集成MATLAB实现程序优化的四种方法,即利用Matrix VB、调用DLL动态链接库、应用Active自动化技术和动态数据交换技术,并分析了集成过程中的关键问题及其基本步骤。这种混合编程实现了VB的可视化界面与MATLAB强大的数值分析能力的结合。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
- 对
nginx.access日志优先用dissect { mapping => { "message" => "%{clientip} - %{ident} [%{timestamp}] \"%{method} %{url} %{http_version}\" %{status} %{size}" } } - 只有 timestamp、useragent 等需解析的字段,再套一层
date或useragentfilter,别全堆在 grok 里 - 上线前务必用
logstash -f test.conf --config.test_and_exit验证语法,grok错误不会报错,只会让[tags]出现_grokparsefailure
Elasticsearch 存日志查得慢?别只加节点,先关掉不必要的 mapping 动态推断
日志字段名千奇百怪(比如 trace_id_v2、traceIdVersion2),ES 默认开启 dynamic: true,每来个新字段就自动建 mapping,索引变胖、查询变慢、甚至触发 circuit_breaking_exception。
- 在 index template 里显式设
"dynamic": "strict",字段不在 mapping 里就直接拒收,逼着你提前规范日志格式 - 所有
text字段加"index": false(除非真要全文搜),比如message保留,但request_id、trace_id改成keyword - 时间字段必须用
date类型,并确保date_detection: false,否则 ES 可能把"2024-05-20"当字符串索引
真正难的不是堆工具链,而是让每一行日志从产生那一刻起,字段名、类型、生命周期都可控。轮转策略、队列参数、mapping 定义——这些地方不动手压一压,后面查不出、存不下、丢得悄无声息。









