2.安装Prometheus

平凡也就两个字: 懒和惰;
成功也就两个字: 苦和勤;
优秀也就两个字: 你和我。
跟着我从0学习JAVA、spring全家桶和linux运维等知识,带你从懵懂少年走向人生巅峰,迎娶白富美!
关注微信公众号【 IT特靠谱 】,每天都会分享技术心得~ 

1.安装Prometheus

        官方提供了三种安装方式:

(1)根据二进制包安装

(2)对源码进行编译后安装

(3)通过Docker容器安装

        详见官网:Installation | Prometheus

 Tip1: 对源码进行编译后可得到二进制安装包,由于二进制安装包的方式安装较简单(步骤1:下载二进制包;步骤2:解压二进制包;步骤3:./prometheus启动),因此本文不采用此方式。

 Tip2:下面以“通过Docker容器安装”方式为例,分别采用Docker和Docker-Compose两种部署方式,对Prometheus的安装步骤进行指导!此两种部署的结果完全一样,视实际情况任选一即可!

 Tip3:截止目前,最新的prometheus镜像TAG为:v2.50.0-rc.1。本文基于此镜像进行操作演示。

 Tip4:本教程是基于Docker和Docker-compose进行安装的,因此需要在服务器上提前安装好Docker和Docker-compose,本教程略。

 Tip5:执行本文中的命令时,应先把所有注释去掉后执行。注释仅仅是为了说明每行命令的作用。

1.1.Docker容器化部署Prometheus

 1.1.1.官方镜像

        镜像仓库地址:prometheus DockerHub

     Tips:镜像启动后,Prometheus默认暴露9090端口(启动时可以通过“--web.listen-address="0.0.0.0:9090"”命令行参数修改其配置)。

1.1.2.前期准备

(1)创建prometheus的配置和数据存放目录:mkdir -p /myPrometheus/data 

(2)修改数据目录权限为777:chmod -R 777 /myPrometheus/data/

1.1.3.获取prometheus自带的配置文件

       若您已经有prometheus.yml配置文件了,则忽略此操作步骤!

        此步骤的目的:将prometheus的镜像运行为容器后,将容器内自带的prometheus.yml配置文件拷贝到宿主机中。后面我们就可以将容器中的prometheus.yml配置文件挂载宿主机的prometheus.yml配置文件,便于开发或运维人员进行参数配置。

(1)启动prometheus

docker run \
    -p 19090:9090 \
    prom/prometheus:v2.50.0-rc.1

(2)将容器内的配置文件拷贝到宿主机中

# 将容器中自带的prometheus.yml配置文件拷贝到宿主机的“/myPrometheus”目录下
docker cp 容器id:/etc/prometheus/prometheus.yml /myPrometheus

(3)停止prometheus容器

docker stop 容器id

        到此为止,我们拿到了prometheus默认的prometheus.yml配置文件了。存放在了“/myPrometheus”目录下。

1.1.4.编写配置文件

        编写prometheus.yml、rule.yml和basic_auth.yml配置文件。并放到“/myPrometheus”目录下。

(1)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:
  - "/etc/prometheus/rule.yml"
  # - "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"
    basic_auth:
      username: admin
      password: abc123
    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ["localhost:9090"]
  - job_name: other-prometheus-job
    honor_timestamps: true
    scrape_interval: 15s
    scrape_timeout: 10s
    metrics_path: /metrics
    scheme: http
    basic_auth:
      username: admin
      password: abc123
    follow_redirects: true
    static_configs:
    - targets:
      - 10.17.0.80:39093
      labels:
        instance: other-prometheus

(2)rule.yml规则配置文件

