采用Prometheus+Grafana+Altermanager搭建部署K8S集群节点可视化监控告警平台

文章目录

    • 1. 实验节点规划表
    • 2. 安装Prometheus
    • 3. 安装node_exporter
    • 4. 配置prometheus.yml文件
    • 5. 安装Grafana
    • 6. 安装Altermanager监控告警

采用 "Prometheus+Grafana"的开源监控系统,安装部署K8S集群监控平台。
并使用Altermanager告警插件,配合使用企业微信,实现系统集群监控报警机制。

1. 实验节点规划表

主机名称IP地址安装组件
m1192.168.200.61Prometheus+Grafana+Alertmanager+node_exporter
m2192.168.200.62node_exporter
m3192.168.200.63node_exporter
n1192.168.200.64node_exporter
n2192.168.200.65node_exporter
n3192.168.200.66node_exporter

2. 安装Prometheus

在master01节点上执行操作。

  • 安装Prometheus
# 下载
wget https://github.com/prometheus/prometheus/releases/download/v2.34.0/prometheus-2.34.0.linux-amd64.tar.gz# 解压
tar -zxvf prometheus-2.34.0.linux-amd64.tar.gz -C /usr/local/# 更名
cd /usr/local/  &&  mv prometheus-2.34.0.linux-amd64 prometheus  &&  cd prometheus
  • 创建prometheus.service配置文件
cat > /usr/lib/systemd/system/prometheus.service << EOF
[Unit]
Description=prometheus
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml --storage.tsdb.path=/data/prometheus --storage.tsdb.retention=15d --log.level=info            
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
  • 启动prometheus服务
systemctl daemon-reload && systemctl start prometheus && systemctl enable prometheus && systemctl status prometheus
  • 查看prometheus服务进程
netstat -lntp | grep prometheus

3. 安装node_exporter

1 Node Exporter for Prometheus Dashboard CN 0413 ConsulManager自动同步版 dashboard for Grafana | Grafana Labs

其余节点安装操作相同。

  • 安装node_exporter
# 下载
wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz# 解压
tar -zxvf node_exporter-1.3.1.linux-amd64.tar.gz -C /usr/local/# 更名
cd /usr/local && mv node_exporter-1.3.1.linux-amd64 node_exporter && cd node_exporter
  • 启动node_exproter
cat > /usr/lib/systemd/system/node_exporter.service << EOF
[Unit]
Description=node_exporter
Documentation=https://prometheus.io/
After=network.target[Service]
Type=simple
User=root
ExecStart=/usr/local/node_exporter/node_exporter
Restart=on-failure[Install]
WantedBy=multi-user.target
EOF
  • 启动node_exproter服务
systemctl daemon-reload && systemctl start node_exporter && systemctl enable node_exporter && systemctl status node_exporter
  • 查看node_exproter服务进程
ps -ef | grep node_exporter

4. 配置prometheus.yml文件

  • 修改prometheus.yml配置文件
[root@m1 prometheus]# cat prometheus.yml
# my global config
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:- 127.0.0.1:9093# - alertmanager:9093# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:- "rules/*.yml"
# - "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'.static_configs:- targets: ['localhost:9090']  # 如果对本机node_exporter监控,加入,'localhost:9100'- job_name: 'K8S-Masters'#重写了全局抓取间隔时间,由15秒重写成5秒。scrape_interval: 5sstatic_configs:- targets: ['192.168.200.61:9100']- targets: ['192.168.200.62:9100']- targets: ['192.168.200.63:9100']- job_name: 'K8S-Nodes'scrape_interval: 5sstatic_configs:- targets: ['192.168.200.64:9100']- targets: ['192.168.200.65:9100']- targets: ['192.168.200.66:9100']
  • 检验prometheus.yml配置是否有效
./promtool check config prometheus.yml
  • 重启prometheus服务
systemctl daemon-reload && systemctl restart prometheus && systemctl status prometheus
  • 重启node_exporter服务
