633 字
3 分钟
day13课上笔记
day13课上笔记
内容回顾
LogAgent的实现
- 配置文件版LogAnent实现
- kafka的使用
- tailf第三方包的使用
- ini配置文件解析
- etcd版本的LogAgent实现
- 项目启动时从etcd拉取收集日志项信息
- 利用watch实时监听etcd中配置的变化
- 利用IP每个LogAgent分别从etcd拉取自己的配置
留的两个思考题(自主学习能力)
-
Raft协议
-
watch底层实现的原理
今日内容
LogTransfer
从kafka里面把日志取出来,写入ES,使用Kibana做可视化的展示
Elasticsearch
Kibana
详见ES搭建指南
kafka消费
根据topic找所有的分区
每一个分区去消费数据
package main
import ( "fmt"
"github.com/Shopify/sarama")
// kafka consumer
func main() { consumer, err := sarama.NewConsumer([]string{"127.0.0.1:9092"}, nil) if err != nil { fmt.Printf("fail to start consumer, err:%v\n", err) return } partitionList, err := consumer.Partitions("web_log") // 根据topic取到所有的分区 if err != nil { fmt.Printf("fail to get list of partition:err%v\n", err) return } fmt.Println(partitionList) for partition := range partitionList { // 遍历所有的分区 // 针对每个分区创建一个对应的分区消费者 pc, err := consumer.ConsumePartition("web_log", int32(partition), sarama.OffsetNewest) if err != nil { fmt.Printf("failed to start consumer for partition %d,err:%v\n", partition, err) return } defer pc.AsyncClose() // 异步从每个分区消费信息 go func(sarama.PartitionConsumer) { for msg := range pc.Messages() { fmt.Printf("Partition:%d Offset:%d Key:%v Value:%v", msg.Partition, msg.Offset, msg.Key, msg.Value) } }(pc) }}LogTransfer实现
加载配置文件
// 0. 加载配置文件var cfg = new(conf.LogTransferCfg)err := ini.MapTo(cfg, "./conf/cfg.ini")if err != nil { fmt.Printf("init config failed, err:%v\n", err) return}fmt.Printf("cfg:%v\n", cfg)两个坑:
- 在一个函数中修改变量一定要传指针
- 在配置文件对应的结构体中一定要设置tag(特别是嵌套的结构体)
系统监控
gopsutil做系统监控信息的采集,写入influxDB,使用grafana作展示
prometheus监控:采集性能指标数据,保存起来,使用grafana作展示

项目总结
- 项目的架构(图)
- 为什么不用ELK
- logAgent里面如何保证日志不丢/重启之后继续收集日志(记录读取文件的offset)
- kafka课上整理的那一些
- etcd的watch的原理
- es 相关知识点
找工作:
- 找开发的话还是算法和数据结构(刷leetcode)
- 找运维开发的话前端自己会一点会加分,时下热点的技术栈
- 学历(尽快自己想办法)
- 简历好好写
- Boss直聘等该花钱花钱
- 项目一定要自己写一遍
国庆后:
web框架
微服务
Docker和K8s
今日分享
工作和生活都很重要.