Prometheus部署实验服务器分配

主机名             地址                   安装包
prometheus 192.168.80.1    prometheus-2.27.1.linux-amd64.tar.gz
server1    192.168.80.2    node_exporter-1.1.2.linux-amd64.tar.gz
server2    192.168.80.3
server3    192.168.80.4

1.做时间同步

ntpdate ntp1.aliyun.com

2.解压

[root@prometheus ~]# tar zxf prometheus-2.27.1.linux-amd64.tar.gz  -C /usr/local/

3.运行查看端口

[root@prometheus ~]# /usr/local/prometheus-2.27.1.linux-amd64/prometheus
[root@prometheus ~]# ss -antp | grep 9090   #在另一个终端打开查看


4.访问web页面(表达式浏览器)
192.168.80.1:9090


(五)部署监控其他节点
prometheus想要监控其他节点,则需要借助node_exporter,下载地址http://prometheus.io/download/
腾讯云盘prometheus安装包

[root@node1 ~]# tar zxf node_exporter-1.1.2.linux-amd64.tar.gz  -C /opt
[root@node1 ~]# cd /opt/node_exporter-1.1.2.linux-amd64/
[root@node1 node_exporter-1.1.2.linux-amd64]# ls
LICENSE  node_exporter  NOTICE
[root@node1 node_exporter-1.1.2.linux-amd64]# cp node_exporter  /usr/local/bin/
[root@node1 node_exporter-1.1.2.linux-amd64]# ./node_exporter

修改prometheus配置文件

[root@prometheus ~]# vim /usr/local/prometheus-2.27.1.linux-amd64/prometheus.yml


重启

[root@prometheus prometheus-2.27.1.linux-amd64]# ./prometheus


查看node1上的指标数据

(六)表达式浏览器(promQL过滤使用)
1.表达式浏览器常规使用
在prometheusUI控制台上可以进行数据过滤
简单的用法:
#CPU使用总量

node_cpu_seconds_total

计算过去5分钟内的CPU使用速率

PromQL: irate(node_cpu_seconds_total{cpu="0",mode="idle"}[5m])

解析:
irate:速率计算函数(灵敏度非常高)
node_cpu_seconds_total:node节点CPU使用总量(指标)
modd="idle"空闲指标
5m:过去的5分钟内,所有CPU空闲数的样本值,每个数值做速率运算
{ mode=“idle”}:整体称为标签过滤器

每台主机CPU在5分钟内的平均使用率

PromQI:(1-avg(irate(node_cpu_seconds_total{cpu="0",mode="idle"}[5m]))by(instance))*100

