普罗米修斯介绍
Prometheus(普罗米修斯)是一套开源的监控系统,其基本原理是通过 HTTP 协议周期性抓取被监控组件的状态,不需要任何 SDK 或者其他的集成过程,其架构如图:
Prometheus 主要由以下部分组成:
- prometheus server: 是 Prometheus 组件中的核心部分,负责实现对监控数据的获取,存储以及查询;
- exporter: 采集端,通过 http 服务的形式保留一个 url 地址,prometheus server 通过访问该 exporter 提供的 endpoint 端点,即可获取到需要采集的监控数据。
- AlertManager: 在 prometheus 中,支持基于 PromQL 创建告警规则,如果满足定义的规则,则会产生一条告警信息,进入 AlertManager 进行处理。可以集成邮件,微信或者通过 webhook 自定义报警。
- Pushgateway: 由于 Prometheus 数据采集采用 pull 方式进行设置的, 内置必须保证 prometheus server 和对应的 exporter 必须通信,当网络情况无法直接满足时,可以使用 pushgateway 来进行中转,可以通过 pushgateway 将内部网络数据主动 push 到 gateway 里面去,而 prometheus 采用 pull方式拉取 pushgateway 中数据
普罗米修斯的数据存储采用的是时间序列数据(TimeSeries Data),它是按照时间顺序记录系统、设备状态变化的数据。
默认情况下 Prometheus 会将采集的数据存储到本机的 /usr/local/prometheus/data
目录,存储数据的大小受限和扩展不便;如果只作为测试自然不需要担心这个问题,如果用于生产的话需要安装配置时序数据库influxdb
。
普罗米修斯使用初体验
在 kubesphere 的安装中,普罗米修斯是配套安装的,前文介绍过kubesphere的安装教程。这里我直接使用现成的Prometheus系统。有安装需求的小伙伴建议使用k8s+helm进行安装。
KubeSphere 通过 NodePort 访问内置的 Prometheus 服务,服务类型更改为 NodePort,同时修改外部访问端口:
1 | kubectl edit svc -n kubesphere-monitoring-system prometheus-k8s |
访问普罗米修斯ip:port
我们可以通过这个操作页面进行一些指令操作,在指令栏输入KEY,它会有联想输入提前弹出你想要的KEY,然后点击执行按钮就能获得对应的监控数据:
metrics:
在普罗米修斯监控中,称采集存储的数据为metrics,在普罗米修斯中它是以 key/value的形式保存的。其主要类型分为以下几种:
- Gauges: 某个监控指标的瞬时值,如内存使用量,队列的等待任务数等。
- Counters: 计数器类型,属于累计值,如开机时常等。
- Histogram:比例型数值,例如请求响应时间占比分布等。
每个key-value 数据还会带上标签进行归类,标签可使用正则表达式进行匹配。
关于普罗米修斯采集到的 key-value 数据 可以访问 http://ip:port/metrics url 进行查看:
以 #
号开头的部分是对采集数值的一个说明,如:
1 | # HELP go_gc_cycles_automatic_gc_cycles_total Count of completed GC cycles generated by the Go runtime. |
HELP 是对这个采集数据的注释,TYPE 表示它的metrics类型为 counter。统计数据是 exporter 提供的,想要采集不同指标的数据 比如mysql 或者kafka 就要使用不同 expoerter 去收集,官方提供了不少exporter:
PQL
对于普罗米修斯的数据,我们不仅限于查看,还能进行一些函数运算:
1 | ## 查询最近2min |
这些语句称为pql,PQL使用”#”对语法进行注释,其常用内置函数有:
- abs: 绝对值
- absent: 判断标签是否存在
- ceil:取整
- sum:求和
- min:最小值
- count:统计
- avg:平均值
- topk:排序
当然我们观察机器的一些数据指标肯定不能通过手写PQL去查看,这样就太累人了。通常我们会结合grafana进行可视化的监控。
grafana 的简介及使用:
grafana 是数据统计和展示工具,它展示数据,但不提供数据。目前Grafana 支持的数据源有:Graphite, InfluxDB, OpenTSDB, Prometheus, Elasticsearch, CloudWatch,Zabbix等。
grafana 相关概念:
- Data Source: 数据源
- DashBoard:仪表盘,数据展示的窗口。
- Row:DashBoard 的基本组成单元,可以理解为数据行
- Panel:面板,实际上就是row展示信息的方式,支持表格(table),列表(alert list),热图(Heatmap)等多种方式。
- Query Editor:查询语句编辑器,用于编写PQL
grafana 部署我这里是采用 KubeSphere 的应用模板进行部署的,傻瓜式的安装,这里就不做太多介绍了,安装完成后界面如下:
然后导入prometheus数据源,Configuration → Data Sources → Prometheus → Select:
查看仪表盘:
当然grafana,还支持自定义仪表盘和查询统计语句,这种高定制化的需求需要对pql和 grafana 都有较深的理解