当前位置: 首页 > news >正文

Prometheus Exporter系列-Postgres_Exporter一键部署

这是postgresql exporter的一件安装,经测试可以稳定运行,重新运行会删除旧exporter相关信息创建新的

#!/bin/bash

# PostgreSQL Exporter 一键安装脚本(最终版)
# 使用方法: ./pg_exporter_setup.sh <导出端口>

set -e

# 版本号
PG_EXPORTER_VERSION="0.17.1"

# 配置信息
PG_HOST="pg-db-host"
PG_PORT="5432"
PG_DATABASE="postgres"
PG_USER="monitor_user"
PG_PASSWORD="bagayalu321"

# 获取导出端口,默认为9187
EXPORTER_PORT=${1:-9187}

# 为 Exporter 创建专用监控用户
PG_MONITOR_USER="monitor_user"
PG_MONITOR_PASSWORD="bagayalu321"

# 基础目录
BASE_DIR="/data/pg-exporter"
# 特定端口的工作目录
WORK_DIR="${BASE_DIR}/${EXPORTER_PORT}"

# 创建基础目录和端口特定目录
mkdir -p $WORK_DIR

echo "===> 开始安装 PostgreSQL Exporter 到 ${WORK_DIR}..."

# 打印创建 PostgreSQL 监控用户的语句(仅供参考,不执行)
echo "===> PostgreSQL 监控用户授权语句(需手动执行):"
cat << EOF
-- 在 PostgreSQL 中创建监控用户的 SQL 语句:
CREATE USER ${PG_MONITOR_USER} WITH PASSWORD '${PG_MONITOR_PASSWORD}';
GRANT pg_monitor TO ${PG_MONITOR_USER};
GRANT SELECT ON pg_stat_database TO ${PG_MONITOR_USER};
GRANT SELECT ON pg_stat_replication TO ${PG_MONITOR_USER};
GRANT SELECT ON pg_stat_activity TO ${PG_MONITOR_USER};
EOF

# 将授权语句保存到文件
cat > $WORK_DIR/create_pg_user.sql << EOF
-- 在 PostgreSQL 中创建监控用户的 SQL 语句:
CREATE USER ${PG_MONITOR_USER} WITH PASSWORD '${PG_MONITOR_PASSWORD}';
GRANT pg_monitor TO ${PG_MONITOR_USER};
GRANT SELECT ON pg_stat_database TO ${PG_MONITOR_USER};
GRANT SELECT ON pg_stat_replication TO ${PG_MONITOR_USER};
GRANT SELECT ON pg_stat_activity TO ${PG_MONITOR_USER};
EOF

echo "===> 授权语句已保存到: ${WORK_DIR}/create_pg_user.sql"
echo "===> 注意: 创建的监控用户为 '${PG_MONITOR_USER}',密码为 '${PG_MONITOR_PASSWORD}'"
echo "===> 如需修改,请编辑授权语句后手动执行"

# 清理旧的服务(如果存在)
if systemctl is-active --quiet pg_exporter_${EXPORTER_PORT}; then
    echo "===> 停止并禁用旧的 PostgreSQL Exporter 服务..."
    systemctl stop pg_exporter_${EXPORTER_PORT}
    systemctl disable pg_exporter_${EXPORTER_PORT}
fi

# 检查 PostgreSQL Exporter 是否已安装
if [ -f "${BASE_DIR}/postgres_exporter" ] && ${BASE_DIR}/postgres_exporter --version &>/dev/null; then
    echo "===> PostgreSQL Exporter 已安装,跳过下载步骤..."
    # 确保二进制文件可执行
    chmod +x ${BASE_DIR}/postgres_exporter
else
    echo "===> 下载并安装 PostgreSQL Exporter ${PG_EXPORTER_VERSION}..."
    cd $BASE_DIR
    wget https://github.com/prometheus-community/postgres_exporter/releases/download/v${PG_EXPORTER_VERSION}/postgres_exporter-${PG_EXPORTER_VERSION}.linux-amd64.tar.gz
    tar xvfz postgres_exporter-${PG_EXPORTER_VERSION}.linux-amd64.tar.gz
    mv postgres_exporter-${PG_EXPORTER_VERSION}.linux-amd64/postgres_exporter .
    chmod +x postgres_exporter
    rm -rf postgres_exporter-${PG_EXPORTER_VERSION}.linux-amd64*
fi

# 创建 Exporter 配置文件
echo "===> 创建 PostgreSQL Exporter 配置文件..."
cat > $WORK_DIR/postgres_exporter.env << EOF
DATA_SOURCE_NAME="postgresql://${PG_USER}:${PG_PASSWORD}@${PG_HOST}:${PG_PORT}/${PG_DATABASE}?sslmode=disable"
EOF

chmod 600 $WORK_DIR/postgres_exporter.env

