当前位置: 首页 > news >正文

监控架构-Prometheus-普罗米修斯

目录

1. Prometheus概述

2. Prometheus vs Zabbix 

3. Prometheus极速上手指南

3.1 时间同步 

3.2 部署Prometheus 

3.3 启动Prometheus

 3.4 Prometheus监控架构

 3.5 补充

 配置页面

简单过滤 

查看数据 

查看图形 

http://prometheus.oldboylinux.cn:9090/metrics显示所有键值

4. Prometheus配置

4.1 服务端命令行选项

4.2 配置文件

5. Prometheus的exporter 

5.1 概述

5.2 部署node_exporter

5.3 配置prometheus服务端

5.4 检查结果

5.5 prometheus动态配置文件 

 6. Prometheus过滤语句

6.1 基本过滤

6.2 包含条件的过滤 

过滤指定主机的数据

 过滤出所有主机非idle的指标.

6.3 小结 

6.4 常用函数 

rate函数

sum求和

count计数

其他函数

6.5 grafana中使用的 PromQL语句 

6.6 复杂语句

7. Pushgateway

7.1 使用流程

7.2 Pushgateway部署 

修改服务端配置文件

检查是否添加成功

7.3 书写脚本与提交数据

提交个测试数据

书写脚本 

检查结果 

脚本写入定时任务 

8. 进入Grafana

8.1 概述

8.2 使用流程 

添加数据源(别忘记hosts解析)

解决仪表盘没有数据 

数据不准

导入第三方仪表盘

9. Altermanager 告警

9.1 Alertmanager部署

9.2 Alertmanager配置

9.3 Prometheus配置

9.4 prometheus告警规则文件

9.5 检查规则

10. 容器监控

10.1 检查

 10.2 接入grafana

1. Prometheus概述

1. Prometheus监控架构。使用Golang语言实现。使用简单,学习门槛较高。

2. Prometheus一般与Grafana配合。

2. Prometheus vs Zabbix 

指标PrometheusZabbix
语言Golang(Go)PHP,C,GO
部署二进制,解压即用yum,编译,数据库,php依赖
是否容易掌握门槛较高容易使用
监控方式通过各种exporter,监控一般都是基于http各种模板,客户端,自定义监控,各种协议
应用场景监控服务,容器,k8s监控系统底层,硬件,系统,网络

3. Prometheus极速上手指南

角色主机名ip
prometheus服务端prometheus_server_xzb10.0.0.65/172.16.1.65
grafanagrafana10.0.0.66/172.16.1.66
docker01docker0110.0.0.81/172.16.1.81

3.1 时间同步 

3.2 部署Prometheus 

##创建目录
mkdir -p /app/##解压
tar xf prometheus-2.33.3.linux-amd64.tar.gz -C /app/##创建软连接
ln -s /app/prometheus-2.33.3.linux-amd64/ /app/prometheus##检查版本
/app/prometheus/prometheus --version
目录说明
prometheusprometheus服务端的命令
prometheus.yml配置文件

3.3 启动Prometheus

##进入目录
cd /app/prometheus##前台启动
./prometheus##查看端口 有9090端口便是启动成功
ss -lntup  ##浏览器解析访问
10.0.0.65 prometheus.oldboylinux.cn

 3.4 Prometheus监控架构

 3.5 补充

注意事项:

prometheus默认读取当前目录下面的prometheus.yml配置文件。

后台启动:

nohup /app/prometheus/prometheus &>> /var/log/prometheus.log &

##systemctl管理
vim /usr/lib/systemd/system/prometheus.service
[Unit]
Description=Prometheus Server
After=network.target[Service]
Type=simple
[Unit]
Description=Prometheus Server
After=network.target[Service]
Type=simple
ExecStart=/app/prometheus/prometheus --config.file=/app/prometheus/prometheus.yml --web.listen-address=0.0.0.0:9090 --web.max-connections=512
KillMode=process[Install]
WantedBy=multi-user.targetKillMode=process[Install]
WantedBy=multi-user.target##重启daemon-reload
systemctl daemon-reload ##关闭prometheus
pkill prometheus##开机自启
systemctl  enable prometheus.service ##启动
systemctl  start  prometheus.service ##查看端口
ss -lntup##查看日志
journalctl -f -u prometheus.service

 配置页面