解析
avg:平均值
avg (irate (node_cpu_seconds_total{fmode=‘idle’ } [5m]):可以理解为CPU空闲量的百分比
by (instance):表示的是所有节点

(1- avg (irate(node_cpu_seconds_total{(mode='idle'[5m]) )by(instance))* 100:CPU 5分钟内的平均使用率

其他常用的指标:
1、查询1分钟平均负载

node_load1 > on (instance) 2 * count (node_cpu_seconds_total{mode='idle'})by (instance)
node_load5
node_load15
1、5、15分钟的cpu负载
一般来说以上的值不能长时间大于CPU核心数量

2、内存使用率

node_memory_MemTotal_bytes
node_memory_MemFree_bytes
node_memory_Buffers_bytes
node_memory_Cached_ bytes

计算使用率:
可用空间:以上后三个指标之和
己用空间:总空间减去可用空间
使用率:己用空间除以总空间

部署service discovery服务发现
(一)相关概念
1、Prometheus指标抓取的生命周期

                  隐藏敏感数据                    整合多个标签,来进行单个自定义指标数据的输出
发现 -> 配置 -> relabel(重打标签)-> 指标数据抓取 -> metrics relabel

Prometheus的服务发现(基于文件、DNS、consul、k8s等各种主流的服务发现总线)

①基于文件的服务发现;
(定义一组资源"子"配置文件yaml格式 里面只存方需要采集的targets 信息,此种方式可以被pro动态获取到,而不需要重启)
②基于DNS的服务发现;
③基于API的服务发现:Kubernetes、Consul、Azure、重新标记
target重新打标
metric重新打标
④基于K8s的服务发现

2、prometheus 服务发现机制
①Prometheus Server的数据抓取工作于Pull模型,因而,它必需要事先知道各Target的位置,然后才能从相应的Exporter或Instrumentation中抓取数据

②对于小型的系统环境来说,通过static_dpnfigs指定各Target便能解决问题,这也是最简单的配置方法;每个Targets用一个网络端点(ip:port)进行标识;

③对于中大型的系统环境或具有较强动态性的云计算环境来说,静态配置显然难以适用;
因此,Prometheus为此专门设计了一组服务发现机制,以便于能够基于服务注册中心(服务总线)自动发现、检测、分类可被监控的各Target,以及更新发生了变动的Target指标抓取的生命周期

④在每个scrape_interval期间,Prometheus都会检查执行的作业(Job);这些作业首先会根据
Job上指定的发现配置生成target列表,此即服务发现过程;服务发现会返回一个Target列表,其中包含一组称为元数据的标签,这些标签都以" meta_"为前缀;

⑤服务发现还会根据目标配置来设置其它标签,这些标签带有"“前缀和后缀,b包括"scheme”、 " address"和" metrics path_",分别保存有target支持使用协议(http或https,默认为http) 、 target的地址及指标的URI路径(默认为/metrics) ;

⑥若URI路径中存在任何参数,则它们的前缀会设置为" param"这些目标列表和标签会返回给Prometheus,其中的一些标签也可以配置中被覆盖;

⑦配置标签会在抓取的生命周期中被重复利用以生成其他标签,例如,指标上的instance标签的默认值就来自于address标签的值;

⑧对于发现的各目标,Prometheus提供了可以重新标记(relabel)目标的机会,它定义在job配置段的relabel_config配置中,常用于实现如下功能

将来自服务发现的元数据标签中的信息附加到指标的标签上
过滤目标:
#之后便是数据抓取,以及指标返回的过程,抓取而来的指标在保存之前,还允许用户对指标重新打标过滤的方式
#它定义在job配置段的metric_relabel_configs配置中,常用于实现如下功能#册删除不必要的指标
#从指标中册删除敏感或者不需要的标签
#添加、编辑或者修改指标的标签值或标签格式

(二)静态配置发现
修改prometheus服务器上的配置为文件,指定targets的端口上面配置过

- job_name: 'nodes'static_config:- targets:-192.168.80.2:9100-192.168.80.3:9100-192.168.80.4:9100

(三)动态发现
1.基于文件服务发现
192.168.80.1
基于文件的服务发现仅仅略优于静态配置的服务发现方式,它不依赖于任何平台或第三方服务,因而也是最为简单和通用的实现方式。prometheus server定期从文件中加载target信息(pro-server pull指标发现机制-job_name
获取我要pul1的对象target)文件可以只用json和yaml格式,它含有定义的target列表,以及可选的标签信息,以下第一配置,能够将prometheus默认的静态配置转换为基于文件的服务发现时所需的配置;(rometheus会周期性的读取、重载此文件中的配置,从而达到动态发现、更新的操作)

[root@prometheus files_sd]# cat prometheus.yml
# my global config
# Author: MageEdu <mage@magedu.com>
# Repo: http://gitlab.magedu.com/MageEdu/prometheus-configs/
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'.file_sd_configs:- files:                                               - targets/prometheus_*.yaml  refresh_interval: 2m # All nodes- job_name: 'nodes'file_sd_configs:- files:                                               - targets/nodes_*.yaml  refresh_interval: 2m
[root@prometheus targets]# cat nodes_centos.yaml
- targets:- 192.168.80.2:9100- 192.168.80.3:9100labels:app: node-exporterjob: node
[root@prometheus targets]# cat prometheus_server.yaml
- targets:- 192.168.80.1:9090labels:app: prometheusjob:  prometheus

指定yml文件启动

[root@prometheus prometheus-2.27.1.linux-amd64]# ./prometheus --config.file=./files_sd/prometheus.yml


添加192.168.80.4节点
192.168.80.4 node3启动exporter

[root@node3 ~]# tar zxf node_exporter-1.1.2.linux-amd64.tar.gz  -C /opt
[root@node3 ~]# tar zxf node_exporter-1.1.2.linux-amd64.tar.gz  -C /opt
[root@node3 ~]#  cd /opt/node_exporter-1.1.2.linux-amd64/
[root@node3 node_exporter-1.1.2.linux-amd64]# cp node_exporter  /usr/local/bin/
[root@node3 node_exporter-1.1.2.linux-amd64]# ./node_exporter

nodes_centos.yaml 文件添加节点

[root@prometheus targets]# vim nodes_centos.yaml
- targets:- 192.168.80.2:9100- 192.168.80.3:9100- 192.168.80.4:9100labels:app: node-exporterjob: node

4).文件发现的作用
如果增加node或者prometheus服务端节点只需更改nodes_centos.yaml prometheus_server.yaml两个文件添加地址就行,不需要停止服务

2.基于DNS自动发现
基于DNS的服务发现针对一组DNS域名进行定期查询,以发现待监控的目标,查询时使用的DNS服务器的客户端/etc/resolv.conf文件指定;
该发现机制依赖于A、AAAA和SRV资源记录,且仅支持该类方法,尚不支持RFC6763中的高级DNS发现方式。
PS:

SRV: SRV记录的作用是指明某域名下提供的服务。实例:
_http._tcp.example.com.SRV 10 5 80. www.example.comSRV
后面项目的含义:
10 -优先级,类似MX记录
5 -权重
80-端口
www.example.com -实际提供服务的主机名。同时SRV可以指定在端口上对应哪个service
prometheus 基于DNS的服务中的SRV记录,让prometheus发现指定target上对应的端口对应的是exporter或instrumentation。
prometheus以pull形式 以http/https方式,拉取的对应被监控端的指标数据。

3.基于consul发现
1)相关概念
一款基于golang开发的开源工具,主要面向分布式,服务化的系统提供服务注册、服务发现和配置管理的功能,提供服务注册/发现、健康检查、Key/Value存储、多数据中心和分布式一致性保证等功能

原理:通过定义json文件将可以进行数据采集的服务注册到consul中,用于自动发现同时使用prometheus做为client端获取consul上注册的服务,从而进行获取数据

服务器详情

    IP          主机名            服务部署
192.168.80.1    prometheus       prometheus,consul
192.168.80.2    node1            node_exporter
192.168.80.3    node2            node_exporter
192.168.80.4    node3            node_exporter

2)安装consul_1.9.0版本
unzip consul_1.9.0_linux_amd64.zip -d /usr/local/bin

