文章目录
Prometheus相关介绍
官方介绍,非常的清楚:
Prometheus(普罗米修斯)是一个开源的系统监控和报警系统,具有活跃的生态系统。
2016年加入到CNCF基金会(Cloud Native Computing Foundation),成为继k8s之后第二个在CNCF托管的项目。
目前,行业常见的收集监测数据方式主要分为推送(Push)和抓取(Pull)两个模式。以越来越广泛应用的Prometheus监测体系举例,Prometheus监控就是以抓取(Pull)模式运行的典型系统。应用及基础设施的监测数据以OpenMetrics标准接口的形式暴露给Prometheus监控,然后由Prometheus监控进行定期抓取并长期存储。
OpenMetrics,是云原生、高度可扩展的指标协议。 OpenMetrics定义了大规模上报云原生指标的事实标准,并支持文本表示协议和Protocol Buffers协议,文本表示协议在其中更为常见,也是在Prometheus监控进行数据抓取时默认采用的协议。
指标的数据模型由指标(Metric)名,以及一组Key/Value标签(Label)定义的,具有相同的度量名称以及标签属于相同时序集合。
随着时间推移,这些收集起来的采样点数据将在图表上实时绘制动态变化的线条
目前,对于云原生体系下的绝大多数基础组件能够支持OpenMetrics的文本协议格式暴露指标,对于暂不能支持自身暴露指标的组件, Prometheus社区也存在极其丰富的Prometheus Exporter供开发及运维人员使用。这些组件(或Exporter)通过响应来自Prometheus监控的定期抓取请求来及时地将自身的运行状况记录到Prometheus监控以便后续的处理及分析。对于应用开发者,您还可以通过Prometheus监控的多语言SDK,进行代码埋点,将自身的业务指标也接入到上述的Prometheus生态当中。
Docker部署Prometheus说明
-
监控端安装:
Prometheus Server(普罗米修斯监控主服务器 )
Node Exporter (收集Host硬件和操作系统信息)
cAdvisor (负责收集Host上运行的容器信息)
Grafana (展示普罗米修斯监控界面) -
被监控安装:
Node Exporter (收集Host硬件和操作系统信息)
cAdvisor (负责收集Host上运行的容器信息)
安装Prometheus
可以参考:
https://hub.docker.com/r/prom/prometheus
搜索镜像
docker search prom/prometheus
拉取镜像
版本号可以去官网查看:
docker pull prom/prometheus
配置
准备相关挂载目录及配置文件。本文使用/Users/xxx/
路径作为案例,自行按需替换。
# 新建prometheus目录,并
mkdir -p /Users/xxx/prometheus/{data,config,rules}
# 如果需要授权相关文件夹权限,可以参考下面的命令
chmod -R 777 /Users/xxx/prometheus/data
chmod -R 777 /Users/xxx/prometheus/rules
chmod -R 777 /Users/xxx/prometheus/config
# 编辑prometheus.yml文件
cd /Users/xxx/prometheus/config
sudo vim prometheus.yml
内容如下:
global:
scrape_interval: 60s
evaluation_interval: 60s
# 告警规则
rule_files:
# 这里匹配指定目录下所有的.rules文件
- /prometheus/rules/*.rules
scrape_configs:
- job_name: prometheus
static_configs:
# prometheus自带了对自身的exporter监控程序,所以不需额外安装exporter就可配置采集项
- targets: ["111.111.0.88:9090"]
labels:
instance: prometheus
- job_name: node
static_configs:
# 注意,这里的ip需要配宿主机器的ip地址,因为prometheus是通过docker的方式部署的
- targets: ["111.111.0.88:9100"]
labels:
instance: node
prometheus配置项说明
global:全局配置 (如果有内部单独设定,会覆盖这个参数)
alerting:告警插件定义。这里会设定alertmanager这个报警插件
rule_files:告警规则。 按照设定参数进行扫描加载,用于自定义报警规则,其报警媒介和route路由由alertmanager插件实现
scrape_configs:采集配置。配置数据源,包含分组job_name以及具体target。又分为静态配置和服务发现
remote_write:用于远程存储写配置
remote_read:用于远程读配置
Node exporter 安装参考:
启动容器
docker run -d -p 9090:9090 --name prometheus \
-v /etc/localtime:/etc/localtime:ro \
-v /Users/xxx/prometheus/data:/prometheus/data \
-v /Users/xxx/prometheus/config:/etc/prometheus \
-v /Users/xxx/prometheus/rules:/prometheus/rules \
prom/prometheus --config.file=/etc/prometheus/prometheus.yml --web.enable-lifecycle
运行起来后,可以访问:http://localhost:9090/
配置说明:
- config.file:指定配置文件,路径是容器中的路径,不是宿主机中的路径
- web.enable-lifecycle:启动此项后,当配置文件发生变化后,可通过HTTP API 发送 post 请求到 /-/reload,实现热加载,如:
curl -X POST http://localhost:9090/-/reload
- -v /etc/localtime:/etc/localtime:ro 表示让容器使用宿主机的时间, :ro表示只读 (注:此方式只针对宿主机和容器的时区文件均为/etc/localtime);
进入容器
注意:prometheus用的是sh,不是bash。
docker exec -it prometheus sh
遇到的问题
Are you trying to mount a directory onto a file (or vice-versa)?
可以参考下面的文章解决:
[已解决] Mac上docker安装prometheus报错:Are you trying to mount a directory onto a file (or vice-versa)?
其他可能的错误
-
在指定了保存天数–storage.tsdb.retention.time参数后,必须指定–config.file配置文件路径。否则会报以下异常。
level=error msg=“Error loading config (–config.file=prometheus.yml)” err=“open prometheus.yml: no such file or directory” -
Docker容器中的prometheus服务默认是以nobody用户启动的,如果出现权限问题,可以在创建容器时指定root用户,或更改文件权限。
err=“open /prometheus/queries.active: permission denied” -
出现iptables错误,需要重启docker服务:service docker restart
docker0: iptables: No chain/target/match by that name