systemctl daemon-reload && systemctl restart node_exporter && systemctl status node_exporter
  • 访问Prometheus网站http://192.168.200.61:9090/targets
    在这里插入图片描述

5. 安装Grafana

在master01节点上执行操作。

  • 下载安装Grafana

下载链接:Download Grafana | Grafana Labs

# 下载
wget https://dl.grafana.com/enterprise/release/grafana-enterprise-8.4.5-1.x86_64.rpm# 安装
yum install -y grafana-enterprise-8.4.5-1.x86_64.rpm

在这里插入图片描述

  • 启动grafana服务
systemctl start grafana-server.service && systemctl enable grafana-server.service && systemctl status grafana-server.service
  • 查看grafana进程
netstat -lntp | grep grafana-serve
  • 访问Grafana网页,即访问http://192.168.200.61:3000

在这里插入图片描述

  • 修改密码

在这里插入图片描述

  • 登录访问Grafana网页

在这里插入图片描述

  • 添加data sources

在这里插入图片描述
在这里插入图片描述

  • 选择"Prometheus"

在这里插入图片描述

  • 添加URL

在这里插入图片描述

  • 保存测试,点击“Save&Test”提示绿色成功。

在这里插入图片描述

  • 配置grafana-node_exporter仪表版


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6. 安装Altermanager监控告警

下载地址

Releases · prometheus/alertmanager (github.com)

Download | Prometheus

  • 安装Altermanager
# 下载
wget https://github.com/prometheus/alertmanager/releases/download/v0.24.0/alertmanager-0.24.0.linux-amd64.tar.gz# 解压
tar xvf alertmanager-0.24.0.linux-amd64.tar.gz -C  /usr/local/# 更名
cd /usr/local/ && mv alertmanager-0.24.0.linux-amd64  alertmanager && cd alertmanager/
  • 登录企业微信
  • 获取企业ID:ww9fxxxxxx03000
  • 获取部门ID:2
  • AgentId:1000003
  • Secret:8FZ_LnlwuFKNf6xxxxxxxxxxxxWwVPH8R3ExJvIs
  • 获取应用ID

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

以上步骤完成后,我们就得到了配置Alertmanager的所有信息,包括:企业ID,AgentId,Secret和接收告警的部门id

  • 创建wechat.tmpl文件
[root@m1 template]# cat /usr/local/alertmanager/template/wechat.tmpl
{{ define "wechat.default.message" }}
{{- if gt (len .Alerts.Firing) 0 -}}
{{- range $index, $alert := .Alerts -}}
{{- if eq $index 0 -}}
告警类型: {{ $alert.Labels.alertname }}
告警级别: {{ $alert.Labels.severity }}
=====================
{{- end }}
===告警详情===
告警详情: {{ $alert.Annotations.message }}
故障时间: {{ $alert.StartsAt.Format "2006-01-02 15:04:05" }}
===参考信息===
{{ if gt (len $alert.Labels.instance) 0 -}}故障实例ip: {{ $alert.Labels.instance }};{{- end -}}
{{- if gt (len $alert.Labels.namespace) 0 -}}故障实例所在namespace: {{ $alert.Labels.namespace }};{{- end -}}
{{- if gt (len $alert.Labels.node) 0 -}}故障物理机ip: {{ $alert.Labels.node }};{{- end -}}
{{- if gt (len $alert.Labels.pod_name) 0 -}}故障pod名称: {{ $alert.Labels.pod_name }}{{- end }}
=====================
{{- end }}
{{- end }}
{{- if gt (len .Alerts.Resolved) 0 -}}
{{- range $index, $alert := .Alerts -}}
{{- if eq $index 0 -}}
告警类型: {{ $alert.Labels.alertname }}
告警级别: {{ $alert.Labels.severity }}
=====================
{{- end }}
===告警详情===
告警详情: {{ $alert.Annotations.message }}
故障时间: {{ $alert.StartsAt.Format "2006-01-02 15:04:05" }}
恢复时间: {{ $alert.EndsAt.Format "2006-01-02 15:04:05" }}
===参考信息===
{{ if gt (len $alert.Labels.instance) 0 -}}故障实例ip: {{ $alert.Labels.instance }};{{- end -}}
{{- if gt (len $alert.Labels.namespace) 0 -}}故障实例所在namespace: {{ $alert.Labels.namespace }};{{- end -}}
{{- if gt (len $alert.Labels.node) 0 -}}故障物理机ip: {{ $alert.Labels.node }};{{- end -}}
{{- if gt (len $alert.Labels.pod_name) 0 -}}故障pod名称: {{ $alert.Labels.pod_name }};{{- end }}
=====================
{{- end }}
{{- end }}
{{- end }}
  • 编辑alertmanager.yml配置文件