3)启动开发者模式
consul开发者模式,可以快速开启单节点的consul服务,具有完整功能,方便开发测试

[root@prometheus ~]# unzip consul_1.9.0_linux_amd64.zip  -d /usr/local/bin/
[root@prometheus ~]# mkdir -p /consul/data
[root@prometheus ~]# mkdir /etc/consul/ && cd /etc/consul
[root@prometheus consul]# consul agent -dev -ui -data-dir=/consul/data/ \
-config-dir=/etc/consul/ -client=0.0.0.0
agent -dev:运行开发模式
agent -server:运行server模式
-ui:ui界面
-data-dir:数据位置
/etc/consul:可以以文件形式定义各个services的配置,也可以基于api接口直接配置
-client:监听地址

4)编辑/etc/consul目录下的prometheus-servers.json配置文件

[root@prometheus ~]# vim /etc/consul/prometheus-servers.json
{"services": [{"id": "prometheus-server-node01","name": "prom-server-node01","address": "192.168.80.1","port": 9090,"tags": ["prometheus"],"checks": [{"http": "http://192.168.80.1:9090/metrics","interval": "5s"}]}]
}

重载配置文件

[root@prometheus ~]# consul reload
或使用consul service register /etc/consul/prometheus-service.json


5)创建consul自动发现的prometheus.yml文件

