基于prometheus 实现exporter新增监控指标

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
可观测监控 Prometheus 版,每月50GB免费额度
简介: 基于prometheus 实现exporter新增监控指标

基于node_exporter增加

cmd/collector/rds_files_linux.go

package collector

import (
    "github.com/go-kit/log"
    "github.com/prometheus/client_golang/prometheus"
)

func init() {
    registerCollector("system", defaultEnabled, NewSystemCollector)
}

type SystemCollector struct {
    log log.Logger
}

func NewSystemCollector(logger log.Logger) (Collector, error) {
    return &SystemCollector{log: logger}, nil
}

var sysInfo = map[string]*prometheus.Desc{
    "dir_size": prometheus.NewDesc(
        "rds_dir_size",
        "自定义指定文件夹的大小",
        []string{}, prometheus.Labels{},
    ),
    "file_size": prometheus.NewDesc(
        "rds_file_size",
        "自定义指定文件的大小",
        []string{}, prometheus.Labels{},
    ),
}

func (SystemCollector) Update(ch chan<- prometheus.Metric) error {
    var dirSize = DirSize("/root/go/src/node_mysqld_exporter/cmd/collector")
    ch <- prometheus.MustNewConstMetric(
        sysInfo["dir_size"],
        prometheus.GaugeValue, float64(dirSize),
    )
    var fileSize = DirSize("/root/go/src/node_mysqld_exporter/cmd/collector/cpu_linux.go")
    ch <- prometheus.MustNewConstMetric(
        sysInfo["file_size"],
        prometheus.GaugeValue, float64(fileSize),
    )
    return nil
}

cmd/collector/utils.go

package collector

import (
    "io/ioutil"
    "log"
    "os"
    "path/filepath"
    "sync"
    "time"
)

var syncM sync.Map

var wait sync.WaitGroup

func DirSize(path string) int64 {
    var size int64
    filepath.Walk(path, func(_ string, info os.FileInfo, err error) error {
        if err != nil {
            log.Println(err.Error())
            return err
        }
        if !info.IsDir() {
            size += info.Size()
        }
        return err
    })
    return size
}

func getFileSize(path string) int64 {
    if !exists(path) {
        return 0
    }
    fileInfo, err := os.Stat(path)
    log.Println(fileInfo)
    if err != nil {
        return 0
    }
    return fileInfo.Size()
}

func exists(path string) bool {
    _, err := os.Stat(path)
    return err == nil || os.IsExist(err)
}

func SizeOfDirPath(dirPath string) float64 {
    log.Println("扫描文件夹:" + dirPath)
    t := time.Now()
    wait.Add(1)
    go scanDir(dirPath, &syncM)
    wait.Wait()

    var fileCount int
    var dirSize float64

    syncM.Range(func(key, value interface{}) bool {
        fileCount++
        v := value.(float64)
        dirSize += v
        return true
    })
    log.Println("花费的时间:" + time.Since(t).String())
    log.Println("文件的数量:", fileCount)
    log.Println("文件夹大小:", dirSize)
    return dirSize
}

func scanDir(path string, syncM *sync.Map) {
    defer wait.Done()
    dirAry, err := ioutil.ReadDir(path)
    if err != nil {
        panic(err)
    }
    for _, e := range dirAry {
        if e.IsDir() {
            wait.Add(1)
            go scanDir(filepath.Join(path, e.Name()), syncM)
        } else {
            syncM.Store(filepath.Join(path, e.Name()), (float64(e.Size()) / 1024))
        }
    }

}

验证

# HELP rds_dir_size 自定义指定文件夹的大小
# TYPE rds_dir_size gauge
rds_dir_size 1.591099e+06
# HELP rds_file_size 自定义指定文件的大小
# TYPE rds_file_size gauge
rds_file_size 15226
相关文章
|
4月前
|
Prometheus 监控 Cloud Native
云原生监控实战:Prometheus+Grafana快速搭建指南
云原生监控实战:Prometheus+Grafana快速搭建指南
|
4月前
|
存储 Prometheus 监控
OSS监控体系搭建:Prometheus+Grafana实时监控流量、错误码、存储量(开源方案替代云监控自定义视图)
本方案基于Prometheus构建OSS监控系统,涵盖架构设计、指标采集、可视化、告警及性能优化,助力企业实现高可用、低成本的自建监控体系。
427 1
|
5月前
|
Prometheus 监控 Cloud Native
除了Prometheus,还有哪些工具可以监控Docker Swarm集群的资源使用情况?
除了Prometheus,还有哪些工具可以监控Docker Swarm集群的资源使用情况?
408 79
|
4月前
|
存储 监控 Cloud Native
云原生监控实战:Prometheus+Grafana打造RDS多维度预警体系
本方案构建了基于Prometheus与Thanos的云原生RDS监控体系,涵盖数据采集、存储、可视化与告警全流程。支持10万+QPS采集、90%存储压缩,具备&lt;30秒告警延迟能力。通过自定义指标与智能预警策略,显著提升故障发现效率,实现分钟级响应。
327 5
|
4月前
|
Prometheus 监控 Cloud Native
|
3月前
|
Prometheus 监控 Cloud Native
Docker 部署 Prometheus 和 Grafana 监控 Spring Boot 服务
Docker 部署 Prometheus 和 Grafana 监控 Spring Boot 服务实现步骤
|
6月前
|
存储 Prometheus 监控
Prometheus 深度指南:设计理念 · PromQL · Exporter · Thanos
Prometheus 是一款开源的系统监控与报警工具,专为云原生环境设计。它采用拉取模型采集数据,内置高效的本地时序数据库(TSDB),支持丰富的指标类型和四个黄金指标(延迟、流量、错误、饱和度)。其查询语言 PromQL 功能强大,可灵活聚合和分析时间序列数据。此外,通过 Exporter 机制,Prometheus 能轻松扩展到各种系统和服务。针对大规模场景,Thanos 提供高可用解决方案,整合多 Prometheus 实例,实现全局视图和长期存储。整体架构简洁可靠,适用于动态分布式环境。
769 10
Prometheus 深度指南:设计理念 · PromQL · Exporter · Thanos
|
7月前
|
Prometheus Kubernetes 监控
Kubernetes监控:Prometheus与AlertManager结合,配置邮件告警。
完成这些步骤之后,您就拥有了一个可以用邮件通知你的Kubernetes监控解决方案了。当然,所有的这些配置都需要相互照应,还要对你的Kubernetes集群状况有深入的了解。希望这份指南能帮助你创建出适合自己场景的监控系统,让你在首次发现问题时就能做出响应。
331 22
|
7月前
|
Prometheus 运维 监控
运维实战来了!如何构建适用于YashanDB的Prometheus Exporter
今天分享的是构建YashanDB Exporter的核心设计理念和关键方法,希望也能为你的运维实战加分!
|
10月前
|
存储 数据采集 Prometheus
Grafana Prometheus Altermanager 监控系统
Grafana、Prometheus 和 Alertmanager 是一套强大的开源监控系统组合。Prometheus 负责数据采集与存储,Alertmanager 处理告警通知,Grafana 提供可视化界面。本文简要介绍了这套系统的安装配置流程,包括各组件的下载、安装、服务配置及开机自启设置,并提供了访问地址和重启命令。适用于希望快速搭建高效监控平台的用户。
517 20