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、内存使用情况、网络、磁盘

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