Prometheus安装教程

news/2024/5/18 22:21:44 标签: 运维, Prometheus, 监控

Prometheuscenter_0">
Prometheus安装教程

欢迎关注H寻梦人公众号

image-20210113113528512

参考目录

相关链接

  • docker安装openjdk版本
  • Docker部署jar包运行
  • docker运行jar文件

1、创建配置挂载目录

mkdir /data/prometheus

mkdir /data/prometheus/config

mkdir /data/prometheus/data

chmod 777 -R /data/prometheus

2、创建编辑配置文件

cd /data/prometheus/config
touch prometheus.yml
vim prometheus.yml

目录结构

1588227202079

# 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: ['192.168.1.190:9091']
    
    
    
    
    
# 192.168.1.190 上的prometheus配置:
# my global config
global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 30s # 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: ['192.168.1.190:9091']

  - job_name: 'node-exproter'
    static_configs:
      - targets: ['192.168.1.190:9100']
        labels:
          instance: 'localhost'


  - job_name: 'snmp-exproter'
    # metrics_path: '/metrics'
    static_configs:
      - targets: ['192.168.1.110:8999']
        labels:
          instance: 'snmp'


  - job_name: 'snmp-f5'
    # metrics_path: '/metrics'
    static_configs:
      - targets: ['192.168.1.110:8991']
        labels:
          instance: 'snmp-f5'

  - job_name: 'snmp-f5-mutli'
    # metrics_path: '/metrics'
    scrape_interval: 30s # 会覆盖全局配置
    scrape_timeout: 20s
    static_configs:
      - targets: ['192.168.1.106:8999']
        labels:
          instance: 'snmp-f5-multi'

  - job_name: 'pushgateway'
    metrics_path: '/metrics'
    scrape_interval: 30s # 会覆盖全局配置
    honor_labels: true  #加上此配置exporter节点上传数据中的一些标签将不会被pushgateway节点的相同标签覆盖
    static_configs:
      - targets: ['192.168.1.190:9092']
        labels:
          instance: 'pushgateway'

3、启动容器

docker run -p 9091:9090 -e TZ=Asia/Shanghai -v /data/prometheus/config/prometheus.yml:/etc/prometheus/prometheus.yml -v /data/prometheus/data:/data -d --name my_prometheus prom/prometheus
docker run  -d \
  -e TZ=Asia/Shanghai \
  -p 9091:9090 \
  -v /data/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml  \
  prom/prometheus

访问url:

http://192.168.91.132:9090/graph

效果如下:

1588130559566

访问targets,url如下:

http://192.168.1.190:9091/targets

效果如下:

1588130386405

如果状态没有UP起来,等待一会,就会UP了

hint: 注意要开启指定的端口,以及定义任务的时候要配置指定target的ip

4、使用Node-Exproter作为监控对象

docker pull prom/node-exporter

docker run -d -p 9100:9100 \
  -e TZ=Asia/Shanghai \
  -v "/prometheus/node-exproter/proc:/host/proc:ro" \
  -v "/prometheus/node-exproter/sys:/host/sys:ro" \
  -v "/prometheus/node-exproter/rootfs:/rootfs:ro" \
  --net="host" \
  --name "my_node-exproter" \
  prom/node-exporter

5、使用grafana数据展示

# 拉去镜像
docker pull grafana/grafana

# 新建空文件夹grafana,用来存储数据
mkdir -p /data/grafana

# 设置权限
chmod 777 -R /data/grafana
# 因为grafana用户会在这个目录写入文件,直接设置777,比较简单粗暴!

# 启动grafana
docker run -d \
  -e TZ=Asia/Shanghai \
  -p 3000:3000 \
  --name=my_grafana \
  -v /data/grafana:/var/lib/grafana \
  grafana/grafana

Prometheus_248">6、Prometheus进阶

6.1 Expoter

广义上讲所有可以向Prometheus提供监控样本数据的程序都可以被称为一个Exporter。而Exporter的一个实例称为target,如下所示,Prometheus通过轮询的方式定期从这些target中获取样本数据:

image-20210112232600199

从Exporter的来源上来讲,主要分为两类:

  • 社区提供的

Prometheus社区提供了丰富的Exporter实现,涵盖了从基础设施,中间件以及网络等各个方面的监控功能。这些Exporter可以实现大部分通用的监控需求。下表列举一些社区中常用的Exporter:

