第七课 Go容器化微服务系统实战-支付领域和日志观测台
tags:
- GO
- 慕课网
categories:
- 日志系统
- ELK
- 国际支付PayPal沙盒环境创建
- 支付领域功能
第一节 日志系统建设介绍
1.1 Elastic Stack介绍
- Elastic Stack包括Elasticsearch , Logstash, Kibana , Beats
- Elasticsearch :是分布式搜索引擎,提供搜集、分析、存储数据三大功能
- Logstash :主要是用来日志的搜集、分析、过滤日志的工具
- Kibana:提供友好的Web 界面,可以帮助汇总、分析和搜索数据
- Beats :是一个轻量级的日志收集处理工具(Agent)
- Packetbeat : 网络数据(收集网络流量数据)
- Metricbeat :指标(收集系统、进程和文件系统级别数据)
- Filebeat : 日志文件(收集文件数据) - 最常用
- Winlogbeat : windows事件日志(收集 Windows 事件日志数据)
- Auditbeat :审计数据(收集审计日志)
- Heartbeat :运行时间监控(收集系统运行时的数据)
- ELK系统的特点
- 强大的收集能力∶能够采集多种来源的日志数据
- 稳定的传输能力︰能够把日志数据传输到中央系统
- 分布式存储:可根据业务需求存储日志数据,可动态扩容
- 分析&展示&提醒:具备数据分析能力,数据展示能力和告警能力
- ELK+beats整体架构图

1.2 FileBeat介绍
- FileBeat基本组成
- Prospector (勘测者)∶负责管理Harvester 并找到所有读取源。
- Harvester (收割机)∶负责读取单个文件内容,每个文件启动一个
- FileBeat工作原理图

- Filebeat 如何记录文件状态:
- 文件状态记录在文件中(默认在/var/lib/filebeat/registry )
- Filebeat会记录发送前的最后一行,并再可以连接的时候继续发送
- 每个Prospector会为每个找到的文件记录一个状态
- Filebeat 存储唯一标识符以检测文件是否先前被收集
- Filebeat如何保证事件至少被输出一次
- Filebeat将每个事件的传递状态保存在文件中
- 在未得到输出方确认时,Filebeat 会尝试一直发送,直到得到回应
- 任何在Filebeat关闭之前未确认的事件,都会在filebeat重启之后重新发送
- 可确保至少发送一次,但有可能会重复
- filebeat.yml样例文件
filebeat.inputs:
- type: log
enabled: true
paths:
- /usr/local/nginx/logs/access_json.log
fields:
log_source: nginx-access
output.elasticsearch:
# Array of hosts to connect to.
hosts: ["192.168.242.142:9200"]
#output.logstash:
# The Logstash hosts
# hosts: ["192.168.242.142:5044"]
1.3 FLogstash介绍
- Logstash 工作原理(三个阶段:inputs→ filters→ outputs )
- lnput(数据输入阶段)︰会把数据输入数据到 logstash
- Filters(数据清洗):数据中间处理,对数据进行操作
- Outputs(数据输出) : outputs是logstash处理管道的最末端组件
- Logstash-Input阶段常见的输入
- file :从文件系统的文件中读取,类似于tail -f命
- syslog :在514端口上监听系统日志消息,并根据RFC3164标准进行解析
- beats : 从 Filebeat 中读取
- Logstash-Input常用样咧
input {
beats {
port => "5044"
}
tcp {
port => "5000"
}
}
- Logstash-Filter数据中间件处理插件grok(可解析任意文本数据)
- GROK基础语法如:%{SYNTAX:SEMANTIC}
- SYNTAX:代表匹配值的类型
- SEMANTIC:代表存储该值的一个变量名称
- 例∶%{ERRORIDEBUG|INFO|WARN : log_level}
- Logstash-Output 数据输出
- 输出到kafka和ES也可以输出到redis
# 输出到ES
output {
if "test-nginx-access" in [fields][log_source]{
elasticsearch {
hosts => ["192.168.242.142:9200"]
user => "admin"
password => "123456"
index => "test_nginx_access_lims-%{
+YYYY.MM.dd}"
}
}
}
1.4 docker-compose配置安装ELK
- docker-stack.yml
- 具体的配置挂载自己设计就行。
version: '3.3'
services:
elasticsearch:
image: elasticsearch:7.9.3
ports:
- "9200:9200"
- "9300:9300"
volumes:
- ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
environment:
ES_JAVA_OPTS: "-Xmx256m -Xms256m"
ELASTIC_PASSWORD: "123456"
discovery.type: single-node
network.publish_host: _eth0_
logstash:
image: logstash:7.9.3
ports:
- "5044:5044"
- "5000:5000"
- "9600:9600"
volumes:
- ./logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml
- ./logstash/pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf
environment:
LS_JAVA_OPTS: "-Xmx256m -Xms256m"
kibana:
image: kibana:7.9.3
ports:
- "5601:5601"
volumes:
- ./kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml
- 启动它
docker-compose -f docker-stack.yml up -d
1.5 国际支付PayPal账户和沙盒环境
- PayPal账号创建说明
- 创建账号https://www.paypal.com/ 注册一个主账号
- 申请完成后登录https://developer.paypal.com/ 开发者地址 创建沙盒环境
- 用虚拟账号登陆https://www.sandbox.paypal.com/ 查看详情