global:resolve_timeout: 1m   									# 每1分钟检测一次是否恢复wechat_api_url: 'https://qyapi.weixin.qq.com/cgi-bin/' 	# 请勿修改!!!wechat_api_corp_id: '*************'      					# 企业微信中企业IDwechat_api_secret: '************************'     		# 企业微信中创建应用的Secret
templates:- '/usr/local/alertmanager/template/*.tmpl'
route:receiver: 'wechat'group_by: ['env','instance','type','group','job','alertname']group_wait: 10s       # 初次发送告警延时group_interval: 10s   # 距离第一次发送告警,等待多久再次发送告警repeat_interval: 1h   # 告警重发时间
#  receiver: 'email'
receivers:
- name: 'wechat'wechat_configs:- send_resolved: truemessage: '{{ template "wechat.default.message" . }}'to_party: '2'          # 企业微信中创建的接收告警的部门【K8S告警组】的部门IDagent_id: '1000003'    # 企业微信中创建的应用的IDapi_secret: '************************************'    # 企业微信中创建应用的Secret
global:resolve_timeout: 1m                                                   # 每1分钟检测一次是否恢复wechat_api_url: 'https://qyapi.weixin.qq.com/cgi-bin/'                # 请勿修改!!!wechat_api_corp_id: 'ww9ff288a7d3903000'                              # 企业微信中企业IDwechat_api_secret: '8FZ_LnlwuFKNf6yR8A8svWO0arYYrWwVPH8R3ExJvIs'      # 企业微信中创建应用的Secret
templates:- '/usr/local/alertmanager/template/*.tmpl'
route:receiver: 'wechat'group_by: ['env','instance','type','group','job','alertname']group_wait: 10s                  # 初次发送告警延时group_interval: 3m               # 距离第一次发送告警,等待多久再次发送告警repeat_interval: 3m              # 告警重发时间
#  receiver: 'email'
receivers:
- name: 'wechat'wechat_configs:- send_resolved: true    # 是否发出已解决消息to_user: '@all'        # 所有用户message: '{{ template "wechat.default.message" . }}'to_party: '2'          # 企业微信中创建的接收告警的部门【K8S告警组】的部门IDagent_id: '1000003'    # 企业微信中创建的应用的IDapi_secret: '8FZ_LnlwuFKNf6yR8A8svWO0arYYrWwVPH8R3ExJvIs'    # 企业微信中创建应用的Secret
  • 创建alertmanager.service配置文件。
cat > /usr/lib/systemd/system/alertmanager.service << EOF
[Unit]
Description=alertmanager
Documentation=https://github.com/prometheus/alertmanager
After=network.target[Service]
Type=simple
User=root
ExecStart=/usr/local/alertmanager/alertmanager --config.file=/usr/local/alertmanager/alertmanager.yml --storage.path=/data/alertmanager
Restart=on-failure[Install]
WantedBy=multi-user.target
EOF
  • 启动alertmanager.service
systemctl daemon-reload && systemctl start alertmanager.service && systemctl enable alertmanager.service
  • 修改prometheus.yml配置文件

