安装prometheus

#下载prometheus
sudo apt update    #更新软件包列表
wget https://githubfast.com/prometheus/prometheus/releases/download/v2.53.2/prometheus-2.53.2.linux-amd64.tar.gz

#解压
tar xvf prometheus-2.53.2.linux-amd64.tar.gz
sudo mv prometheus-2.53.2.linux-amd64 /usr/local/prometheus-2.53.2   # 移动到系统目录
sudo ln -s /usr/local/prometheus-2.53.2 /usr/local/prometheus        # 创建软链接

#创建用户
sudo useradd -s /sbin/nologin -M prometheus                  # 创建prometheus用户,禁止登录
sudo chown -R prometheus:prometheus /usr/local/prometheus*   # 授权

#创建数据存储目录
sudo mkdir -p /data/prometheus
sudo chown -R prometheus:prometheus /data/prometheus/

#添加到systemd中
sudo tee /etc/systemd/system/prometheus.service > /dev/null << 'EOF'
[Unit]
Description=Prometheus
Documentation=https://prometheus.io/
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 \
  --web.enable-lifecycle \
  --web.listen-address=:9090
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
 
[Install]
WantedBy=multi-user.target
EOF

## --web.enable-lifecycle	开启Prometheus动态热加载配置(无需频繁重启Prometheus实现加载配置)

#启动prometheus
sudo systemctl daemon-reload
sudo systemctl start prometheus
sudo systemctl enable prometheus

#访问prometheus web UI
http://ip:9090

安装grafana

#添加GPG公钥
wget -q -O /usr/share/keyrings/grafana.key https://apt.grafana.com/gpg.key

#安装依赖
apt-get install -y apt-transport-https

#添加grafana稳定版本到仓库中
echo "deb [signed-by=/usr/share/keyrings/grafana.key] https://mirrors.tuna.tsinghua.edu.cn/grafana/apt/ stable main" >> /etc/apt/sources.list.d/grafana.list

#安装grafana
apt-get update
apt-get install -y grafana

#启动grafana
sudo systemctl daemon-reload
sudo systemctl start grafana-server
sudo systemctl enable grafana-server

#访问grafana web UI
http://ip:3000

##默认用户名和默认密码都为admin

设置语言为中文

  1. 登录 Grafana 后,点击左侧齿轮图标 "Administration"

  2. 进入 General > Default preferences

  3. Language 设置为 中文(简体)

  4. 点击 Save,点击下面的 Save

添加prometheus数据源

  1. 登录 Grafana

  2. 点击左侧 连接 号,选择 "数据源(Data Source)"

  3. 选择 Prometheus

  4. HTTP 区域的 URL 输入框中填写:http://ip:9090

  5. 向下滚动,点击 Save & Test

  6. 如果显示 "绿色√",表示连接成功。

安装node exporter

#下载node
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
tar xvf node_exporter-1.7.0.linux-amd64.tar.gz
sudo cp node_exporter-1.7.0.linux-amd64/node_exporter /usr/local/bin/

#配置systemd
sudo tee /etc/systemd/system/node-exporter.service > /dev/null << 'EOF'
[Unit]
Description=Node Exporter
After=network.target
 
[Service]
User=root
ExecStart=/usr/local/bin/node_exporter
Restart=always
 
[Install]
WantedBy=multi-user.target
EOF

#启动服务
sudo systemctl daemon-reload
sudo systemctl start node-exporter
sudo systemctl enable node-exporter

#访问node exporter web UI
http://ip:9100/

#在被监控机上开启node_exporter之后在prometheus.yml中添加节点
vim /usr/local/prometheus/prometheus.yml
#在scrape_configs模块添加
  - job_name: "test"
    static_configs:
      - targets: ['192.168.195.130:9100']
      
#添加后重启prometheus服务
systemctl restart prometheus.service
curl -X POST http://192.168.195.130:9090/-/reload	#热加载

安装altermanager告警媒介

#下载安装包
wget https://github.com/prometheus/alertmanager/releases/download/v0.26.0/alertmanager-0.26.0.linux-amd64.tar.gz

#解压
tar -xf alertmanager-0.26.0.linux-amd64.tar.gz -C /usr/local

#建立软连接
ln -s /usr/local/alertmanager-0.26.0.linux-amd64/ /usr/local/alertmanager

#创建数据存储目录
mkdir -p /data/alertmanager/data

#添加到systemd中
sudo tee /etc/systemd/system/alertmanager.service > /dev/null <<'EOF'
[Unit]
Description=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/data
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target
EOF

#启动
systemctl daemon-reload
systemctl enable alertmanager
systemctl start alertmanager

#访问alertmanager web UI
http://ip:9093/

设置根分区阈值告警实战