第二节 微服务支付模块开发
2.1 支付模块ZAP日志工具封装
go get go.uber.org/zap
# 下面用来拆分日志文件大小的包
go get gopkg.in/natefinch/lumberjack.v2
- common下创建zap.go
package common
import (
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"gopkg.in/natefinch/lumberjack.v2"
)
var(
logger *zap.SugaredLogger
)
func init() {
//日志文件名称
fileName := "micro.log"
syncWriter:= zapcore.AddSync(
&lumberjack.Logger{
Filename: fileName, //文件名称
MaxSize: 521,//MB
//MaxAge: 0,
MaxBackups: 0, //最大备份
LocalTime: true,
Compress: true, //是否启用压缩
})
//编码
encoder:=zap.NewProductionEncoderConfig()
//时间格式
encoder.EncodeTime = zapcore.ISO8601TimeEncoder
core:= zapcore.NewCore(
// 编码器
zapcore.NewJSONEncoder(encoder),
syncWriter,
//
zap.NewAtomicLevelAt(zap.DebugLevel))
log := zap.New(
core,
zap.AddCaller(),
zap.AddCallerSkip(1))
logger = log.Sugar()
}
func Debug(args ...interface{
}) {
logger.Debug(args)
}
func Debugf(template string, args ...interface{
}) {
logger.Debugf(template, args...)
}
func Info(args ...interface{
}) {
logger.Info(args...)
}
func Infof(template string, args ...interface{
}) {
logger.Infof(template, args...)
}
func Warn(args ...interface{
}) {
logger.Warn(args...)
}
func Warnf(template string, args ...interface{
}) {
logger.Warnf(template, args...)
}
func Error(args ...interface{
}) {
logger.Error(args...)
}
func Errorf(template string, args ...interface{
}) {
logger.Errorf(template, args...)
}
func DPanic(args ...interface{
}) {
logger.DPanic(args...)
}
func DPanicf(template string, args ...interface{
}) {
logger.DPanicf(template, args...)
}
func Panic(args ...interface{
}) {
logger.Panic(args...)
}
func Panicf(template string, args ...interface

本教程聚焦Go语言构建的微服务支付系统,讲解了ELK(Elasticsearch, Logstash, Kibana)日志系统的搭建,包括FileBeat的使用,以及如何配置和应用PayPal的沙盒环境。此外,还涵盖了支付模块的开发流程,如ZAP日志工具封装、proto开发和服务实现,并讨论了API开发和幂等性设计的重要性。"
105206951,7344222,C语言:H开头的函数详解,"['c语言', '编程语言', '函数']
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



