11 个 Prometheus 配置自动化脚本

1、服务配置脚本

自动化创建 Prometheus 服务,确保其随系统启动并平稳运行。

#!/bin/bash
# 配置 Prometheus 为 systemd 服务并验证

SERVICE_FILE="/etc/systemd/system/prometheus.service"

echo "配置 Prometheus systemd 服务..."

cat <<EOF | sudo tee $SERVICE_FILE
[Unit]
Description=Prometheus 监控系统
After=network.target

[Service]
User=nobody
ExecStart=/usr/local/bin/prometheus --config.file=/opt/prometheus/prometheus.yml --storage.tsdb.path=/opt/prometheus/data
Restart=always

[Install]
WantedBy=multi-user.target
EOF

# 重载并启用服务
if sudo systemctl daemon-reload && sudo systemctl enable prometheus && sudo systemctl start prometheus; then
    echo "Prometheus 服务成功配置并启动。"
else
    echo "错误:配置或启动 Prometheus 服务失败。检查日志获取详情。"
    exit 1
fi

为 Prometheus 设置 systemd 服务。

Prometheus 随系统启动,可像其他服务一样管理。

2、Alertmanager 集成

此脚本自动化 Alertmanager 与 Prometheus 的集成,用于报警。

#!/bin/bash
# 集成 Alertmanager 到 Prometheus 配置

PROMETHEUS_CONFIG="/opt/prometheus/prometheus.yml"

echo "集成 Alertmanager 到 Prometheus..."

if grep -q "alertmanagers" $PROMETHEUS_CONFIG; then
    echo "Alertmanager 配置已存在于 $PROMETHEUS_CONFIG。"
else
    cat <<EOF | sudo tee -a $PROMETHEUS_CONFIG
alerting:
  alertmanagers:
    - static_configs:
        - targets: ['localhost:9093']
EOF
    echo "Alertmanager 配置已添加到 $PROMETHEUS_CONFIG。"
    sudo systemctl restart prometheus && echo "Prometheus 重启成功。"
fi

将 Alertmanager 配置添加到 prometheus.yml 文件。

重启 Prometheus 以应用更改。

3、自动化导出器设置

Prometheus 使用导出器抓取指标。此脚本自动化安装和配置 Node Exporter。

#!/bin/bash
# 安装并配置 Node Exporter

VERSION=${1:-"1.7.0"} # 默认 Node Exporter 版本
BIN_DIR="/usr/local/bin"
SERVICE_FILE="/etc/systemd/system/node_exporter.service"

echo "安装 Node Exporter 版本 $VERSION..."

if wget -q https://github.com/prometheus/node_exporter/releases/download/v$VERSION/node_exporter-$VERSION.linux-amd64.tar.gz; then
    tar -xzf node_exporter-$VERSION.linux-amd64.tar.gz
    sudo mv node_exporter-$VERSION.linux-amd64/node_exporter $BIN_DIR/
    sudo useradd -M -r -s /bin/false node_exporter || echo "用户 node_exporter 已存在。"

    # 创建 systemd 服务
    cat <<EOF | sudo tee $SERVICE_FILE
[Unit]
Description=Node Exporter
After=network.target

[Service]
User=node_exporter
ExecStart=$BIN_DIR/node_exporter
Restart=always

[Install]
WantedBy=multi-user.target
EOF

    sudo systemctl daemon-reload
    sudo systemctl enable node_exporter && sudo systemctl start node_exporter
    echo "Node Exporter 已安装并作为服务运行。"
else
    echo "错误:下载 Node Exporter 版本 $VERSION 失败。检查版本并重试。"
    exit 1
fi

安装 Node Exporter 并为其设置 systemd 服务。

系统指标可供 Prometheus 使用。

4、自动化规则创建

此脚本为 Prometheus 创建报警规则,如监控 CPU 使用率或内存消耗。

#!/bin/bash
# 添加报警规则到 Prometheus 并验证

