文章目录
Prometheus概述
Prometheus介绍
- Prometheus是一个最初在SoundCloud上构建的监控系统。自2012年成为社区开源项目,拥有非常活跃的开发人员和用户社区。为强调开源及独立维护,Prometheus于2016年加入云原生云计算基金会(CNCF),成为继Kubernetes之后的第二个托管项目。Prometheus是一个非常优秀的监控工具,准确地说,更是一套监控方案。Prometheus提供了监控数据收集、存储、处理可视化和告警一套完整的监控解决方案。
Prometheus特点
- 多维数据模型:由度量名称和键值对标识的时间序列数据
- PromQL:一种灵活的查询语言,可以利用多维数据完成复杂的查询
- 不依赖分布式存储,单个服务器节点可直接工作
- 基于HTTP的pull方式采集时间序列数据
- 推送时间序列数据通过PushGateway组件支持
- 通过服务发现或静态配置发现目标
- 多种图形模式及仪表盘支持(grafana)
Prometheus架构
- Prometheus Server:收集指标和存储时间序列数据,并提供查询接口
- ClientLibrary:客户端库
- Push Gateway:短期存储指标数据。主要用于临时性的任务
- Exporters:采集已有的第三方服务监控指标并暴露metrics
- Alertmanager:告警
- Web UI:简单的Web控制台
Prometheus数据模型与指标类型
数据模型介绍
- Prometheus从根本上存储的所有数据都是时间序列: 具有时间戳的数据流只属于单个度量指标和该度量指标下的多个标签维度。除了存储时间序列数据外,Prometheus也可以利用查询表达式存储5分钟的返回结果中的时间序列数据
时间序列介绍
- 时间序列数据(TimeSeries Data) : 按照时间顺序记录系统、设备状态变化的数据被称为时序数据。
- 特点:
- 性能好
关系型数据库对于大规模数据的处理性能糟糕。NOSQL可以比较好的处理大规模数据,让依然比不上时间序列数据库。 - 存储成本低
高效的压缩算法,节省存储空间,有效降低IO。
- 时间序列的样本:
- 指标(metric):指标名称和描述当前样本特征的 labelsets;
- 时间戳(timestamp):一个精确到毫秒的时间戳;
- 样本值(value): 一个 folat64 的浮点型数据表示当前样本的值。
指标名称与标签
- 每一条时间序列由指标名称(Metrics Name)以及一组标签(键值对)唯一标识。其中指标的名称(metric name)可以反映被监控样本的含义,指标名称只能由 ASCII 字符、数字、下划线以及冒号组成,同时必须匹配正则表达式
[a-zA-Z_:][a-zA-Z0-9_:]*
。 - 通过使用标签,Prometheus 开启了强大的多维数据模型:对于相同的指标名称,通过不同标签列表的集合,会形成特定的度量维度实例。该查询语言在这些指标和标签列表的基础上进行过滤和聚合。改变任何度量指标上的任何标签值,都会创建新的时间序列。
- 标签的名称只能由 ASCII 字符、数字以及下划线组成并满足正则表达式
[a-zA-Z_][a-zA-Z0-9_]*
。其中以 __ 作为前缀的标签,是系统保留的关键字,只能在系统内部使用。标签的值则可以包含任何 Unicode 编码的字符。 - 格式:
<metric name>{<label name>=<label value>, ...}
指标类型
- Counter(计数器)
- Guage(仪表盘)
- Histogram(直方图)
- Summary(概要)
Prometheus监控Docker实战
Docker部署
- Docker运行Prometheus
docker run -d \
--name=prometheus \
-p 9090:9090 \
-v /tmp/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus
- prometheus.yml
# my global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
- 在网页中查看
Prometheus监控Docker主机
- cAdvisor(Container Advisor)用于收集正在运行的容器资源使用和性能信息
-
Docker运行cAdvisor
docker run -d
–volume=/:/rootfs:ro
–volume=/var/run:/var/run:ro
–volume=/sys:/sys:ro
–volume=/var/lib/docker/:/var/lib/docker:ro
–volume=/dev/disk/:/dev/disk:ro
–publish=8080:8080
–detach=true
–name=cadvisor
google/cadvisor:latest -
访问cAdvisor
-
Prometheus对接cAdvisor
末行添加
vim /tmp/prometheus.yml
- job_name: "docker"
static_configs:
- targets: ['192.168.18.30:8080']
- 重启Prometheus容器
docker restart prometheus
Grafana+Prometheus监控
- 安装Grafana
docker run -d \
--name=grafana \
-p 3000:3000 \
grafana/grafana
- 登录界面操作
- 输入:192.168.18.20:3000
- 默认用户名和密码都是:admin
- 修改新密码自行修改
- 添加Prometheus
- 添加Dashboard