groups:
# 报警组组名称
- name: hostStatsAlert
  #报警组规则
  rules:
  #告警名称,需唯一
  - alert: target_down_alert
    #promQL表达式
    expr: sum_over_time(up[1m]) == 0
    #满足此表达式持续时间超过for规定的时间才会触发此报警
    for: 1m
    labels:
      #严重级别
      severity: page
    annotations:
      #发出的告警标题
      summary: "摘要:实例 {{ $labels.instance }} 宕机了"
      #发出的告警内容
      description: "描述:实例{{ $labels.instance }} 宕机了"
  - alert: hostCpuUsageAlert
    #promQL表达式
    expr: sum(avg without (cpu)(irate(node_cpu_seconds_total{mode!='idle'}[5m]))) by (instance) > 0.85
    #满足此表达式持续时间超过for规定的时间才会触发此报警
    for: 1m
    labels:
      #严重级别
      severity: page
    annotations:
      #发出的告警标题
      summary: "实例 {{ $labels.instance }} CPU 使用率过高"
      #发出的告警内容
      description: "实例{{ $labels.instance }} CPU 使用率超过 85% (当前值为: {{ $value }})"
  - alert: hostMemUsageAlert
    expr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes)/node_memory_MemTotal_bytes > 0.85
    for: 1m
    labels:
      severity: page
    annotations:
      summary: "实例 {{ $labels.instance }} 内存使用率过高"
      description: "实例 {{ $labels.instance }} 内存使用率 85% (当前值为: {{ $value }})"
  - alert: hostDiskUsageAlert
    expr: ((node_filesystem_size_bytes - node_filesystem_free_bytes ) / node_filesystem_size_bytes ) > 0.30
    for: 5m
    labels:
      severity: middle
    annotations:
      summary: "实例 {{ $labels.instance }} 磁盘空间使用率过高"
      description: "实例 {{ $labels.instance }},挂载点:{{ $labels.mountpoint }} 磁盘空间使用率 30% (当前值为: {{ $value }})"

(3)basic_auth.yml基础认证配置文件

basic_auth_users:
  # 定义一个admin用户,密码为:abc123
  admin: $2a$12$7BanjRgbITIOzEf6pTIULebHs9Ypt0wZAAKxySHjFHNpEHLaPRLYG

1.1.5.通过docker再次启动prometheus服务

(1) 创建名为monitor的网络

#创建名为monitor的网络,默认为bridge模式
docker network create monitor

 (2)启动prometheus

        由于prometheus对系统时间比较敏感,因此启动容器后要保证容器时间的准确性,因此在启动prometheus服务时应将docker容器中的/etc/localtime时间文件挂载到宿主机的时间文件上。

docker run -di  \
    #指定prometheus容器名称
    --name=myPrometheus \
    #将prometheus容器的9090端口绑定到宿主机的19090端口
    -p 19090:9090 \
    #将宿主机的prometheus.yml配置文件挂载到容器中
    -v /myPrometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
    #将宿主机的prometheus.yml配置文件挂载到容器中
    -v /myPrometheus/basic_auth.yml:/etc/prometheus/basic_auth.yml \
    #将宿主机的/prometheus/data数据目录挂载到容器的/prometheus
    -v /myPrometheus/data:/prometheus \
    #挂载时间文件,可保证docker容器的时间与宿主机时间一致
    -v /etc/localtime:/etc/localtime:ro \
    #指定连接的网络名称为monitor
    --network=monitor \
    #指定镜像
    prom/prometheus:v2.50.0-rc.1 \
    #指定命令行参数,会替代Dockerfile中的CMD。指定prometheus的配置文件路径、tsdb数据目录路径、指定基础认证配置文件路径、指定其它命令行参数的值
    "--config.file=/etc/prometheus/prometheus.yml" "--storage.tsdb.path=/prometheus" "--web.config.file=/etc/prometheus/basic_auth.yml" "--query.max-concurrency=30"

        实际在docker容器中执行的是如下命令来启动的prometheus服务:

#启动prometheus服务
./bin/prometheus --config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/prometheus --web.config.file=/etc/prometheus/basic_auth.yml --query.max-concurrency=30

1.1.6.验证prometheus服务

#查看容器启动日志
docker logs 容器id

         查看容器启动日志,若有出现如下日志信息,则表示安装成功。

1.1.7.访问prometheus图形化界面

        prometheus自带了一个Web UI界面,访问地址:http://ip:19090/graph,其中ip根据自己的服务器ip进行调整。

        通过Web UI界面,我们可以:查看prometheus中配置的告警规则、正则告警的记录、查询采集的指标并通过图表可视化显示、查看prometheus服务的命令行参数值和配置信息、查看targets、tsdb的状态等。  

 1.1.8.查看command-flags,验证命令行参数值是否修改成功

        访问地址:http://ip:19090/flags,其中ip根据自己的服务器ip进行调整。

        从下面截图可以看到,“--query.max-concurrency”命令行参数的值成功由20调整为了30。

1.2.Docker-Compose容器化部署Prometheus

1.2.1.官方镜像

        镜像仓库地址:prometheus DockerHub

     Tips:镜像启动后,Prometheus默认暴露9090端口(启动时可以通过“--web.listen-address="0.0.0.0:9090"”命令行参数修改其配置)。

