|
|
@@ -94,24 +94,24 @@ func NewRegistry(reg prometheus.Registerer, kernelVersion string, processInfoCh
|
|
|
|
|
|
r := &Registry{
|
|
|
reg: reg,
|
|
|
- events: make(chan ebpftracer.Event, 10000),
|
|
|
+ events: make(chan ebpftracer.Event, 10000), // TODO: 队列
|
|
|
|
|
|
hostConntrack: ct,
|
|
|
|
|
|
- containersById: map[ContainerID]*Container{},
|
|
|
+ containersById: map[ContainerID]*Container{}, // TODO: 缓存的一些关系映射
|
|
|
containersByCgroupId: map[string]*Container{},
|
|
|
containersByPid: map[uint32]*Container{},
|
|
|
ip2fqdn: map[netaddr.IP]string{},
|
|
|
|
|
|
- processInfoCh: processInfoCh,
|
|
|
+ processInfoCh: processInfoCh, // TODO: 进程信息
|
|
|
|
|
|
- tracer: ebpftracer.NewTracer(kernelVersion, *flags.DisableL7Tracing),
|
|
|
+ tracer: ebpftracer.NewTracer(kernelVersion, *flags.DisableL7Tracing), // TODO: 核心代码
|
|
|
}
|
|
|
if err = reg.Register(r); err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
- go r.handleEvents(r.events)
|
|
|
- if err = r.tracer.Run(r.events); err != nil {
|
|
|
+ go r.handleEvents(r.events) // TODO: 处理EBPF程序发出来的数据
|
|
|
+ if err = r.tracer.Run(r.events); err != nil { // TODO: 核心代码, attach Uprobe
|
|
|
close(r.events)
|
|
|
return nil, err
|
|
|
}
|
|
|
@@ -141,7 +141,7 @@ func (r *Registry) handleEvents(ch <-chan ebpftracer.Event) {
|
|
|
defer gcTicker.Stop()
|
|
|
for {
|
|
|
select {
|
|
|
- case now := <-gcTicker.C:
|
|
|
+ case now := <-gcTicker.C: // TODO: 周期性做一些操作
|
|
|
for pid, c := range r.containersByPid {
|
|
|
cg, err := proc.ReadCgroup(pid)
|
|
|
if err != nil {
|
|
|
@@ -192,7 +192,7 @@ func (r *Registry) handleEvents(ch <-chan ebpftracer.Event) {
|
|
|
}
|
|
|
}
|
|
|
r.ip2fqdnLock.Unlock()
|
|
|
- case e, more := <-ch:
|
|
|
+ case e, more := <-ch: // TODO: 核心代码, 读取chan中的数据
|
|
|
if e.Pid == uint32(os.Getpid()) {
|
|
|
continue
|
|
|
}
|
|
|
@@ -247,7 +247,7 @@ func (r *Registry) handleEvents(ch <-chan ebpftracer.Event) {
|
|
|
//fmt.Println("ebpftracer.EventTypeConnectionOpen==================", e.Pid)
|
|
|
if c := r.getOrCreateContainer(e.Pid); c != nil {
|
|
|
c.onConnectionOpen(e.Pid, e.Fd, e.SrcAddr, e.DstAddr, e.Timestamp, false)
|
|
|
- c.attachTlsUprobes(r.tracer, e.Pid)
|
|
|
+ c.attachTlsUprobes(r.tracer, e.Pid) // TODO: 根据进程语言...
|
|
|
} else {
|
|
|
klog.Infoln("TCP connection from unknown container", e)
|
|
|
}
|
|
|
@@ -271,14 +271,14 @@ func (r *Registry) handleEvents(ch <-chan ebpftracer.Event) {
|
|
|
break
|
|
|
}
|
|
|
}
|
|
|
- case ebpftracer.EventTypeL7Request:
|
|
|
+ case ebpftracer.EventTypeL7Request: // TODO: 核心代码, 处理7层协议请求
|
|
|
//fmt.Println("EventTypeL7Request")
|
|
|
//fmt.Println("e.L7Request Payload:", string(e.L7Request.Payload))
|
|
|
if e.L7Request == nil {
|
|
|
continue
|
|
|
}
|
|
|
if c := r.containersByPid[e.Pid]; c != nil {
|
|
|
- ip2fqdn := c.onL7RequestApm(e.Pid, e.Fd, e.Timestamp, e.L7Request)
|
|
|
+ ip2fqdn := c.onL7RequestApm(e.Pid, e.Fd, e.Timestamp, e.L7Request) // TODO: 核心代码
|
|
|
r.ip2fqdnLock.Lock()
|
|
|
for ip, fqdn := range ip2fqdn {
|
|
|
r.ip2fqdn[ip] = fqdn
|