简单过滤 

查看数据 

查看图形 

http://prometheus.oldboylinux.cn:9090/metrics显示所有键值

http://prometheus.oldboylinux.cn:9090/metrics

4. Prometheus配置

4.1 服务端命令行选项

prometheus命令行核心选项说明
--config.file="prometheus.yml"指定配置文件,默认是当前目录下在的prometheus.yml
--web.listen-address="0.0.0.0:9090"前端web页面,端口和监听的地址。如果想增加访问认证可以用ngx。
--web.max-connections=512并发连接数
--storage.tsdb.path="data/"指定tsdb数据存放目录
--log.level=info日志级别。prometheus日志默认输出到屏幕(标准输出)
--log.format=logfmt日志格式。logfmt默认格式。 json格式(日志收集的时候使用)

4.2 配置文件

##cat prometheus.yml
# my global config 
##全局定义部分
global:scrape_interval: 15s ##这个间隔表示,prometheus采集数据的间隔evaluation_interval: 15s #执行对应的rules(规则)间隔,一般报警规则##采集数据的超时时间,默认是10秒#scrape_timeout is set to the global default (10s).
# Alertmanager configuration  用于配置警告信息,alertmanager配置。
alerting:alertmanagers:- static_configs:- targets:# - alertmanager:9093.
rule_files:# - "first_rules.yml"# - "second_rules.yml"
scrape_configs:##数据采集的配置(客户端)- job_name: "prometheus-server-xzb"  ##任务名字.体现采集哪些机器,哪些指标# metrics_path defaults to '/metrics'# scheme defaults to 'http'.static_configs:##静态配置文件,直接指定被采集的对象. 修改后要重启- targets: ["localhost:9090"]file_sd_configs:##动态配置文件,动态读取文件内容,然后进行采集,实时监控

5. Prometheus的exporter 

5.1 概述

exporter说明
node_exporter获取节点基础信息(系统监控)
服务的exporter监控指定服务的

5.2 部署node_exporter

##创建目录
mkdir -p /app/exports/##解压到指定目录
tar xf node_exporter-1.3.1.linux-amd64.tar.gz -C /app/exports/##创建软连接
ln -s /app/exports/node_exporter-1.3.1.linux-amd64/node_exporter /bin/##启动
node_exporter  &##检查端口和进程  9100 端口
ss -lntup##syatemctl配置
vim /usr/lib/systemd/system/prometheus_node.service
[Unit]
Description=prometheus node_exporter
After=network.target
[Service]
Type=simple
ExecStart=/bin/node_exporter
KillMode=process
[Install]
WantedBy=multi-user.target##重启daemon
systemctl restart daemon-reload

5.3 配置prometheus服务端

## 添加node-exports节点
cat  /app/prometheus/prometheus.yml
global:scrape_interval: 15s evaluation_interval: 15s 
alerting:alertmanagers:- static_configs:- targets:
rule_files:
scrape_configs:- job_name: "prometheus-server-xzb"static_configs:- targets: ["localhost:9090"]- job_name: "prometheus-all-node-exports"static_configs:- targets: - "localhost:9100"- "prometheus.oldboylinux.cn:9100"

5.4 检查结果

5.5 prometheus动态配置文件 

1. 获取的exporter域名+端口,写入配置文件,prometheus可以定时读取并加入到prometheus中。

2. 用于解决,大量主机添加、删除的操作

##增加动态读取
vim   /app/prometheus/prometheus.yml
...
...
scrape_configs:- job_name: "prometheus-server-xzb"static_configs:- targets: ["localhost:9090"]- job_name: "prometheus-all-node-exports"static_configs:- targets: - "localhost:9100"- "prometheus.oldboylinux.cn:9100"file_sd_configs:   ##动态读取与加载配置文件。- files:         ##指定要加载的配置文件- /app/prometheus/discovery_node_exporter.yml  refresh_interval: 5s    ##读取间隔##动态加载的配置文件格式
cat discovery_node_exporter.yml
[{ "targets": [  "localhost:9100","prometheus.oldboylinux.cn:9100"]}
]

 6. Prometheus过滤语句

6.1 基本过滤

1. 直接写上prometheus的键值(key)

2. 比如通过node_exporter获取所有主机可用内存输入node_memory_MemFree_bytes

