目录
中文prometheus网站:
英文prometheus网站:
Prometheus(普罗米修斯)是一套由SoundCloud公司开发的开源的监控、报警、时间序列数据库的组合,近几年随着k8s的流行,prometheus成为了一个越来越流行的监控工具,是现在重要的云原生监控平台之一,它允许企业从任何基础设施或应用组件收集和处理指标数据,用于监控容器化工作负载。它以较低的系统资源要求实现了丰富的自定义和灵活的查询。如果需要,它还可以通过一台服务器同时从数千台计算机中获取大量数据。
2、监控原理
Prometheus基本原理是通过HTTP协议周期性抓取被监控组件的状态,这样做的好处是任意组件只要提供HTTP接口就可以接入监控系统,不需要任何SDK或者其他的集成过程。这样做非常适合虚拟化环境比如VM或者Docker 。普罗米修斯由保存在单个服务器上的三个主要组件构成:时间序列数据库、数据检索worker、Web服务器。数据检索worker用于发现Kubernetes中的目标,并从正在进行的作业或用于短期作业的推送网关中获取指标,然后将这些指标推送到数据库,从那里可以通过HTTP访问指标以进行查询和警报。
3、监控指标
它与Kubernetes和云原生生态系统中的其他组件集成,通过监控数据可以帮助企业收集和处理四种类型的指标:
- 计数器(counter):只能增加或重置为零的累积指标。对于完成任务,错误或请求数量之类的措施很有用。
- 量规(gauge):可以增加或减少的时间点指标。对于并发请求或当前内存使用情况等措施很有用。
- 直方图(histogram):一种指标,用于对数据进行采样并将观察结果分类为自定义组。对于诸如请求持续时间,或响应大小之类的聚合指标很有用。它还可以显示Apdex分数,用于评估应用程序的性能和用户满意度。
- 摘要(summary):一种指标标准,可对数据进行采样并返回观测值的总数,值的总和以及观测值的四分位数。普罗米修斯摘要对于获得具有统计意义的四分位数的指标概述非常有用。
4、系统架构
为了稳定运行,普罗米修斯必须将各种组件集成到其架构中。由于它的灵活性,这些组件会因我们的具体实现而异,但是应始终包含以下的元素。架构如下图所示:
- 客户端库:客户端库可以将直接检测添加到服务代码中,然后它会根据普罗米修斯的指标类型返回指标数据,可以用于大多数流行语言包括Go,Java,Python和Ruby。
- 导出器(Exporter):导出器能够从无法添加直接检测的服务和组件中收集数据,例如:数据库、操作系统内核、路由器、云资源。有众多官方支持的导出器以及第三方导出器。导出器与服务同时运行,并充当普罗米修斯与服务之间的代理。这些Exporter接受普罗米修斯请求,从服务中收集数据,将数据转换为正确的格式,然后将其返回给数据检索worker。
- 服务发现:普罗米修斯既可以静态配置指标目标,也可以通过服务发现机制动态定位目标。这样可以确保在整个系统中收集指标,同时涵盖业务流程创建者动态创建,以及停用的所有组件和资源。为了完成服务发现,普罗米修斯允许我们与许多现有方法集成,包括Kubernetes,HashiCorp Consul和所有主要云提供商所使用的方法。
- 抓取(Scraping):在普罗米修斯中,抓取是从端点收集指标的实际过程。当普罗米修斯的数据检索worker通过HTTP发送抓取请求时,即可完成这项操作。当仪器库(instrumentation)或导出器收到这些请求时,将发送包含适当数据的响应。通常,响应还附带特定的抓取数据。该数据可以包括请求花费了多长时间,以及抓取是否成功。
- 存储:普罗米修斯包括在本地磁盘时间序列数据库上的持久存储,还可以通过远程读/写API将其与远程存储集成。在持久性存储中,数据被分为两个小时的块,最终进行压缩。收集数据时,会将其存储在内存中并通过预写日志(WAL)进行记录,以防止由于服务器故障而造成的丢失。
- PromQL:PromQL是一种查询功能的查询语言,用于从普罗米修斯数据库中选择和汇总时间序列数据。
- 记录规则和警报规则:普罗米修斯支持以下两种类型的规则,每种规则基于针对两个不同用例的PromQL查询记录规则会定期评估PromQL表达式,并将结果存储为单独的时间序列。这有助于分发汇总指标所需的工作,并加快计算复杂查询的可视化呈现时间。警报规则再次定义构成警报的条件,就像PromQL查询一样。通过与外部警报工具集成来发出实际警报。普罗米修斯发送规则中定义的PromQL查询的结果,并通过我们首选的通信路径分发这些结果,或者以任何其他方式“处理”警报。用于通知管理员特定情况发生的最常见的警报工具有Slack,PagerDuty,OpsGenie和VictorOps等。
- 仪表板:普罗米修斯能够以几种不同的方式访问所收集时间序列数据的可视化。如可以使用内置的表达式浏览器进行即时查询和调试。但是,对于更广泛的报告,应该使用Grafana,控制台模板或其他能够从普罗米修斯检索数据的可视化工具。
5、功能用途
- 和zabbix类似,prometheus也是一个近年来很火的开源监控框架,和zabbix不同之处在于prometheus相当于来说更灵活点,模块之间比较灵活,比如告警模块,CPU模块等等都可以选择性配置。
- zabbix的客户端agent可以比较方便的通过脚本来读取机器内数据库、日志等文件来做上报。而prometheus的上报客户端则分为不同语言的SDK和不同用途的export两种,就比如说要查看服务器健康状态,CPU状态,内存状态等,有很多的export可以直接开箱使用,通过访问http来对服务器端提供信息上报。
- 界面来说的话zabbix的界面比较陈旧,系统功能比较稳定,成熟度较高,Zabbix采用关系数据库保存,这极大限制了Zabbix采集的性能。反比prometheus的界面比较新而且非常简洁,能够直接一目了然看到服务器的一个整体的状态,而Prometheus自研一套高性能的时序数据库,在V3版本可以达到每秒千万级别的数据存储,通过对接第三方时序数据库扩展历史数据的存储。
6、prometheus的特点
- 多维度数据模型
每个时间序列数据都由metric度量指标和它的标签labels键值对集合唯一确定:这个metric度量指标名称指定目标系统的测量特征。这个查询语言在这些度量和标签列表的基础上进行过滤和聚合。任何度量上的任何标签值,则会形成新的时间序列图。
2.灵活的查询语言:可以对采集的metrics指标进行加法,乘法,连接等操作。
3.可以直接在本地部署,不依赖其他分布式存储;通过基于访问网页http的pull(拉取)方式采集时序数据。
4.可以通过中间网关pushgateway的方式把时间序列数据推送到prometheus server端;可以通过服务发现或者静态配置来发现目标服务对象;有多种可视图像界面,如Grafana等。
7、prometheus工作流程
- prometheus server为核心,用于收集和存储时间。prometheus server可定期从活跃的目标主机上拉取监控指标数据,目标主机的监控数据可通过配置静态job或者服务发现的方式被prometheus server采集到,这种方式默认的pull方式拉取指标。
- Prometheus server把采集到的监控指标数据保存到本地磁盘或者数据库。
- Prometheus采集的监控指标数据按时间序列存储,通过配置报警规则,把触发的报警发送到Alertmanager。
- Alertmanager通过配置报警接收方,发送报警到邮件,微信或者钉钉等。
- Prometheus 自带的web ui界面提供PromQL查询语言,可查询监控数据。
- Grafana可接入prometheus数据源,把监控数据以图形化形式展示出。
8、prometheus安装步骤及命令
首先我们的准备一台linux(版本CentOS7.6)服务器,初始化服务器、配置IP地址(我这边使用CentOS7.6的桥接网络,跟着真机IP地址同一网端)、hostname名称根究自己的需求了选择,时间同步的话(我这边是没有设置时间同步的,根究自己的需求来设置时间同步)。
一、组件说明
1.MetricServer:是 kubernetes 集群资源使用情况的聚合器,收集数据给 kubernetes 集群内使用,如 kubectl,scheduler 等。
2.PrometheusOperator:是一个系统监测和警报工具箱,用来存储监控数据。
3.NodeExporter:用于各 node 的关键度量指标状态数据。
4.KubeStateMetrics:收集 kubernetes集群内资源对象数据,指定告警规则。
5.Prometheus:采用 pull 方式收集 apiserver,sheduler,controller-manager,kubelet 组件数据,通过http协议传输。
6.Grafana:是可视化数据统计和监控平台。
先进入yum本地源继续查看是否有docker源。
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls
我们通过以下的命令就可以下载docker源,基于docker而做,然后在查看有没有docker源,也可以在真机的浏览器进行下载,然后通过xftp进行上传即可。
wget https://download.docker.com/linux/centos/docker-ce.repo
[root@192 yum.repos.d]# wget https://download.docker.com/linux/centos/docker-ce.repo
[root@192 yum.repos.d]# ls
下载docker源所依赖的软件包,并进行下载完成。
[root@192 yum.repos.d]# yum -y install docker-ce
配置docker镜像文件加速,这里我们使用阿里云的镜像文件,使它能够从网上进行进行下拉镜像文件,添加以下内容,然后保存文件即可。
[root@192 yum.repos.d]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://j4def.mirror.aliyuncs.com"]
}
重启docker容器是否重启正常,然后在进行查看docker容器是否正常运行当中,然后在查看docker容器开机自启就可以了。
[root@192 yum.repos.d]# systemctl restart docker
[root@192 yum.repos.d]# systemctl status docker
[root@192 yum.repos.d]# systemctl enable docker
从网上进行下拉镜像文件,并下拉成功镜像文件。
[root@192 yum.repos.d]# docker pull prom/prometheus:latest
查看是否有prometheus镜像文件和查看本地镜像
[root@192 yum.repos.d]# docker images
创建prometheus文件,进入到prometheus文件这个目录当中,然后在prometheus目录下进行编辑vim prometheus.yml文件进行编辑即可。
[root@192 ~]# mkdir -p ~/dockerdata/prometheus
[root@192 ~]# cd dockerdata/prometheus/
[root@192 prometheus]# ls
进入prometheus.yml配置文件当中,添加以下内容到文件当中即可,然后保存即可。
[root@192 prometheus]# vim prometheus.yml
添加配置文件
global:
scrape_interval: 15s
scrape_timeout: 10s
evaluation_interval: 1m
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanagerIp:9093
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
scrape_configs:
- job_name: prometheus
honor_timestamps: true
scrape_interval: 5s
scrape_timeout: 5s
metrics_path: /metrics
scheme: http
follow_redirects: true
static_configs:
- targets:
- localhost:9090
创建容器,并绑定prometheus的yml文件,并在命令当中添加端口号9090,不添加端口9090是访问不到网页的。启动容器。
[root@192 prometheus]# docker run -d --name prometheus -p 9090:9090 -v ~/dockerdata/prometheus/:/etc/prometheus -v ~/dockerdata/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
查看有没有prometheus容器是否正常运行当中
[root@192 prometheus]# docker ps -a
进行网页测试是否通过 prometheus-docker数据采集端访问web原生网页,进行首次登录 http://192.168.0.106:9090IP地址后面要加上端口号才能够进访问到网页。
进行网页测试是否通过 prometheus-docker数据采集端访问,查询Pprometheus一个健康状态是否正常运行要加端口9090以及targets才能够正常访问到prometheus状态情况。如果访问网页是up异常,up异常为红色,这是因为prometheus刚启动,可能要稍微等一下就行了。
Promethrus 集成 Grafana 可视化预览
进行拉取镜像,并拉取镜像成功
[root@localhost prometheus]# docker pull grafana/grafana
启动容器,并添加端口号,并添加名字叫grafana
[root@localhost prometheus]# docker run -d -p 3000:3000 --name=grafana grafana/grafana
[root@localhost prometheus]# docker ps -a
查看容器是否是否出于一个正常的运行状态中
进行网页测试是否通过 prometheus-docker数据采集端访问grafana网页,要加3000端口才能够访问到,不加3000端口是访问不到grafana网页的。
默认的用户名和密码都是admin,登录后会有让你重置密码,新密码根据自己的喜好而选择,还可以输入admin密码。
我这边还是直接输入admin密码,没有改变的,第一次输密码,第二次输入密码跟第一次密码同样即可
下拉被监控主机的镜像,并下拉成功
[root@192 prometheus]# docker pull prom/node-exporter
进来之后就是以下界面,就成功了,然后点击红方块即可,然后点击。
点击第一个,选中prometheus即可
然后输入查看节点正常状态的ip地址即可,ip地址+端口号,其余的设置都不用操作,默认正常即可,然后点击Save&test即可,然后创建完成。
出现以下两个提示,说明已经创建成功了
[root@192 prometheus]# docker run -d -p 19100:9100 --name node-exporter -v "peoc:/host/proc:ro" -v "sys:/host/sys:ro" -v "/:/rootfs:ro" prom/node-exporter
查看node节点的数据
进入到prometheus.yml文件当中,添加第二张图的内容即可,格式要对起,要写入正确,不然后面重启不了的,访问不了网页的。
[root@192 prometheus]# vim prometheus.yml
重启prometheus容器就可以了,然后查看prometheus容器一个是否正常运行即可
[root@192 prometheus]# docker restart prometheus
[root@192 prometheus]# docker ps -a
不断的刷新网页,就可以了,反正我是直接刷新网页即可,然后node-exporter节点就好了
先点击+号,出现了之后,然后在点击import即可
在第一个位置上输入8919即可,然后点击第二个位置上