Prometheus通过targets的http 入口点抓取和收集指标。它自己也以同样的方式暴露自己的数据,因此它也能抓取和监控自己的健康。 1)启动前的常规配置 Scrape_configs: 抓取目标指标的时间间隔:scrape_interval: 5s Job的名字:- job_name: ‘prometheus’ 抓取指标的目标对象配置: static_configs: - targets: [‘localhost:9090’] 2)指定配置的prometheus启动 ./prometheus -config.file=prometheus.yml 3)注意事项 Prometheus默认使用3G内存,若机器内存较小,可以调整prometheus使用更少的内存。 4)一个job几个组的endpoints scrape_configs: - job_name: 'example-random' # Override the global default and scrape targets from this job every 5 seconds. scrape_interval: 5s static_configs: - targets: ['localhost:8080', 'localhost:8081'] labels: group: 'production' - targets: ['localhost:8082'] labels: group: 'canary'
5)预先把表达式记录成完整的持久化的时间序列,可以加速聚合查询的效率。
新建prometheus.rules文件,并输入如下内容:
job_service:rpc_durations_seconds_count:avg_rate5m = avg(rate(rpc_durations_seconds_count[5m])) by (job, service) 然后配置到prometheus.yml文件中, rule_files: - 'prometheus.rules' 现在,指标名字job_service:rpc_durations_seconds_count:avg_rate5m就是可查询和可以抓取的。 6)Prometheus内置的表达式浏览器 http://localhost:9090/graph 和../metrics,以及可进入表达式console。 允许键入任何的表达式,并查看结果不管是table或随着时间的graphed。 2.Prometheus查询语法 参考网址:https://prometheus.io/docs/querying/basics/ 1)表达式的四种数据类型 Instant vector:包含单一采样的时间序列集合,共享相同的时间戳; Range vector:包含一个区间数据点的时间序列集合; Scalar:数字型的浮点值; String:字符串值,当前未使用。 2)Intant vector时间序列选择器 直接使用指标的name表示选择所有该name的时间序列。添加一个大括号{},指明label和对应value可以进一步过滤该时间序列。Label和value的匹配可以有四种形式: =:选择label的值与value相等的 !=:选择label的值与value不相等的 =~:匹配正则表达式值的 !~:不匹配正则表达式值的 示例查询如下: http_requests_total{job="prometheus",group="canary"} http_requests_total{environment=~"staging|testing|development",method!="GET"} 很明显,可以使用多个label进行多条件的过滤。 3)Range vector时间序列选择器 可以使用的时间区间的单位可以有以下六种: S秒、m分钟、h小时、d天、w星期、y年 表示从当前往前推一段时间之内的指标的值的统计量,示例查询如下: http_requests_total{job="prometheus"}[5m] 主要是在{}之后紧跟一个[5m],进行时间区间的选择。当然可以进行时间基准的向前偏移,这里使用offset,示例查询如下: http_requests_total offset 5m rate(http_requests_total[5m] offset 1w) 4)二元和聚合算子 参考网址:https://prometheus.io/docs/querying/operators/ 二元算术算子:+、-、*、/、%、^(power/exponentiation) 二元比较算子:==、!=、>、<、>=、<= 二元集合算子:and(交集)、or(并集)、unless(补集) 算子使用的语法示例如下: <vector expr> <bin-op> ignoring(<label list>) <vector expr> <vector expr> <bin-op> on(<label list>) <vector expr> 聚合算子类似于SQL中的select中的函数的功能,能够聚合单一的instant vector并产生一个新的有聚合值的更少元素的vector,主要包含以下聚合算子: Sum:每一个维度求和 Min:选择每一维度的最小值 Max:选择每一维度的最大值 Avg:每一维度求平均 Stddev:计算每一个维度的总体标准偏差 Stdvar:计算每一维度的总体标准方差 Count:统计vector中元素的个数 Count_values:统计有相同值元素的个数 Bottomk:相同值最小的k个元素 Topk:相同值最大的k个元素 Quantile:计算每一维度的α-quantile 聚合算子的语法示例如下: <aggr-op>([parameter,] <vector expression>) [without|by (<label list>)] [keep_common] 其示例的代码如下: sum(http_requests_total) without (instance) count_values("version", build_version) topk(5, http_requests_total) 5)函数 对vector中的所有元素的样例值进行处理,或者对vector进行一些逻辑判断并返回符合逻辑的vector或vector的数量。更详细的内容可以查看参考: https://prometheus.io/docs/querying/functions/ 3.常用组件 1)dashboard看板 每一个看板可以认为是一个监控的主题,每个看板有row和panel的概念。Row占一行的空间,每一个row又可以包含最多十二个panel。每一个panel具体显示监控的时间序列指标,显示的方式可以是折线图、饼图等。对于不同的图形可设置的属性不同,大体包括标题、图注、显示样式以及最重要的指标的查询语句和数据源的设置。 随后点击panel的标题,跳出panel的菜单项,点击编辑进入panel的编辑模式。 2)Templating变量 参考网址:http://docs.grafana.org/reference/templating/ 自定义查询语句中可用的变量,其类型可以是query、interval、custom、constant等。其中较为常用的query表示的是指标的查询结果,常用的有label_values(label)、label_values(metric, label)、metric(metric)、query_result(query)。 在panel的query中定义查询语句时,变量的使用有两种写法:$<varname>/[[varname]]。 完成变量的定义之后,会在看板的第一个row之上显示成dropdown下拉列表的形式,通过选择不同的值来动态改变变量的值,从而完成panel中显示指标的差异化。 3)Annotations标注 在某个事件发生时,可以在对应的图上标注点标记,常用来与alert事件关联。首先,在某个具体的panel中定义alert事件,注意alert name的定义。然后选择面板正上方的设置,选择annotations选项,添加一个annotations,这里主要注意Query中Search expression的写法,一种通用的写法是: ALERTS{alertname="per_above_test_alert", alertstate="pending|firing"}其中alertname就是之前定义的alert的name,而之中的alertstate就是在alert的状态是什么的时候出发annotation的标记。以及这里的step表示做标记这个时间隔多长时间出发一次。