3. 过滤负载: node_load1

4. 查看所有键值

6.2 包含条件的过滤 

过滤指定主机的数据

node_cpu_seconds_total{instance="prometheus.oldboylinux.cn:9100"}

格式说明,过滤出指定的内容,需要使用{key(属性)="想要的值"}

 过滤出所有主机非idle的指标.

node_cpu_seconds_total{mode!="idle"}

同时满足上面的条件:

node_cpu_seconds_total{mode!="idle",instance="prometheus.oldboylinux.cn:9100"}

6.3 小结 

prometheus过滤中的符号含义
=等于
!=不等于
=~支持正则,匹配
!~支持正则,不匹配

1. 推荐先找出你要的键值,观察键值里面的属性

2. 过滤格式: node_cpu_seconds_total{mode!="idle"}

键值{属性=“值”}

6.4 常用函数 

rate函数

计算范围向量中时间序列的每秒平均增长率。单调性的中断(例如由于目标重新启动而导致的计数器重置)会自动调 整。此外,计算推断到时间范围的末端,允许错过刮擦或刮擦周期与该范围的时间段的不完美对齐。

 rate(http_requests_total{job="api-server"}[5m])

 rate只能与计数器一起使用。它最适合警报和缓慢移动计数器的图形。

##过去一分钟内,系统每秒花费的平均CPU时间
node_cpu_seconds_total[1m]##排除idle
node_cpu_seconds_total{mode!="idle"}[1m]## rate []一般配合函数实现统计指定范围的内容.
rate(node_cpu_seconds_total{mode!="idle"}[1m])

sum求和

计算总和

count计数

其他函数

Query functions | Prometheusicon-default.png?t=O83Ahttps://prometheus.io/docs/prometheus/latest/querying/functions/

6.5 grafana中使用的 PromQL语句 

## 可用内存使用率=用了的/总共的 * 100
((node_memory_MemTotal_bytes{instance="prometheus.oldboylinux.cn:9100", job="prometheus-all-node-exports"}-node_memory_MemFree_bytes{instance="prometheus.oldboylinux.cn:9100", job="prometheus-all-node-exports"})/node_memory_MemTotal_bytes{instance="prometheus.oldboylinux.cn:9100", job="prometheus-all-node-exports"})*100## 内存总大小- 剩余内存 = 用了多少

6.6 复杂语句

##计算内存使用率
(总内存-剩余)/总共
= 可用/总共
((node_memory_MemTotal_bytes-node_memory_MemFree_bytes)/node_memory_MemTotal_bytes)*100

7. Pushgateway

7.1 使用流程

1. 部署,启动pushgateway,服务端ip/域名+端口,写入配置(动态、静态)

2. 书写脚本获取你要的信息,把信息发送到pushgateway中。

7.2 Pushgateway部署 

##创建目录
mkdir -p /app/pushgateway## 解压到指定目录
tar xf pushgateway-1.4.1.linux-amd64.tar.gz -C /app/pushgateway/## 创建软连接
ln -s /app/pushgateway/pushgateway-1.4.1.linux-amd64/pushgateway  /bin/## 书写systemctl配置
cat /usr/lib/systemd/system/pushgateway.service
[Unit]
Description=prometheus pushgateway
After=network.target
[Service]
Type=simple
ExecStart=/bin/pushgateway
KillMode=process
[Install]
WantedBy=multi-user.target## 重启
systemctl daemon-reload## 自启动
systemctl  enable pushgateway.service ##启动
systemctl  start  pushgateway.service ##检查进程和端口 端口9091

修改服务端配置文件

##修改服务端配置文件
cat /app/prometheus/prometheus.yml
...
...
scrape_configs:- job_name: "prometheus-server-xzb"static_configs:- targets: ["localhost:9090"]- job_name: "prometheus-all-node-exports"static_configs:- targets: - "localhost:9100"- "prometheus.oldboylinux.cn:9100"file_sd_configs:- files:- /app/prometheus/discovery_node_exporter.ymlrefresh_interval: 5s- job_name: "prometheus-pushgateway"static_configs:- targets: - "localhost:9091" 

检查是否添加成功

7.3 书写脚本与提交数据

提交个测试数据

