go语言练手小项目,基于go语言实现日志收集,需要用到docker+influxdb+grafana,
代码负责收集日志并处理数据然后写入influxdb,grafana负责展示。
第一天实现文件的读,处理及写入,由浅到深。
一下为main文件代码
main.go
package main
import "time"
type LogProcess struct {
}
func (l *LogProcess)ReadFromFile() {
}
func (l *LogProcess)Process() {
}
func (l *LogProcess)Write() {
}
func main() {
l := &LogProcess{}
go l.ReadFromFile()
go l.Process()
go l.Write()
time.Sleep(1 * time.Second)
}
我们先定义了一个空的结构体,结构体变量暂时还不知道需要什么,然后定义了读取、处理、写入的方法,这些方法我们用的协程的方式启动,最后的休眠一秒,是因为要让主进程等待协程的执行。方法有了现在需要丰富我们的代码来实现相对应的功能。代码如下:
package main
import (
"fmt"
"strings"
"time"
)
type LogProcess struct {
//定义了两个管道,一个读取,一个写入
rc chan string
wc chan string
}
func (l *LogProcess) ReadFromFile() {
//测试数据
data := "hello world"
//模拟数据进入读取管道
l.rc <- data
}
func (l *LogProcess) Process() {
//处理方法从读取管道中拿到数据进行处理,我们进行最简单的处理
data := <-l.rc
//strings.ToUppser方法为把字母全部转换为大写
res := strings.ToUpper(data)
//把处理结果放入写入管道
l.wc <- res
}
func (l *LogProcess) Write() {
//从写入管道中拿到数据,进行写入,因为现在为调测,我们进行最简单的fmt操作
fmt.Println(<-l.wc)
}
func main() {
l := &LogProcess{
rc: make(chan string),
wc: make(chan string),
}
go l.ReadFromFile()
go l.Process()
go l.Write()
time.Sleep(1 * time.Second)
}
因为这里需要协程间通信,我们在结构体中定义了一个读取数据管道和写入数据管道方便数据的传递。
至此日志收集简单的流程已经打通,后面我们会进行写入方法,处理方法,写入方法的详解。