Docker部署Prometheus

Prometheus相关介绍

官方介绍,非常的清楚:

https://prometheus.io/docs/introduction/overview/

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

拉取镜像

版本号可以去官网查看:

https://hub.docker.com/r/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 安装参考:

Mac上安装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)?

其他可能的错误

  1. 在指定了保存天数–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”

  2. Docker容器中的prometheus服务默认是以nobody用户启动的,如果出现权限问题,可以在创建容器时指定root用户,或更改文件权限。
    err=“open /prometheus/queries.active: permission denied”

  3. 出现iptables错误,需要重启docker服务:service docker restart
    docker0: iptables: No chain/target/match by that name

猜你喜欢

转载自blog.csdn.net/u014163312/article/details/129151142