Update Monitoring_Tools.sh

This commit is contained in:
Lsmoisu 2025-04-24 15:55:35 +08:00 committed by GitHub
parent 13a58ac351
commit 43640b47b5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1,6 +1,6 @@
#!/bin/bash
# 功能:自动安装或卸载 Prometheus、Node Exporter 和 Grafana,支持用户选择安装或卸载组件及指定版本或默认安装最新版本,适配系统架构
# 功能:自动安装或卸载 Prometheus、Node Exporter、Grafana、Blackbox Exporter 和 Alertmanager,支持用户选择安装或卸载组件及指定版本或默认安装最新版本,适配系统架构
# 作者Grok3
# 使用方法chmod +x install_prometheus.sh && ./install_prometheus.sh [uninstall]
@ -24,6 +24,12 @@ NODE_EXPORTER_INSTALL_DIR="/opt/node_exporter"
NODE_EXPORTER_SERVICE_FILE="/etc/systemd/system/node-exporter.service"
GRAFANA_CONFIG_DIR="/etc/grafana"
GRAFANA_SERVICE_FILE="/etc/systemd/system/grafana-server.service"
BLACKBOX_INSTALL_DIR="/opt/blackbox_exporter"
BLACKBOX_DATA_DIR="/opt/blackbox_exporter/data"
BLACKBOX_SERVICE_FILE="/etc/systemd/system/blackbox-exporter.service"
ALERTMANAGER_INSTALL_DIR="/opt/alertmanager"
ALERTMANAGER_DATA_DIR="/opt/alertmanager/data"
ALERTMANAGER_SERVICE_FILE="/etc/systemd/system/alertmanager.service"
# 卸载函数
uninstall_components() {
@ -31,6 +37,8 @@ uninstall_components() {
echo -e "${YELLOW}1. Grafana${NC}"
echo -e "${YELLOW}2. Prometheus${NC}"
echo -e "${YELLOW}3. Node Exporter${NC}"
echo -e "${YELLOW}4. Blackbox Exporter${NC}"
echo -e "${YELLOW}5. Alertmanager${NC}"
echo -e "${YELLOW}请输入要卸载的组件编号用空格分隔多个选项例如1 3${NC}"
read -r UNINSTALL_SELECTION
@ -38,6 +46,8 @@ uninstall_components() {
UNINSTALL_GRAFANA="n"
UNINSTALL_PROMETHEUS="n"
UNINSTALL_NODE_EXPORTER="n"
UNINSTALL_BLACKBOX="n"
UNINSTALL_ALERTMANAGER="n"
# 解析用户输入的选择
for SELECTED in $UNINSTALL_SELECTION; do
@ -54,6 +64,14 @@ uninstall_components() {
UNINSTALL_NODE_EXPORTER="y"
echo -e "${GREEN}将卸载 Node Exporter。${NC}"
;;
4)
UNINSTALL_BLACKBOX="y"
echo -e "${GREEN}将卸载 Blackbox Exporter。${NC}"
;;
5)
UNINSTALL_ALERTMANAGER="y"
echo -e "${GREEN}将卸载 Alertmanager。${NC}"
;;
*)
echo -e "${RED}警告:无效选项 $SELECTED,已忽略。${NC}"
;;
@ -61,7 +79,7 @@ uninstall_components() {
done
# 如果没有选择卸载任何组件,则退出
if [ "$UNINSTALL_PROMETHEUS" != "y" ] && [ "$UNINSTALL_NODE_EXPORTER" != "y" ] && [ "$UNINSTALL_GRAFANA" != "y" ]; then
if [ "$UNINSTALL_PROMETHEUS" != "y" ] && [ "$UNINSTALL_NODE_EXPORTER" != "y" ] && [ "$UNINSTALL_GRAFANA" != "y" ] && [ "$UNINSTALL_BLACKBOX" != "y" ] && [ "$UNINSTALL_ALERTMANAGER" != "y" ]; then
echo -e "${RED}错误:未选择卸载任何组件,脚本退出!${NC}"
exit 1
fi
@ -181,6 +199,88 @@ uninstall_components() {
echo -e "${GREEN}Grafana 已成功卸载!${NC}"
fi
# 卸载 Blackbox Exporter
if [ "$UNINSTALL_BLACKBOX" == "y" ]; then
# 检查服务是否存在并执行操作
if systemctl list-units --full -all | grep -q "blackbox-exporter.service"; then
if systemctl is-active --quiet blackbox-exporter; then
echo -e "${YELLOW}正在停止 Blackbox Exporter 服务...${NC}"
systemctl stop blackbox-exporter
fi
if systemctl is-enabled --quiet blackbox-exporter; then
echo -e "${YELLOW}正在禁用 Blackbox Exporter 服务...${NC}"
systemctl disable blackbox-exporter
fi
fi
if [ -f "$BLACKBOX_SERVICE_FILE" ]; then
echo -e "${YELLOW}正在删除 Blackbox Exporter systemd 服务文件...${NC}"
rm -f "$BLACKBOX_SERVICE_FILE"
systemctl daemon-reload
systemctl reset-failed
fi
# 删除安装目录和数据目录
if [ -d "$BLACKBOX_INSTALL_DIR" ]; then
echo -e "${YELLOW}正在删除 Blackbox Exporter 安装目录 ($BLACKBOX_INSTALL_DIR)...${NC}"
rm -rf "$BLACKBOX_INSTALL_DIR"
fi
if [ -d "$BLACKBOX_DATA_DIR" ]; then
echo -e "${YELLOW}正在删除 Blackbox Exporter 数据目录 ($BLACKBOX_DATA_DIR)...${NC}"
rm -rf "$BLACKBOX_DATA_DIR"
fi
# 删除用户和组
if id blackbox &> /dev/null; then
echo -e "${YELLOW}正在删除 Blackbox Exporter 用户和组...${NC}"
userdel blackbox || true
fi
if getent group blackbox &> /dev/null; then
groupdel blackbox || true
fi
echo -e "${GREEN}Blackbox Exporter 已成功卸载!${NC}"
fi
# 卸载 Alertmanager
if [ "$UNINSTALL_ALERTMANAGER" == "y" ]; then
# 检查服务是否存在并执行操作
if systemctl list-units --full -all | grep -q "alertmanager.service"; then
if systemctl is-active --quiet alertmanager; then
echo -e "${YELLOW}正在停止 Alertmanager 服务...${NC}"
systemctl stop alertmanager
fi
if systemctl is-enabled --quiet alertmanager; then
echo -e "${YELLOW}正在禁用 Alertmanager 服务...${NC}"
systemctl disable alertmanager
fi
fi
if [ -f "$ALERTMANAGER_SERVICE_FILE" ]; then
echo -e "${YELLOW}正在删除 Alertmanager systemd 服务文件...${NC}"
rm -f "$ALERTMANAGER_SERVICE_FILE"
systemctl daemon-reload
systemctl reset-failed
fi
# 删除安装目录和数据目录
if [ -d "$ALERTMANAGER_INSTALL_DIR" ]; then
echo -e "${YELLOW}正在删除 Alertmanager 安装目录 ($ALERTMANAGER_INSTALL_DIR)...${NC}"
rm -rf "$ALERTMANAGER_INSTALL_DIR"
fi
if [ -d "$ALERTMANAGER_DATA_DIR" ]; then
echo -e "${YELLOW}正在删除 Alertmanager 数据目录 ($ALERTMANAGER_DATA_DIR)...${NC}"
rm -rf "$ALERTMANAGER_DATA_DIR"
fi
# 删除用户和组
if id alertmanager &> /dev/null; then
echo -e "${YELLOW}正在删除 Alertmanager 用户和组...${NC}"
userdel alertmanager || true
fi
if getent group alertmanager &> /dev/null; then
groupdel alertmanager || true
fi
echo -e "${GREEN}Alertmanager 已成功卸载!${NC}"
fi
echo -e "${GREEN}所选组件卸载完成!${NC}"
exit 0
}
@ -224,6 +324,8 @@ echo -e "${YELLOW}请选择要安装的组件:${NC}"
echo -e "${YELLOW}1. Grafana${NC}"
echo -e "${YELLOW}2. Prometheus${NC}"
echo -e "${YELLOW}3. Node Exporter${NC}"
echo -e "${YELLOW}4. Blackbox Exporter${NC}"
echo -e "${YELLOW}5. Alertmanager${NC}"
echo -e "${YELLOW}请输入要安装的组件编号用空格分隔多个选项例如1 3${NC}"
read -r SELECTION
@ -231,6 +333,8 @@ read -r SELECTION
INSTALL_GRAFANA="n"
INSTALL_PROMETHEUS="n"
INSTALL_NODE_EXPORTER="n"
INSTALL_BLACKBOX="n"
INSTALL_ALERTMANAGER="n"
# 解析用户输入的选择
for SELECTED in $SELECTION; do
@ -247,6 +351,14 @@ for SELECTED in $SELECTION; do
INSTALL_NODE_EXPORTER="y"
echo -e "${GREEN}将安装 Node Exporter。${NC}"
;;
4)
INSTALL_BLACKBOX="y"
echo -e "${GREEN}将安装 Blackbox Exporter。${NC}"
;;
5)
INSTALL_ALERTMANAGER="y"
echo -e "${GREEN}将安装 Alertmanager。${NC}"
;;
*)
echo -e "${RED}警告:无效选项 $SELECTED,已忽略。${NC}"
;;
@ -254,7 +366,7 @@ for SELECTED in $SELECTION; do
done
# 如果没有选择安装任何组件,则退出
if [ "$INSTALL_PROMETHEUS" != "y" ] && [ "$INSTALL_NODE_EXPORTER" != "y" ] && [ "$INSTALL_GRAFANA" != "y" ]; then
if [ "$INSTALL_PROMETHEUS" != "y" ] && [ "$INSTALL_NODE_EXPORTER" != "y" ] && [ "$INSTALL_GRAFANA" != "y" ] && [ "$INSTALL_BLACKBOX" != "y" ] && [ "$INSTALL_ALERTMANAGER" != "y" ]; then
echo -e "${RED}错误:未选择安装任何组件,脚本退出!${NC}"
exit 1
fi
@ -443,6 +555,156 @@ EOF
echo -e "${GREEN}Grafana 安装完成!${NC}"
fi
# 安装 Blackbox Exporter 的逻辑
if [ "$INSTALL_BLACKBOX" == "y" ]; then
echo -e "${YELLOW}正在获取 Blackbox Exporter 最新版本...${NC}"
BLACKBOX_VERSION=$(curl -s https://api.github.com/repos/prometheus/blackbox_exporter/releases/latest | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/\1/')
if [ -z "$BLACKBOX_VERSION" ]; then
echo -e "${RED}错误:无法获取 Blackbox Exporter 最新版本,请检查网络!${NC}"
exit 1
fi
echo -e "${GREEN}Blackbox Exporter 最新版本为:$BLACKBOX_VERSION${NC}"
BLACKBOX_DOWNLOAD_URL="https://github.com/prometheus/blackbox_exporter/releases/download/v${BLACKBOX_VERSION}/blackbox_exporter-${BLACKBOX_VERSION}.${PROM_ARCH}.tar.gz"
# 检查 Blackbox Exporter 下载链接是否有效
echo -e "${YELLOW}正在验证 Blackbox Exporter 下载链接...${NC}"
HTTP_STATUS=$(curl -s -I "$BLACKBOX_DOWNLOAD_URL" | grep -i "HTTP/" | awk '{print $2}' | head -1)
if [[ "$HTTP_STATUS" != "200" && "$HTTP_STATUS" != "302" ]]; then
echo -e "${RED}错误:无效的 Blackbox Exporter 下载链接 ($BLACKBOX_DOWNLOAD_URL)${NC}"
echo -e "${YELLOW}HTTP 状态码:$HTTP_STATUS${NC}"
exit 1
fi
echo -e "${GREEN}Blackbox Exporter 下载链接有效HTTP 状态码:$HTTP_STATUS${NC}"
echo -e "${YELLOW}正在创建 Blackbox Exporter 安装目录和数据目录...${NC}"
mkdir -p "$BLACKBOX_INSTALL_DIR" "$BLACKBOX_DATA_DIR"
if [ $? -ne 0 ]; then
echo -e "${RED}错误:创建 Blackbox Exporter 目录失败!${NC}"
exit 1
fi
echo -e "${YELLOW}正在下载 Blackbox Exporter v${BLACKBOX_VERSION}...${NC}"
wget -O /tmp/blackbox_exporter.tar.gz "$BLACKBOX_DOWNLOAD_URL"
if [ $? -ne 0 ]; then
echo -e "${RED}错误:下载 Blackbox Exporter 失败,请检查网络!${NC}"
exit 1
fi
echo -e "${YELLOW}正在解压并安装 Blackbox Exporter...${NC}"
tar -xzf /tmp/blackbox_exporter.tar.gz -C /tmp
mv /tmp/blackbox_exporter-${BLACKBOX_VERSION}.${PROM_ARCH}/* "$BLACKBOX_INSTALL_DIR"
if [ $? -ne 0 ]; then
echo -e "${RED}错误:解压或移动 Blackbox Exporter 文件失败!${NC}"
exit 1
fi
# 清理临时文件
rm -rf /tmp/blackbox_exporter.tar.gz /tmp/blackbox_exporter-${BLACKBOX_VERSION}.${PROM_ARCH}
# 创建 Blackbox Exporter 用户和组
echo -e "${YELLOW}正在创建 Blackbox Exporter 用户和组...${NC}"
useradd -M -s /bin/false blackbox || true
chown -R blackbox:blackbox "$BLACKBOX_INSTALL_DIR" "$BLACKBOX_DATA_DIR"
# 创建 Blackbox Exporter systemd 服务文件
echo -e "${YELLOW}正在创建 Blackbox Exporter systemd 服务文件...${NC}"
cat > "$BLACKBOX_SERVICE_FILE" <<EOF
[Unit]
Description=Blackbox Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=blackbox
Group=blackbox
Type=simple
ExecStart=$BLACKBOX_INSTALL_DIR/blackbox_exporter --config.file=$BLACKBOX_INSTALL_DIR/config.yml
[Install]
WantedBy=multi-user.target
EOF
if [ $? -ne 0 ]; then
echo -e "${RED}错误:创建 Blackbox Exporter 服务文件失败!${NC}"
exit 1
fi
echo -e "${GREEN}Blackbox Exporter 安装完成!${NC}"
fi
# 安装 Alertmanager 的逻辑
if [ "$INSTALL_ALERTMANAGER" == "y" ]; then
echo -e "${YELLOW}正在获取 Alertmanager 最新版本...${NC}"
ALERTMANAGER_VERSION=$(curl -s https://api.github.com/repos/prometheus/alertmanager/releases/latest | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/\1/')
if [ -z "$ALERTMANAGER_VERSION" ]; then
echo -e "${RED}错误:无法获取 Alertmanager 最新版本,请检查网络!${NC}"
exit 1
fi
echo -e "${GREEN}Alertmanager 最新版本为:$ALERTMANAGER_VERSION${NC}"
ALERTMANAGER_DOWNLOAD_URL="https://github.com/prometheus/alertmanager/releases/download/v${ALERTMANAGER_VERSION}/alertmanager-${ALERTMANAGER_VERSION}.${PROM_ARCH}.tar.gz"
# 检查 Alertmanager 下载链接是否有效
echo -e "${YELLOW}正在验证 Alertmanager 下载链接...${NC}"
HTTP_STATUS=$(curl -s -I "$ALERTMANAGER_DOWNLOAD_URL" | grep -i "HTTP/" | awk '{print $2}' | head -1)
if [[ "$HTTP_STATUS" != "200" && "$HTTP_STATUS" != "302" ]]; then
echo -e "${RED}错误:无效的 Alertmanager 下载链接 ($ALERTMANAGER_DOWNLOAD_URL)${NC}"
echo -e "${YELLOW}HTTP 状态码:$HTTP_STATUS${NC}"
exit 1
fi
echo -e "${GREEN}Alertmanager 下载链接有效HTTP 状态码:$HTTP_STATUS${NC}"
echo -e "${YELLOW}正在创建 Alertmanager 安装目录和数据目录...${NC}"
mkdir -p "$ALERTMANAGER_INSTALL_DIR" "$ALERTMANAGER_DATA_DIR"
if [ $? -ne 0 ]; then
echo -e "${RED}错误:创建 Alertmanager 目录失败!${NC}"
exit 1
fi
echo -e "${YELLOW}正在下载 Alertmanager v${ALERTMANAGER_VERSION}...${NC}"
wget -O /tmp/alertmanager.tar.gz "$ALERTMANAGER_DOWNLOAD_URL"
if [ $? -ne 0 ]; then
echo -e "${RED}错误:下载 Alertmanager 失败,请检查网络!${NC}"
exit 1
fi
echo -e "${YELLOW}正在解压并安装 Alertmanager...${NC}"
tar -xzf /tmp/alertmanager.tar.gz -C /tmp
mv /tmp/alertmanager-${ALERTMANAGER_VERSION}.${PROM_ARCH}/* "$ALERTMANAGER_INSTALL_DIR"
if [ $? -ne 0 ]; then
echo -e "${RED}错误:解压或移动 Alertmanager 文件失败!${NC}"
exit 1
fi
# 清理临时文件
rm -rf /tmp/alertmanager.tar.gz /tmp/alertmanager-${ALERTMANAGER_VERSION}.${PROM_ARCH}
# 创建 Alertmanager 用户和组
echo -e "${YELLOW}正在创建 Alertmanager 用户和组...${NC}"
useradd -M -s /bin/false alertmanager || true
chown -R alertmanager:alertmanager "$ALERTMANAGER_INSTALL_DIR" "$ALERTMANAGER_DATA_DIR"
# 创建 Alertmanager systemd 服务文件
echo -e "${YELLOW}正在创建 Alertmanager systemd 服务文件...${NC}"
cat > "$ALERTMANAGER_SERVICE_FILE" <<EOF
[Unit]
Description=Alertmanager
Wants=network-online.target
After=network-online.target
[Service]
User=alertmanager
Group=alertmanager
Type=simple
ExecStart=$ALERTMANAGER_INSTALL_DIR/alertmanager --config.file=$ALERTMANAGER_INSTALL_DIR/alertmanager.yml --storage.path=$ALERTMANAGER_DATA_DIR
[Install]
WantedBy=multi-user.target
EOF
if [ $? -ne 0 ]; then
echo -e "${RED}错误:创建 Alertmanager 服务文件失败!${NC}"
exit 1
fi
echo -e "${GREEN}Alertmanager 安装完成!${NC}"
fi
# 重新加载 systemd 并启动服务
echo -e "${YELLOW}正在启动已安装的服务...${NC}"
systemctl daemon-reload
@ -492,6 +754,32 @@ if [ "$INSTALL_GRAFANA" == "y" ]; then
fi
fi
if [ "$INSTALL_BLACKBOX" == "y" ]; then
systemctl start blackbox-exporter
systemctl enable blackbox-exporter
if systemctl is-active --quiet blackbox-exporter; then
echo -e "${GREEN}Blackbox Exporter 安装成功并已启动!${NC}"
echo -e "${GREEN}访问 http://你的服务器IP:9115/metrics 查看 Blackbox Exporter 指标。${NC}"
else
echo -e "${RED}错误Blackbox Exporter 服务启动失败!${NC}"
echo -e "${YELLOW}请检查日志journalctl -u blackbox-exporter -f${NC}"
exit 1
fi
fi
if [ "$INSTALL_ALERTMANAGER" == "y" ]; then
systemctl start alertmanager
systemctl enable alertmanager
if systemctl is-active --quiet alertmanager; then
echo -e "${GREEN}Alertmanager 安装成功并已启动!${NC}"
echo -e "${GREEN}访问 http://你的服务器IP:9093 查看 Alertmanager Web UI。${NC}"
else
echo -e "${RED}错误Alertmanager 服务启动失败!${NC}"
echo -e "${YELLOW}请检查日志journalctl -u alertmanager -f${NC}"
exit 1
fi
fi
# 总结安装结果
echo -e "${GREEN}安装完成!${NC}"
if [ "$INSTALL_PROMETHEUS" == "y" ]; then
@ -503,3 +791,9 @@ fi
if [ "$INSTALL_GRAFANA" == "y" ]; then
echo -e "${GREEN}Grafana 已安装(版本由包管理器确定)${NC}"
fi
if [ "$INSTALL_BLACKBOX" == "y" ]; then
echo -e "${GREEN}Blackbox Exporter 版本v${BLACKBOX_VERSION}${NC}"
fi
if [ "$INSTALL_ALERTMANAGER" == "y" ]; then
echo -e "${GREEN}Alertmanager 版本v${ALERTMANAGER_VERSION}${NC}"
fi