在这里插入图片描述

  • 在prometheus/rules路径下创建node_status.yml
# 创建rules目录并进入
mkdir /usr/local/prometheus/rules &&  cd rules/  # 创建node_status.yml配置文件
cat node_status.yml
groups:
- name: 实例存活告警规则rules:- alert: 实例存活告警expr: up{job="prometheus"} == 0 or up{job="K8S-Nodes"} == 0for: 1mlabels:user: rootseverity: Disasterannotations:summary: "Instance {{ $labels.instance }} is down"description: "Instance {{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minutes."value: "{{ $value }}"- name: 内存告警规则rules:- alert: "内存使用率告警"expr: (node_memory_MemTotal_bytes - (node_memory_MemFree_bytes+node_memory_Buffers_bytes+node_memory_Cached_bytes )) / node_memory_MemTotal_bytes * 100 > 75for: 1mlabels:user: rootseverity: warningannotations:summary: "服务器: {{$labels.alertname}} 内存报警"description: "{{ $labels.alertname }} 内存资源利用率大于75%!(当前值: {{ $value }}%)"value: "{{ $value }}"- name: CPU报警规则rules:- alert: CPU使用率告警expr: 100 - (avg by (instance)(irate(node_cpu_seconds_total{mode="idle"}[1m]) )) * 100 > 70for: 1mlabels:user: rootseverity: warningannotations:summary: "服务器: {{$labels.alertname}} CPU报警"description: "服务器: CPU使用超过70%!(当前值: {{ $value }}%)"value: "{{ $value }}"- name: 磁盘报警规则rules:- alert: 磁盘使用率告警expr: (node_filesystem_size_bytes - node_filesystem_avail_bytes) / node_filesystem_size_bytes * 100 > 80for: 1mlabels:user: rootseverity: warningannotations:summary: "服务器: {{$labels.alertname}} 磁盘报警"description: "服务器:{{$labels.alertname}},磁盘设备: 使用超过80%!(挂载点: {{ $labels.mountpoint }} 当前值: {{ $value }}%)"value: "{{ $value }}"
  • 检验alertmanager.yml文件是否配置正确
./amtool check-config alertmanager.yml

输出结果

[root@m1 alertmanager]# pwd
/usr/local/alertmanager
[root@m1 alertmanager]# ./amtool check-config alertmanager.yml
Checking 'alertmanager.yml'  SUCCESS
Found:- global config- route- 0 inhibit rules- 1 receivers- 1 templatesSUCCESS
  • 启动alertmanager服务
systemctl daemon-reload && systemctl start alertmanager && systemctl enable alertmanager && systemctl status alertmanager
  • 查看alertmanager服务进程是否启动
ps -ef | grep alertmanager
  • 重启prometheus服务
systemctl daemon-reload && systemctl restart prometheus && systemctl status prometheus
  • 访问http://192.168.200.61:9090/alerts ,可以查看相关规则信息。

在这里插入图片描述

至此,企业Prometheus对接企业微信告警部署完毕,出现故障时就能看到如下告警信息和恢复信息了。

此时,模拟其中一台主机宕机,查看配置的告警信息在企业微信中是否生效。

  • 查看到实例存活告警,发现其中一个主机宕机

在这里插入图片描述
在这里插入图片描述

  • 查看企业微信发出告警信息

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/4150.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS Linux的替代品(四)_openEuler 22.03-LTS基础安装教程

文章目录 1 openEuler 22.03-LTS简介1.1 系统安装1.1.1 发布件1.1.2 最小硬件要求1.1.3 硬件兼容性 1.2 关键特性1.2.1 openEuler 22.03-LTS基于 Linux Kernel 5.10内核构建, 在进程调度、内存管理等方面带来10余处创新1.2.2 新介质文件系统1.2.3 内存分级扩展1.2.4 用户态协议…

