Browse Source
* Add cpu vulnerabilities reporting from sysfs --------- Signed-off-by: Michal Wasilewski <michal@mwasilewski.net>pull/2731/head
Michal
1 year ago
committed by
GitHub
8 changed files with 117 additions and 3 deletions
@ -0,0 +1,68 @@
|
||||
// Copyright 2023 The Prometheus Authors
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package collector |
||||
|
||||
import ( |
||||
"fmt" |
||||
|
||||
"github.com/go-kit/log" |
||||
"github.com/prometheus/client_golang/prometheus" |
||||
"github.com/prometheus/procfs/sysfs" |
||||
) |
||||
|
||||
const ( |
||||
cpuVulerabilitiesCollector = "cpu_vulnerabilities" |
||||
) |
||||
|
||||
var ( |
||||
vulnerabilityDesc = prometheus.NewDesc( |
||||
prometheus.BuildFQName(namespace, cpuVulerabilitiesCollector, "info"), |
||||
"Details of each CPU vulnerability reported by sysfs. The value of the series is an int encoded state of the vulnerability. The same state is stored as a string in the label", |
||||
[]string{"codename", "state"}, |
||||
nil, |
||||
) |
||||
) |
||||
|
||||
type cpuVulnerabilitiesCollector struct{} |
||||
|
||||
func init() { |
||||
registerCollector(cpuVulerabilitiesCollector, defaultDisabled, NewVulnerabilitySysfsCollector) |
||||
} |
||||
|
||||
func NewVulnerabilitySysfsCollector(logger log.Logger) (Collector, error) { |
||||
return &cpuVulnerabilitiesCollector{}, nil |
||||
} |
||||
|
||||
func (v *cpuVulnerabilitiesCollector) Update(ch chan<- prometheus.Metric) error { |
||||
fs, err := sysfs.NewFS(*sysPath) |
||||
if err != nil { |
||||
return fmt.Errorf("failed to open sysfs: %w", err) |
||||
} |
||||
|
||||
vulnerabilities, err := fs.CPUVulnerabilities() |
||||
if err != nil { |
||||
return fmt.Errorf("failed to get vulnerabilities: %w", err) |
||||
} |
||||
|
||||
for _, vulnerability := range vulnerabilities { |
||||
ch <- prometheus.MustNewConstMetric( |
||||
vulnerabilityDesc, |
||||
prometheus.GaugeValue, |
||||
1.0, |
||||
vulnerability.CodeName, |
||||
sysfs.VulnerabilityHumanEncoding[vulnerability.State], |
||||
) |
||||
} |
||||
return nil |
||||
} |
Loading…
Reference in new issue