【prometheus学习过程】

ops/2024/10/21 11:48:39/

目录

  • 一、linux服务器监控
    • 常用的监控指标
  • 二、监控docker
    • 1、使用CAdvisor
    • 2.配置prometheus采集docker的样本数据
    • 3.添加触发器
    • 3.添加触发器
  • 三、监控MySQL容器
    • 1.创建普通用户向数据库授予权限
    • 2.Docker部署部署MySQLD Exporter
    • 二进制安装mysqld-exporter
  • 四、进程监控
    • 1、process exporter功能
  • 五、黑盒监控
  • 六、pushgateway
    • 向Pushgateway推送监控数据
    • prometheus 的配置
    • 使用python
    • 使用shell脚本
    • 配置告警规则
  • 七、基于文件的服务发现
    • 一、创建文件
    • 二、配置文件自动发现
  • 八、基于Consul的自动发现
    • 1、二进制安装配置Consul
    • 2.启动consul
    • 3.通过api注册到consul
    • 配置promethues
    • 三、ConsulManger
  • 九、PromQL基础使用
    • 1、PromQL数据类型

一、linux服务器监控

环境介绍:

主机说明
主服务器监控安装prometheus
被监控设备安装node_exporter

被监控设备安装完成后测试:http://192.168.85.133:9100/metrics

然后在监控服务器上的prometheus.yml文件中添加地址:

#node-exporter配置- job_name: 'node-exporter'scrape_interval: 15sstatic_configs:- targets: ['192.168.85.141:9190']labels:instance: Prometheus服务器- targets: ['192.168.85.133:9100']labels:instance: 被监控的服务器 

然后加载配置:

curl -X POST http://192.168.85.141:9090/-/reload

常用的监控指标

cpu采集:
node_cpu_seconds_total

名称含义
node_load1一分钟内cpu负载
node_load5五分钟内cpu负载
node_load1515分钟内cpu负载

内存采集
/proc/meminfo文件
mode_memory_

名称含义
node_memory_MemTotal_bytes内存总大小
node_memory_MemAvailable_bytes空闲可使用的内存大小(=free +buffer+cache)
node_memory_MemFree_bytes空闲物理内存大小
node_memory_SwapFree_bytesnode_memory_SwapFree_bytes
node_memory_SwapTotal_bytesswap内存总大小

磁盘/文件系统采集

名称含义
node_filesystem_avail_bytes空闲磁盘大小,单位字节
node_filesystem_size_bytes磁盘总大小
node _filesystem_files_free空闲inode大小,单位个
node_filesystem_filesinode总大小,单位个

网络采集
node_network_

名称含义
node_network_transmit_bytes_total网络流出流量,单位字节(Byte),/1024/1024=Mb/s
node_network_receive_bytes_total网络流入流量,单位字节(Byte)

二、监控docker

为了能够获取到Docker容器的运行状态,用户可以通过Docker的stats命令获取到当前主机上运行容器的统计信息,可以查看容器的cpu利用率、内存使用量、网络IO总量以及磁盘IO总量等信息。

docker stats

除了使用命令以外,用户还可以通过Docker提供的HTTP API查看容器详细的监控统计信息。

1、使用CAdvisor

CAdvisor是Google开源的一款用于展示和分析容器运行状态的可视化工具。通过在主机上运行CAdvisor用户可以轻松的获取到当前主机上容器的运行统计信息,并以图表的形式向用户展示。

docker run \--volume=/:/rootfs:ro \--volume=/var/run:/var/run:ro \--volume=/sys:/sys:ro \--volume=/var/lib/docker/:/var/lib/docker:ro \--volume=/dev/disk/:/dev/disk:ro \--publish=8080:8080 \--detach=true \--name=cadvisor \--privileged \--device=/dev/kmsg \lagoudocker/cadvisor:v0.37.0

好消息是CAdvisor已经内置了对Prometheus的支持。访问 http://ip地址:8080/metrics 即可获取到标准的Prometheus监控样本输出.