cd /usr/local/prometheus
kdir consul-sd && cd consul_sd
cp -p /usr/local/promethues/prometheus.yml  /usr/local/promethues/consul_sd/prometheus.yml
vim prometheus.ym

尾行添加

    consul_sd_configs:- server: "192.168.80.1:8500"tags:- "prometheus"refresh_interval: 2m# All nodes- job_name: 'nodes'consul_sd_configs:- server: "192.168.80.1:8500"tags:- "nodes"refresh_interval: 2m


#指点配置文件启动

cd /usr/local/prometheus/
killall prometheus
./prometheus --config.file=./consul_sd/prometheus.yml
#开启consul服务
consul agent -dev -ui -data-dir=/consul/data/ \
-config-dir=/etc/consul/ -client=0.0.0.0

浏览器访问


6)注册其他node节点
1.在192.168.80.1 /etc/consul/目录下编辑nodes.json文件

[root@prometheus ~]# cd /etc/consul/
[root@prometheus consul]# vim nodes.json
{"services": [{"id": "node_exporter-node01","name": "node01","address": "192.168.80.2","port": 9100,"tags": ["nodes"],"checks": [{"http": "http://192.168.80.2:9100/metrics","interval": "5s"}]},{"id": "node_exporter-node02","name": "node02","address": "192.168.80.3","port": 9100,"tags": ["nodes"],"checks": [{"http": "http://192.168.80.3:9100/metrics","interval": "5s"}]}]
}

重载配置文件

[root@prometheus consul]# consul reload



2 注销consul中的节点,重新加入

consul services deregister xxx.json/-id=web
consul services register /etc/consul/nodes.json     && 或consul reload

基于K8S API的服务发现
prom 基于k8s api的服务发现机制,支持将API server中node、service、endpoint、pod和ingress等资源类型下相应的各资源对象视为target,并持续监视相关资源变化情况(K8S 的api server可自动发现及自动添加)
其中
① node、service、endpoint、pod和ingress资源分别由各自的发现机制进行定义
以node为例,pro监控node可以直接在node节点上部署exporter,也可以直接将kubectl视为监控节点的入口之一
kubectl 内置了cadvisor(容器监控工具)
cadvisor :用来分析运行中的容器的资源占用及其性能特性的工具,同时提供基础查询界面和http接口

② 负责发现每种类型资源对象的组件,在pro中称为一个“role"(role 为每个资源类型独有的一种自动发现机制)
③ 同时支持在集群上基于daemonset控制器部署node-exporter后发现个节点

小结:
服务发现
① 文件定义形式(静态发现高端了一丢丢)
② DNS服务发现:基于SRV记录
③ consul服务发现:利用nodes节点注册到consul,consul暴露出8500端口,给与prometheus进行采集targets(监控端),再到监控端(node_exporter:9100的端口)来pull抓取数据
④ K8S API的服务发现

十一、grafana部署及模板展示
grafana是一款基于go语言开发的通用可视化工具,支持从不同的数据源加载并展示数据,可作为其数据源的部分储存系统如下所示:

TSDB:Prometheus、IfluxDB、OpenTSDB和Graphit
日志和文档存储:Loki和ElasitchSearch
分布式请求跟踪:Zipkin、Jaeger和Tenpo
SQL DB:Mysql、PostgreSQL和Microsoft SQL server
grafana基础默认监听于TCP协议的3000端口,支持集成其他认证服务,且能够通过/metrics输出内建指标;