LLM - 第2版 ChatGLM2-6B (General Language Model) 的工程配置

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/131445696 ChatGLM2-6B 是开源中英双语对话模型 ChatGLM-6B 的第二代版本&#xff0c;在保留了初代模型对话流畅、部署门槛较低等众多优…

Scrapy框架之下载中间件(详解)

目录 Scrapy中下载中间件 概念 方法 process_request(self, request, spider) 参数: process_response(self, request, response, spider) 参数 基本步骤 示例代码 注意 Scrapy 中 Downloader 设置UA 开发UserAgent下载中间件 代码 三方模块 配置模块到Settin…

GeneGPT:用领域工具增强大型语言模型,以改善对生物医学信息的访问

文章目录 一、论文关键信息二、主要内容1. Motivations2. 解决方案关键3. 实验和结果 三、总结与讨论 &#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、论文关键信息 论文标题&#xff1a;GeneGPT: Augmenting Large Language Models with Domain …

Python3 标准库概览 | 菜鸟教程(十八)

目录 一、Python3 标准库中的模块 &#xff08;一&#xff09;os 模块 &#xff08;二&#xff09;sys 模块 &#xff08;三&#xff09;time 模块 &#xff08;四&#xff09;datetime 模块 &#xff08;五&#xff09;random 模块 &#xff08;六&#xff09;math 模块…

PostgreSQL13.1

目录 1. PostgreSQL简介1.1 PostgreSQL是什么&#xff1f;1.2 PostgreSQL数据库的优缺点是什么&#xff1f;1.2.1 PostgreSQL的主要优点如下&#xff1a;1.2.2 PostgreSQL的应用劣势如下&#xff1a; 1.3 PostgreSQL不同大版本之间的特性比较1.4OpenGauss与PostgreSQL的对比1.4…

互联网编程之多线程/线程池TCP服务器端程序设计

目录 需求 多线程TCP服务器 线程池TCP服务器 测试 日志模块 需求 多线程TCP服务器&#xff08;30分&#xff09;&#xff1a; 设计编写一个TCP服务器端程序&#xff0c;需使用多线程处理客户端的连接请求。客户端与服务器端之间的通信内容&#xff0c;以及服务器端的处理…

Linux中创建sftp用户并限制目录权限

注意两点&#xff1a; 一是禁止该用户通过ssh登录&#xff0c;二是不需要创建家目录。家目录简单来说&#xff0c;就是在/home下的用户命令&#xff0c;默认每个用户在/home中都是有与用户名一样的文件夹。 1.创建组 groupadd sftp 2. 创建用户 useradd -g sftp -s /sbin/…

API 网关 vs 负载均衡:选择适合你的网络流量管理组件

由于互联网技术的发展&#xff0c;网络数据的请求数节节攀升&#xff0c;这使得服务器承受的压力越来越大。在早期的系统架构中&#xff0c;通常使用负载均衡来将网络流量平摊到多个服务器中&#xff0c;以此减轻单台服务器的压力。但是现如今&#xff0c;后端服务的种类在不断…

vue进阶-elementPlus

Element Plus官网 Element Plus 基于 Vue 3&#xff0c;面向设计师和开发者的组件库。减少开发者关注css&#xff0c;重心关注业务逻辑。 1. 入门 1.1 安装 npm install element-plus --save1.2 快速开始 1、main.js 引入并 use element-plus import { createApp } from …

Java开发 - Canal的基本用法

前言 今天给大家带来的是Canal的基本用法&#xff0c;Canal在Java中常被我们用来做数据的同步&#xff0c;当然不是MySQL与MySQL&#xff0c;Redis与Redis之间了&#xff0c;如果是他们&#xff0c;那就好办了&#xff0c;我们可以直接通过配置来完成他们之间的主从、主主&…

Java官方笔记13集合

Storing Data The Collections Framework is the most widely used API of the JDK. 集合不是数据类型&#xff0c;它是JDK的API&#xff0c;可以用来存储数据等&#xff0c;相当于数据结构。 the Collections Framework is a set of interfaces that models different way of …