时间序列监控-prometheus

序言

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

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

prometheus

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

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

[root@dockermaster ~]# 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()

raise Exception

self.send_response(200)

self.end_headers()

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之中,可以使用查询语句来进行查询相关的数据,如下:

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

告警:

风言风语

1、 又能怎样???

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

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

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

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

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

2、 软件工程思维

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

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

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

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

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181013B1VOBV00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券