第七课 Go容器化微服务系统实战-支付领域和日志观测台

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

第七课 Go容器化微服务系统实战-支付领域和日志观测台

tags:

  • GO
  • 慕课网

categories:

  • 日志系统
  • ELK
  • 国际支付PayPal沙盒环境创建
  • 支付领域功能

第一节 日志系统建设介绍

1.1 Elastic Stack介绍

  1. Elastic Stack包括Elasticsearch , Logstash, Kibana , Beats
  2. Elasticsearch :是分布式搜索引擎,提供搜集、分析、存储数据三大功能
  3. Logstash :主要是用来日志的搜集、分析、过滤日志的工具
  4. Kibana:提供友好的Web 界面,可以帮助汇总、分析和搜索数据
  5. Beats :是一个轻量级的日志收集处理工具(Agent)
    • Packetbeat : 网络数据(收集网络流量数据)
    • Metricbeat :指标(收集系统、进程和文件系统级别数据)
    • Filebeat : 日志文件(收集文件数据) - 最常用
    • Winlogbeat : windows事件日志(收集 Windows 事件日志数据)
    • Auditbeat :审计数据(收集审计日志)
    • Heartbeat :运行时间监控(收集系统运行时的数据)
  6. ELK系统的特点
    • 强大的收集能力∶能够采集多种来源的日志数据
    • 稳定的传输能力︰能够把日志数据传输到中央系统
    • 分布式存储:可根据业务需求存储日志数据,可动态扩容
    • 分析&展示&提醒:具备数据分析能力,数据展示能力和告警能力
  7. ELK+beats整体架构图
    在这里插入图片描述

1.2 FileBeat介绍

  1. FileBeat基本组成
    • Prospector (勘测者)∶负责管理Harvester 并找到所有读取源。
    • Harvester (收割机)∶负责读取单个文件内容,每个文件启动一个
  2. FileBeat工作原理图
    在这里插入图片描述
  3. Filebeat 如何记录文件状态:
    • 文件状态记录在文件中(默认在/var/lib/filebeat/registry )
    • Filebeat会记录发送前的最后一行,并再可以连接的时候继续发送
    • 每个Prospector会为每个找到的文件记录一个状态
    • Filebeat 存储唯一标识符以检测文件是否先前被收集
  4. Filebeat如何保证事件至少被输出一次
    • Filebeat将每个事件的传递状态保存在文件中
    • 在未得到输出方确认时,Filebeat 会尝试一直发送,直到得到回应
    • 任何在Filebeat关闭之前未确认的事件,都会在filebeat重启之后重新发送
    • 可确保至少发送一次,但有可能会重复
  5. 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介绍

  1. Logstash 工作原理(三个阶段:inputs→ filters→ outputs )
    • lnput(数据输入阶段)︰会把数据输入数据到 logstash
    • Filters(数据清洗):数据中间处理,对数据进行操作
    • Outputs(数据输出) : outputs是logstash处理管道的最末端组件
  2. Logstash-Input阶段常见的输入
    • file :从文件系统的文件中读取,类似于tail -f命
    • syslog :在514端口上监听系统日志消息,并根据RFC3164标准进行解析
    • beats : 从 Filebeat 中读取
  3. Logstash-Input常用样咧
input {
   
        beats {
   
          port => "5044"
        }
        tcp {
   
          port => "5000"
        }
}
  1. Logstash-Filter数据中间件处理插件grok(可解析任意文本数据)
    • GROK基础语法如:%{SYNTAX:SEMANTIC}
    • SYNTAX:代表匹配值的类型
    • SEMANTIC:代表存储该值的一个变量名称
    • 例∶%{ERRORIDEBUG|INFO|WARN : log_level}
  2. 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

  1. docker-stack.yml
  2. 具体的配置挂载自己设计就行。
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
  1. 启动它
docker-compose -f docker-stack.yml up -d

1.5 国际支付PayPal账户和沙盒环境

  1. 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
  1. 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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值