Docker部署Prometheus

news/2024/5/19 2:02:57 标签: docker, prometheus, 云原生

文章目录

    • Prometheus相关介绍
    • Docker部署Prometheus说明
    • 安装Prometheus
      • 搜索镜像
      • 拉取镜像
      • 配置
      • 启动容器
      • 进入容器
      • 遇到的问题
        • Are you trying to mount a directory onto a file (or vice-versa)?
        • 其他可能的错误

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


http://www.niftyadmin.cn/n/86947.html

相关文章

mysql数据库基础知识

一.mysql基本命令 1.基础常用命令 mysql -uroot -p密码;(也可以不带密码,之后输入) 本地登录 mysql -h 登录ip -p 端口(通常3306) -uroot -p密码; 远程登录 desc 表名;查看表的各个字段的属性,以及自增键 mysqldump -u用户 -p 数据库名 >…

MySQL事务日志

事务日志 事务有4种特性:原子性、一致性、隔离性和持久性。那么事务的四种特性到底是基于什么机制实现呢? 事务的隔离性由锁机制实现。而事务的原子性、一致性和持久性由事务的 redo 日志和undo 日志来保证。 REDO LOG 称为 重做日志 ,提供…

从0探索NLP——导航帖

从0探索NLP——导航帖 人工智能是一个定义宽泛、知识组成复杂的领域,而NLP是人工智能领域中的一类任务,他在哪呢?Emmmmm~不能说都有涉猎只能说全都都沾点: 每次想要针对NLP的某一点进行讲解时,不讲那写细枝末节&…

线程池种类和拒绝策略

1、newCachedThreadPool():可缓存的线程池,核心线程数量为0,最大线程数量为INT_MAX。线程空闲时间超过60秒被回收。适合处理大量小任务。 2、newFixedThreadPool()。固定线程个数的线程池,线程都是核心线程,没有应急线…

吐血整理的网络工程师必懂的26个技术名词,自查一下看看自己知道多少 ?

在做网络工程师的工作时候,虽说那些晦涩难懂的英语以及技术名词很难记 比如我这个英语从不及格的小乐色,但是你会发现很多都会用到,所以多多少少还是要储备一些在脑子里,有点印象就OK了。查起来也方便不是!那么今天咱…

Kaldi语音识别技术(八) ----- 整合HCLG

Kaldi语音识别技术(八) ----- 整合HCLG 文章目录Kaldi语音识别技术(八) ----- 整合HCLGHCLG 概述组合LG.fst可视化 LG.fst组合CLG.fst可视化CLG.fst生成H.fst组合HCLG.fst生成HaCLG.fst生成HCLG.fstHCLG 概述 HCLG min(det(H o min(det(C o min(det(L o G))))) 将…

Jupyter Notebook查看文件

Jupyter Notebook查看文件打开dos输入Jupyter Notebook打开dos 切换到ipynb文件所在路径下 输入Jupyter Notebook Jupyter Notebook看到图片都丢失了,返回上一级的目录。。 先ctrlc停止服务 返回上一级 Jupyter Notebook完美。。。

macOS Big Sur 11.7.4(20g1220)With OpenCore 0.8.9正式版 and winPE双引导分区原版镜像

原文来源于黑果魏叔官网,转载需注明出处。镜像特点完全由黑果魏叔官方制作,针对各种机型进行默认配置,让黑苹果安装不再困难。系统镜像设置为双引导分区,全面去除clover引导分区(如有需要,可以自行直接替换…