指标是衡量和描述对象的方式
监控是对指标进行监测和控制
监控指标应满足可量化、标准化、多维度
Flink的metrics有四种类型:
Flink metrics一览:
https://nightlies.apache.org/flink/flink-docs-release-1.13/docs/ops/metrics/#system-metrics
完整的监控链路包括以下功能
Prometheus时序数据分为四种类型:
Flink | Prometheus | Note |
---|---|---|
Counter | Gauge | Prometheus counters cannot be decremented. |
Gauge | Gauge | Only numbers and booleans are supported. |
Histogram | Summary | Quantiles .5, .75, .95, .98, .99 and .999 |
Meter | Gauge | The gauge exports the meter’s rate. |
Prometheus生态的核心组件,负责实现对监控数据的获取,存储以及查询。
Prometheus Server本身就是一个时序数据库(TSDB),将采集到的监控数据按照时间序列的方式存储在本地磁盘当中。
可以向Prometheus提供监控样本数据的程序,Exporter的一个实例被称为一个target,Prometheus通过轮询的方式定期从target中获取样本数据。
范围 | 常用Exporter |
---|---|
数据库 | MySQL Exporter, Redis Exporter, MongoDB Exporter, MSSQL Exporter等 |
硬件 | Apcupsd Exporter,IoT Edison Exporter, IPMI Exporter, Node Exporter等 |
消息队列 | Beanstalkd Exporter, Kafka Exporter, NSQ Exporter, RabbitMQ Exporter等 |
存储 | Ceph Exporter, Gluster Exporter, HDFS Exporter, ScaleIO Exporter等 |
HTTP服务 | Apache Exporter, HAProxy Exporter, Nginx Exporter等 |
API服务 | AWS ECS Exporter, Docker Cloud Exporter, Docker Hub Exporter, GitHub Exporter等 |
日志 | Fluentd Exporter, Grok Exporter等 |
监控系统 | Collectd Exporter, Graphite Exporter, InfluxDB Exporter, Nagios Exporter, SNMP Exporter等 |
其它 | Blockbox Exporter, JIRA Exporter, Jenkins Exporter, Confluence Exporter等 |
Prometheus server以pull模式从Exporter获取指标数据,Pushgateway允许监控目标将指标数据push到pushgateway,再由Prometheus
"The Prometheus Pushgateway allows you to push time series from short-lived service-level batch jobs to an intermediary job which Prometheus can scrape."
"We only recommend using the Pushgateway in certain limited cases. Usually, the only valid use case for the Pushgateway is for capturing the outcome of a service-level batch job."
Prometheus提供的表达式语言用于指标数据的查询和聚合,或者由外部系统通过HTTP API调用
"You can use PromQL to create dashboards using the collected data and point it to an instance of Grafana or a hosted monitoring tool such as OpsRamp that natively supports PromQL."
在 Prometheus 的表达式语言中,表达式或子表达式包括以下四种类型之一:
在最简单的形式中,仅指定指标(metric)名称。这将生成包含此指标名称的所有时间序列的元素的瞬时向量。
http_requests_total{job="prometheus",group="canary"}
http_requests_total{environment=~"staging|testing|development",method!="GET"}
{__name__=~"job:.*"}
http_requests_total{job="prometheus"}[5m]
http_requests_total{method="GET"} offset 5m
rate(http_requests_total[5m] offset 1w)
PromQL支持很多操作符用于运算和聚合操作:
Alertmanager是一个独立的告警模块,接收Prometheus等客户端发来的警报,之后通过分组、删除重复等处理,并将它们通过路由发送给正确的接收器;告警方式可以按照不同的规则发送给不同的模块负责人,Alertmanager支持Email, Slack,等告警方式, 也可以通过webhook接入钉钉等国内IM工具。
Prometheus中的告警规则允许你基于PromQL表达式定义告警触发条件,Prometheus后端对这些触发规则进行周期性计算,当满足触发条件后则会触发告警通知。
一条典型的告警规则如下所示:
groups: - name: example rules: - alert: HighErrorRate expr: job:request_latency_seconds:mean5m{job="myjob"} > 0.5 for: 10m labels: severity: page annotations: summary: High request latency description: description info