时间序列监控--prometheus

时间:2024-04-10 18:04:26
序言

    监控是运维的基础,在所有的时间,监控就是一双眼睛,蒙着眼狂奔,总是会跳坑的。


    prometheus是监控的新秀,使用的时间序列来进行存储,最亮眼的地方在于多维数据的监控,在监控数据的时候,可以按照时间,多个维度来划分数据,从而灵活多变。

prometheus

    在使用prometheus监控的时候,分为几个部分,一个是相当于agent,在需要监控的主机上安装,也就是exporter,主要用来收集相关的监控指标;一个是prometheus server,主要负责从exporter里面拉取数据,保存数据,并且提供promql查询语句;一个是alertmanager,主要用来告警通知;一个则是图形界面,用来简单的展示,不过这部分主要由grafna来展现。


    在提供监控数据的时候,一般都有对应的exporter作为插件提供数据,使用python的客户端提供相关的监控数据:

[[email protected] ~]# cat kel.py 

#!/usr/bin/env python

import time

import random

import http.server

from prometheus_client import start_http_server

from prometheus_client import Counter,Gauge,Summary

REQUESTS = Counter('hello_words_total','Hello requested')

EXCEPTIONS = Counter('hello_world_exceptions_total','Exceptions serving hello world')

INPROGRESS = Gauge('hello_worlds_inprogress','Number of Hello Worlds in progress.')

LAST = Gauge('hello_world_last_time_seconds','The last time a Hello World was served.')

LATENCY = Summary('hello_world_latency_seconds','Time for a request Hello World.')

class MyHandler(http.server.BaseHTTPRequestHandler):

def do_GET(self):

start = time.time()

REQUESTS.inc()

INPROGRESS.inc()

with EXCEPTIONS.count_exceptions():

if random.random() < 0.2:

raise Exception

self.send_response(200)

self.end_headers()

self.wfile.write(b"Hello")

LATENCY.observe(time.time() - start)

LAST.set(time.time())

INPROGRESS.dec()


if __name__ == "__main__":

start_http_server(8000)

server = http.server.HTTPServer(("192.168.1.199",8001),MyHandler)

server.serve_forever()

    使用的是python3,在运行之后,会提供两个监听端口,一个是提供监控数据的8000端口,一个则是提供一个访问的web界面,也就是8001端口。


    在监控的设计之中,内部应该永远提供一个白盒监控,也就是从内部暴露相关系统的监控指标,而且都是相关的关键信息。


    在nginx中,有一个web界面能查看到内部状态;在httpd中,也有相关的界面能查看到内部状态;当写应用程序的时候,可以加入prometheus的客户端,加入几行代码,即可提供相关的监控指标。


    在访问如上8000端口的时候,会返回相关的监控数据:

时间序列监控--prometheus

启动prometheus,配置文件中加入相关的监控,可以看到已经开始拉取相关的监控指标数据。

时间序列监控--prometheus

    在prometheus之中,可以使用查询语句来进行查询相关的数据,如下:

时间序列监控--prometheus

    在grafna中可以添加图标,从而可以监控相关的数据:

时间序列监控--prometheus

    告警:

时间序列监控--prometheus


风言风语

    1、 又能怎样???

    琐事缠身,居然还有人在纠结加班,在哪里加班又有什么关系。。。在床上加班?在家里加班?还是在公司加班。。。SLI?SLO?SLA?一个高可用低性能的系统简直是让人抓狂。。。


    root cause,根源问题的解决。。。不可能的,不参与到研发的过程中,根本无法进行改善各种服务。。。


    解决了一个问题,解决了十个问题,解决了一百万个问题,又能怎样?技术得到发展?系统增加了可靠性?系统得到了更高性能?到底是重复的问题重复做?还是要彻底解决。。。


    长远的目标是啥?会一个监控又能怎样?解决了一个工单,又能怎样?解决了一个故障,又能怎样?。。。要你有什么用。。。


    运维本身。。。让人感觉到despair。。。SRE才是正统,然而绝大部分是不可能实现的,WTF。。。


    2、 软件工程思维

    陷入一种思维怪圈,无论是运维,还是在写一些小脚本。。。到最后总是会反问一句。。。又有什么用???


    写一个小脚本,最后的结论会是,不就是调用一些模块么,就用那么几个方法,又有什么意思???


    会的不珍惜,不会的念念不忘。。。思维怪圈?


    别人有Borgmon,社区有prometheus,你有xxmon。。。。呵呵,简直就是无趣至极。。。