1.2.2.前期准备

(1)创建prometheus的配置和数据存放目录:mkdir -p /myPrometheus/data

(2)修改数据目录权限为777:chmod -R 777 /myPrometheus/data/

1.2.3.获取prometheus自带的配置文件

        若您已经有prometheus.yml配置文件了,则忽略此操作步骤!       

        此步骤的目的:将prometheus的镜像运行为容器后,将容器内自带的prometheus.yml配置文件拷贝到宿主机中。后面我们就可以将容器中的prometheus.yml配置文件挂载宿主机的prometheus.yml配置文件,便于开发或运维人员进行参数配置。

(1)启动prometheus

docker run \
    -p 19090:9090 \
    prom/prometheus:v2.50.0-rc.1

(2)将容器内的配置文件拷贝到宿主机中

# 将容器中自带的prometheus.yml配置文件拷贝到宿主机的“/myPrometheus”目录下
docker cp 容器id:/etc/prometheus/prometheus.yml /myPrometheus

(3)停止prometheus容器

docker stop 容器id

      到此为止,我们拿到了prometheus默认的prometheus.yml配置文件了。存放在了“/myPrometheus”目录下。

1.2.4.编写配置文件

        编写prometheus.yml、rule.yml和basic_auth.yml配置文件。并放到“/myPrometheus”目录下。

(1)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:
  - "/etc/prometheus/rule.yml"
  # - "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"
    basic_auth:
      username: admin
      password: abc123
    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ["localhost:9090"]
  - job_name: other-prometheus-job
    honor_timestamps: true
    scrape_interval: 15s
    scrape_timeout: 10s
    metrics_path: /metrics
    scheme: http
    basic_auth:
      username: admin
      password: abc123
    follow_redirects: true
    static_configs:
    - targets:
      - 10.17.0.80:39093
      labels:
        instance: other-prometheus

(2)rule.yml规则配置文件

groups:
# 报警组组名称
- name: hostStatsAlert
  #报警组规则
  rules:
  #告警名称,需唯一
  - alert: target_down_alert
    #promQL表达式
    expr: sum_over_time(up[1m]) == 0
    #满足此表达式持续时间超过for规定的时间才会触发此报警
    for: 1m
    labels:
      #严重级别
      severity: page
    annotations:
      #发出的告警标题
      summary: "摘要:实例 {{ $labels.instance }} 宕机了"
      #发出的告警内容
      description: "描述:实例{{ $labels.instance }} 宕机了"
  - alert: hostCpuUsageAlert
    #promQL表达式
    expr: sum(avg without (cpu)(irate(node_cpu_seconds_total{mode!='idle'}[5m]))) by (instance) > 0.85
    #满足此表达式持续时间超过for规定的时间才会触发此报警
    for: 1m
    labels:
      #严重级别
      severity: page
    annotations:
      #发出的告警标题
      summary: "实例 {{ $labels.instance }} CPU 使用率过高"
      #发出的告警内容
      description: "实例{{ $labels.instance }} CPU 使用率超过 85% (当前值为: {{ $value }})"
  - alert: hostMemUsageAlert
    expr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes)/node_memory_MemTotal_bytes > 0.85
    for: 1m
    labels:
      severity: page
    annotations:
      summary: "实例 {{ $labels.instance }} 内存使用率过高"
      description: "实例 {{ $labels.instance }} 内存使用率 85% (当前值为: {{ $value }})"
  - alert: hostDiskUsageAlert
    expr: ((node_filesystem_size_bytes - node_filesystem_free_bytes ) / node_filesystem_size_bytes ) > 0.30
    for: 5m
    labels:
      severity: middle
    annotations:
      summary: "实例 {{ $labels.instance }} 磁盘空间使用率过高"
      description: "实例 {{ $labels.instance }},挂载点:{{ $labels.mountpoint }} 磁盘空间使用率 30% (当前值为: {{ $value }})"

(3)basic_auth.yml基础认证配置文件

basic_auth_users:
  # 定义一个admin用户,密码为:abc123
  admin: $2a$12$7BanjRgbITIOzEf6pTIULebHs9Ypt0wZAAKxySHjFHNpEHLaPRLYG