# 保存配置信息
cat > $WORK_DIR/config.info << EOF
# PostgreSQL Exporter 配置信息
PG_HOST=$PG_HOST
PG_PORT=$PG_PORT
PG_DATABASE=$PG_DATABASE
PG_USER=$PG_USER
PG_PASSWORD=$PG_PASSWORD
EXPORTER_PORT=$EXPORTER_PORT
EOF

chmod 600 $WORK_DIR/config.info

# 创建 systemd 服务文件
echo "===> 配置 systemd 服务..."
cat > /etc/systemd/system/pg_exporter_${EXPORTER_PORT}.service << EOF
[Unit]
Description=PostgreSQL Exporter for Prometheus (Port ${EXPORTER_PORT})
After=network.target

[Service]
User=root
Group=root
Type=simple
EnvironmentFile=${WORK_DIR}/postgres_exporter.env
ExecStart=${BASE_DIR}/postgres_exporter --web.listen-address=:${EXPORTER_PORT}
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
EOF

# 重新加载 systemd 配置
systemctl daemon-reload

# 启动 PostgreSQL Exporter 服务
echo "===> 启动 PostgreSQL Exporter 服务..."
systemctl enable pg_exporter_${EXPORTER_PORT}
systemctl start pg_exporter_${EXPORTER_PORT}

# 等待服务启动
sleep 5

# 检查服务状态
if systemctl is-active --quiet pg_exporter_${EXPORTER_PORT}; then
    echo "===> PostgreSQL Exporter 安装成功!服务正在运行"
    echo "===> 监控端口: ${EXPORTER_PORT}"
    echo "===> 可通过访问 http://$(hostname -I | awk '{print $1}'):${EXPORTER_PORT}/metrics 测试"
    
    # 创建清理脚本
    cat > $WORK_DIR/uninstall.sh << EOF
#!/bin/bash
# 卸载此 PostgreSQL Exporter 实例的脚本

systemctl stop pg_exporter_${EXPORTER_PORT}
systemctl disable pg_exporter_${EXPORTER_PORT}
rm -f /etc/systemd/system/pg_exporter_${EXPORTER_PORT}.service
systemctl daemon-reload

echo "PostgreSQL Exporter (端口 ${EXPORTER_PORT}) 已停止并禁用"
echo "可以手动删除目录: ${WORK_DIR}"
EOF
    chmod +x $WORK_DIR/uninstall.sh
    
    echo "===> 卸载脚本已创建: ${WORK_DIR}/uninstall.sh"
else
    echo "===> 安装失败,服务未能正常启动"
    echo "===> 请检查日志: journalctl -u pg_exporter_${EXPORTER_PORT}"
    exit 1
fi

echo "===> 所有文件均存放在: ${WORK_DIR}"
echo "===> 二进制文件位置: ${BASE_DIR}/postgres_exporter"
echo "===> 配置信息已保存到: ${WORK_DIR}/config.info"
echo "===> 监控用户创建脚本: ${WORK_DIR}/create_pg_user.sql"
echo "===> 安装完成!"

相关文章:

  • JavaScript基础-节点操作
  • StarRocks 升级注意事项
  • Azure Delta Lake、Databricks和Event Hubs实现实时欺诈检测
  • HTML应用指南:利用GET请求获取猫眼电影日票房信息——以哪吒2为例
  • (每日一道算法题)交易逆序对的总数
  • SAP Commerce(Hybris)PCM模块(一):商品批量导入导出
  • 如何使用API获取更详细的数据?
  • 深度解析:JavaScript变量声明的演变与核心差异(var/let/隐式声明)
  • 理解线性动力学中的模态叠加法
  • 警告warning: variable ‘**‘ set but not used [-Wunused-but-set-variable]的解决办法
  • 19681 01背包
  • 景联文科技:以高质量数据标注推动人工智能领域创新与发展
  • Linux中基本命令
  • python每日十题(5)
  • 山石网科谈双刃剑的警示:探讨大模型在攻击中的潜在滥用
  • 一、环境搭建 —— Linux
  • (C语言)整数转二进制后1和0的个数(递归)(指针)
  • 反射型(CTFHUB)
  • JavaScript实现一个函数,将数组扁平化(flatten),即把多维数组转为一维数组。
  • LiteratureReading:[2023] GPT-4: Technical Report
  • 碧桂园:砸锅卖铁保交房、持续推进保主体,尽快让公司恢复正常经营
  • 马云再次现身阿里打卡创业公寓“湖畔小屋”,鼓励员工坚持创业精神
  • 教育部答澎湃:2025世界数字教育大会将发布系列重磅成果
  • 江西省直机关工委副书记熊亮华履新宜春市委常委、宣传部部长
  • 首批证券公司科创债来了!拟发行规模超160亿元
  • 巴基斯坦称约50名印度士兵在克什米尔实控线丧生