##检查cpu核心数
cat /server/scripts/diy_push_cpu_cores.sh
#!bin/bash
#1.vars
cores=`lscpu |grep 'CPU(s)'|awk 'NR==1 {print $2}'`
job="pushgateway_metrics"
ins="prometheus.oldboylinux.cn:9100"
pushgw="http://prometheus.oldboylinux.cn:9091"#2.
echo "cpu_cores $cores"| \
curl --data-binary @- ${pushgw}/metrics/job/${job}/instance/${ins}##写法  ##其中分组名和实例名可以自己设置
curl data-binary @- http://prometheus.oldboylinux.cn:9091/metrics/job/分组名/instance/实例名

书写脚本 

#!/bin/basih
##1.vars
job_name="pushgateway_metrics"
ins="prometheus.oldboylinux.cn:9100"
pushgw="http://prometheus.oldboylinux.cn:9091"#2.取值
disk_sda_root_total=`df |awk '$NR=="/" {print $2}'`
disk_sda_root_free=`df |awk '$NR=="/" {print $4}'`
disk_sda_root_used=`df |awk '$NR=="/" {print $3}'`##想pushgateway发送请求
echo "disk_sda_total ${disk_sda_root_total}"| \
curl --data-binary @- ${pushgw}/metrics/job/${job_name}/instance/${ins}
echo "disk_sda_free ${disk_sda_root_free}"| \
curl --data-binary @- ${pushgw}/metrics/job/${job_name}/instance/${ins}
echo "disk_sda_used ${disk_sda_root_used}"| \
curl --data-binary @- ${pushgw}/metrics/job/${job_name}/instance/${ins}

检查结果 

脚本写入定时任务 

##同步时间
*/2 * * * * /sbin/ntpdate ntp1.aliyun.com  &>/dev/null
##prometheus pushgateway
* * * * *  sh /server/scripts/pushgateway-disk-usage.sh &>/dev/null 

8. 进入Grafana

8.1 概述

1. prometheus webui一般用于调试PromQL语句(查询语句)

2. 展示交给Grafana。本质:Grafana执行PromQL语句(查询语句),然后通过Grafana进行展示

参考文章:

监控架构- Grafana-监控大屏-CSDN博客

8.2 使用流程 

添加数据源(别忘记hosts解析)

解决仪表盘没有数据 

##修改的查询语句主要关注,job部分和instance。
(time()-process_start_time_seconds{instance="prometheus.oldboylinux.cn:9100",job="prometheus-all-node-exports"})

数据不准

(time()-node_boot_time_seconds{instance="prometheus.oldboylinux.cn:9100", job="prometheus-all-node-exports"})##原因:process_start_time_seconds获取的是Prometheus服务端运行多久(进程)

导入第三方仪表盘

9. Altermanager 告警

9.1 Alertmanager部署

##创建目录
mkdir -p /app/altermanager/##解压到指定目录
tar  xf alertmanager-0.24.0.linux-amd64.tar.gz -C /app/altermanager/## 创建软连接
ln -s /app/altermanager/alertmanager-0.24.0.linux-amd64/alertmanager /bin/## systemectl配置书写
[Unit]
Description=prometheus pushgateway
After=network.target
[Service]
Type=simple
ExecStart=/bin/alertmanager --config.file=/app/altermanager/alertmanager-0.24.0.linux-amd64/alertmanager.yml --web.listen-address=0.0.0.0:9093
KillMode=process
[Install]
WantedBy=multi-user.target##检查端口 
ss -lntup|grep alert

9.2 Alertmanager配置

##alertmanager配置详解
global:   ##全局定义部分。配置发件人信息.resolve_timeout:  ##5m dns解析的超时时间.smtp_from:        ##发件人smtp_smarthost:   ##smtp服务器smtp_hello:       ##qq.com 163.com 邮箱厂商smtp_auth_username: ##邮箱名字smtp_auth_password: ##授权码smtp_require_tls:falseroute:  ##配置收件人间隔时间,收件方式group_by: ['alertname'] group_wait: 30sgroup_interval: 5mrepeat_interval: 1h  ##重复告警时间. eg。11:00 发送了1次告警,12:00 再发送1次receiver: 'email' ##采取什么方式接受告警.
##完整的配置文件
global:resolve_timeout: 5msmtp_from: 'xing775288271@163.com'smtp_smarthost: 'smtp.163.com:465'smtp_hello: '163.com'smtp_auth_username: 'xing775288271@163.com'smtp_auth_password: 'THqpcgCf5JqBDmVZ'smtp_require_tls: false
route:group_by: ['alertname']group_wait: 30sgroup_interval: 5mrepeat_interval: 1hreceiver: 'email'
receivers:- name: 'email'email_configs:- to: '775288271@qq.com'send_resolved: true
inhibit_rules:- source_match:severity: 'critical'target_match:severity: 'warning'equal: ['alertname', 'dev', 'instance']

