在CentOS上部署Golang应用程序时,日志的传输与存储是一个重要的环节。以下是一个基本的方案,包括日志的生成、传输和存储。
首先,确保你的Golang应用程序能够生成结构化的日志。推荐使用logrus、zap等成熟的日志库。
package main
import (
"github.com/sirupsen/logrus"
)
func main() {
log := logrus.New()
log.SetFormatter(&logrus.JSONFormatter{})
log.Info("Hello, World!")
}
为了将日志传输到集中式存储系统,可以使用rsyslog、fluentd或logstash等工具。
安装rsyslog:
sudo yum install rsyslog
配置rsyslog:
编辑/etc/rsyslog.conf或创建一个新的配置文件(如/etc/rsyslog.d/50-default.conf),添加以下内容:
if $programname == 'myapp' then /var/log/myapp.log
& stop
重启rsyslog服务:
sudo systemctl restart rsyslog
修改Golang应用程序日志输出: 确保Golang应用程序将日志输出到标准输出(stdout),这样rsyslog可以捕获它。
log.SetOutput(os.Stdout)
安装fluentd:
sudo yum install fluentd
配置fluentd:
编辑/etc/fluent.conf,添加以下内容:
<source>
@type tail
path /var/log/myapp.log
pos_file /var/log/myapp.log.pos
tag myapp
<parse>
@type json
</parse>
</source>
<match myapp.**>
@type stdout
</match>
启动fluentd服务:
sudo systemctl start fluentd
集中式日志存储系统可以选择Elasticsearch、Hadoop HDFS、Amazon S3等。
安装Elasticsearch:
sudo yum install elasticsearch
启动Elasticsearch服务:
sudo systemctl start elasticsearch
配置Elasticsearch:
确保Elasticsearch配置文件/etc/elasticsearch/elasticsearch.yml中启用了日志存储。
使用Logstash: 安装并配置Logstash来处理和存储日志。
sudo yum install logstash
编辑/etc/logstash/conf.d/myapp.conf,添加以下内容:
input {
file {
path => "/var/log/myapp.log"
start_position => "beginning"
}
}
filter {
json {
source => "message"
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "myapp-%{+YYYY.MM.dd}"
}
}
启动Logstash服务:
sudo systemctl start logstash
以上方案提供了一个基本的日志传输与存储流程:
根据实际需求,可以进一步优化和扩展这个方案,例如添加日志轮转、监控和告警等功能。