Documentation
¶
Index ¶
- Constants
- type ActiveConnectionInBPF
- type AddressWithPid
- type AnalyzeListener
- type AnalyzerContext
- func (c *AnalyzerContext) AddListener(l AnalyzeListener)
- func (c *AnalyzerContext) FlushAllMetrics(bpfLoader *bpf.Loader, metricsPrefix string) (*MetricsBuilder, error)
- func (c *AnalyzerContext) GetActiveConnection(conID, randomID uint64) *ConnectionContext
- func (c *AnalyzerContext) GetAllConnectionWithContext() []*ConnectionContext
- func (c *AnalyzerContext) Init(config *base.TaskConfig, moduleManager *module.Manager) error
- func (c *AnalyzerContext) NewConnectionContext(conID, randomID uint64, pid, fd uint32, processes []api.ProcessInterface, ...) *ConnectionContext
- func (c *AnalyzerContext) NewConnectionMetrics() *ConnectionMetricsContext
- func (c *AnalyzerContext) NewTrafficAnalyzer() *TrafficAnalyzer
- func (c *AnalyzerContext) RegisterAllHandlers(ctx context.Context, bpfLoader *bpf.Loader)
- func (c *AnalyzerContext) StartSocketAddressParser(ctx context.Context)
- func (c *AnalyzerContext) UpdateExtensionConfig(config *base.ExtensionConfig)
- type ConnectionContext
- type ConnectionMetrics
- type ConnectionMetricsContext
- type ConnectionProtocol
- type ConnectionRole
- type ConnectionWithBPF
- type LocalWithPeerAddress
- type MetricsBuilder
- func (m *MetricsBuilder) AppendLogs(service string, log *logv3.LogData)
- func (m *MetricsBuilder) AppendMetrics(service, instance string, metrics []*agentv3.MeterData)
- func (m *MetricsBuilder) AppendSpanAttachedEvents(events []*agentv3.SpanAttachedEvent)
- func (m *MetricsBuilder) BuildBasicMeterLabels(traffic *ProcessTraffic, local api.ProcessInterface) (ConnectionRole, []*agentv3.Label)
- func (m *MetricsBuilder) BuildEvents() []*agentv3.SpanAttachedEvent
- func (m *MetricsBuilder) BuildLogs() [][]*logv3.LogData
- func (m *MetricsBuilder) BuildMetrics() []*agentv3.MeterDataCollection
- func (m *MetricsBuilder) MetricPrefix() string
- type PeerAddress
- type PidMatchTrafficKey
- type PidToRemoteTrafficKey
- type PidWithRole
- type ProcessTraffic
- type SocketCloseEvent
- type SocketConnectEvent
- type SocketDataDirection
- type SocketDataStaticsType
- type SocketExceptionOperationType
- type SocketFunctionName
- type SocketMessageType
- type SocketPair
- type TrafficAnalyzer
Constants ¶
View Source
const ( SocketDataStaticsTypeRTT = 1 SocketDataStaticsTypeExeTime = 2 )
View Source
const ( SocketFunctionNameConnect = 1 SocketFunctionNameAccept = 2 SocketFunctionNameClose = 3 SocketFunctionNameSend = 4 SocketFunctionNameSendto = 5 SocketFunctionNameSendMsg = 6 SocketFunctionNameSendMMSg = 7 SocketFunctionNameSendFile = 8 SocketFunctionNameWrite = 9 SocketFunctionNameWritev = 10 SocketFunctionNameRead = 11 SocketFunctionNameReadv = 12 SocketFunctionNameRecv = 13 SocketFunctionNameRecvfrom = 14 SocketFunctionNameRecvMsg = 15 SocketFunctionNameRecvMMsg = 16 SocketFunctionNameResent = 17 SocketFunctionNameSslWrite = 18 SocketFunctionNameSslRead = 19 SocketFunctionNameGoTLSWrite = 20 SocketFunctionNameGoTLSRead = 21 )
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type ActiveConnectionInBPF ¶
type ActiveConnectionInBPF struct {
RandomID uint64
Pid uint32
SocketFD uint32
Role ConnectionRole
SocketFamily uint32
RemoteAddrV4 uint32
RemoteAddrV6 [16]uint8
RemoteAddrPort uint32
LocalAddrV4 uint32
LocalAddrV6 [16]uint8
LocalAddrPort uint32
WriteBytes uint64
WriteCount uint64
WriteExeTime uint64
ReadBytes uint64
ReadCount uint64
ReadExeTime uint64
WriteRTTCount uint64
WriteRTTExeTime uint64
// protocol of connection
Protocol ConnectionProtocol
// the connect event is already sent
ConnectEventIsSent uint8
IsSSL uint8
// contains filtered or unexported fields
}
type AddressWithPid ¶
type AnalyzeListener ¶
type AnalyzeListener interface {
// Name of the listener
Name() string
// Init listener
Init(config *base.TaskConfig, moduleManager *module.Manager) error
// GenerateMetrics generate a metrics context
// It would bind to a ConnectionContext or ProcessTraffic automatically
GenerateMetrics() ConnectionMetrics
// RegisterBPFEvents register the BPF events
RegisterBPFEvents(ctx context.Context, bpfLoader *bpf.Loader)
// ReceiveNewConnection call this method when receive a new connection event
// when return a metrics then It would bind to with the connection
ReceiveNewConnection(ctx *ConnectionContext, event *SocketConnectEvent)
// ReceiveCloseConnection call this method when receive the connection close event
ReceiveCloseConnection(ctx *ConnectionContext, event *SocketCloseEvent)
// UpdateExtensionConfig for sampling
UpdateExtensionConfig(config *base.ExtensionConfig)
// PreFlushConnectionMetrics prepare to flush the connection metrics
PreFlushConnectionMetrics(ccs []*ConnectionWithBPF, bpfLoader *bpf.Loader) error
// FlushMetrics flush all metrics from connections
FlushMetrics(traffics []*ProcessTraffic, builder *MetricsBuilder)
// PostFlushConnectionMetrics after flushing all metrics, usually used to refresh the metrics
PostFlushConnectionMetrics(ccs []*ConnectionContext)
}
type AnalyzerContext ¶
type AnalyzerContext struct {
// contains filtered or unexported fields
}
func NewAnalyzerContext ¶
func NewAnalyzerContext(processes map[int32][]api.ProcessInterface) *AnalyzerContext
func (*AnalyzerContext) AddListener ¶
func (c *AnalyzerContext) AddListener(l AnalyzeListener)
func (*AnalyzerContext) FlushAllMetrics ¶
func (c *AnalyzerContext) FlushAllMetrics(bpfLoader *bpf.Loader, metricsPrefix string) (*MetricsBuilder, error)
func (*AnalyzerContext) GetActiveConnection ¶
func (c *AnalyzerContext) GetActiveConnection(conID, randomID uint64) *ConnectionContext
func (*AnalyzerContext) GetAllConnectionWithContext ¶
func (c *AnalyzerContext) GetAllConnectionWithContext() []*ConnectionContext
func (*AnalyzerContext) Init ¶
func (c *AnalyzerContext) Init(config *base.TaskConfig, moduleManager *module.Manager) error
func (*AnalyzerContext) NewConnectionContext ¶
func (c *AnalyzerContext) NewConnectionContext(conID, randomID uint64, pid, fd uint32, processes []api.ProcessInterface, conClosed bool) *ConnectionContext
func (*AnalyzerContext) NewConnectionMetrics ¶
func (c *AnalyzerContext) NewConnectionMetrics() *ConnectionMetricsContext
func (*AnalyzerContext) NewTrafficAnalyzer ¶
func (c *AnalyzerContext) NewTrafficAnalyzer() *TrafficAnalyzer
func (*AnalyzerContext) RegisterAllHandlers ¶
func (c *AnalyzerContext) RegisterAllHandlers(ctx context.Context, bpfLoader *bpf.Loader)
func (*AnalyzerContext) StartSocketAddressParser ¶
func (c *AnalyzerContext) StartSocketAddressParser(ctx context.Context)
func (*AnalyzerContext) UpdateExtensionConfig ¶
func (c *AnalyzerContext) UpdateExtensionConfig(config *base.ExtensionConfig)
type ConnectionContext ¶
type ConnectionContext struct {
// basic metadata
ConnectionID uint64
RandomID uint64
LocalPid uint32
SocketFD uint32
LocalProcesses []api.ProcessInterface
ConnectionClosed bool
Protocol ConnectionProtocol
IsSSL bool
// socket metadata
Role ConnectionRole
LocalIP string
LocalPort uint16
RemoteIP string
RemotePort uint16
// metrics
Metrics *ConnectionMetricsContext
// Flush the data content to the oap count
FlushDataCount int
}
type ConnectionMetrics ¶
type ConnectionMetrics interface {
// MergeMetricsFromConnection merge the metrics from connection, and added into self
MergeMetricsFromConnection(connection *ConnectionContext, data ConnectionMetrics)
}
ConnectionMetrics The Metrics in each listener
type ConnectionMetricsContext ¶
type ConnectionMetricsContext struct {
// contains filtered or unexported fields
}
func (*ConnectionMetricsContext) GetMetrics ¶
func (c *ConnectionMetricsContext) GetMetrics(listenerName string) ConnectionMetrics
func (*ConnectionMetricsContext) MergeMetricsFromConnection ¶
func (c *ConnectionMetricsContext) MergeMetricsFromConnection(connection *ConnectionContext)
type ConnectionProtocol ¶
type ConnectionProtocol uint8
const ( ConnectionProtocolUnknown ConnectionProtocol = 0 ConnectionProtocolHTTP ConnectionProtocol = 1 ConnectionProtocolHTTP2 ConnectionProtocol = 2 )
func (ConnectionProtocol) String ¶
func (c ConnectionProtocol) String() string
type ConnectionRole ¶
type ConnectionRole uint32
ConnectionRole represents the role of the current process is the connection whether it's a server or a client, if it's not trigger the connection/accept request, then it's unknown
const ( ConnectionRoleUnknown ConnectionRole = 0 ConnectionRoleClient ConnectionRole = 1 ConnectionRoleServer ConnectionRole = 2 )
func (ConnectionRole) Revert ¶
func (r ConnectionRole) Revert() ConnectionRole
func (ConnectionRole) String ¶
func (r ConnectionRole) String() string
type ConnectionWithBPF ¶
type ConnectionWithBPF struct {
Connection *ConnectionContext
ActiveInBPF *ActiveConnectionInBPF
}
type LocalWithPeerAddress ¶
type MetricsBuilder ¶
type MetricsBuilder struct {
// contains filtered or unexported fields
}
func NewMetricsBuilder ¶
func NewMetricsBuilder(prefix string) *MetricsBuilder
func (*MetricsBuilder) AppendLogs ¶
func (m *MetricsBuilder) AppendLogs(service string, log *logv3.LogData)
func (*MetricsBuilder) AppendMetrics ¶
func (m *MetricsBuilder) AppendMetrics(service, instance string, metrics []*agentv3.MeterData)
func (*MetricsBuilder) AppendSpanAttachedEvents ¶
func (m *MetricsBuilder) AppendSpanAttachedEvents(events []*agentv3.SpanAttachedEvent)
func (*MetricsBuilder) BuildBasicMeterLabels ¶
func (m *MetricsBuilder) BuildBasicMeterLabels(traffic *ProcessTraffic, local api.ProcessInterface) (ConnectionRole, []*agentv3.Label)
func (*MetricsBuilder) BuildEvents ¶
func (m *MetricsBuilder) BuildEvents() []*agentv3.SpanAttachedEvent
func (*MetricsBuilder) BuildLogs ¶
func (m *MetricsBuilder) BuildLogs() [][]*logv3.LogData
func (*MetricsBuilder) BuildMetrics ¶
func (m *MetricsBuilder) BuildMetrics() []*agentv3.MeterDataCollection
func (*MetricsBuilder) MetricPrefix ¶
func (m *MetricsBuilder) MetricPrefix() string
type PeerAddress ¶
type PidMatchTrafficKey ¶
type PidMatchTrafficKey struct {
LocalPid uint32
RemotePid uint32
Role ConnectionRole
}
type PidToRemoteTrafficKey ¶
type PidToRemoteTrafficKey struct {
LocalPid uint32
Role ConnectionRole
RemoteIP string
RemotePort uint16
}
type PidWithRole ¶
type PidWithRole struct {
Pid uint32
Role ConnectionRole
}
type ProcessTraffic ¶
type ProcessTraffic struct {
Analyzer *TrafficAnalyzer
// local process information
LocalIP string
LocalPort uint16
LocalPid uint32
LocalProcesses []api.ProcessInterface
// remote process/address information
RemoteIP string
RemotePort uint16
RemotePid uint32
RemoteProcesses []api.ProcessInterface
// connection basic information
Role ConnectionRole
Protocol ConnectionProtocol
IsSSL bool
// metrics
Metrics *ConnectionMetricsContext
}
func (*ProcessTraffic) GenerateConnectionInfo ¶
func (t *ProcessTraffic) GenerateConnectionInfo() string
func (*ProcessTraffic) RemoteProcessIsProfiling ¶
func (t *ProcessTraffic) RemoteProcessIsProfiling() bool
type SocketCloseEvent ¶
type SocketCloseEvent struct {
ConID uint64
RandomID uint64
ExeTime uint64
Pid uint32
SocketFD uint32
Protocol ConnectionProtocol
IsSSL uint8
Fix uint16
Role ConnectionRole
SocketFamily uint32
RemoteAddrV4 uint32
RemoteAddrV6 [16]uint8
RemoteAddrPort uint32
LocalAddrV4 uint32
LocalAddrV6 [16]uint8
LocalAddrPort uint32
Fix1 uint32
WriteBytes uint64
WriteCount uint64
WriteExeTime uint64
ReadBytes uint64
ReadCount uint64
ReadExeTime uint64
WriteRTTCount uint32
WriteRTTExeTime uint32
}
type SocketConnectEvent ¶
type SocketConnectEvent struct {
ConID uint64
RandomID uint64
ExeTime uint64
NeedComplete uint32
Pid uint32
FD uint32
FuncName uint32
// socket information if exists
Role ConnectionRole
SocketFamily uint32
RemoteAddrV4 uint32
RemoteAddrV6 [16]uint8
RemoteAddrPort uint32
LocalAddrV4 uint32
LocalAddrV6 [16]uint8
LocalAddrPort uint32
}
SocketConnectEvent Socket have been connection/accept event
type SocketDataDirection ¶
type SocketDataDirection uint8
SocketDataDirection indicates whether data is being written or receive
const ( SocketDataDirectionIngress SocketDataDirection = 1 SocketDataDirectionEgress SocketDataDirection = 2 )
func (SocketDataDirection) String ¶
func (d SocketDataDirection) String() string
type SocketDataStaticsType ¶
type SocketDataStaticsType uint8
SocketDataStaticsType represents the stat type when read or write
type SocketExceptionOperationType ¶
type SocketExceptionOperationType uint32
const ( SocketExceptionOperationRetransmit SocketExceptionOperationType = 1 SocketExceptionOperationDrop SocketExceptionOperationType = 2 )
type SocketFunctionName ¶ added in v0.5.0
type SocketFunctionName uint8
func (SocketFunctionName) String ¶ added in v0.5.0
func (f SocketFunctionName) String() string
nolint
type SocketMessageType ¶
type SocketMessageType uint8
const ( SocketMessageTypeUnknown SocketMessageType = 0 SocketMessageTypeRequest SocketMessageType = 1 SocketMessageTypeResponse SocketMessageType = 2 )
func (SocketMessageType) String ¶
func (m SocketMessageType) String() string
type SocketPair ¶
func ParseSocket ¶
func ParseSocket(pid, sockfd uint32) (*SocketPair, error)
type TrafficAnalyzer ¶
type TrafficAnalyzer struct {
// contains filtered or unexported fields
}
func (*TrafficAnalyzer) CombineConnectionToTraffics ¶
func (t *TrafficAnalyzer) CombineConnectionToTraffics(connections []*ConnectionContext) []*ProcessTraffic
func (*TrafficAnalyzer) IsLocalAddressInCache ¶
func (t *TrafficAnalyzer) IsLocalAddressInCache(ip string) bool
Click to show internal directories.
Click to hide internal directories.