暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

使用python开发Prometheus exporter

DevOps视角 2021-06-22
48


  • 安装

  • counter

  • Gauge

  • histogram

  • Summary


随着Kubernetes越来越普遍使用,用于监控云原生的利器Prometheus也广泛被使用。除了官方提供的一些exporter之外,可能有时候还需要自定义或开发自己的exporter来进行监控。现在云原生生态中的软件或应用都是使用golang进行开发的,但是Prometheus也提供了golang之外的python、Ruby、Java的库来进行开发exporter,这里介绍使用Python来开发exporter,仅作简单介绍,更复杂的生产逻辑需要自己实现。

安装

$ pip install prometheus-client

counter

  • 无label
 from prometheus_client import start_http_server, Counter
import random
import time
r = Counter('http_request_num''http reuqeust times')
def getRequest(t):
    r.inc(random.randint(1,10))
    time.sleep(t)
if __name__ == '__main__':
    start_http_server(8080)
    while True:
        getRequest(5)

  • 有label
 
from prometheus_client import start_http_server, Counter
import random
r = Counter('http_request_num''http reuqeust times', ['request_ip'])
 
def getRequest(t):
    r.labels(request_ip='127.0.0.1').inc(random.randint(1,10))
    time.sleep(t)
if __name__ == '__main__':
    start_http_server(8080)
    while True:
        getRequest(5)

Gauge

  • 无label
 
from prometheus_client import start_http_server, Gauge
import random
import time

disk = Gauge('disk''disk usage')
def getDisk(t):
    disk.set(random.random())
    time.sleep(t)
if __name__ == '__main__':
    start_http_server(8080)
    while True:
        getDisk(5)

  • 有label
from prometheus_client import start_http_server, Gauge
import random
import time
disk = Gauge('disk''disk usage', ['mount'])
def getDisk(t):
    disk.labels(mount="/dev/sda1").set(random.randint(100200))
    time.sleep(t)
if __name__ == '__main__':
    start_http_server(8080)
    while True:
        getDisk(5)

histogram

from prometheus_client import start_http_server, Histogram
import random
import time
temperature = Histogram("temperature""temperature of today", buckets=(010,
2030))
if __name__ == "__main__":
    start_http_server(8080)
    while True:
        temperature.observe(random.randint(035))
        time.sleep(5)

Summary

  • 无label
 
from prometheus_client import start_http_server, Summary
import time
s = Summary("request_time", "url request time")
if __name__ == "__main__":
    start_http_server(8080)
    while True:
        s.observe(0.001)
        time.sleep(1)

  • 有label
 
from prometheus_client import start_http_server, Summary
import time
s = Summary("request_time", "url request time", ['url'])
if __name__ == "__main__":
    start_http_server(8080)
    while True:
        s.labels(url='/').observe(0.001)
        time.sleep(1)






文章转载自DevOps视角,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论