1.2.5.编写docker-compose配置文件

        编写docker-compose-prometheus.yml配置文件,用于编排管理prometheus的docker服务。

        由于prometheus对系统时间比较敏感,因此启动容器后要保证容器时间的准确性,因此在启动prometheus服务时应将docker容器中的/etc/localtime时间文件挂载到宿主机的时间文件上。       

(1)docker-compose-prometheus.yml配置文件内容:

version: '3'
services:
  prometheus:
    restart: always
    #指定prometheus的镜像版本
    image: prom/prometheus:v2.50.0-rc.1
    #容器名称
    container_name: myPrometheus
    volumes:
      #将宿主机的prometheus.yml配置文件挂载到容器中
      - /myPrometheus/prometheus.yml:/etc/prometheus/prometheus.yml
      #将宿主机的basic_auth.yml配置文件挂载到容器中
      - /myPrometheus/basic_auth.yml:/etc/prometheus/basic_auth.yml
      #将宿主机的/prometheus/data数据目录挂载到容器的/prometheus目录
      - /myPrometheus/data:/prometheus
      #挂载时间文件,可保证docker容器的时间与宿主机时间一致
      - /etc/localtime:/etc/localtime:ro \
    #将容器中的9090端口绑定到宿主机的19090端口
    ports:
      - 19090:9090
    #指定容器启动的命令行参数
    command:
      #指定prometheus的配置文件路径
      - --config.file=/etc/prometheus/prometheus.yml
      #指定prometheus的tsdb数据目录路径
      - --storage.tsdb.path=/prometheus
      #指定prometheus的基础认证配置文件路径
      - --web.config.file=/etc/prometheus/basic_auth.yml
      #指定其它命令行参数的值
      - --query.max-concurrency=30
    #指定容器网络
    networks:
      - monitor

#声明网络。网络名称为monitor,bridge桥接驱动模式
networks:
  monitor:
    driver: bridge

1.2.6.通过docker-compose启动prometheus服务

        启动prometheus服务: 

# docker-compose方式启动prometheus
docker-compose -f docker-compose-prometheus.yml up -d

        若需要停止prometheus容器服务,则执行下面命令:

# docker-compose方式停止prometheus
docker-compose -f docker-compose-prometheus.yml down

        实际在docker容器中执行的是如下命令来启动的prometheus服务:

#启动prometheus服务
./bin/prometheus --config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/prometheus --web.config.file=/etc/prometheus/basic_auth.yml --query.max-concurrency=30

1.2.7.验证prometheus服务

#查看容器启动日志
docker-compose -f docker-compose-prometheus.yml logs

         查看容器启动日志,若有出现如下日志信息,则表示安装成功。

1.2.8.访问prometheus图形化界面

        prometheus自带了一个Web UI界面,访问地址:http://ip:19090/graph,其中ip根据自己的服务器ip进行调整。

        通过Web UI界面,我们可以:查看prometheus中配置的告警规则、正则告警的记录、查询采集的指标并通过图表可视化显示、查看prometheus服务的命令行参数值和配置信息、查看targets、tsdb的状态等。  

 1.2.9.查看command-flags,验证命令行参数值是否修改成功

        访问地址:http://ip:19090/flags,其中ip根据自己的服务器ip进行调整。

        从下面截图可以看到,“--query.max-concurrency”命令行参数的值成功由20调整为了30。

1. 安装Prometheus及简单使用 Prometheus启动端口为 9090,可通过 http://localhost:9090/graph 登录。prometheus.yml 是 Prometheus 的配置文件。点击右侧的 Execute,如下,有 Table 和 Graph 两种形式。点击 status --> Targets:里面就是已经监控的节点。点击工具栏中的 Graph,进入如下界面,在搜索框输入要监控的目标。点击 status --> Configuration。访问 localhost:9090/metrics。 阅读详情

相关推荐

Prometheus 安装及应用(内容较全面)

Prometheus普罗米修斯(希腊神话人物) 是一个开源的系统监控和告警系统,在kubernetes容器管理系统中,通常会搭配prometheus进行监控,同时也支持多种exporter采集数据,还支持进行数据上报,Prometheus性能足够支撑上万台规模的集群。为了方便你了解prometheus基本工作原理,还是贴一张从官方获取的图哈:放一张简单点好理解的草图(自己画的,比较好理解,快夸我哈):想要详细了解更多,可以看官方文档、找度娘。

宇宙小神特别萌 5139

Prometheus-2.53.1安装

Prometheus+Grafana安装

qlj062127的博客 1788