数据源(Data Source):提供用于展示的数据的储存系统
仪表盘(Dashboard):组织和管理数据的可视化面板(Panel)
团队和用户:提供了面向企业组织层级的管理能力;

(一)centos系统上的部署步骤 (版本7.3.6)

[root@prometheus ~]# yum install grafana-7.3.6-1.x86_64.rpm    //rpm包需上传
[root@prometheus ~]# systemctl start grafana-server
[root@prometheus ~]# ss -antp | grep grafana-server

账号密码默认为admin,admin
grafana默认配置文件目录 /etc/grafana/grafana.ini




data sources ——》prometheus ——》 填写pro节点位置——》dashboard——》选择2.0stat——》展示数据
——》create添加数据
——》① prometheus_http_requests_total 计算来访的总计数据(进行速率计算)
——》② rate(prometheus_http_requests_total[1h]) 计算1小时来访的总计数据
——》③ rate(prometheus_http_requests_total{code!=“200”}[1h]) 计算1小时来访code不等于200的总计数据(进行速率计算)
保留语句,记录我们所关心的项目


添加面板

默认dashboard

网址:https://grafana.com/grafana/dashboards



打标签
(一)重新打标定义(在job上定义)
对target重新打标是在数据抓取之前动态重写target标签的强大工具,在每个数据抓取配置中,可以定义多个relabel步骤,它们将按照定义的顺序依次执行;
对于发现的每个target,Prometheus默认会执行如下操作

job的标签设定为其所属的job name的值;
_address_标签的值为该target的套接字地址":"
instance标签的值为_address_的值;
_scheme_标签的值为抓取该target上指标时使用的协议(http或https) ;
_metrics _path_标签的值为抓取该target上的指标时使用URI路径,默认为/metrics;⑥
param_标签的值为传递的URL参数中第一个名称为的参数的值
重新标记期间,还可以使用该target上以"meta "开头的元标签;

各服务发现机制为其target添加的元标签会有所不同;
重新标记完成后,该target上以""开头的所有标签都会被移除;

若在relabel的过程中需要临时存储标签值,则要使用tmp标签名称为前缀进行保存,以避免同Prometheus的内建标签冲突

(二)relabel config(重新打标配置)
修改标签值、增加删除标签,通过调用不同参数实现自己的需求

source_labels:指定调用哪些已有的标签(可引用多个)在重新打标的时候会将这些标签对应的值给引用/提取并连接起来,例如: cpu指标{host=node1; host=node2 }
target_labels:与source_labels组合使用,可以指定使用哪个已有标签赋值给指定的新标签
separator:对应源标签的标签值使用什么连接符,默认为" ;"
regex:对于源标签,使用哪个正则表达式对源标签进行模式匹配、匹配后可以将对应的结果复制到target上,赋值方式:(引用所有正则表达式的内容进行赋值)
modulus : : hash算法函数
replacement :把目标标签的值改为新的值
action <relabel_action> :表示重新打标的方式是什么,以及要实现什么功能

