ubuntu22.04安装prometheus+grafana+alertmanager
·
安装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
设置语言为中文
-
登录 Grafana 后,点击左侧齿轮图标 "Administration"
-
进入 General > Default preferences
-
将 Language 设置为 中文(简体)
-
点击 Save,点击下面的 Save
添加prometheus数据源
-
登录 Grafana
-
点击左侧 连接 号,选择 "数据源(Data Source)"
-
选择 Prometheus
-
在 HTTP 区域的 URL 输入框中填写:http://ip:9090
-
向下滚动,点击 Save & Test
-
如果显示 "绿色√",表示连接成功。
安装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
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)