【APM】在Kubernetes中,使用Helm安装Prometheus Server 0.73.2(开启远程写入功能)

负责从各个exporter收集时间序列数据,并存储这些数据以便后续查询和分析。它是整个监控系统的核心部分,负责数据的抓取、存储、查询和报警触发的基础数据处理。: 负责处理由Prometheus Server生成的警报,包括去重、分组、路由警报到正确的接收者,并支持多种通知方式(如邮件、短信、聊天工具等)。它确保警报策略的执行,并且具有高可用性设计。

CN_Eden 1139

医学图像中的小目标病灶检测难题:我的硕士研究总结与思考

医学图像中的小目标检测和分割,主要指在CT、MRI、超声等医学影像中识别和分割微小病灶或细小结构。这些小目标通常体积小、边界模糊、特征不明显,却往往是关键病灶,例如肺部小结节、脑微出血、乳腺微钙化等。

weixin_45638136的博客 2370

别再手动折腾了!PICO Unity SDK 一键配置开发环境保姆级教程(含PDC串流调试)

本文详细介绍了PICO Unity SDK的一键配置功能,帮助开发者快速搭建VR开发环境。通过自动化配置流程,大幅减少手动设置时间,提升开发效率。文章还涵盖了PDC串流调试技巧和常见问题解决方案,是PICO VR开发的实用指南。

weixin_30335575的博客 454

别再对着手册发愁了!手把手教你读懂MIPI-DSI初始化命令(以Rockchip平台为例)

本文深入解析MIPI-DSI初始化命令在Rockchip平台的应用,帮助嵌入式工程师快速掌握LCD屏幕调试技巧。从协议基础到实战指南,详细拆解命令格式、DCS与Generic命令的区别,并提供Rockchip平台的调试全流程与高级技巧,解决常见显示问题。

weixin_42519781的博客 263

代号OneNET02 STM32+ESP8266 WIFI系列-第2节-STM32单片机通过ESP8266连接WIFI访问OneNET OTA服务器实现SOTA远程程序升级

第2节-STM32单片机通过ESP8266连接WIFI访问OneNET OTA服务器实现SOTA远程程序升级,这一节主要是实现通过OneNET OTA服务器将需要更新的程序远程下载到STM32单片机,这一节主要是引导程序和应用程序的讲解。

weixin_44862509的博客 1905

计量经济学tempdisagg的python库:年度时序变月度

计量经济学tempdisagg的python库:年度时序变月度

素质云笔记 1530

论文精读-ReTransformer ReRAM-based Processing-in-MemoryArchitecture for Transformer Acceleration

Transformer已经成为一种流行的深度神经网络(DNN)模型,用于神经语言处理(NLP)应用,并在神经机器翻译、实体识别等方面表现出优异的性能。然而,其在自回归解码器中的规模化点积注意机制在推理过程中带来了性能瓶颈。Transformer也是计算和内存密集型的,需要硬件加速解决方案。

a284365的博客 1922

从养殖场到科技前沿:YOLOv11+OpenCV精准计数鸡蛋与鸡

YOLOv11结合OpenCV技术,精准识别和计数鸡蛋与鸡,广泛应用于养殖场、市场监控和自动化包装。通过深度学习与计算机视觉,提升农业生产效率,让智能化管理更简单高效。

专注于深入研究多种编程语言,以实战为导向,逐步拓展开发技能,提升工程化编码和思维能力,展现无敌技术实力。 1207

15张图详解三方支付:总架构、5大核心业务处理流程、备付金管理

用户可以将银行卡与零钱账户绑定,建立银行结算账户与支付账户的连接,然后将银行账户资金充值到零钱账户中,或将零钱账号中的余额提现至绑定的银行卡。因此,用户在A支付机构的零钱一般只能支付给A支付机构的商户,如支付宝的零钱不能支付给微信的商户。这五大业务的协同运作,使得第三方支付机构这一庞大的支付服务平台能够为市场提供卓越的支付能力。到了结算时间,网联会向备付金集中存管账户提交结算指令,在第三方支付机构备付金集中存管账户内完成最终的结算,并将结算结果及额度变动情况通知给第三方支付机构,具体流程如图13所示。

银行信息系统应用架构详解 1044

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

上一篇: 1.Prometheus简介
下一篇: 4.Prometheus数据模型
IT_Most
博客等级 码龄6年 1万+粉丝 95原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT_Most

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值