用开车作为例子:车子本身是一个极其复杂的系统,而当你的车在高速上以120公里的速度狂奔时出现了噪音,你是不可能这时候边开车边打开发动机盖子来查原因的。通常来说,好一点的车会有内置电脑,在车子出问题时,告诉你左边轮胎胎压有问题,或是发动机缺水了之类。而这些检测,就是系统监控的一个例子。
对于车辆本身,驾驶员关心的指标如下:
通过仪表盘,你不一定能清楚地了解车子出问题的具体原因,但至少可以给你一个大概的方向。比如说,如果水温很高时出现了问题,你大概率可以尝试加点水降温来尝试是否解决问题。
是一个监控仪表系统,由GrafanaLabs公司开源的的一个系统监测(SystemMonitoring)工具。帮助用户简化监控的复杂度,用户只需要提供需要监控的数据,它就可以生成各种可视化仪表。同时它还支持报警功能,可以在系统出现问题时通知用户。并且Grafana不仅仅只支持Prometheus作为查询的数据库,它还支持如下:
虽然Grafana可以从多种数据(如Prometheus、MySQL/PostgreSQL、OpenTSDB)等等中获取数据,不过Prometheus天生就是为了监控而生,所以我们用的最多的还是Prometheus。这也是我们的标配哦~
在Prometheus的架构设计中,Prometheus并不直接服务监控特定的目标,就比如我们监控linux系统,Prometheus不会自己亲自去监控linux的各项指标。其主要任务负责数据的收集,存储并且对外提供数据查询支持。
因此为了能够监控到某些东西,如主机的CPU使用率,我们需要使用到Exporter。Exporter是一个相对开放的概念,不是专门指某一个程序。它可以是一个独立运行的程序,独立于监控目标以外(如NodeExporter程序,独立于操作系统,却能获取到系统各类指标)。也可以是直接内置在监控目标中的代码(如在项目代码层面接入普罗米修斯API,实现指标上报)。总结下来就是,只要能够向Prometheus提供标准格式的监控样本数据,那就是一个Exporter。
而Prometheus周期性的从Exporter暴露的HTTP服务地址(通常是/metrics)拉取监控样本数据。
看完本图,大家肯定还是对图中的各种内容比较疑惑。不过大家不用着急,我会在下一个章节给大家解释~
现在我们有了以下3个部分:
在上一节中,我们访问NodeExporter暴露的HTTP服务,获取到了一系列的监控指标。而这些监控指标便是Prometheus可以采集到当前主机所有监控指标的样本数据。这里再把图放一遍,并进行解释。
即样本可表示为:
在形式上,所有的指标(Metric)都通过如下格式标示:
标签反映了当前样本的特征维度,通过这些维度Prometheus可以对样本数据进行过滤,聚合等。标签的名称只能由ASCII字符、数字以及下划线组成并满足正则表达式a-zA-Z_*。
其中以_作为前缀的标签,是系统保留的关键字,只能在系统内部使用。标签的值则可以包含任何Unicode编码的字符。
完全匹配:
PromQL支持使用=和!=两种完全匹配模式:
不完全匹配:
例如,通过以下表达式可以选择最近5分钟内的所有样本数据:
支持的聚合函数有:
sum(求和)min(最小值)max(最大值)avg(平均值)stddev(标准差)stdvar(标准方差)count(计数)count_values(对value进行计数)bottomk(后n条时序)topk(前n条时序)quantile(分位数)使用聚合操作的语法如下:
登陆腾讯云,在“云产品”处搜索“普罗米修斯”,进入Prometheus服务页面购买服务。特别注意单个普罗米修斯服务只能在单个vpc(私有网络)下使用的,所以购买时一定要确认清楚自己需要监控的服务所在的vpc,即对应下图框内“网络”的第一个下拉框。而第二个“子网”下拉框,则描述了新购买的普罗米修斯服务所安装的子网。
Grafana密码按照平台要求设置并牢记,这个密码在后面登陆Grafana用户界面用得上。
在部署我们的TSF服务时,需要注意将普罗米修斯上报端口(即容器端口)映射到主机端口上,这样普罗米修斯才能获取到对应的上报数据。
接下来就需要到容器中安装监控组件啦。
第一步,进入腾讯云”控制台“,在“云产品”处搜索tke(容器服务),进入容器服务集群列表。这时候找到在TSF(腾讯微服务平台)上创建的集群对应的同名容器集群,点击集群名称,再点击“基本信息”,往下找到“内网访问”,开启它,并按照描述在访问机上配置域名。
第二步,回到普罗米修斯控制台,点击新购买的Prometheus服务的名称,进入到服务详情。点击“集成容器服务“,找到和之前在TSF服务中创建的“集群”同名的“容器集群”,点击任务栏右侧的“安装”按钮,安装监控服务。
ps:这一步就相当于在安装数据源,也就相当于前文提到的NodeExporter这个角色。不过在腾讯云上,安装的东西会更多,让我们能监控更多内容~
第二步,在新版本里,我们只需要在“容器服务”-“Prometheus监控”-“集群监控”里将我们的集群与Prometheus进行关联即可。这里要注意的是集群与Prometheus需要在同一个VPC(私有网络)之下,如果不同的私有网络可能会有额外费用,需要额外设置等。
在上面的步骤执行完后,我们的集群”监控状态“变成了“已安装”,继续点击集群名称,在“服务发现”Tab页点击“新建”按钮。接下来按下图提示来新建服务发现吧。服务发现的上报端口,也就是我们在“TSF服务部署”那一步中开放的容器端口。
在新版本里,集群监控不仅支持yaml方式,还支持了简单版的采集配置,yaml方式依旧可以按照上面的方式类似,这里再介绍一下配置的方式。如下图,点击“数据采集配置”。
选择“自定义监控”-“新增”按钮,就可以通过简单的配置实现自定义的监控啦~
至此,只要对应部署组的服务中上报了metrics(基于golang代码里接入普罗米修斯,代码层面实现指标上报),且容器创建时,开放了上报端口,则数据就会被采集到Prometheus。后续我们在Grafana上选择Prometheus作为数据源,便能获取到服务的监控信息。
在Prometheus服务页面点击下图红框内按钮,进入Grafana。账号为admin,密码为之前购买普罗米修斯时设置的Grafana密码。
进入Grafana后,按照以下步骤建立数据源:
首先明确一下Grafana中的几个组件:
它们之间的关系如下图所示:
在理解了这几个基本概念后,加上我们之前学习到的PromQL,我们就可以开始创建仪表盘啦~
在Dashboards上点击“addnewpannel”进入仪表盘编辑模式,在这里我们找到自己服务,并找到下挂的Metrics(指标),选择后即可在pannel上展示出对应的数据,如果还需要展示别的指标,可以点击下方的“+Query”按钮,即可继续添加指标。如果需要对指标进行操作,比如聚合计算,那么我们只需要在Metrics后的文本栏中对内容进行修改。编辑完成后,点击保存,即得到了一个仪表盘~