prometheusdocker_92">2.配置prometheus采集docker的样本数据

#修改配置
vim /opt/prometheus/prometheus/prometheus.yml  - job_name: 'cadvisor'scrape_interval: 15sstatic_configs:- targets: ['192.168.85.133:8080']labels:instance: 被监控的docker服务器

3.添加触发器

rule_files:# - "first_rules.yml"# - "second_rules.yml"- "alert.yml"- "rules/*.yml"   #把触发器规则文件写在rulers目录下

3.添加触发器

去grafana创建仪表盘的时候选择11600

11600

三、监控MySQL容器

用docker安装好mysql后:

1.创建普通用户向数据库授予权限

[root@localhost ~]# docker exec -it mysql mysql -uroot -p
mysql> create user 'exporter'@'%' identified by 'redhat' with max_user_connections 3;
mysql> grant process,replication client,select on *.* to 'exporter'@'%';
mysql> flush privileges;

2.Docker部署部署MySQLD Exporter

#下载docker-compose文件
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#给他一个执行权限
chmod +x /usr/local/bin/docker-compose
#查看是否安装成功
docker-compose -version#创建docker-compose目录
mkdir ~/docker-compose
cd  ~/docker-compose
vim docker-compose.yml
version: '3'
services:mysqlexporter:image: prom/mysqld-exporterrestart: alwaysports:- "9104:9104"environment:- DATA_SOURCE_NAME=exporter:redhat@(192.168.85.133:3306)/database#执行安装命令
docker-compose up -d

二进制安装mysqld-exporter

下载地址:https://prometheus.io/download/#mysqld_exporter

可以看别人的这个博客:

测试成功:http://192.168.85.133:9104/metrics

然后再去普罗米修斯的配置文件增加一台监控数据集
使用dashboards:7362

四、进程监控

1、process exporter功能

如果想要对主机的进程进行监控,例如chronyd,sshd等服务进程以及自定义脚本程序运行状态监控。我们使用node exporter就不能实现需求了,此时就需要使用process exporter来做进程状态的监控。
项目地址: https://github.com/ncabatoff/process-exporter

五、黑盒监控

“白盒监控”-需要把对应的Exporter程序安装到被监控的目标主机上,从而实现对主机各种资源及其状态的数据采集工作。
但是由于某些情况下操作技术或其他原因,不是所有的Exporter都能部署到被监控的主机环境中,最典型的例子是监控全国网络质量的稳定性,通常的方法是使用ping操作,对选取的节点进行ICMP测试,此时不可能在他人应用环境中部署相关的Exporter程序。针对这样的应用的场景,Prometheus社区提供了黑盒解决方案,Blackbox Exporter无须安装在被监控的目标环境中,用户只需要将其安装在与Prometheus和被监控目标互通的环境中,通过HTTP、HTTPS、DNS、TCP、ICMP等方式对网络进行探测监控,还可以探测SSL证书过期时间。
Prometheus官方提供的exporter之一,可以提供 http、dns、tcp、icmp的监控数据采集

六、pushgateway

Pushgateway,是Prometheus生态中一个重要工具,使用它的原因主要是:
1、Prometheus 采用pull模式,可能由于不在一个子网或者防火墙原因,导致Prometheus 无法直接拉取各个target数据。
2、在监控业务数据的时候,需要将不同数据汇总,由Prometheus统一收集。
3、当exporter不能满足需要时,也可以通过自定义(python、shell、java)监控我们想要的数据。
由于以上原因,不得不使用pushgateway,但在使用之前,有必要了解一下它的一些弊端:
将多个节点数据汇总到pushgateway,如果pushgateway挂了,受影响比多个target大。.
Prometheus拉取状态up只针对pushgateway,无法做到对每个节点有效。
.Pushgateway可以持久化推送给它的所有监控数据。
因此,即使你的监控已经下线,prometheus还会拉取到旧的监控数据,需要手动清理pushgateway不要的数据。

