[TOC]
一、 介绍
- Prometheus(普罗米修斯)是一套开源的监控&报警&时间序列数据库的组合,起始是由
SoundCloud
公司开发的。随着发展,越来越多公司和组织接受采用Prometheus,社会也十分活跃,他们便将它独立成开源项目,并且有公司来运作。Google SRE的书内也曾提到跟他们BorgMon监控系统相似的实现是Prometheus。现在最常见的Kubernetes容器管理系统中,通常会搭配Prometheus进行监控。 - Prometheus基本原理是通过HTTP协议周期性抓取被监控组件的状态,这样做的好处是任意组件只要提供HTTP接口就可以接入监控系统,不需要任何SDK或者其他的集成过程。这样做非常适合虚拟化环境比如VM或者Docker 。
- Prometheus应该是为数不多的适合Docker、Mesos、Kubernetes环境的监控系统之一。输出被监控组件信息的HTTP接口被叫做exporter 。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux 系统信息 (包括磁盘、内存、CPU、网络等等),具体支持的源看:https://github.com/prometheus
- 与其他监控系统相比,Prometheus的主要特点是:
- 一个多维数据模型(时间序列由指标名称定义和设置键/值尺寸)。
- 非常高效的存储,平均一个采样数据占~3.5bytes左右,320万的时间序列,每30秒采样,保持60天,消耗磁盘大概228G。
- 一种灵活的查询语言。
- 不依赖分布式存储,单个服务器节点。
- 时间集合通过HTTP上的PULL模型进行。
- 通过中间网关支持推送时间。
- 通过服务发现或静态配置发现目标。
- 多种模式的图形和仪表板支持。
二、Prometheus架构
architecture.png- Prometheus server 负责从 Exporter 拉取和存储监控数据,并提供一套灵活的查询语言(PromQL)
- Retrieval: 采样模块
- TSDB: 存储模块默认本地存储为tsdb
- HTTP Server: 提供http接口查询和面板,默认端口为9090
- Exporters/Jobs
负责收集目标对象(host, container…)的性能数据,并通过 HTTP 接口供 Prometheus Server 获取。支持数据库、硬件、消息中间件、存储系统、http服务器、jmx等。只要符合接口格式,就可以被采集。 - Short-lived jobs
瞬时任务的场景,无法通过pull方式拉取,需要使用push方式,与PushGateway搭配使用 - PushGateway
可选组件,主要用于短期的 jobs。由于这类 jobs 存在时间较短,可能在 Prometheus 来 pull 之前就消失了。为此,这次 jobs 可以直接向 Prometheus server 端推送它们的 metrics。这种方式主要用于服务层面的 metrics,对于机器层面的 metrices,需要使用 node exporter。 - 客户端sdk
官方提供的客户端类库有go、java、scala、python、ruby,其他还有很多第三方开发的类库,支持nodejs、php、erlang等 - Alertmanager
从 Prometheus server 端接收到 alerts 后,会进行去除重复数据,分组,并路由到对收的接受方式,发出报警。常见的接收方式有:电子邮件,pagerduty,OpsGenie, webhook 等。 - Service Discovery
服务发现,Prometheus支持多种服务发现机制:文件,DNS,Consul,Kubernetes,OpenStack,EC2等等。基于服务发现的过程并不复杂,通过第三方提供的接口,Prometheus查询到需要监控的Target列表,然后轮训这些Target获取监控数据。
其大概的工作流程是:
- Prometheus server 定期从配置好的 jobs 或者 exporters 中拉 metrics,或者接收来自 Pushgateway 发过来的 metrics,或者从其他的 Prometheus server 中拉 metrics。
- Prometheus server 在本地存储收集到的 metrics,并运行已定义好的 alert.rules,记录新的时间序列或者向 Alertmanager 推送警报。
- Alertmanager 根据配置文件,对接收到的警报进行处理,发出告警。
- 在图形界面中,可视化采集数据。
三、 安装部署
- 下载
https://prometheus.io/download/
image.png
这里选择 windows版 -
解压
解压后的目录
image.png - 启动
点击prometheus.exe
四、各组件监控
以下各种配置,凡是带有exporter的,都需要提前安装
凡是修改的配置都在prometheus.yml文件
- 服务器监控
- job_name: 'node'
static_configs:
- targets: ['192.168.80.130:9100']
labels:
env: test
name: node1
instance: 192.168.80.130
- MySQL监控
- job_name: 'mysqld'
static_configs:
- targets: ['192.168.28.131:9104']
labels:
env: test
name: mysql-5.7
instance: 192.168.28.131:3306
- Elasticsearch监控
- job_name: elasticsearch
scrape_interval: 10s
metrics_path: "/_prometheus/metrics"
static_configs:
- targets: ['192.168.28.130:9200']
labels:
env: test
name: elasticsearch
- Nacos监控
- 配置nacos的application.properties文件,暴露metrics数据
management.endpoints.web.exposure.include=*
- 修改prometheus的配置
- job_name: nacos metrics_path: "/nacos/actuator/prometheus" static_configs: - targets: ['192.168.28.130:8848'] labels: env: test name: nacos instance: 192.168.28.130:8848
- Redis监控
- job_name: redis
static_configs:
- targets: ['192.168.28.130:9121']
labels:
env: test
name: redis
instance: 192.168.28.130:3306
- 微服务监控
通过file_sd_configs进行服务发现的配置,每次json文件的内容发生变更,Prometheus会自动刷新target列表
1. 新建配置服务的json文件
[
{
"targets": [
"127.0.0.1:9900"
],
"labels": {
"job":"spring-boot-service",
"env":"dev",
"application":"api-gateway",
"instance":"127.0.0.1:9900"
}
},
{
"targets": [
"127.0.0.1:8000"
],
"labels": {
"job":"spring-boot-service",
"env":"dev",
"application":"uaa-server",
"instance":"127.0.0.1:8000"
}
},
{
"targets": [
"127.0.0.1:7000"
],
"labels": {
"job":"spring-boot-service",
"env":"dev",
"application":"pscp-user",
"instance":"127.0.0.1:7000"
}
}
]
- 修改prometheus的配置
- job_name: spring-boot-service
metrics_path: "/actuator/prometheus"
file_sd_configs:
- files: ['F:/code/pscp-platform/pscp-tool/prometheus-2.18.1.windows-amd64/*.json']
#这里的路径就是上面新建的json文件
网友评论