LogAgent的工作流程

.container .card .information strong · · 202 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

项目架构设计

image

LogAgent的工作流程:

  1. 读日志 --tailf第三方库

func main() {

fileName := "./my.log"
config := tail.Config{
    ReOpen:    true,                                 // 重新打开
    Follow:    true,                                 // 是否跟随
    Location:  &tail.SeekInfo{Offset: 0, Whence: 2}, // 从文件的哪个地方开始读
    MustExist: false,                                // 文件不存在不报错
    Poll:      true,
}
tails, err := tail.TailFile(fileName, config)
if err != nil {
    fmt.Println("tail file failed, err:", err)
    return
}
var (
    line *tail.Line
    ok   bool
)
for {
    line, ok = <-tails.Lines
    if !ok {
        fmt.Printf("tail file close reopen, filename:%s\n", tails.Filename)
        time.Sleep(time.Second)
        continue
    }
    fmt.Println("line:", line.Text)
}}

2.往kafka写日志 --sarama第三方库

 sarama v1.20之后的版本加⼊了 zstd 压缩算法,需要⽤到cgo,在Windows平台编译时会提示类似如
下错误:
# github.com/DataDog/zstd
exec: "gcc":executable file not found in %PATH%

所以在Windows平台请使⽤v1.19版本的sarama。
 

image

// 基于sarama第三⽅库开发的kafka client

func main() {
config := sarama.NewConfig()
// tailf包使⽤
config.Producer.RequiredAcks = sarama.WaitForAll // 发送完数据需要leader和follow都确认
config.Producer.Partitioner = sarama.NewRandomPartitioner // 新选出⼀个 partition
config.Producer.Return.Successes = true // 成功交付的消息将在success channel返回


// 构造⼀个消息
msg := &sarama.ProducerMessage{}
msg.Topic = "web_log"
msg.Value = sarama.StringEncoder("this is a test log")

// 连接kafka
client, err := sarama.NewSyncProducer([]string{"127.0.0.1:9092"}, config)
if err != nil {
    fmt.Println("producer closed, err:", err)
    return
}
fmt.Println("连接kafka成功!")
defer client.Close()
// 发送消息
pid, offset, err := client.SendMessage(msg)
fmt.Println("xxx")
if err != nil {
    fmt.Println("send msg failed, err:", err)
    return
}
fmt.Printf("pid:%v offset:%v\n", pid, offset)
fmt.Println("发送成功!")}


kafka和zookeeper

tail介绍

gopkg.in/ini.v1 第三方文档

https://ini.unknwon.io/docs/a...
https://pkg.go.dev/gopkg.in/i...

实例代码
LogAgent的工作流程

有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:.container .card .information strong

查看原文:LogAgent的工作流程

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

202 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传