为了方便,直接前台启动,当然也可以写systemed服务
./pushgateway 

测试:http://192.168.85.141:9091/

向Pushgateway推送监控数据

使用curl:
正常情况我们会使用Client SDK推送数据到pushgateway,但是我们还可以curl调用API来管理,例如:

#提交一条数据到 {job=‘some_job’}
echo "some_metric 3.14" | curl --data-binary @- http://192.168.85.141:9091/metrics/job/some_job
#下面我们加上instance的值
echo "some_metrics 3.14" | curl --data-binary @- http://192.168.85.141:9091/metrics/job/some_job/instance/some_instance
#下面加上标签测试
echo "some_metrics{tag=\"test\"} 3.14" | curl --data-binary @- http://192.168.85.141:9091/metrics/job/some_job/instance/some_instance
#删除某个组下某实例的所有数据
curl -XDELETE http://192.168.85.141:9091/metrics/job/some_job/instance/some_instance
#删除某个组下的所有数据
curl -X DELETE http://192.168.85.141:9091/metrics/job/some_job
#删除所有,需要开启 --web.enable-admin-api
curl -X PUT http://192.168.85.141:9091/api/v1/admin/wipe

prometheus__222">prometheus 的配置

因为 Prometheus 配置 pushgateway 的时候,指定 job 和 instance, 但是它只表示 pushgateway 实例,不能真正表达收集数据的含义。所以在 prometheus 中配置 pushgateway 的时候,需要添加 honor_labels: true 参数, 从而避免收集数据被push本身的 job 和 instance 被覆盖。不加 honor_labels: true ,会取gateway的job和instance,设置了的话会取push过来的数据,job必填,instance没有就为 “” 空字符串.

- job_name: 'pushgateway'honor_labels: truestatic_configs:- targets: ['192.168.85.141:9091']labels:instance: pushgataway

使用python

安装prometheus_client模块

#安装pip
yum insta17 python3-pip
#通过pip安装prometheus_client
pip insta11 prometheus_client

使用shell脚本

例如:监控data数据目录下的文件数量(需求):

#!/bin/bash
file_num=$(ls /root/data/ | wc -l)
echo "data_file_num ${file_num}" | curl --data-binary @- http://192.168.85.141:9091/metrics/job/test_job/instance/test_instance#在写一个定时任务指定时间采集数据
* * * * /bin/sh test.sh >/dev/nu11 2>&1

配置告警规则

例如:当data目录下的文件数量超过5,报警出来.

groups:
- name: /data数据目录超载告警rules:- alert: /data数据目录告警expr: data_file_num > 5for: 1mlabels:severity: warningannotations:summary: "/data数据目录>5, 当前值:{{ $value }}"

重新加载并检查:

curl -X POST http://192.168.85.141:9090/-/reload
./promtool check config prometheus.yml

七、基于文件的服务发现

我们知道在Prometheus 配置文件中可以通过一个static_configs 来配置静态的抓取任务,但是在云环境下,特别是容器环境下,抓取目标地址是经常变动的,所以用静态的方式就不能满足这些场景了,还有特别在很多服务器需要监控时。所以我们需要监控系统能够动态感知这个变化,不可能每次变动都去手动重新配的,为了应对复杂的动态环境,Prometheus也提供了与基设施中的服务发现集成的功能。

一、创建文件

接下来我们来创建一个用于服务发现的目标文件,在与prometheus.yml文件相同目录下面创建一个名为targets.yml的文件,内容如下所示:

[root@localhost prometheus]# mkdir target
[root@localhost prometheus]# cd target/
[root@localhost target]# vim targets.yml- targets: ['localhost:9090']2   labels:3     job: prometheus4 - targets: ['192.168.85.133:8080']5   labels:6     instance: promethues服务器7     job: cadvisor8 - targets: ['192.168.85.133:9100']9   labels:10     instance: 被监控的服务器11     job: node-exporter12 - targets: ['192.168.85.141:9091']13   labels:14     instance: test服务器15     job: pushgateway