#创建告警规则
#创建目录
mkdir /usr/local/prometheus/rules
# 编辑报价规则
vim /usr/local/prometheus/rules/node_alerts.yml
groups:
# 组名,报警规则组名称
- name: general.rules
  # 定义角色
  rules:
  # 告警名称。
  - alert: 磁盘使用率
    # 表达式,获取磁盘使用率 大于 1% 触发
    expr: 100 - (node_filesystem_free_bytes{mountpoint="/", fstype=~"ext4|xfs"} / node_filesystem_size_bytes{mountpoint="/", fstype=~"ext4|xfs"} * 100) > 1
    # 持续时间,表示持续 1 分钟获取不到信息,则触发报警。0 表示不使用持续时间
    for: 1m
    # 定义当前告警规则级别
    labels:
      # 指定告警级别。
      severity: warning
    # 注释,告警通知
    annotations:
      # 调用标签具体指附加通知信息
      # 自定义摘要
      summary: "Instance {{ $labels.instance  }} :{{ $labels.mountpoint }} 分区使用率过高"
      # 自定义具体描述
      description: "{{ $labels.instance  }} : {{ $labels.job  }} :{{ $labels.mountpoint  }} 这个分区使用大于百分之1% (当前值:{{ $value }})"

##告警规则模式
groups:
  - name: <规则组名称>
    rules:
      - alert: <告警名称>
        expr: <表达式>
        for: <持续时间>
        labels:
          <标签键>: <标签值>
        annotations:
          summary: <摘要信息>
          description: <详细描述>

