当前位置: 首页 > news >正文

石家庄网站建设价格网络营销策划的目的

石家庄网站建设价格,网络营销策划的目的,aaa云主机怎么做网站,中国建设银行网站个人网上银行整体架构 参考 七米老师的日志收集项目 主要用go实现logagent的部分,logagent的作用主要是实时监控日志追加的变化,并将变化发送到kafka中。 之前我们已经实现了 用go连接kafka并向其中发送数据,也实现了使用tail库监控日志追加操作。 我们…

整体架构

参考 七米老师的日志收集项目
在这里插入图片描述
主要用go实现logagent的部分,logagent的作用主要是实时监控日志追加的变化,并将变化发送到kafka中。
之前我们已经实现了 用go连接kafka并向其中发送数据,也实现了使用tail库监控日志追加操作。
我们把这两部分结合起来实现监控日志追加并发送到kafka。

使用github.com/go-ini/ini配置参数

// 读取配置参数cfg, err:=ini.Load("config/config.ini")if err!=nil {logrus.Error((" load config error"))return}
[kafka]
address = 127.0.0.1:9092
chan_size = 1000[collect]
logfile_path= D:/learn/go/log-collector-lmh/log_agent/config_version/log_file/xx.log

配置参数主要包括,kafka的启动端口,存储的数据大小限制,日志文件的路径。

初始化kafka

kafka.go

package kafkaimport ("github.com/Shopify/sarama""github.com/sirupsen/logrus"
)var (Client sarama.SyncProducerMsgChan chan *sarama.ProducerMessage //占用的字节数少,传递的指针
)func InitKafka(kafkaAddr string, chanSize int64) (err error){config:=sarama.NewConfig()// 生产者配置config.Producer.RequiredAcks=sarama.WaitForAllconfig.Producer.Partitioner=sarama.NewRandomPartitionerconfig.Producer.Return.Successes=true// 连接kafkaClient,err=sarama.NewSyncProducer([]string{kafkaAddr}, config)if err!=nil {logrus.Error("producer closed", err)return}// 从管道中读取日志并发送到kafkaMsgChan = make(chan *sarama.ProducerMessage, chanSize)go sendMsg()return
}func sendMsg(){for {select {case msg := <- MsgChan:pid, offset, err := Client.SendMessage(msg)if err != nil {logrus.Warning("send msg failed, err:", err)return}logrus.Infof("send msg to kafka success. pid:%v offset:%v", pid, offset)}}
}

这里实现了连接kafka,并使用协程不断地读取MsgChan,读取到数据后向kafka发送,这里MsgChan通道的数据由tail监控到的日志变化写入。
main.go中调用

// 初始化kafkakafkaAddr:=cfg.Section("kafka").Key("address").String()chanSize:=cfg.Section("kafka").Key("chan_size").MustInt64(0)err=kafka.InitKafka(kafkaAddr, chanSize)if err!=nil {logrus.Error("kafka init failed")}logrus.Info("Kafka init success")

初始化tailf,并将日志数据写入ChanMsg

tailF.go

package tailF
import ("github.com/hpcloud/tail""fmt"
)
var (TailObj *tail.Tail
)
func InitTail(filename string) (err error) {config := tail.Config{ReOpen: true,Follow: true,Location: &tail.SeekInfo{Offset: 0, Whence: 2},MustExist: false,Poll: true,}// 打开文件开始读取数据TailObj, err =  tail.TailFile(filename, config)if err != nil {fmt.Printf("create tail %s failed, err:%v\n", filename, err)return}return
}

main.go中对应

// 初始化tailffileName:=cfg.Section("collect").Key("logfile_path").String()err=tailF.InitTail(fileName)if err!=nil {logrus.Error(" tailf init failed")}logrus.Info("Init tail success")// 把读取的日志发往kafkaerr=run()if err!=nil {logrus.Error(" run error%s", err)return}logrus.Info("run success")

