go语言收集nginx容器日志(一)

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)
}

因为这里需要协程间通信,我们在结构体中定义了一个读取数据管道和写入数据管道方便数据的传递。
至此日志收集简单的流程已经打通,后面我们会进行写入方法,处理方法,写入方法的详解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值