#在prometheus中添加报警规则
#在rule_files模块添加
vim /usr/local/prometheus/prometheus.yml 
rule_files:		
 - /usr/local/prometheus/rules/*.yml
  
#重启prometheus
systemctl restart prometheus
systemctl status prometheus

#在prometheus web UI查看
status→rules
#alertmanager邮件设置
vim /usr/local/alertmanager/alertmanager.yml
global:
  resolve_timeout: 10s
  smtp_smarthost: 'smtp.qq.com:465'		##QQ邮箱SMTP服务
  smtp_from: 'sender@qq.com'			##qq邮箱地址
  smtp_auth_username: 'sender@qq.com'	##qq邮箱地址
  smtp_auth_password: 'XXXXXXXX'		##qq邮箱授权码
  smtp_hello: '@qq.com'
  smtp_require_tls: false				##必须设为false
route:
  group_by: ['alertname']				##按告警名称分组
  group_wait: 10s						##初始等待时间
  group_interval: 2m					##组内新告警间隔
  repeat_interval: 5m					##重复发送间隔
  receiver: 'mail'						##默认接收者
receivers:
  - name: 'mail'
    email_configs:
      - to: 'receiver@qq.com'			##收件人邮箱地址
        send_resolved: true				##发送恢复通知
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']
    
#重启alertmanager服务
systemctl restart alertmanager.service
#访问本机9093端口
#在alerting模块添加
vim /usr/local/prometheus/prometheus.yml
alerting:
  alertmanagers:
    - static_configs:
        - targets:
           - 192.168.195.130:9093		##添加ip
           
#重启prometheus
systemctl restart prometheus
           
#在prometheus web UI界面查看
prometheus→status→alerts

设置企业微信告警

使用集成PrometheusAlert工具实现企业微信告警
alertmanager无法直接配置企业微信告警,需要通过安装PrometheusAlert才能实现
#PrometheusAlert源代码地址:https://github.com/feiyu563/PrometheusAlert/blob/master/doc/readme/base-install.md
#下载linux版本(https://github.com/feiyu563/PrometheusAlert/releases/download/v4.9.1/linux.zip)
wget https://github.com/feiyu563/PrometheusAlert/releases/download/v4.9.1/linux.zip  

#下载好后解压并进入解压后的文件夹
unzip linux.zip && cd linux/

#授权PrometheusAlert
chmod + x PrometheusAlert

#添加到systemd中
sudo tee /etc/systemd/system/prometheusalert.service <<EOF
[Unit]
Description=Prometheus Alert Program
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/root/linux
ExecStart=/root/linux/PrometheusAlert
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target
EOF

#重载
sudo systemctl daemon-reload
sudo systemctl enable prometheusalert.service
sudo systemctl start prometheusalert.service
sudo systemctl status prometheusalert.service

#启动后可使用浏览器打开以下地址查看:http://ip:8080
#默认登录帐号和密码在app.conf中有配置
默认登陆账号:prometheusalert
默认登陆密码:prometheusalert

#接入Altermanager
vim /usr/local/alertmanager/alertmanager.yml
global:
  resolve_timeout: 5m  # 警报解决前等待的最长时间

route:
  receiver: 'webhook'   # 默认接收者
  group_by: ['alertname']      # 同名告警分组
  group_wait: 10s              # 等待时间
  group_interval: 10s          # 同一组告警间隔
  repeat_interval: 5m          # 未解决警报重复发送间隔

receivers:
  - name: 'webhook'
    webhook_configs:
      - url: 'http://192.168.195.130:8080/prometheusalert?type=wx&tpl=prometheus-wx&wxurl=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxx-xxxx-xxxx-xxxx-xxxx'
        send_resolved: true
##url: PrometheusAlert部署地址和端口+告警方式(如企业微信)+告警模板名称+企业机器人webhook
inhibit_rules:
  # 当严重告警存在时,抑制同类警告
  - source_match:
      severity: 'critical'vim 
    target_match:
      severity: 'warning'
    equal: ['alertname', 'instance', 'dev']

#重启alertmanager
systemctl restart alertmanager.service 

#修改PrometheusAlert配置
vim linux/conf/app.conf
#添加企业微信机器人地址,添加完重启程序
wxurl=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xbxxx-xxxx-xxxx-xxxx0-xxxx
#重启PrometheusAlert
systemctl restart prometheusalert.service
使用webhook实现企业微信告警(需要使用go工具)
#安装依赖
apt install -y git

#拉取alertmanager-webhook-adapter
git clone https://ghfast.top/https://github.com/bougou/alertmanager-webhook-adapter.git

#安装go工具
wget https://golang.google.cn/dl/go1.22.5.linux-amd64.tar.gz

#解压
sudo tar -C /usr/local -xzf go1.22.5.linux-amd64.tar.gz

#配置环境变量
echo 'export PATH=$PATH:/usr/local/go/bin' | sudo tee -a /etc/profile
source /etc/profile

#验证go版本
go version

#进入alertmanager-webhook-adapter目录
cd alertmanager-webhook-adapter/cmd/alertmanager-webhook-adapter

#构建
go build -v -x

#如果出现连接超时执行下列操作
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
go clean -modcache
go mod tidy
go build -v -x		##重新构建

#添加到systemd
tee /etc/systemd/system/alertmanager-webhook-adapter.service <<'EOF'
[Unit]
Description=Alertmanager Webhook Adapter (WeChat)
After=network.target

[Service]
Type=simple
User=root
ExecStart=/root/alertmanager-webhook-adapter/cmd/alertmanager-webhook-adapter/alertmanager-webhook-adapter weixin \
  -l 0.0.0.0:8090 \
  -s "Alertmanager"
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

#重载
systemctl daemon-reload
systemctl enable alertmanager-webhook-adapter
systemctl start alertmanager-webhook-adapter
systemctl status alertmanager-webhook-adapter

#接入alertmanager
vim /usr/local/alertmanager/alertmanager.yml
global:
  resolve_timeout: 5m  # 警报解决前等待的最长时间

route:
  receiver: 'webhook'   # 默认接收者
  group_by: ['alertname']      # 同名告警分组
  group_wait: 10s              # 等待时间
  group_interval: 10s          # 同一组告警间隔
  repeat_interval: 5m          # 未解决警报重复发送间隔

receivers:
  - name: 'webhook'
    webhook_configs:
      - url: "http://192.168.195.130:8090/webhook/send?channel_type=weixin&token=xxxxxxb-xxxxx-xxxxx-xxxxx-xxxxxx"
      #url:webhook的部署地址+端口+/webhook/send?channel_type=weixin&token=xxxxxxx-xxxx-xxxx-xxxx-xxxxxx,token是企业微信的 webhook key,只传 key,不要完整 URL
        send_resolved: true

inhibit_rules:
  # 当严重告警存在时,抑制同类警告
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'instance', 'dev']

#重启alertmanager
systemctl restart alertmanager.service 
#修改时区
vim alertmanager-webhook-adapter/cmd/alertmanager-webhook-adapter/main.go
package main

import (
        "fmt"
        "os"	
        "time"		##添加

        "github.com/bougou/alertmanager-webhook-adapter/cmd/alertmanager-webhook-adapter/app"
        "github.com/spf13/cobra"
)

func init() {
        cobra.OnInitialize(initConfig)
}

func initConfig() {}

##添加这部分代码 
//强制设置时区为 Asia/Shanghai 		
func setTimeZone() {
        loc, err := time.LoadLocation("Asia/Shanghai")
        if err != nil {
                fmt.Fprintf(os.Stderr, "❌  加载时区失败: %v\n", err)
                os.Exit(1)
        }
        time.Local = loc
        fmt.Println("✅  当前时区已强制设置为:", time.Now().Location())
}

func main() {
        // 设置时区(优先在这里调用)	##添加
        setTimeZone()				##添加

        // 启动主命令
        command := app.NewRootCommand()
        if err := command.Execute(); err != nil {
                fmt.Fprintln(os.Stderr, err)
                os.Exit(1)
        }
}


#修改完代码重新编译
cd alertmanager-webhook-adapter/cmd/alertmanager-webhook-adapter
go build -v -x 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