Prometheus Exporter系列-Postgres_Exporter一键部署

news/2025/3/22 17:28:54/

这是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_DIRecho "===> 开始安装 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};
EOFecho "===> 授权语句已保存到: ${WORK_DIR}/create_pg_user.sql"
echo "===> 注意: 创建的监控用户为 '${PG_MONITOR_USER}',密码为 '${PG_MONITOR_PASSWORD}'"
echo "===> 如需修改,请编辑授权语句后手动执行"# 清理旧的服务(如果存在)
if systemctl is-active --quiet pg_exporter_${EXPORTER_PORT}; thenecho "===> 停止并禁用旧的 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; thenecho "===> PostgreSQL Exporter 已安装,跳过下载步骤..."# 确保二进制文件可执行chmod +x ${BASE_DIR}/postgres_exporter
elseecho "===> 下载并安装 PostgreSQL Exporter ${PG_EXPORTER_VERSION}..."cd $BASE_DIRwget https://github.com/prometheus-community/postgres_exporter/releases/download/v${PG_EXPORTER_VERSION}/postgres_exporter-${PG_EXPORTER_VERSION}.linux-amd64.tar.gztar xvfz postgres_exporter-${PG_EXPORTER_VERSION}.linux-amd64.tar.gzmv postgres_exporter-${PG_EXPORTER_VERSION}.linux-amd64/postgres_exporter .chmod +x postgres_exporterrm -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"
EOFchmod 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
EOFchmod 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}; thenecho "===> 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-reloadecho "PostgreSQL Exporter (端口 ${EXPORTER_PORT}) 已停止并禁用"
echo "可以手动删除目录: ${WORK_DIR}"
EOFchmod +x $WORK_DIR/uninstall.shecho "===> 卸载脚本已创建: ${WORK_DIR}/uninstall.sh"
elseecho "===> 安装失败,服务未能正常启动"echo "===> 请检查日志: journalctl -u pg_exporter_${EXPORTER_PORT}"exit 1
fiecho "===> 所有文件均存放在: ${WORK_DIR}"
echo "===> 二进制文件位置: ${BASE_DIR}/postgres_exporter"
echo "===> 配置信息已保存到: ${WORK_DIR}/config.info"
echo "===> 监控用户创建脚本: ${WORK_DIR}/create_pg_user.sql"
echo "===> 安装完成!"

http://www.ppmy.cn/news/1581180.html

相关文章

DeepSeek写打台球手机小游戏

DeepSeek写打台球手机小游戏 提问 根据提的要求&#xff0c;让DeepSeek整理的需求&#xff0c;进行提问&#xff0c;内容如下&#xff1a; 请生成一个包含以下功能的可运行移动端打台球小游戏H5文件&#xff1a; 要求 可以重新开始游戏 可以暂停游戏 有白球和其他颜色的球&am…

天翼云:Apache Doris + Iceberg 超大规模湖仓一体实践

导读&#xff1a;天翼云基于 Apache Doris 成功落地项目已超 20 个&#xff0c;整体集群规模超 50 套&#xff0c;部署节点超 3000 个&#xff0c;存储容量超 15PB。天翼云基于 Apache Doris 和 Apache Iceberg 构建的湖仓一体方案&#xff0c;兼具灵活性、高性能和低成本优势&…

PageHelper插件依赖引入不报错,但用不了

情况: 父模块pom. Xml 引入1. 4. 0以上版本的pagehelper-spring-boot-starter。 要用到插件的子模块&#xff0c;去掉版本号&#xff0c;引入和父模块一样的依赖。 引入成功&#xff0c;没有报错&#xff0c;但是打开右边的maven里面没有找到PageHelper插件。 终端清空并重…

【C++指南】内存管理完全手册:new/delete

&#x1f31f; 各位看官好&#xff0c;我是egoist2023&#xff01; &#x1f30d; 种一棵树最好是十年前&#xff0c;其次是现在&#xff01; &#x1f680; 今天来学习C内存管理的相关知识。 &#x1f44d; 如果觉得这篇文章有帮助&#xff0c;欢迎您一键三连&#xff0c;分享…

【回归算法解析系列09】梯度提升回归树(GBRT, XGBoost, LightGBM)

【回归算法解析系列】梯度提升回归树&#xff08;GBRT, XGBoost, LightGBM&#xff09; 1. 梯度提升回归树&#xff1a;迭代优化的艺术 梯度提升回归树&#xff08;Gradient Boosting Regression Tree, GBRT&#xff09;作为集成学习领域中基于Boosting思想的强大算法&#x…

Android Compose 框架矢量图标深入剖析(七)

Android Compose 框架矢量图标深入剖析 一、引言 在移动应用开发中&#xff0c;图标是界面设计的重要组成部分&#xff0c;它能够直观地传达信息&#xff0c;提升用户体验。而矢量图标因其可无损缩放、占用空间小等优点&#xff0c;在 Android 开发中得到了广泛应用。Android…

高频SQL 50 题(持续更新)

SQL的编写与运用 0. 写在前面 最近学习了数据库系统概论&#xff0c;其中涉及到了关于SQL语句的编写&#xff0c;感觉理论知识不足以让我掌握相关的编写方式&#xff0c;因此选择刷力扣上的题目进行复习巩固。 时间不是很多&#xff0c;可能不会经常更新&#xff0c;有时间写…

【Pandas】pandas Series plot.bar

Pandas2.2 Series Plotting 方法描述Series.plot([kind, ax, figsize, …])用于绘制 Series 对象的数据可视化图表Series.plot.area([x, y, stacked])用于绘制堆叠面积图&#xff08;Stacked Area Plot&#xff09;Series.plot.bar([x, y])用于绘制垂直条形图&#xff08;Ver…