go语言并发实战——日志收集系统(五) 基于go-ini包读取日志收集服务的配置文件

简介: go语言并发实战——日志收集系统(五) 基于go-ini包读取日志收集服务的配置文件

实现日志收集服务的客户端

前言

从这篇文章开始我们就正式进入了日志收集系统的编写,后面几篇文章我们将学习到如何编写日志收集服务的客户端,话不多说,让我们进入今天的内容吧!

需要实现的功能

我们要收集指定目录下的日志文件,将它们发送到Kafka中

实现的步骤

  • 读取配置文件,寻找日志路径
  • 初始化服务
  • 根据日志路径去利用tail来收集日志
  • 将收集到的日志利用sarama发送到Kafka中

读取配置文件

go-ini包

  • go-ini包的安装
    包的地址为"github.com/go-ini/ini",安装可以基于go mod来使用go mod tidy或者go get github.com/go-ini/ini来进行安装
  • 包的使用
    由于篇幅有限,这里对于包的实现不做过多赘述,可以参考矿方文档,文档里面作者将该包的使用方法讲解的非常好,博主这里就不班门弄斧了,官方文档的地址如
    下:
    超赞的 Go 语言 INI 文件操作
  • 代码示例:
    首先我们定义一个config.ini的配置文件,如下:
[kafka]
address=127.0.0.1:9092

然后我们尝试提取出Kafka的address:

package main
import (
  "fmt"
  "github.com/go-ini/ini"
  "github.com/sirupsen/logrus"
)
func main() {
  cfg, err := ini.Load("G:\\goproject\\-goroutine-\\log-agent\\conf\\config.ini")//读取配置文件
  if err != nil {
    logrus.Error("load config.ini error!,err:", err) //日志中打印错误信息
  }
  fmt.Println(cfg.Section("kafka").Key("address").String())
}

输出结果为:

当然我们还可以将配置文件的配置有谁到结构体中,首先还是我们的配置文件:

[kafka]
address=127.0.0.1:9092
[collect]
logfile_path:G:\goproject\-goroutine-\log-agent\log\log1

示例代码:

package main
import (
  "fmt"
  "github.com/go-ini/ini"
)
type Config struct {
  Kafakaddress Kafkaddress `ini:"kafka"`
  LogFilePath  LogFilePath `ini:"collect"`
}
type Kafkaddress struct {
  Addr string `ini:"address""`
}
type LogFilePath struct {
  Path string `ini:"logfile_path"`
}
func main() {
  var configObj = new(Config) //生成指针便于参数传递
  err := ini.MapTo(configObj, "G:\\goproject\\-goroutine-\\log-agent\\conf\\config.ini")
  if err != nil {
    fmt.Println("log config failed,err:", err)
  }
  fmt.Println(configObj.LogFilePath, configObj.Kafakaddress)
}

输出结果为:

结语

对读取配置文件就讲到这里了。下一篇文章我们就开始探寻如何初始化Kafka和tail的服务,以及介绍什么是etcd,以及它在项目中所起到的作用,下篇见!

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
12月前
|
存储 监控 算法
防止员工泄密软件中文件访问日志管理的 Go 语言 B + 树算法
B+树凭借高效范围查询与稳定插入删除性能,为防止员工泄密软件提供高响应、可追溯的日志管理方案,显著提升海量文件操作日志的存储与检索效率。
390 2
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
545 2
|
Cloud Native Go API
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
729 0
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
564 0
|
Cloud Native Java 中间件
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
598 0
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
1732 0
|
Shell Go API
Go语言grequests库并发请求的实战案例
Go语言grequests库并发请求的实战案例
|
存储 缓存 安全
Go 语言中的 Sync.Map 详解:并发安全的 Map 实现
`sync.Map` 是 Go 语言中用于并发安全操作的 Map 实现,适用于读多写少的场景。它通过两个底层 Map(`read` 和 `dirty`)实现读写分离,提供高效的读性能。主要方法包括 `Store`、`Load`、`Delete` 等。在大量写入时性能可能下降,需谨慎选择使用场景。
|
存储 负载均衡 监控
如何利用Go语言的高效性、并发支持、简洁性和跨平台性等优势,通过合理设计架构、实现负载均衡、构建容错机制、建立监控体系、优化数据存储及实施服务治理等步骤,打造稳定可靠的服务架构。
在数字化时代,构建高可靠性服务架构至关重要。本文探讨了如何利用Go语言的高效性、并发支持、简洁性和跨平台性等优势,通过合理设计架构、实现负载均衡、构建容错机制、建立监控体系、优化数据存储及实施服务治理等步骤,打造稳定可靠的服务架构。
638 1
|
Java 大数据 Go
Go语言:高效并发的编程新星
【10月更文挑战第21】Go语言:高效并发的编程新星
592 7