Documentation
¶
Index ¶
- Constants
- func BeautifyKey(key string) string
- func ConnectionSummary(c *ConnectionStats, names map[util.Address][]string) string
- func DNSKey(c *ConnectionStats) (dns.Key, bool)
- func GetNATLocalAddress(c ConnectionStats) (util.Address, uint16)
- func GetNATRemoteAddress(c ConnectionStats) (util.Address, uint16)
- func IsEphemeralPort(port int) bool
- func IsExcludedConnection(scf []*ConnectionFilter, dcf []*ConnectionFilter, conn *ConnectionStats) bool
- func ReadInitialState(procRoot string, protocol ConnectionType, collectIPv6 bool) (map[PortMapping]struct{}, error)
- func Reclaim(c *Connections)
- type BufferedData
- type ConnTypeFilter
- type ConnectionBuffer
- func (b *ConnectionBuffer) Append(slice []ConnectionStats)
- func (b *ConnectionBuffer) Capacity() int
- func (b *ConnectionBuffer) Connections() []ConnectionStats
- func (b *ConnectionBuffer) Len() int
- func (b *ConnectionBuffer) Next() *ConnectionStats
- func (b *ConnectionBuffer) Reclaim(n int)
- func (b *ConnectionBuffer) Reset()
- type ConnectionDirection
- type ConnectionFamily
- type ConnectionFilter
- type ConnectionStats
- type ConnectionType
- type Connections
- type ConnectionsTelemetry
- type Delta
- type EphemeralPortType
- type IPTranslation
- type PortMapping
- type Route
- type RouteCache
- type Router
- type RuntimeCompilationTelemetry
- type State
- type Subnet
- type Via
Constants ¶
const ( // DEBUGCLIENT is the ClientID for debugging DEBUGCLIENT = "-1" // DNSResponseCodeNoError is the value that indicates that the DNS reply contains no errors. // We could have used layers.DNSResponseCodeNoErr here. But importing the gopacket library only for this // constant is not worth the increased memory cost. DNSResponseCodeNoError = 0 // ConnectionByteKeyMaxLen represents the maximum size in bytes of a connection byte key ConnectionByteKeyMaxLen = 41 )
Variables ¶
This section is empty.
Functions ¶
func BeautifyKey ¶
BeautifyKey returns a human readable byte key (used for debugging purposes) it should be in sync with ByteKey Note: This is only used in /debug/* endpoints
func ConnectionSummary ¶
func ConnectionSummary(c *ConnectionStats, names map[util.Address][]string) string
ConnectionSummary returns a string summarizing a connection
func DNSKey ¶ added in v0.9.0
func DNSKey(c *ConnectionStats) (dns.Key, bool)
DNSKey generates a key suitable for looking up DNS stats based on a ConnectionStats object
func GetNATLocalAddress ¶ added in v0.9.0
func GetNATLocalAddress(c ConnectionStats) (util.Address, uint16)
GetNATLocalAddress returns the translated (local ip, local port) pair
func GetNATRemoteAddress ¶ added in v0.9.0
func GetNATRemoteAddress(c ConnectionStats) (util.Address, uint16)
GetNATRemoteAddress returns the translated (remote ip, remote port) pair
func IsEphemeralPort ¶ added in v0.9.0
IsEphemeralPort returns true if a port belongs to the ephemeral range This is mostly a placeholder for now as we have work planned for a platform-agnostic solution that will, among other things, source these values from procfs for Linux hosts
func IsExcludedConnection ¶ added in v0.9.0
func IsExcludedConnection(scf []*ConnectionFilter, dcf []*ConnectionFilter, conn *ConnectionStats) bool
IsExcludedConnection returns true if a given connection should be excluded by the tracer based on user defined filters
func ReadInitialState ¶ added in v0.9.0
func ReadInitialState(procRoot string, protocol ConnectionType, collectIPv6 bool) (map[PortMapping]struct{}, error)
ReadInitialState reads the /proc filesystem and determines which ports are being listened on
func Reclaim ¶ added in v0.9.0
func Reclaim(c *Connections)
Reclaim memory from the `Connections` underlying buffer
Types ¶
type BufferedData ¶ added in v0.9.0
type BufferedData struct { Conns []ConnectionStats // contains filtered or unexported fields }
BufferedData encapsulates data whose underlying memory can be recycled
type ConnTypeFilter ¶
ConnTypeFilter holds user-defined protocols
type ConnectionBuffer ¶ added in v0.9.0
type ConnectionBuffer struct {
// contains filtered or unexported fields
}
ConnectionBuffer encapsulates a resizing buffer for ConnectionStat objects
func NewConnectionBuffer ¶ added in v0.9.0
func NewConnectionBuffer(initSize, minSize int) *ConnectionBuffer
NewConnectionBuffer creates a ConnectionBuffer with initial size `size`.
func (*ConnectionBuffer) Append ¶ added in v0.9.0
func (b *ConnectionBuffer) Append(slice []ConnectionStats)
Append slice to ConnectionBuffer
func (*ConnectionBuffer) Capacity ¶ added in v0.9.0
func (b *ConnectionBuffer) Capacity() int
Capacity returns the current capacity of the buffer
func (*ConnectionBuffer) Connections ¶ added in v0.9.0
func (b *ConnectionBuffer) Connections() []ConnectionStats
Connections returns a slice of all the `ConnectionStats` objects returned via `Next` since the last `Reset`.
func (*ConnectionBuffer) Len ¶ added in v0.9.0
func (b *ConnectionBuffer) Len() int
Len returns the count of the number of written `ConnectionStats` objects since last `Reset`.
func (*ConnectionBuffer) Next ¶ added in v0.9.0
func (b *ConnectionBuffer) Next() *ConnectionStats
Next returns the next `ConnectionStats` object available for writing. It will resize the internal buffer if necessary.
func (*ConnectionBuffer) Reclaim ¶ added in v0.9.0
func (b *ConnectionBuffer) Reclaim(n int)
Reclaim captures the last n entries for usage again.
func (*ConnectionBuffer) Reset ¶ added in v0.9.0
func (b *ConnectionBuffer) Reset()
Reset returns the written object count back to zero. It may resize the internal buffer based on past usage.
type ConnectionDirection ¶
type ConnectionDirection uint8
ConnectionDirection indicates if the connection is incoming to the host or outbound
const ( // INCOMING represents connections inbound to the host INCOMING ConnectionDirection = 1 // OUTGOING represents outbound connections from the host OUTGOING ConnectionDirection = 2 // LOCAL represents connections that don't leave the host LOCAL ConnectionDirection = 3 // NONE represents connections that have no direction (udp, for example) NONE ConnectionDirection = 4 )
func (ConnectionDirection) String ¶
func (d ConnectionDirection) String() string
type ConnectionFamily ¶
type ConnectionFamily uint8
ConnectionFamily will be either v4 or v6
const ( // AFINET represents v4 connections AFINET ConnectionFamily = 0 // AFINET6 represents v6 connections AFINET6 ConnectionFamily = 1 )
func (ConnectionFamily) String ¶ added in v0.9.0
func (c ConnectionFamily) String() string
type ConnectionFilter ¶
type ConnectionFilter struct { IP *net.IPNet // If nil, then all IPs will be considered matching. AllPorts ConnTypeFilter Ports map[uint16]ConnTypeFilter }
ConnectionFilter holds a user-defined excluded IP/CIDR, and ports
func ParseConnectionFilters ¶
func ParseConnectionFilters(filters map[string][]string) (excludelist []*ConnectionFilter)
ParseConnectionFilters takes the user defined excludelist and returns a slice of ConnectionFilters
type ConnectionStats ¶
type ConnectionStats struct { Source util.Address Dest util.Address MonotonicSentBytes uint64 LastSentBytes uint64 MonotonicRecvBytes uint64 LastRecvBytes uint64 MonotonicSentPackets uint64 LastSentPackets uint64 MonotonicRecvPackets uint64 LastRecvPackets uint64 // Last time the stats for this connection were updated LastUpdateEpoch uint64 MonotonicRetransmits uint32 LastRetransmits uint32 RTT uint32 // Stored in µs RTTVar uint32 // MonotonicTCPEstablished indicates whether or not the TCP connection was established // after system-probe initialization. // * A value of 0 means that this connection was established before system-probe was initialized; // * Value 1 represents a connection that was established after system-probe started; // * Values greater than 1 should be rare, but can occur when multiple connections // are established with the same tuple betweeen two agent checks; MonotonicTCPEstablished uint32 LastTCPEstablished uint32 MonotonicTCPClosed uint32 LastTCPClosed uint32 Pid uint32 NetNS uint32 SPort uint16 DPort uint16 Type ConnectionType Family ConnectionFamily Direction ConnectionDirection SPortIsEphemeral EphemeralPortType IPTranslation *IPTranslation IntraHost bool Via *Via IsAssured bool }
ConnectionStats stores statistics for a single connection. Field order in the struct should be 8-byte aligned
func (ConnectionStats) ByteKey ¶
func (c ConnectionStats) ByteKey(buf []byte) ([]byte, error)
ByteKey returns a unique key for this connection represented as a byte array It's as following:
4B 2B 2B .5B .5B 4/16B 4/16B = 17/41B 32b 16b 16b 4b 4b 32/128b 32/128b
| PID | SPORT | DPORT | Family | Type | SrcAddr | DestAddr
func (ConnectionStats) IsExpired ¶ added in v0.9.0
func (c ConnectionStats) IsExpired(now uint64, timeout uint64) bool
IsExpired returns whether the connection is expired according to the provided time and timeout.
func (ConnectionStats) String ¶
func (c ConnectionStats) String() string
type ConnectionType ¶
type ConnectionType uint8
ConnectionType will be either TCP or UDP
const ( // TCP connection type TCP ConnectionType = 0 // UDP connection type UDP ConnectionType = 1 )
func (ConnectionType) String ¶
func (c ConnectionType) String() string
type Connections ¶
type Connections struct { BufferedData DNS map[util.Address][]string ConnTelemetry *ConnectionsTelemetry CompilationTelemetryByAsset map[string]RuntimeCompilationTelemetry HTTP map[http.Key]http.RequestStats DNSStats dns.StatsByKeyByNameByType }
Connections wraps a collection of ConnectionStats
type ConnectionsTelemetry ¶
type ConnectionsTelemetry struct { MonotonicKprobesTriggered int64 MonotonicKprobesMissed int64 MonotonicConntrackRegisters int64 MonotonicConntrackRegistersDropped int64 MonotonicDNSPacketsProcessed int64 MonotonicConnsClosed int64 ConnsBpfMapSize int64 MonotonicUDPSendsProcessed int64 MonotonicUDPSendsMissed int64 ConntrackSamplingPercent int64 DNSStatsDropped int64 }
ConnectionsTelemetry stores telemetry from the system probe related to connections collection
type Delta ¶ added in v0.9.0
type Delta struct { BufferedData HTTP map[http.Key]http.RequestStats DNSStats dns.StatsByKeyByNameByType }
Delta represents a delta of network data compared to the last call to State.
type EphemeralPortType ¶ added in v0.9.0
type EphemeralPortType uint8
EphemeralPortType will be either EphemeralUnknown, EphemeralTrue, EphemeralFalse
const ( // EphemeralUnknown indicates inability to determine whether the port is in the ephemeral range or not EphemeralUnknown EphemeralPortType = 0 // EphemeralTrue means the port has been detected to be in the configured ephemeral range EphemeralTrue EphemeralPortType = 1 // EphemeralFalse means the port has been detected to not be in the configured ephemeral range EphemeralFalse EphemeralPortType = 2 )
func IsPortInEphemeralRange ¶ added in v0.9.0
func IsPortInEphemeralRange(p uint16) EphemeralPortType
IsPortInEphemeralRange returns whether the port is ephemeral based on the OS-specific configuration.
func (EphemeralPortType) String ¶ added in v0.9.0
func (e EphemeralPortType) String() string
type IPTranslation ¶
type IPTranslation struct { ReplSrcIP util.Address ReplDstIP util.Address ReplSrcPort uint16 ReplDstPort uint16 }
IPTranslation can be associated with a connection to show the connection is NAT'd
type PortMapping ¶
PortMapping represents a port binding
type RouteCache ¶ added in v0.9.0
RouteCache is the interface to a cache that stores routes for a given (source, destination, net ns) tuple
func NewRouteCache ¶ added in v0.9.0
func NewRouteCache(size int, router Router) RouteCache
NewRouteCache creates a new RouteCache
type Router ¶ added in v0.9.0
Router is an interface to get a route for a (source, destination, net ns) tuple
func NewNetlinkRouter ¶ added in v0.9.0
NewNetlinkRouter create a Router that queries routes via netlink
type RuntimeCompilationTelemetry ¶ added in v0.9.0
type RuntimeCompilationTelemetry struct { RuntimeCompilationEnabled bool RuntimeCompilationResult int32 KernelHeaderFetchResult int32 RuntimeCompilationDuration int64 }
RuntimeCompilationTelemetry stores telemetry related to the runtime compilation of various assets
type State ¶
type State interface { // GetDelta returns the a Delta object for given client when provided the latest set of active connections GetDelta( clientID string, latestTime uint64, active []ConnectionStats, dns dns.StatsByKeyByNameByType, http map[http.Key]http.RequestStats, ) Delta // RemoveClient stops tracking stateful data for a given client RemoveClient(clientID string) // RemoveExpiredClients removes expired clients from the state RemoveExpiredClients(now time.Time) // RemoveConnections removes the given keys from the state RemoveConnections(keys []string) // StoreClosedConnections stores a batch of closed connections StoreClosedConnections(connections []ConnectionStats) // GetStats returns a map of statistics about the current network state GetStats() map[string]interface{} // DebugState returns a map with the current network state for a client ID DumpState(clientID string) map[string]interface{} }
State takes care of handling the logic for: - closed connections - sent and received bytes per connection