RULES_FILE="/opt/prometheus/alert_rules.yml"
PROMETHEUS_CONFIG="/opt/prometheus/prometheus.yml"

echo "添加报警规则..."

if ! grep -q "alert_rules.yml" $PROMETHEUS_CONFIG; then
    cat <<EOF | sudo tee -a $PROMETHEUS_CONFIG
rule_files:
  - $RULES_FILE
EOF
    echo "规则文件已链接到 Prometheus 配置。"
fi

# 创建报警规则
cat <<EOF | sudo tee $RULES_FILE
groups:
  - name: example_alerts
    rules:
      - alert: HighCPUUsage
        expr: 100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
        for: 2m
        labels:
          severity: warning
        annotations:
          summary: "检测到高 CPU 使用率"
          description: "实例 {{ $labels.instance }} 在过去 2 分钟内 CPU 使用率超过 80%。"
EOF

sudo systemctl restart prometheus && echo "报警规则已添加,Prometheus 已重启。"

创建规则文件以监控系统性能。

Prometheus 根据定义的阈值触发报警。

5、Grafana 仪表盘导入

此脚本使用 Grafana API 自动化仪表盘导入。

#!/bin/bash
# 导入 Grafana 仪表盘 JSON 文件

GRAFANA_URL=${1:-"http://localhost:3000"}
DASHBOARD_FILE=${2:-"/path/to/dashboard.json"}
API_KEY=${3:-"your_api_key"}

echo "从 $DASHBOARD_FILE 导入 Grafana 仪表盘到 $GRAFANA_URL..."

if [ ! -f "$DASHBOARD_FILE" ]; then
    echo "错误:仪表盘文件 $DASHBOARD_FILE 不存在。"
    exit 1
fi

response=$(curl -s -o /dev/null -w "%{http_code}" -X POST -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d @"$DASHBOARD_FILE" "$GRAFANA_URL/api/dashboards/db")

if [ "$response" -eq 200 ]; then
    echo "仪表盘导入成功。"
else
    echo "错误:导入仪表盘失败。HTTP 状态码:$response"
    exit 1
fi

使用 Grafana API 上传预定义的仪表盘 JSON 文件。

简化仪表盘配置。

6、自动化 PromQL 查询

安排定期 PromQL 查询以生成报告或健康检查。

#!/bin/bash
# 运行 PromQL 查询并显示结果

PROMETHEUS_URL=${1:-"http://localhost:9090"}
QUERY=${2:-"up"}
QUERY_ENDPOINT="$PROMETHEUS_URL/api/v1/query"

echo "运行 PromQL 查询:$QUERY..."

response=$(curl -s "$QUERY_ENDPOINT?query=$QUERY")

if jq -e . >/dev/null 2>&1 <<<"$response"; then
    echo "查询结果:"
    echo "$response" | jq '.data.result[] | {metric: .metric, value: .value}'
else
    echo "错误:获取查询结果失败。确保 Prometheus 在 $PROMETHEUS_URL 可访问。"
    exit 1
fi

自动化 PromQL 查询并格式化输出以提高可读性。

适用于定期健康检查。

7、Slack 报警通知

将 Slack 与 Alertmanager 集成,提供实时报警通知。

#!/bin/bash
# 配置 Slack 通知
cat <<EOF | sudo tee /opt/alertmanager/alertmanager.yml
global:
  slack_api_url: 'https://hooks.slack.com/services/your/slack/webhook'

route:
  receiver: slack

receivers:
  - name: slack
    slack_configs:
      - channel: '#alerts'
        text: "{{ .CommonAnnotations.summary }}"
EOF

sudo systemctl restart alertmanager
echo "Slack 通知已配置。"

设置 Alertmanager 向 Slack 频道发送通知。

8、备份脚本

备份 Prometheus 数据和配置。

#!/bin/bash
# 备份 Prometheus 数据目录

DATA_DIR=${1:-"/opt/prometheus/data"}
BACKUP_DIR=${2:-"/backups/prometheus"}
TIMESTAMP=$(date +"%Y%m%d%H%M%S")