9.3 Prometheus配置

##prometheus服务端配置文件
cat /app/prometheus/prometheus.yml
global:scrape_interval: 15s evaluation_interval: 15s 
alerting:alertmanagers:- static_configs:- targets:- "prometheus.oldboylinux.cn:9093"
rule_files: - "/app/prometheus/prometheus_alert_rules.yml"
scrape_configs:- job_name: "prometheus-server-xzb"static_configs:- targets: ["localhost:9090"]
...
...

9.4 prometheus告警规则文件

##prometheus告警规则文件
vim /app/prometheus/prometheus_alert_rules.yml
groups:- name: check_node_statusrules:- alert: check_node_is_upexpr: up{instance="prometheus.oldboylinux.cn:9100", job="prometheus-all-node-exports"}==0for: 15slabels:severity: 1team: nodeannotations:summary: "{{ $labels.instance }} 节点停止运行超过15s!!!"

9.5 检查规则

10. 容器监控

##监控容器
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  google/cadvisor:latest##prometheus服务端的配置文件
vim /app/prometheus/prometheus.yml
...
...- job_name: "prometheus-pushgateway"static_configs:- targets: - "localhost:9091"- job_name: "cadvisor-docker"static_configs: - targets:- "docker01.oldboylinxu.cn:8080"##hosts解析##重启prometheus

10.1 检查

 10.2 接入grafana

grafana id号:10619

http://www.lryc.cn/news/481264.html

相关文章:

  • Kylin Server V10 下自动安装并配置Kafka
  • windows环境下cmd窗口打开就进入到对应目录,一般人都不知道~
  • 企微SCRM价格解析及其性价比分析
  • 【SpringMVC】记录一次Bug——mvc:resources设置静态资源不过滤导致WEB-INF下的资源无法访问
  • 【React】React 生命周期完全指南
  • 【NLP】使用 SpaCy、ollama 创建用于命名实体识别的合成数据集
  • 【C++练习】二进制到十进制的转换器
  • Vue功能菜单的异步加载、动态渲染
  • 云技术基础学习(一)
  • 【优选算法篇】微位至简,数之恢宏——解构 C++ 位运算中的理与美
  • MFC工控项目实例二十九主对话框调用子对话框设定参数值
  • Java | Leetcode Java题解之第546题移除盒子
  • 【前端】Svelte:响应性声明
  • PostgreSQL 性能优化全方位指南:深度提升数据库效率
  • Flutter鸿蒙next 使用 BLoC 模式进行状态管理详解
  • Gen-RecSys——一个通过生成和大规模语言模型发展起来的推荐系统
  • Android 重新定义一个广播修改系统时间,避免系统时间混乱
  • 第3章:角色扮演提示-Claude应用开发教程
  • 【FAQ】HarmonyOS SDK 闭源开放能力 —Vision Kit
  • 【问题解决】Tomcat由低于8版本升级到高版本使用Tomcat自带连接池报错无法找到表空间的问题
  • Git LFS
  • 基于Redis缓存机制实现高并发接口调试
  • 数字化转型实践:金蝶云星空与钉钉集成提升企业运营效率
  • Flutter 鸿蒙next 中使用 MobX 进行状态管理
  • 1.62亿元!812个项目立项!上海市2024年度“科技创新行动计划”自然科学基金项目立项
  • Redis数据库测试和缓存穿透、雪崩、击穿
  • [vulnhub] DarkHole: 2
  • 《XGBoost算法的原理推导》12-2 t轮迭代中对样本i的预测值 公式解析
  • ./bin/mindieservice_daemon启动成功
  • Linux: network: ip link M-DOWN的具体含义是什么?