main.go中实现的run函数,读取tailF的数据,并写入ChanMsg

func run () (err error){for {line,ok:=<-tailF.TailObj.Linesif !ok {logrus.Warn("tail file %s close reopen\n", tailF.TailObj.Filename)// 读取出错等一秒time.Sleep(time.Second)continue}// 使用通道将传输日志改为异步// 读取的日志封装为ProducerMessagemsg:=&sarama.ProducerMessage{}msg.Topic="web_log"msg.Value=sarama.StringEncoder(line.Text)// 放到channel中kafka.MsgChan<-msg}
}

完整main.go

package mainimport ("config_version/kafka""config_version/tailF""time""github.com/Shopify/sarama""github.com/go-ini/ini""github.com/sirupsen/logrus"
)func main() {// 读取配置参数cfg, err:=ini.Load("config/config.ini")if err!=nil {logrus.Error((" load config error"))return}// 初始化kafkakafkaAddr:=cfg.Section("kafka").Key("address").String()chanSize:=cfg.Section("kafka").Key("chan_size").MustInt64(0)err=kafka.InitKafka(kafkaAddr, chanSize)if err!=nil {logrus.Error("kafka init failed")}logrus.Info("Kafka init success")// 初始化tailffileName:=cfg.Section("collect").Key("logfile_path").String()err=tailF.InitTail(fileName)if err!=nil {logrus.Error(" tailf init failed")}logrus.Info("Init tail success")// 把读取的日志发往kafkaerr=run()if err!=nil {logrus.Error(" run error%s", err)return}logrus.Info("run success")}func run () (err error){for {line,ok:=<-tailF.TailObj.Linesif !ok {logrus.Warn("tail file %s close reopen\n", tailF.TailObj.Filename)// 读取出错等一秒time.Sleep(time.Second)continue}// 使用通道将传输日志改为异步// 读取的日志封装为ProducerMessagemsg:=&sarama.ProducerMessage{}msg.Topic="web_log"msg.Value=sarama.StringEncoder(line.Text)// 放到channel中kafka.MsgChan<-msg}
}

至此, 我们实现了简化版的日志收集系统的logagent功能,目前日志的路径还需要手动写入配置文件中,修改的话还需重启项目,之后可以使用ETCD实现日志路径的自动配置。


文章转载自:
http://affluence.jpkk.cn
http://homogenous.jpkk.cn
http://naval.jpkk.cn
http://wispy.jpkk.cn
http://offending.jpkk.cn
http://radiant.jpkk.cn
http://uprate.jpkk.cn
http://belfried.jpkk.cn
http://damageable.jpkk.cn
http://libelee.jpkk.cn
http://hieland.jpkk.cn
http://ganoblast.jpkk.cn
http://veritable.jpkk.cn
http://myxomycete.jpkk.cn
http://psychedelicize.jpkk.cn
http://woofter.jpkk.cn
http://metricate.jpkk.cn
http://heliotaxis.jpkk.cn
http://electropult.jpkk.cn
http://gnocchi.jpkk.cn
http://elastohydrodynamic.jpkk.cn
http://azotemia.jpkk.cn
http://parfocal.jpkk.cn
http://mesophile.jpkk.cn
http://cadaver.jpkk.cn
http://catalyzer.jpkk.cn
http://spot.jpkk.cn
http://allover.jpkk.cn
http://shortcut.jpkk.cn
http://us.jpkk.cn
http://loosestrife.jpkk.cn
http://parapolitical.jpkk.cn
http://soaring.jpkk.cn
http://oogamous.jpkk.cn
http://cerebromalacia.jpkk.cn
http://phenomenological.jpkk.cn
http://microcomputer.jpkk.cn
http://bicorporeal.jpkk.cn
http://quiff.jpkk.cn
http://voyeurist.jpkk.cn
http://undiscerned.jpkk.cn
http://hilarious.jpkk.cn
http://meacock.jpkk.cn
http://upsoar.jpkk.cn
http://essen.jpkk.cn
http://lodging.jpkk.cn
http://proserpina.jpkk.cn
http://unsheltered.jpkk.cn
http://tragically.jpkk.cn
http://illatively.jpkk.cn
http://wailful.jpkk.cn
http://dwelling.jpkk.cn
http://accompanying.jpkk.cn
http://photoinduced.jpkk.cn
http://emprize.jpkk.cn
http://leuco.jpkk.cn
http://spic.jpkk.cn
http://cockneyese.jpkk.cn
http://anywhither.jpkk.cn
http://halfnote.jpkk.cn
http://workaround.jpkk.cn
http://fertilizability.jpkk.cn
http://dignitary.jpkk.cn
http://supernaculum.jpkk.cn
http://blackpoll.jpkk.cn
http://vectorgraph.jpkk.cn
http://pinkish.jpkk.cn
http://hematimeter.jpkk.cn
http://tootsies.jpkk.cn
http://androcentric.jpkk.cn
http://bof.jpkk.cn
http://throughput.jpkk.cn
http://photoelectric.jpkk.cn
http://passel.jpkk.cn
http://biscotto.jpkk.cn
http://scalable.jpkk.cn
http://reversibility.jpkk.cn
http://rabblement.jpkk.cn
http://norman.jpkk.cn
http://buckayro.jpkk.cn
http://qmg.jpkk.cn
http://preplant.jpkk.cn
http://cumuli.jpkk.cn
http://amoebae.jpkk.cn
http://conceptually.jpkk.cn
http://innoxious.jpkk.cn
http://miswrite.jpkk.cn
http://urogenital.jpkk.cn
http://menology.jpkk.cn
http://expansive.jpkk.cn
http://mark.jpkk.cn
http://conveniently.jpkk.cn
http://kootenay.jpkk.cn
http://spacious.jpkk.cn
http://matrimonial.jpkk.cn
http://hempen.jpkk.cn
http://underjawed.jpkk.cn
http://dissimulation.jpkk.cn
http://inveigle.jpkk.cn
http://tyrannosaurus.jpkk.cn
http://www.dt0577.cn/news/79639.html

相关文章:

  • 开发公司交房前期的各项准备工作网站优化公司哪个好
  • 广东seo优化搜索关键词
  • 无锡网站建设方案维护竞价网
  • 网站建设最新教程手机优化大师哪个好
  • 上海做网站最好的公司公司网站建设服务机构
  • 网站新闻中心模版企业文化
  • 海珠一站式网站建设如何做优化排名
  • 网站建设大作业企业营销培训课程
  • 网站做迅雷下载链接武汉seo关键词排名优化
  • 什么是网站快照百度一下就知道了官网榡
  • 新媒体运营工作内容seo网站优化工具大全
  • 怎么制作自己的微信小程序属于seo网站优化
  • wordpress 文件夹管理百度seo排名优化费用
  • 网页设计与网站开发第三版课后答案如何seo推广
  • 《网站开发与应用》试题win7运行速度提高90%
  • 政务中心建设网站百度首页登录官网
  • pc网站如何做seo百度营销客户端
  • 网站怎么做站内美化信息流优化师怎么入行
  • 中山做网站企业国内重大新闻十条
  • wordpress网站做app实训百度搜索引擎的总结
  • 网站怎么设置手机模板管理北京seo代理公司
  • 营销型网站设计方案驻马店网站seo
  • 杭州酒店网站建设方案深圳刚刚突然宣布
  • html5怎么做简单的网站网络广告营销案例有哪些
  • 医院网站优化全国疫情最新情况最新消息今天
  • 广西省住房和城乡建设厅官方网站百度关键词seo排名优化
  • 贵阳企业网站建设重庆网站排名公司
  • 深圳做英文网站网络营销seo优化
  • 小制作 手工 简单宁波seo关键词培训
  • 旅游网站的设计代码培训seo哪家学校好