echo "从 $DATA_DIR 备份 Prometheus 数据到 $BACKUP_DIR..."

if [ ! -d "$DATA_DIR" ]; then
    echo "错误:Prometheus 数据目录 $DATA_DIR 不存在。"
    exit 1
fi

sudo mkdir -p "$BACKUP_DIR"
sudo tar -czvf "$BACKUP_DIR/prometheus_backup_$TIMESTAMP.tar.gz" "$DATA_DIR"

if [ $? -eq 0 ]; then
    echo "备份完成:$BACKUP_DIR/prometheus_backup_$TIMESTAMP.tar.gz"
else
    echo "错误:备份失败。检查权限和磁盘空间。"
    exit 1
fi

压缩并保存 Prometheus 数据,以备恢复。

9、自动化配置验证

在应用更改前验证 prometheus.yml,避免错误。

#!/bin/bash
# 验证 Prometheus 配置

CONFIG_FILE="/opt/prometheus/prometheus.yml"
PROMTOOL_CMD="promtool"

# 检查 promtool 是否已安装
if ! command -v $PROMTOOL_CMD &> /dev/null; then
    echo "错误:promtool 未安装或不在 PATH 中。"
    exit 1
fi

# 检查配置文件是否存在
if [ ! -f "$CONFIG_FILE" ]; then
    echo "错误:配置文件 '$CONFIG_FILE' 未找到。"
    exit 1
fi

# 验证 Prometheus 配置
$PROMTOOL_CMD check config "$CONFIG_FILE"
if [ $? -eq 0 ]; then
    echo "配置有效。"
else
    echo "配置验证失败。"
fi

使用 promtool 检查 Prometheus 配置语法。

防止配置错误导致服务中断。

10、Alertmanager 接收器测试脚本

此脚本向 Alertmanager 发送测试报警,检查其是否按预期工作或查找并修复错误。

#!/bin/bash
# 向 Alertmanager 发送测试报警

ALERTMANAGER_URL=${1:-"http://localhost:9093"}
RECEIVER=${2:-"default"}
ALERT_FILE=${3:-"/tmp/test_alert.json"}

echo "向 Alertmanager 发送测试报警到 $ALERTMANAGER_URL..."

# 创建测试报警负载
cat <<EOF > $ALERT_FILE
[\
  {\
    "labels": {\
      "alertname": "TestAlert",\
      "severity": "info"\
    },\
    "annotations": {\
      "summary": "这是一个测试报警。"\
    },\
    "startsAt": "$(date -Iseconds)"\
  }\
]
EOF

response=$(curl -s -o /dev/null -w "%{http_code}" -X POST -H "Content-Type: application/json" \
  -d @"$ALERT_FILE" "$ALERTMANAGER_URL/api/v1/alerts")

if [ "$response" -eq 200 ]; then
    echo "测试报警成功发送到接收器:$RECEIVER。"
else
    echo "错误:发送测试报警失败。HTTP 状态码:$response"
    exit 1
fi

创建可自定义的测试报警 JSON 文件。

11、Prometheus 日志监控脚本

#!/bin/bash
# 监控 Prometheus 日志中的错误

LOG_FILE=${1:-"/var/log/prometheus/prometheus.log"}
TAIL_LINES=${2:-100}

echo "检查 Prometheus 日志 $LOG_FILE 中最后 $TAIL_LINES 行的错误..."

if [ ! -f "$LOG_FILE" ]; then
    echo "错误:日志文件 $LOG_FILE 不存在。"
    exit 1
fi

grep -i "error" <(tail -n $TAIL_LINES "$LOG_FILE") || echo "最后 $TAIL_LINES 行中未发现错误。"
声明: 本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
prometheus

监控都没做好,你还要可观测性...

2024-11-26 20:43:00

prometheus

手把手教程:使用 Fluentbit 采集夜莺日志写入 ElasticSearch

2024-12-4 17:08:43

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索