給prometheus加乙個export

2021-08-13 18:12:19 字數 3374 閱讀 2009

prometheus有很多的export,本文先自己寫乙個export,再介紹乙個官方提供的node export。

其實只要返回prometheus能夠識別的標準的文字,prometheus就能相容,這個就是介面的好處。

你首先得提供乙個http的server去提供資料,本篇文章主要介紹乙個http的監控,可以通過http、tcp等協議做服務監控。

if err := http.listenandserve(*listenaddress, nil); err != nil這樣你就能提供乙個服務端了,下面就是具體介面引數probehandler**具體實現,我這裡定義一些module,可以通過url指定使用的module。

// 如果prometheus攜帶了超時,則我這邊也設定超時時間

var timeoutseconds float64

if v := r.header

.get("x-prometheus-scrape-timeout-seconds"); v != ""

}if timeoutseconds == 0

if module.timeout

.seconds() < timeoutseconds && module.timeout

.seconds() > 0

timeoutseconds -= *timeoutoffset

ctx, cancel := context.withtimeout(context.background(), time.duration(timeoutseconds*float64(time.second)))

defer cancel()

r = r.withcontext(ctx)

//定義了乙個prometheus變數,探測成功是否成功,1代表成功0代表失敗

probesuccessgauge := prometheus.newgauge(prometheus.gaugeopts)

//定義了乙個探測時間的變數

probedurationgauge := prometheus.newgauge(prometheus.gaugeopts)

params := r.url

.query()

target := params.get("target")

if target == ""

prober, ok := probers[module.prober]

if !ok

sl := newscrapelogger(logger, modulename, target)

level.info(sl).log("msg", "beginning probe", "probe", module.prober, "timeout_seconds", timeoutseconds)

start := time.now()

registry := prometheus.newregistry()

//這裡是註冊上面兩個指標

}上面的probers是所以是探測器。

probers = map[string]prober.probefn
這個裡面定義四種探測的方法。程式啟動載入module,module裡面包含probe

preferred_ip_protocol: "ip4"上面的http代表使用http的探針。以最簡單的icmp為例,

func probeicmp(ctx context.context, target string, module config.module, registry *prometheus.registry, logger log.logger) (success bool) }}

defer socket.close()

level.info(logger).log("msg", "writing out packet")

if _, err = socket.writeto(wb, ip); err != nil

rb := make(byte, 65536)

if err := socket.setreaddeadline(deadline); err != nil

level.info(logger).log("msg", "waiting for reply packets")

for

level.error(logger).log("msg", "error reading from socket", "err", err)

continue

}if peer.string() != ip.string()

if replytype == ipv6.icmptypeechoreply

if bytes.compare(rb[:n], wb) == 0

}}

篇幅有限,之保留部分源**。這樣就可以給prometheus提供標準介面資料了。

給按鍵加乙個提示資訊

1,用到了on notify ex 2,ctooltipctrl類 3,pretranslatemessage 知識點 1,on notify ex on notify和on notify ex用來處理控制項通知訊息wm notify 的巨集 兩者的形式是 on notify ex ncode,id...

給部落格加乙個小倉鼠

這只萌萌噠的小倉鼠,相信大家一定很喜歡吧,很多人也非常好奇,這只小倉鼠是怎麼實現的啊 好了羅七八糟的話咱也不說了 下面就看看怎麼實現的吧 新增方式 進入自己的 設定,將以上html 新增到 部落格側邊欄公告 style outline none data width 200 height 160 m...

小技巧 給flash加乙個trim 函式

flash沒有自帶trim 函式,只有自己加乙個,下面是函式 var mys string 前面後面含有全形空格 和普通空格 現在把他們去掉 trace 原字串 mys trace 處理後的 trim mys function trim mystring string var omystring s...