首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >时间序列监控--prometheus

时间序列监控--prometheus

作者头像
SRE运维实践
发布2019-07-08 13:18:26
9050
发布2019-07-08 13:18:26
举报
文章被收录于专栏:SRE运维实践SRE运维实践

序言

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

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

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

告警:

风言风语

1、 又能怎样???

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

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

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

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

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

2、 软件工程思维

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

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

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-10-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SRE运维实践 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档