node-exporter新增自定义模块

业务效果

          

 源码修改

       1.添加源码模块

          

          

          

          go 1.16以后不再需要把源码包存储到gopath目录下,可以放到服务器的任何目录下即可

          

复制代码
package collector

import (
    "github.com/go-kit/log"
    "github.com/prometheus/client_golang/prometheus"
    "os/exec"
    "strconv"
    "strings"
    "fmt"
)

const (
    errLogSubSystem = "errlog"
)

func init() {
    registerCollector(errLogSubSystem,defaultEnabled,NewErrLogCollector)
}


type errLogCollector struct {
    logger log.Logger
}

func NewErrLogCollector(logger log.Logger) (Collector,error) {
   return &errLogCollector{logger},nil
}


func errLogGrep() string {
    errLogCmd := `grep -i error /var/log/messages | awk '{a[$5]++}END{for(i in a) print i,a[i]}'`
    cmd := exec.Command("sh","-c",errLogCmd)
    output,_ := cmd.CombinedOutput()
    return string(output)
}

func (c *errLogCollector) Update( ch chan<- prometheus.Metric) error {
     var metricType prometheus.ValueType
         metricType = prometheus.GaugeValue

         output := errLogGrep()
         for _, line := range strings.Split(output,"\n") {
             l := strings.Split(line,":")
             if len(l) != 2 {
                 continue
             }

             name := strings.TrimSpace(l[0])
             value := strings.TrimSpace(l[1])

             v, _ := strconv.Atoi(value)
             name = strings.Replace(name,"-","_",-1)

             ch <- prometheus.MustNewConstMetric(
                 prometheus.NewDesc(
                     prometheus.BuildFQName(namespace,errLogSubSystem,name),
                     fmt.Sprintf("/var/log/message err log %s.", name),
                     nil,
                     nil,
                 ),
                 metricType, float64(v),
             )

         }
         return nil
}
errLog.go
复制代码

       2.编译访问

         

         

         

         

         

          

           metrics数据已经被prometheus采集到

          把prometheus的metrics数据导入到grafana中展示

         

  blackbox_exporter配置

        1.默认情况下一个exporter只能采集一个对应的服务,比如一个mysql_exporter只能采集一个mysql服务实例.当一台主机上同时运行了N个mysql服务的时候就需要装N个mysql_exporter。

        2.使用黑盒exporter就可以只安装一个黑盒exporter同时采集多个服务实例的metrics数据

        

        

        

 

 

        

posted @   不懂123  阅读(369)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示