k8s:Prometheus+grafana+alertmanager
AI关键字:
生成详细步骤:k8s集群中配置prometheus,grafana,alertmanager,并解释代码含义
架构图


prometheus监控架构
prometheus是使用golang语言实现的。
一般与grafana搭配使用。
prometheus 获取监控指标数据
grafana 负责图形化友好的展示数据给用户
官网&架构图
https://prometheus.io/docs/introduction/overview/

说明
prometheus server:服务器
retrieval:收集器
TSDB:时序数据库,基于 时间序列 的数据库
HTTP server:提供简单的 web服务
HDD/SSD:底层可以运行在HDD机械硬盘、SSD
Prometheus targets:在被prometheus监控的主机上部署各种exporter(相当于客户端)
pull metrics:拉取 监控项、指标


AlertManager:告警插件
push alerts:发送警告
pagerduty:第三方告警平台
Data visualization and export:数据展示、数据可视化
Prometheus web UI: 前端页面,查看当前实时数据,不推荐用它做数据展示(不方便)
grafana:常用搭配
API clients:prometheus提供的api接口,用于访问数据,二次开发的时候调用
PromQL:查询语句,获取prometheus监控数据,供前端展示
Pushgateway:不方便安装(无法安装)exporter时使用,让客户端主动把数据发送给pushgateway,pushgateway再将数据发送给Prometheus。客户端发送数据给push网关,然后pushgateway发送数据给服务器。
Service discovery:类似zabbix自动发现,发现主机、配置
部署流程
部署prometheus服务器
1、时间同步:所有节点时间同步
# 查看时区
[root@prometheus ~]# timedatectl
# 如果时区不正确,则改为正确的时区
[root@prometheus ~]# timedatectl set-timezone Asia/Shanghai
# 查看时间
[root@prometheus ~]# date
# 如果时间不正确,则改为正确的时间
[root@prometheus ~]# date -s "年月日 时:分:秒"
2、下载prometheus:下载、解压、配置
[root@prometheus ~]# cd 压缩包目录/
[root@prometheus xxx]# tar xf prometheus-2.37.5.linux-amd64.tar.gz
[root@prometheus xxx]# mv prometheus-2.37.5.linux-amd64 /usr/local/prometheus
# 编写服务启动文件并启动服务
[root@prometheus ~]# vim /usr/lib/systemd/system/prometheus.service
[Unit]
Description=Prometheus Monitoring System
After=network.target
[Service]
ExecStart=/usr/local/prometheus/prometheus \
--config.file=/usr/local/prometheus/prometheus.yml \
--storage.tsdb.path=/usr/local/prometheus/data/
[Install]
WantedBy=multi-user.target
3、启动Prometheus
# 启动服务
[root@prometheus]# systemctl daemon-reload
[root@prometheus]# systemctl enable prometheus.service --now
[root@prometheus]# ss -tlnp | grep :9090
LISTEN 0 128 *:9090 : users:(("prometheus",pid=4396,fd=7))
4、访问webui:前端界面
访问web页面:http://ip:9090/

查看监控自身的数据
如分配置给Prometheus运行的内存数量




添加被监控端
部署通用的监控exporter
# 解压缩安装包,并放到指定地方
[root@web1 ~]# tar xf node_exporter-1.5.0.linux-amd64.tar.gz
[root@web1 ~]# mv node_exporter-1.5.0.linux-amd64 /usr/local/node_exporter
# 创建服务文件,并启动服务
[root@web1 ~]# vim /usr/lib/systemd/system/node_exporter.service
[Unit]
Description=node_exporter
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/node_exporter/node_exporter
[Install]
WantedBy=multi-user.target
# 启动服务
[root@web1 ~]# systemctl daemon-reload
[root@web1 ~]# systemctl enable node_exporter.service --now
[root@web1 ~]# ss -tlnp | grep :9100

在Prometheus服务器上添加监控节点
[root@prometheus ~]# vim /usr/local/prometheus/prometheus.yml
...略...
- job_name: "web1"
static_configs:
- targets: ["web1的ip:9100"]
# 重启服务
[root@prometheus ~]# systemctl restart prometheus.service

查看添加结果

prometheus.yml
一个标准的 prometheus.yml 通常包含以下几个主要部分(称为配置块):
- global: 全局配置,应用于其他所有配置块。
- alerting: 与 Alertmanager 相关的配置,用于设置告警。
- rule_files: 指定包含记录规则或告警规则的文件。
- scrape_configs: 这是最核心的部分,定义了 Prometheus 要抓取哪些目标(监控对象)以及如何抓取。
# prometheus.yml
global:
scrape_interval: 15s # 默认抓取间隔,每15秒抓取一次目标
evaluation_interval: 15s # 默认规则评估间隔,每15秒评估一次规则
# 告警配置(可选)
alerting:
alertmanagers:
- static_configs:
- targets:
- alertmanager:9093 # Alertmanager 服务的地址
# 规则文件路径(可选)
rule_files:
- "first_rules.yml" # 第一个规则文件
- "alert_rules.yml" # 第二个规则文件(通常是告警规则)
# 抓取配置(核心)
scrape_configs:
# 作业名称:监控 Prometheus 自己
- job_name: "prometheus"
# 覆盖全局的抓取间隔,对于自身监控可以更频繁
scrape_interval: 10s
# 静态配置:直接指定目标列表
static_configs:
- targets: ["localhost:9090"] # Prometheus 自己的暴露端口
# 作业名称:监控 Node Exporter(用于收集主机指标)
- job_name: "node"
static_configs:
- targets: ["node-exporter:9100"] # Node Exporter 服务的地址
# 作业名称:监控一个微服务应用(例如通过服务发现)
- job_name: "my-web-app"
# 覆盖全局抓取间隔
scrape_interval: 30s
# 假设我们使用基于文件的服务发现
file_sd_configs:
- files:
- "targets/web-apps.json" # 目标列表从一个JSON文件动态加载
常用命令
kubectl get pods -n monitoring -owide
kubectl get svc -n monitoring -owide
helm list -n monitoring
helm delete xxx -n monitoring
kubectl get pods xxx -n monitoring -o jsonpath='{.spec.containers[*].name}'
kubectl describe pod xxx -n monitoring
grafana



常用命令
kubectl get configmaps -n monitoring
kubectl get configmaps prometheus-grafana -n monitoring -oyaml
alertmanager
Sidecar 模式

Sidecar 模式是一种容器设计模式,主要特点是将应用程序的辅助功能从主应用容器中分离出来,作为一个独立的容器与主容器一起运行在同一个 Pod 中。
- 主容器专注于业务逻辑,Sidecar 负责日志处理
比较 prometheus 和 zabbix
| 指标 | Prometheus | Zabbix |
| 语言 | GoLang(Go) | PHP、C、Go |
| 部署 | 二进制,解压即用。 | yum,编译,数据库,php依赖.... |
| 门槛较高 | 容易使用(有各种各样的模板) | |
| 监控方式 | exporter(基于http协议) | 各种模板、客户端、自定义监控、各种协议 |
| 应用场景 | 更擅长监控服务、容器、 k8s(官方提供了各种各样的exporter) | 更擅长监控系统底层信息:硬件、系统CPU、内存使用情况、网络、磁盘 |
更多推荐

所有评论(0)