二、配置文件自动发现

用于发现的目标文件创建完成后,要让Prometheus能够从上面的 targets.yml文件中自动读取抓取目标,需要在prometheus.yml配置文件中的scrape_configs部分添加如下所示的抓取配置:

scrape_configs:- job_name: "file-sd-test"file_sd_configs:- refresh_interval: 10sfiles:- "target/targets.yml"

重新加载并检查:

curl -X POST http://192.168.85.141:9090/-/reload
./promtool check config prometheus.yml

基于文件的自动发现,可以让我们动态地改变Prometheus的监控目标,而不需要重新启动或重新加载prometheus服务器。

八、基于Consul的自动发现

Consul是由HashiCorp开发的一个支持多数据中心的分布式服务发现和键值对存储服务的开源软件,是一个通用的服务发现和注册中心工具,被大量应用于基于微服务的软件架构当中。
我们通过api将exporter服务注册到Consul,然后配置Prometheus 从 Consul中发现实例。关于Consul本身的使用可以查看官方文档https://learn.hashicorp.com/consul了解更多。

1、二进制安装配置Consul

在页面https://www.consul.io/downloads 下载符合自己系统的安装文件,比如我们这里是Linux系统,使用下面命令下载安装即可.

[root@localhost ~]# unzip consul_1.18.0_linux_amd64.zip 
mv consul /usr/local/bin/

2.启动consul

为了查看更多的日志信息,我们可以在dev模式下运行Consul,如下所示:

consul agent -dev -client 0.0.0.0

启动命令后面使用-client参数指定了客户端绑定的地址,默认为127.0.0.1

测试启动成功没:http://192.168.85.141:8500/

3.通过api注册到consul

接下来,我们要注册服务到 Consul 中,可以通过其提供的 API 标准接口来添加。那么先注册一个测试服务,该测试数据为本机 pushgateway 服务信息,服务地址及端口为 pushgatewayr 默认提供指标数据的地址,执行如下命令:

curl -X PUT -d '{"id": "pushgateway","name": "pushgateway","address": "192.168.85.141","port": 9191,"tags": ["test"],"checks": [{"http": "http://192.168.85.141:9091/metrics", "interval": "5s"}]}'  http://192.168.85.141:8500/v1/agent/service/register#或者使用配置文件的形式将文件内容注册到consul
[root@node1-prome /zpf/k8s/prometheus/docker-prometheus/prometheus/test]$cat consul1.json
{"ID": "node-exporter-75.41","Name": "node-exporter","Tags": ["node-exporter"],"Address": "192.168.75.41","Port": 9100,"Meta": {"app": "spring-boot","team": "appgroup","project": "bigdata"},"EnableTagOverride": false,"Check": {"HTTP": "http://192.168.75.41:9100/metrics","Interval": "10s"},"Weights": {"Passing": 10,"Warning": 1}
}
$curl --request PUT --data @consul1.json http://192.168.75.41:8500/v1/agent/service/register?replace-existing-checks=1
如果要注销掉某个服务,可以通过如下 API 命令操作,例如注销上边添加的 node-exporter 服务.这里的node-exporter事这个注册服务的IDcurl -X PUT http://192.168.85.141:8500/v1/agent/service/deregister/node-exporter#说明一下这里最后的node-exporter是consul中exporter的id.

配置promethues

上面我们通过Consul注册了2个node_exporter服务,接下来我们将配置Prometheus通过Consul来自动发现 node_porter服务。在Prometheus的配置文件 prometheus.yml文件中的scrape_configs 部分添加如下所示的抓取配置:
先备份原来的配置

三、ConsulManger

1、ConsulManager需要依赖consul,请先完成Consul的部署。(暂时最高支持Consul v1.14.5)
地址:https://gitee.com/starsl/ConsulManager

