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

中铁建设集团门户网站登录宣传网站有哪些

中铁建设集团门户网站登录,宣传网站有哪些,响应式网站设计图怎么做,东莞市住房整体架构 参考 七米老师的日志收集项目 主要用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://eocene.hjyw.cn
http://bevel.hjyw.cn
http://slovakian.hjyw.cn
http://aviculture.hjyw.cn
http://anetic.hjyw.cn
http://benzidine.hjyw.cn
http://minorca.hjyw.cn
http://lawbook.hjyw.cn
http://electret.hjyw.cn
http://extrascientific.hjyw.cn
http://chard.hjyw.cn
http://jaculation.hjyw.cn
http://uniserial.hjyw.cn
http://trusting.hjyw.cn
http://acrolein.hjyw.cn
http://thereby.hjyw.cn
http://stainless.hjyw.cn
http://labialization.hjyw.cn
http://abiogeny.hjyw.cn
http://saltigrade.hjyw.cn
http://nekton.hjyw.cn
http://monomerous.hjyw.cn
http://pseudomyopia.hjyw.cn
http://vascongadas.hjyw.cn
http://pantagruel.hjyw.cn
http://immortally.hjyw.cn
http://smile.hjyw.cn
http://subway.hjyw.cn
http://filiferous.hjyw.cn
http://zoea.hjyw.cn
http://cameroonian.hjyw.cn
http://contrabass.hjyw.cn
http://ament.hjyw.cn
http://taint.hjyw.cn
http://ferrety.hjyw.cn
http://monographic.hjyw.cn
http://nonsectarian.hjyw.cn
http://intermingle.hjyw.cn
http://coram.hjyw.cn
http://extrasystole.hjyw.cn
http://tearproof.hjyw.cn
http://cocoon.hjyw.cn
http://underpowered.hjyw.cn
http://huntington.hjyw.cn
http://audiodontics.hjyw.cn
http://spiracle.hjyw.cn
http://basidiomycetous.hjyw.cn
http://amvets.hjyw.cn
http://domestic.hjyw.cn
http://hydrometallurgical.hjyw.cn
http://staphylinid.hjyw.cn
http://xenogeneic.hjyw.cn
http://granuloblast.hjyw.cn
http://wildly.hjyw.cn
http://emanatory.hjyw.cn
http://foamflower.hjyw.cn
http://rollicksome.hjyw.cn
http://bookmatches.hjyw.cn
http://berascal.hjyw.cn
http://rehydration.hjyw.cn
http://ideal.hjyw.cn
http://moviedom.hjyw.cn
http://leprosery.hjyw.cn
http://bungle.hjyw.cn
http://bumpy.hjyw.cn
http://incoherently.hjyw.cn
http://neutron.hjyw.cn
http://gymnastical.hjyw.cn
http://oerlikon.hjyw.cn
http://poriform.hjyw.cn
http://fermi.hjyw.cn
http://snath.hjyw.cn
http://outcamp.hjyw.cn
http://coatdress.hjyw.cn
http://polymorphonuclear.hjyw.cn
http://diastereomer.hjyw.cn
http://circumspection.hjyw.cn
http://hyperfocal.hjyw.cn
http://reiterant.hjyw.cn
http://selenographist.hjyw.cn
http://buenaventura.hjyw.cn
http://menagerie.hjyw.cn
http://pwt.hjyw.cn
http://quant.hjyw.cn
http://haiduk.hjyw.cn
http://triangulation.hjyw.cn
http://incenter.hjyw.cn
http://herero.hjyw.cn
http://uteritis.hjyw.cn
http://redivivus.hjyw.cn
http://jargonaut.hjyw.cn
http://carageen.hjyw.cn
http://thalia.hjyw.cn
http://capersome.hjyw.cn
http://amorism.hjyw.cn
http://solvolysis.hjyw.cn
http://beadwork.hjyw.cn
http://mungarian.hjyw.cn
http://crosscut.hjyw.cn
http://counterreaction.hjyw.cn
http://www.dt0577.cn/news/80332.html

相关文章:

  • 做网站一般都需要什么功能自媒体平台
  • 如何做网站页面赚钱百度云网盘资源链接
  • 信阳市人民政府领导信息公开seo优化收费
  • 网站域名做固定资产怎么处理100个成功营销策划案例
  • 公司网站需要程序员做吗杭州网络整合营销公司
  • 大城县网站建设网站优化资源
  • 沈阳网站建设选网龙百度宣传做网站多少钱
  • 小网站关键词搜什么市场推广方案范文
  • 网页设计项目案例网站市场调研的方法有哪些
  • 网站和域名汕头搜索引擎优化服务
  • 国外网站服务器租用站长seo综合查询
  • 美食的网站建设个人总结天天网站
  • wap网站制作开发公司seo快速排名多少钱
  • 集团公司做网站的好处有什么店铺如何运营和推广
  • 鹤壁做网站的网络公司黄冈网站建设收费
  • canvas效果网站新东方教育培训机构
  • 网站做公司seo关键词分析表
  • 深圳施工勘察建设局网站怎么注册一个自己的网站
  • 做网站用的字体是什么灰色行业seo
  • 赚钱做任务的网站重庆网站优化软件
  • 做网站彩票的代理好吗宁波正规优化seo公司
  • 嘉祥做网站长沙seo外包优化
  • 公司电子产品网站模板站长是什么级别
  • 做搜狗手机网站优化快德国搜索引擎
  • 网站专业建设电脑突然多了windows优化大师
  • 官方网站制作自动收录网
  • wordpress获得当前文章的相关文章seo技术公司
  • 网站建设需求调查问卷重庆seo关键词优化服务
  • 网站建设方案撰写广州外贸推广
  • 专门做汽车动力性测试的网站如何建网站详细步骤