范围常用Exporter
数据库MySQL Exporter, Redis Exporter, MongoDB Exporter, MSSQL Exporter等
硬件Apcupsd Exporter,IoT Edison Exporter, IPMI Exporter, Node Exporter等
消息队列Beanstalkd Exporter, Kafka Exporter, NSQ Exporter, RabbitMQ Exporter等
存储Ceph Exporter, Gluster Exporter, HDFS Exporter, ScaleIO Exporter等
HTTP服务Apache Exporter, HAProxy Exporter, Nginx Exporter等
API服务AWS ECS Exporter, Docker Cloud Exporter, Docker Hub Exporter, GitHub Exporter等
日志Fluentd Exporter, Grok Exporter等
监控系统Collectd Exporter, Graphite Exporter, InfluxDB Exporter, Nagios Exporter, SNMP Exporter等
其它Blockbox Exporter, JIRA Exporter, Jenkins Exporter, Confluence Exporter等
  • 用户自定义的

除了直接使用社区提供的Exporter程序以外,用户还可以基于Prometheus提供的Client Library创建自己的Exporter程序,目前Promthues社区官方提供了对以下编程语言的支持:Go、Java/Scala、Python、Ruby。同时还有第三方实现的如:Bash、C++、Common Lisp、Erlang,、Haskeel、Lua、Node.js、PHP、Rust等。

Exporter规范

所有的Exporter程序都需要按照Prometheus的规范,返回监控的样本数据。以Node Exporter为例,当访问/metrics地址时会返回以下内容:

# HELP node_cpu Seconds the cpus spent in each mode.
# TYPE node_cpu counter
node_cpu{cpu="cpu0",mode="idle"} 362812.7890625
# HELP node_load1 1m load average.
# TYPE node_load1 gauge
node_load1 3.0703125

这是一种基于文本的格式规范,在Prometheus 2.0之前的版本还支持Protocol buffer规范。相比于Protocol buffer文本具有更好的可读性,以及跨平台性。Prometheus 2.0的版本也已经不再支持Protocol buffer,这里就不对Protocol buffer规范做详细的阐述。

Prometheus_297">6.2 Prometheus采集数据的推拉模式

Prometheus_299">Prometheus架构图:

image-20210113000129284

PULL:prometheus 用 pull 这种主动拉取的方式 (HTTP GET) 去访问每个节点上 exporter 并采样回需要的数据

PUSH:指的是 在客户端 ( 或者服务器 ) 安装 Pushgateway 插件,然后使用我们运维自行开发的各种脚本,把监控数据组织成 key/value 的形式,或者 metrics 形式发送给 Pushgateway,之后由 Pushgateway 再推送给 prometheus【这里其实使用的也是PULL的模式,不过现在prometheus不用再直接去拉各个Expoter,因为这些Expoter已经把数据都推到了Pushgateway上,prometheus只要去拉取Pushgateway上面的数据即可获取到所有Target的数据,从而间接的形成一种PUSH模式】


Prometheus推荐使用Pull模式,但是也支持Push模式。Pull还是Push,主要的区别在于数据搜集的主体执行者:

  • Pull模式:由Prometheus Server根据配置,定期从提供监控数据地址去 “Pull” 相应的监控对象数据,比如从Node Exporter那里获取节点的监控信息。
  • Push模式:从数据的流向的发起来看是从监控对象侧进行主动的数据提供,但是是通过pushgateway作为中间代理的角色,这种模式下增加了pushgateway的角色,首先由监控对象侧将数据发给pushgateway,然后Prometheus Server定期从pushgateway处获取相应的数据。

image-20210113000401743

Pushgateway 是 Prometheus 生态中一个重要工具,使用它的原因主要是:

  • Prometheus 采用 pull 模式,可能由于不在一个子网或者防火墙原因,导致 Prometheus 无法直接拉取各个 target 数据。
  • 监控业务数据的时候,需要将不同数据汇总, 由 Prometheus 统一收集。

由于以上原因,不得不使用 pushgateway,但在使用之前,有必要了解一下它的一些弊端:

  • 将多个节点数据汇总到 pushgateway, 如果 pushgateway 挂了,受影响比多个 target 大。
  • Prometheus 拉取状态 up 只针对 pushgateway, 无法做到对每个节点有效。
  • Pushgateway 可以持久化推送给它的所有监控数据。

