Giter Site home page Giter Site logo

hartl3y94 / transfer Goto Github PK

View Code? Open in Web Editor NEW

This project forked from kainonly/transfer

0.0 0.0 0.0 644 KB

日志传输器,将数据流发布至相同的服务命名空间,配合日志采集器写入日志系统

License: BSD 3-Clause "New" or "Revised" License

Go 98.82% Shell 0.74% Dockerfile 0.44%

transfer's Introduction

Weplanx Transfer

GitHub go.mod Go version Go Report Card Release GitHub license

日志传输器,将数据流发布至相同的服务命名空间,配合日志采集器写入日志系统

版本 *.*.*elastic-transfer 已归档的分支项目 ,请使用 v*.*.* 发布的版本(预发布用于构建测试)

客户端

go.mod 项目中

go get github.com/weplanx/transfer

简单使用

package main

import (
	"context"
	"fmt"
	"github.com/weplanx/transfer/client"
	"google.golang.org/grpc"
	"google.golang.org/grpc/credentials/insecure"
)

func main() {
	var opts []grpc.DialOption
	opts = append(opts, grpc.WithTransportCredentials(insecure.NewCredentials()))

	// 或者使用 TLS
	// certFile := "..."
	// creds, err := credentials.NewClientTLSFromFile(certFile, "")
	// if err != nil {
	// 	panic(err)
	// }
	// opts = append(opts, grpc.WithTransportCredentials(creds))

	transfer, err := client.New("127.0.0.1:6000", opts...)
	if err != nil {
		panic(err)
	}
	ctx := context.Background()
	result, err := transfer.GetLoggers(ctx)
	if err != nil {
		panic(err)
	}
	fmt.Println(result)
}

部署服务

日志传输器采用更广泛 gRPC 进行服务通讯,通过 NATS JetStream 处理消息流,除此之外还需要 MongoDB 作为配置存储介质

Transfer

需要注意的是 NATS 与 MongoDB 仅支持集群模式,原因是 NATS JetStream 需要 3 或 5 个 nats-server 支持故障容错,而为了配置的一致性 MongoDB 采用副本集方式

镜像源主要有:

  • ghcr.io/weplanx/transfer:latest
  • ccr.ccs.tencentyun.com/weplanx/transfer:latest(国内)

案例将使用 Kubernetes 部署编排,复制部署内容(需要根据情况做修改):

  1. 设置配置
apiVersion: v1
kind: ConfigMap
metadata:
  name: transfer.cfg
data:
  config.yml: |
    address: ":6000"
    tls: <TLS配置,非必须>
      cert:
      key:
    namespace: <命名空间>
    database:
      uri: mongodb://<username>:<password>@<host>:<port>/<database>?authSource=<authSource>
      name: <数据库名>
      collection: <默认集合>
    nats:
      hosts: [ ]
      nkey:
  1. 部署
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: transfer
  name: transfer-deploy
spec:
  replicas: 2
  selector:
    matchLabels:
      app: transfer
  template:
    metadata:
      labels:
        app: transfer
    spec:
      containers:
        - image: ccr.ccs.tencentyun.com/weplanx/transfer:latest
          imagePullPolicy: Always
          name: transfer
          ports:
            - containerPort: 6000
          volumeMounts:
            - name: config
              mountPath: "/app/config"
              readOnly: true
      volumes:
        - name: config
          configMap:
            name: transfer.cfg
            items:
              - key: "config.yml"
                path: "config.yml"
  1. 设置入口,服务网关推荐采用 traefik 做更多处理
apiVersion: v1
kind: Service
metadata:
  name: transfer-svc
spec:
  ports:
    - port: 6000
      protocol: TCP
  selector:
    app: transfer

滚动更新

复制模板内容,并需要自行定制触发条件,原理是每次patch将模板中 ${tag} 替换为版本执行

spec:
  template:
    spec:
      containers:
        - image: ccr.ccs.tencentyun.com/weplanx/transfer:${tag}
          name: transfer

例如:在 Github Actions 中 patch deployment transfer-deploy --patch "$(sed "s/\${tag}/${{steps.meta.outputs.version}}/" < ./config/patch.yml)",国内可使用Coding持续部署云效流水线等。

License

BSD-3-Clause License

FOSSA Status

transfer's People

Contributors

fossabot avatar geekoliver avatar kainonly avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.