如何在CentOS分析Golang错误日志
1. 确定日志位置与格式
聊到Golang应用日志的位置,其实没有标准答案——具体看代码怎么配置。常见路径就那么几种:要么在应用工作目录下,比如./app.log;要么在系统日志目录,比如/var/log/yourapp.log。如果用了第三方日志库,比如logrus或zap,通常默认输出到stdout或指定文件。要是用标准库log包,那就得翻翻代码里log.SetOutput()指向哪儿了。至于日志格式,无非两种:一种是纯文本,包含时间、日志级别、文件名和行号;另一种是JSON,结构化数据,方便后续分析。

2. 使用基础命令行工具查看日志
CentOS自带的命令行工具其实够用了,日常排查完全能搞定:
- tail:实时盯着日志最新内容,适合监控实时错误。比如
tail -f /path/to/your/app.log,就能看到新写入的行。 - grep:按关键词过滤,最常用的就是筛"ERROR"。比如
grep "ERROR" /path/to/your/app.log,或者加个-i忽略大小写。快速定位错误条目,就这么简单。 - less/more:分页翻看历史日志,适合慢慢排查。比如
less /path/to/your/app.log,按q退出。 - awk/sed:如果需要更复杂的文本处理,比如统计错误数量、提取特定字段,这两个工具就派上用场了。举个例子:
awk '/ERROR/ {count++} END {print "Error count:", count}' /path/to/your/app.log,直接统计ERROR出现的次数。或者用sed提取时间戳,具体看日志格式。
3. 配置日志轮转避免文件过大
日志文件越来越大,迟早会占满磁盘。这时候logrotate就派上用场了,它能自动切割、压缩、删除旧日志。操作很简单:
- 在
/etc/logrotate.d/下新建一个配置文件,比如yourapp,内容大致如下:/path/to/your/logs/*.log { daily # 每天切一次 missingok # 日志文件不存在也不报错 rotate 7 # 保留最近7个 compress # 压缩旧日志,.gz格式 notifempty # 空日志不切 create 0640 root root # 新日志权限和所有者 } - 配置完手动测试一下:
logrotate -vf /etc/logrotate.d/yourapp,看看有没有报错。
4. 使用高级日志分析工具
如果生产环境日志量很大,或者需要复杂的分析,可以考虑上专业工具:
- ELK Stack(Elasticsearch + Logstash + Kibana):Logstash负责收集Golang日志(从文件或syslog),解析成结构化数据,然后送到Elasticsearch里存储和索引。Kibana则负责可视化——错误趋势、频率分布,一张仪表盘就能看明白。
- Fluentd:统一日志收集器,支持多种输入源(文件、syslog)和输出目标(Elasticsearch、MySQL等),配置起来比ELK更轻量。
5. 结合系统日志排查关联问题
有时候Golang应用本身没好好打日志,或者要查进程崩溃、资源不足这类系统级问题,就得靠journalctl了。比如:
journalctl -u yourapp.service # 查看指定服务的系统日志(需提前配置systemd服务)
journalctl -xe # 查看最近系统日志,包含错误详情
6. 自动化分析与告警
手动看日志终究不是长久之计,自动化才是王道。两种常见思路:
- Shell脚本:定期跑个
grep统计错误数量,超阈值就发邮件。比如:#!/bin/bash ERROR_COUNT=$(grep -c "ERROR" /path/to/your/app.log) if [ $ERROR_COUNT -gt 10 ]; then echo "Error count exceeds threshold: $ERROR_COUNT" | mail -s "Golang App Error Alert" admin@example.com fi - Prometheus + Grafana:用Prometheus收集Golang应用的指标(比如错误率),然后在Grafana里配置仪表盘和告警规则。比如错误率超过5%就触发告警,那才叫省心。
以上就是在CentOS系统上分析Golang错误日志的完整流程。从基础命令到高级工具,从手动排查到自动化告警,一步步来,问题总能定位到。