九、PromQL基础使用

PromQL(Prometheus Query Language)是Prometheus自己开发的数据查询DSL语言,语言表现力非常丰富,内置函数很多,在日常数据可视化(Grafana)以及rule告警中都会使用到它。

1、PromQL数据类型

在Prometheus的表达式语言中,PromQL数据类型归类为以下四种:

  • 瞬时向量((instant vector),是指同一时刻的一组时间序列,每个时间序列包含一个样本,所有样本共享相同的时间戳,即每个时序只有一个点。
  • 区间向量(range vector),是指在任何一个时间范围内的一组时间序列,包含每个时间序列随时间变化的一系列数据点,这时每个时序有多个点。
  • 标量(scalar),即纯量数据,一个简单的数字浮点值,只有一个数字,没有时序。
  • 字符串(string),一个目前未被使用的简单字符串值。

http://www.ppmy.cn/ops/15889.html

相关文章

“亚马逊依赖”之下,傲基科技的品牌势能如何提升?

受益于出口政策红利、低人工成本、完善的供应链以及成熟的生产工艺优势,近年来我国家具出口行业迅速发展。 数据显示,我国家具出口规模1995年仅为11.06亿美元,至2023年增至641.96亿美元。随着出口规模持续扩大,相关企业积极走入公…

Frida入门笔记

Frida入门笔记 1.背景1.1 概述1.2 主要功能1.3 应用场景1.4 使用方法 1.背景 Frida 是一款强大的动态代码插桩工具,它允许开发者在运行时对目标应用程序进行实时操作和分析。以下是对 Frida 的详细介绍: 1.1 概述 Frida 是一个跨平台的动态代码插桩框…

openGauss学习笔记-267 openGauss性能调优-TPCC性能调优测试指导-网络配置-网卡多中断队列设置

文章目录 openGauss学习笔记-267 openGauss性能调优-TPCC性能调优测试指导-网络配置-网卡多中断队列设置267.1 操作步骤 openGauss学习笔记-267 openGauss性能调优-TPCC性能调优测试指导-网络配置-网卡多中断队列设置 本章节主要介绍openGauss数据库内核基于鲲鹏服务器和openE…

Day22 SSH远程管理服务

sshd服务,系统自带,默认开机自启运行 云/物理服务器的安全组和防火墙默认放行该端口 软件包:openssh-server(服务端);openssh-client(客户端); 格式:ssh I…

OceanBase 分布式数据库【信创/国产化】- OceanBase 概述

本心、输入输出、结果 文章目录 OceanBase 分布式数据库【信创/国产化】- OceanBase 概述前言OceanBase 数据更新架构高可用高兼容水平扩展低成本实时 HTAP安全可靠OceanBase 分布式数据库【信创/国产化】- OceanBase 概述 编辑 | 简简单单 Online zuozuo 地址 | https://blog.…

车企的数智化“内功”,大模型帮修炼

文|白 鸽 编|王一粟 时隔4年回归的北京车展,遇上了中国智能汽车的热潮。 开年价格战的持续洗礼,不仅让一众中国车企都慌得一批,也让全球巨头特斯拉也面临一季度销量大跌局面。 与此同时,智能汽车还在…

Facebook的社交密码:解锁数字社交的奥秘

在当今社交媒体的浪潮中,Facebook已经成为了全球最大的社交平台,塑造了我们的数字社交生态。但是,它的成功背后到底隐藏着怎样的奥秘?本文将从多个维度深入探讨Facebook如何塑造未来社交媒体的发展趋势,并探索其在全球…

react学习(一)之初始化一个react项目

React 是一个用于构建用户界面(UI)的 JavaScript 库,用户界面由按钮、文本和图像等小单元内容构建而成。React 帮助你把它们组合成可重用、可嵌套的 组件。从 web 端网站到移动端应用,屏幕上的所有内容都可以被分解成组件&#xf…