Prometheus实验部署相关推荐

  1. Prometheus — 安装部署(主机安装)

    目录 文章目录 目录 环境信息 部署 Prometheus Server 部署 Node Exporter 部署 AlertManager 部署 Grafana 添加 Node Exporter 界面 ...

  2. 监控工具—Prometheus—安装部署

    原文作者:虎纠卫 原文地址:监控神器-普罗米修斯Prometheus的安装 目录 步骤1:安装go 语言环境 步骤2:在监控服务器上安装prometheus 步骤3:在系统层用作系统监控 步骤4:安装 ...

  3. Prometheus -Grafana部署及部署告警

    目录 一.prometheus 概述 1.简介 2. 指标类型 3. 作业 job 和实列 targets/instance 4. PrometheusQL(数据查询语言也是时序数据库使用语言) 二. ...

  4. 大数据技术基础实验三:HDFS实验——部署HDFS

    大数据技术基础实验三:HDFS实验--部署HDFS 文章目录 大数据技术基础实验三:HDFS实验--部署HDFS 一.前言 二.实验要求 三.实验原理 1.什么是HDFS? 2.HDFS的体系结构 3 ...

  5. CDN原理以及实验部署操作步骤

    目录 CDN 服务器原理(来源于网络) 一. CDN实验 部署 1) web服务器 1. 安装apache 2. 新添加两块临时网卡 3. 配置    ---基于 ip 的域名解析 2) DNS 服务 ...

  6. 监控 prometheus及其部署及server discovery,alertmanager,grafana(更新结束)

    prometheus 一.常用监控简介 1.cacti 2.Nagios 3.Zabbix zabbix核心组件介绍 4.Prometheus 二.运维监控平台设计思路 三.prometheus监控体 ...

  7. forever不重启 node_运维监控Prometheus,部署安全的node_exporter监控主机

    简介 prometheus监控系统的时候,是使用pull的方式来获取监控数据,需要被监控端监听对应的端口,prometheus从这些端口服务中拉取对应的数据. node_exporter安全性讨论 n ...

  8. 微服务实施笔记(二)——搭建实验部署环境

    上回书为微服务的实施定下了基调,接下来就开干吧. 搭建服务器环境 实验环境使用虚拟机搭建.本次实验需要搭建3台服务器,分别命名为server1.server2和server3.在虚拟机中安装ubunt ...

  9. 广播风暴对比实验部署

    为什么80%的码农都做不了架构师?>>>    编者按:环路广播风暴,如果有环路,数据帧将会在环路中来回传递,大量增生数据帧,形成广播风暴.在SDN中部分控制器可以抑制环路广播风暴的 ...

最新文章

  1. java自动雨刷系统,安装雨量传感器实现自动大灯/自动雨刷(详细方法)多图!!
  2. nacos作注册中心+feign接口调用进行服务提供和服务消费代码示例
  3. Android开发之AlertDialog设置左右边距的间接办法
  4. 【c++算法刷题笔记】——洛谷2
  5. PS图片后期之超简易造光调色方法
  6. linux utmp结构体,Linux C编程如何使用联机帮助来解决编程问题?
  7. 幼儿园带括号算式口诀_幼教必备:幼儿园17首数学儿歌收藏!
  8. 怎么自学python-如何系统地自学 Python?
  9. Mysql数据库内连接INNER JOIN的使用
  10. java标签文本框,Java_3 文本B01.txt:创建带有标签和文本框的窗体 联合开发网 - pudn.com...
  11. 面试必问的 Redis:数据结构和基础概念
  12. word排版的时候如何将论文表格逆时针旋转90度竖放
  13. 如何成为一个精力充沛的程序员——掌控
  14. setBackgroundResource()与setImageBitmap()以及setBackground()的使用
  15. 膨胀卷积dilated convolution 相关
  16. 创建一个8*8的国际象棋棋盘(黑块为0,白块为1)
  17. 压敏电阻MOV特性及选用
  18. 拿番茄炒鸡蛋来讲解一下大数据项目的流程
  19. 【网安神器篇】——Whatweb指纹识别工具
  20. POS与POW都不懂,怎么混币圈?

热门文章

  1. mmWave EVMs Deep Dive(mmWave EVMs深入理解)
  2. “耽改”热中的“腐文化”!为我开启创意者和教育者的,Adobe国际认证旅程
  3. 有关指令集架构与微架构的一些知识
  4. 哈希表及哈希冲突的解决
  5. 使用WPF开发文件加密解密软件
  6. 几种随机算法的实现原理
  7. web前端img命令
  8. 软考知识点---07计算机网络
  9. Uniapp实现快递物流轨迹
  10. MySQL的limit分页,为什么越往后翻越慢,怎么解决?