Skip to content

Commit

Permalink
update: node with node role and webhook informations
Browse files Browse the repository at this point in the history
  • Loading branch information
Esonhugh committed Dec 9, 2024
1 parent d38ae31 commit 3b21e1f
Show file tree
Hide file tree
Showing 4 changed files with 66 additions and 23 deletions.
2 changes: 1 addition & 1 deletion cmd/metrics/parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ var MetricCmd = &cobra.Command{
continue
} else {
log.Debugf("matched: %s", res.DumpString())
rx = append(rx, res.CopyData())
rx = append(rx, res)
}
}
if err := scanner.Err(); err != nil {
Expand Down
31 changes: 24 additions & 7 deletions pkg/metrics/matcher.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,20 @@ func DefaultMatchRules() MatchRules {
NewMetricMatcher("node").AddLabel("node").AddLabel("kernel_version").
AddLabel("os_image").AddLabel("container_runtime_version").
AddLabel("provider_id").AddLabel("internal_ip"),
NewMetricMatcher("node_role").SetHeader("kube_node_role").
AddLabel("node").AddLabel("role").SetNameLabel("node"),

NewMetricMatcher("pod").AddLabel("namespace").AddLabel("pod").AddLabel("node").
AddLabel("host_ip").AddLabel("pod_ip"),
NewMetricMatcher("container").SetHeader("kube_pod_container_info").AddLabel("namespace").
AddLabel("pod").AddLabel("container").AddLabel("image_spec").AddLabel("image"),
NewMetricMatcher("pod_init_container").AddLabel("namespace").AddLabel("pod").
AddLabel("container").AddLabel("image_spec").AddLabel("image"),
NewMetricMatcher("pod").AddLabel("namespace").AddLabel("pod").
AddLabel("node").AddLabel("pod_ip").
AddLabel("host_ip").AddLabel("host_network"),
NewMetricMatcher("container").SetHeader("kube_pod_container_info").
AddLabel("namespace").AddLabel("pod").
SetNameLabel("container").AddLabel("container").
AddLabel("image").AddLabel("image_spec"),
NewMetricMatcher("init_container").SetHeader("kube_pod_init_container_info").
AddLabel("namespace").AddLabel("pod").
SetNameLabel("container").AddLabel("container").
AddLabel("image").AddLabel("image_spec"),

NewMetricMatcher("cronjob").AddLabel("namespace").AddLabel("cronjob").
AddLabel("schedule").AddLabel("concurrency_policy"),
Expand All @@ -41,6 +48,16 @@ func DefaultMatchRules() MatchRules {
AddLabel("gce_persistent_disk_name").AddLabel("ebs_volume_id").AddLabel("azure_disk_name").
AddLabel("nfs_server").AddLabel("nfs_path").AddLabel("csi_driver").AddLabel("csi_volume_handle").
AddLabel("local_path").AddLabel("local_fs").AddLabel("host_path").AddLabel("host_path_type"),

NewMetricMatcher("validating_webhook").SetNameLabel("webhook_name").
SetHeader("kube_validatingwebhookconfiguration_webhook_clientconfig_service").
AddLabel("namespace").AddLabel("webhook_name").
AddLabel("service_name").AddLabel("service_namespace"),

NewMetricMatcher("mutating_webhook").SetNameLabel("webhook_name").
SetHeader("kube_mutatingwebhookconfiguration_webhook_clientconfig_service").
AddLabel("namespace").AddLabel("webhook_name").
AddLabel("service_name").AddLabel("service_namespace"),
}
}

Expand All @@ -61,7 +78,7 @@ func (m MatchRules) Match(target string) (*MetricMatcher, error) {
if e != nil {
continue
} else {
return r, nil
return r.CopyData(), nil
}
}
return nil, errors.New("no match found")
Expand Down
28 changes: 20 additions & 8 deletions pkg/metrics/parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,19 +28,21 @@ type Label struct {
}

type MetricMatcher struct {
Name string `json:"type"`
Type string `json:"type"`
Header string `json:"-"`
Labels []Label `json:"labels"`
nameLabel string `json:"-"`
grok *grok.Grok `json:"-"`
finalPattern string
ptr any `json:"-"`
}

func NewMetricMatcher(t string) *MetricMatcher {
return &MetricMatcher{
Name: t,
grok: grok.New(),
Labels: make([]Label, 0),
Type: t,
nameLabel: t,
grok: grok.New(),
Labels: make([]Label, 0),
}
}

Expand All @@ -60,7 +62,7 @@ func (mt *MetricMatcher) Compile() error {
return err
}
if mt.Header == "" {
mt.Header = `kube_` + mt.Name + `_info` // custom head
mt.Header = `kube_` + mt.Type + `_info` // custom head
}
header := mt.Header
var body []string
Expand Down Expand Up @@ -138,6 +140,15 @@ func (mt *MetricMatcher) DumpString() string {
return string(b)
}

func (mt *MetricMatcher) SetNameLabel(n string) *MetricMatcher {
mt.nameLabel = n
return mt
}

func (mt *MetricMatcher) LabelNameOfName() string {
return mt.nameLabel
}

func init() {
err := COMMON_MATCH_GROK.AddPatterns(MetricsPatterns)
if err != nil {
Expand All @@ -155,8 +166,9 @@ func (mt *MetricMatcher) CopyData() *MetricMatcher {
newLabel = append(newLabel, label)
}
return &MetricMatcher{
Name: strings.Clone(mt.Name),
Header: strings.Clone(mt.Header),
Labels: newLabel,
Type: strings.Clone(mt.Type),
Header: strings.Clone(mt.Header),
nameLabel: strings.Clone(mt.nameLabel),
Labels: newLabel,
}
}
28 changes: 21 additions & 7 deletions pkg/metrics/resource.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,24 @@ func (rl *ResourceList) Print(writer ...io.Writer) {
}
}

type ResourceMergeHook func(m *MetricMatcher, resource ResourceList) (res *Resource, addFlag bool)
type ResourceMergeHook func(m *MetricMatcher, res ResourceList) (r *Resource, addFlag bool)

var NodeMergeHook ResourceMergeHook = func(m *MetricMatcher, res ResourceList) (r *Resource, addFlag bool) {
if m.Type == "node" || m.Type == "node_role" {
for i := len(res) - 1; i >= 0; i-- {
c := res[i]
if m.FindLabel("node") == c.Name {
r = res[i]
return r, false
}
}
return NewResource("node"), true
}
return nil, true
}

var EndpointMergeHook ResourceMergeHook = func(m *MetricMatcher, res ResourceList) (r *Resource, addFlag bool) {
if m.Name == "endpoint_address" || m.Name == "endpoint_port" {
if m.Type == "endpoint_address" || m.Type == "endpoint_port" {
for i := len(res) - 1; i >= 0; i-- {
c := res[i]
if m.FindLabel("namespace") == c.Namespace && m.FindLabel("endpoint") == c.Name {
Expand All @@ -62,7 +76,7 @@ var EndpointMergeHook ResourceMergeHook = func(m *MetricMatcher, res ResourceLis
return NewResource("endpoint"), true
/*
for i, c := range res {
if m.FindLabel("namespace") == c.Namespace && m.FindLabel("endpoint") == c.Name {
if m.FindLabel("namespace") == c.Namespace && m.FindLabel("endpoint") == c.Type {
r = res[i]
return r, false
}
Expand All @@ -76,7 +90,7 @@ var EndpointMergeHook ResourceMergeHook = func(m *MetricMatcher, res ResourceLis
func ConvertToResource(r []*MetricMatcher, hooks ...ResourceMergeHook) []*Resource {
var res []*Resource
if len(hooks) == 0 {
hooks = append(hooks, EndpointMergeHook)
hooks = append(hooks, EndpointMergeHook, NodeMergeHook)
}

for _, m := range r {
Expand All @@ -90,7 +104,7 @@ func ConvertToResource(r []*MetricMatcher, hooks ...ResourceMergeHook) []*Resour
}
}

resourceType := m.Name
resourceType := m.Type
if resource != nil {
resourceType = resource.Type
}
Expand All @@ -99,11 +113,11 @@ func ConvertToResource(r []*MetricMatcher, hooks ...ResourceMergeHook) []*Resour
}

resource.Namespace = m.FindLabel("namespace")
resource.Name = m.FindLabel(resourceType)
resource.Name = m.FindLabel(m.LabelNameOfName())

// merge endpoint_address and endpoint_port
for _, l := range m.Labels {
if l.Key != "namespace" && l.Key != resourceType {
if l.Key != "namespace" && l.Key != m.LabelNameOfName() {
resource.AddLabelSpec(l)
}
}
Expand Down

0 comments on commit 3b21e1f

Please sign in to comment.