因此,即使你的监控已经下线,prometheus 还会拉取到旧的监控数据,需要手动清理 pushgateway 不要的数据。

PUSH模式

image-20210113000218110

Prometheus_339">6.3 Prometheus的服务发现方式

通常Prometheus 要增加一个target,需要在配置文件中已添加一个job,例如下:

- job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

每次修改需要直接修改服务器上的配置文件,非常麻烦。

Prometheus也提供了服务发现功能,可以从consul,dns,kubernetes,file等等多种来源发现新的目标。

相关连接

6.4 AlertManager监控告警

监控数据达到一个阈值,prometheus 会把报警信息推送到 Altermanager 软件上,Altermanager 再次推送到报警平台。

但是 Altermanager 的报警功能有很多不足,可以采用 Grafana 4.0 以后提供的报警功能来替代 Altermanager。

实现方案:

  • prometheus+grafana+alertmanger

Zabbix的使用

  • https://www.cnblogs.com/zoulongbin/p/7792772.html
  • https://www.jianshu.com/p/693d8bc81777
  • https://blog.csdn.net/weixin_42743410/article/details/81482728

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

相关文章

蓝桥网 历届试题 地宫取宝 dfs记忆化搜索

历届试题 地宫取宝 时间限制&#xff1a;1.0s 内存限制&#xff1a;256.0MB问题描述X 国王有一个地宫宝库。是 n x m 个格子的矩阵。每个格子放一件宝贝。每个宝贝贴着价值标签。地宫的入口在左上角&#xff0c;出口在右下角。小明被带到地宫的入口&#xff0c;国王要求他只…

网站验收新标准:所有颜色均可以在可视化后台修改

在大部分用户的概念中&#xff0c;定制网站比起比尔云标准化模板建站要高大上&#xff0c;但阅读完本文后&#xff0c;或许你会认识到这是一种不太科学的认识!为什么?请问你的网站上 “这个蓝色需要调整&#xff0c;我觉得浅了一点”&#xff0c;于是乎网络公司的前端调整了cs…

PHP使用技巧

静态调用的成员一定要定义成 static (PHP5 ONLY) 贴士&#xff1a;PHP 5 引入了静态成员的概念&#xff0c;作用和 PHP 4 的函数内部静态变量一致&#xff0c;但前者是作为类的成员来使用。静态变量和 Ruby 的类变量(class variable)差不多&#xff0c;所有类的实例共享同一个…

Linux安装Anaconda3完整教程

Linux安装Anaconda3完整教程欢迎关注H寻梦人公众号 相关链接 官方安装Anaconda3教程 【手把手教你】如何在Linux系统搭建jupyter notebook CentOS8.2安装JupyterLab jupyter的安装扩展了nbextensions&#xff0c;解决了官网下载速度慢的问题,Jupyter 下载链接 Linux下远程…

sshLooter - 窃取SSH密码的脚本

sshLooter是一个Python脚本&#xff0c;它使用PAM模块通过记录密码来窃取SSH密码&#xff0c;并在用户登录时通过Telegram通知脚本管理员&#xff0c;而不是通过不太可靠的strace。 def check_pw(user,password):"""Check the password matches local unix pass…

蓝桥网 - 历届试题 城市建设

历届试题 城市建设 时间限制&#xff1a;1.0s 内存限制&#xff1a;256.0MB问题描述栋栋居住在一个繁华的C市中&#xff0c;然而&#xff0c;这个城市的道路大都年久失修。市长准备重新修一些路以方便市民&#xff0c;于是找到了栋栋&#xff0c;希望栋栋能帮助他。C市中有n…

RabbitMQ大揭秘

RabbitMQ大揭秘欢迎关注H寻梦人公众号 通过SpringBoot整合RabbitMQ的案例来说明&#xff0c;RabbitMQ相关的各个属性以及使用方式&#xff1b;并通过相关源码深刻理解。 Queue(消息队列) Queue(消息队列) 用来保存消息直到发送给消费者。它是消息的容器&#xff0c;也是消息的…

见到了仰慕已久的李建忠老师

今天不知道是什么黄道吉日&#xff0c;上午图灵出版社送了我本书&#xff0c;下午又见到了仰慕已久的李建忠老师。 知道李建忠老师&#xff0c;源于《.NET框架程序设计》&#xff0c;至今我也认为是最好的一本.NET书籍。一本翻译的图书&#xff0c;竟然能让我对译者有这么深刻的…