编写一个简单的 rtc_exporter

栏目: 数据库 · 发布时间: 5年前

内容简介:1)rtc_server 通过写文件的方式将系统和业务数据记录到临时文件2)rtc_exporter 读取相关配置并上传到 pushgateway因为是Beta版,只实现基本功能,后续会持续优化
  1. 系统交互图

    编写一个简单的 rtc_exporter

    rtc_exporter.png

1)rtc_server 通过写文件的方式将系统和业务数据记录到临时文件

2)rtc_exporter 读取相关配置并上传到 pushgateway

  1. 系统使用的是 golang 语言进行编写

    main.go

package main

import (
    "flag"
    "fmt"
    "os"
    "rtc_exporter/common"
    "rtc_exporter/structure"
    "rtc_exporter/utils"
    "time"

    "github.com/prometheus/client_golang/prometheus"
    "github.com/prometheus/client_golang/prometheus/push"
)

var (
    confFile = flag.String("c", "./config/config.json", "configuration file,json format")

    rtcData = prometheus.NewGaugeVec(prometheus.GaugeOpts{
        Name:      "rtc_server",
        Namespace: "rtc_server",
        Help:      "rtc server report running manually~",
    }, []string{"server", "key"})
)

//读取程序配置文件
func ReadConfigFile() (string, string, string, float64) {

    common.ProcessOptions()
    if err := common.LoadConfigFromFile(*confFile); err != nil {
        fmt.Println("Load Config File fail,", err)
        return "", "", "", -1
    }
    common.DumpConfigContent()

    // 获取日志配置
    expo_dest, err := common.GetConfigByKey("exporter.dest")
    if err != nil {
        fmt.Println("can not get dest config:", err)
        return "", "", "", -1
    }
    jobname, err := common.GetConfigByKey("exporter.jobname")
    if err != nil {
        fmt.Println("can not get jobname config:", err)
        return "", "", "", -1
    }
    filename, err := common.GetConfigByKey("exporter.filename")
    if err != nil {
        fmt.Println("can not get filename config:", err)
        return "", "", "", -1
    }
    interval, err := common.GetConfigByKey("exporter.interval")
    if err != nil {
        fmt.Println("can not get interval config:", err)
        return "", "", "", -1
    }

    return expo_dest.(string), jobname.(string), filename.(string), interval.(float64)
}

//main函数
func main() {

    var f func()
    var t *time.Timer

    expo_dest, jobname, filename, interval := ReadConfigFile()

    f = func() {
        var info structure.BasicInfo
        info, err := utils.ReadLineJson(filename, utils.ProcessLine)
        if err != nil {
            fmt.Println("Info error!")
        } else {
            registry := prometheus.NewRegistry()
            registry.MustRegister(rtcData)
            pusher := push.New(expo_dest, jobname).Gatherer(registry)

            rtcData.WithLabelValues(info.Server, "user").Set((float64)(info.Data.User))
            rtcData.WithLabelValues(info.Server, "qps").Set((float64)(info.Data.Qps))

            if err := pusher.Add(); err != nil {
                fmt.Println("Could not push to Pushgateway:", err)
                os.Exit(-1)
            }

            fmt.Println("success")
        }
        t = time.AfterFunc(time.Duration(interval)*time.Second, f)
    }

    t = time.AfterFunc(time.Duration(interval)*time.Second, f)

    defer t.Stop()
    time.Sleep(time.Minute)
}

因为是Beta版,只实现基本功能,后续会持续优化

  1. 实现功能:

    1)读取临时文件(json格式)

    2)读取配置文件信息(包括上报地址、间隔时间等)

    3)定时发送信息到 pushgateway

  2. 后续可优化的点

    1)改造成直接与 prometheus 交互的版本

    2)实现自身的高可用,守护进程等方式

    3)代码整合结构化...


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

知识发现

知识发现

史忠植 / 2011-1 / 59.00元

《知识发现(第2版)》全面而又系统地介绍了知识发现的方法和技术,反映了当前知识发现研究的最新成果和进展。全书共分15章。第1章是绪论,概述知识发现的重要概念和发展过程。下面三章重点讨论分类问题,包括决策树、支持向量机和迁移学习。第5章阐述聚类分析。第6章是关联规则。第7章讨论粗糙集和粒度计算。第8章介绍神经网络,书中着重介绍几种实用的算法。第9章探讨贝叶斯网络。第10章讨论隐马尔可夫模型。第11章......一起来看看 《知识发现》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

URL 编码/解码
URL 编码/解码

URL 编码/解码

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具