Centreon (nagios) 到 Prometheus:bash 自定义检查

Centreon (nagios) to Prometheus : bash custom check

我们有一个 Centreon 服务器(基于 nagios),在 bash 中有不同的自定义检查。

例如,每 2 分钟检查一次 CSV 文件是否有错误的脚本:

类似于:

count_files=$(find  -name "*.csv" | wc -l)

if [[ $count_files -ne 0 ]]
then
    echo "WARNING - Error files found"
    exit 1
else
    echo "OK - No error file found"
    exit 0
fi

我们计划将 Centreon 更改为 Prometheus/Grafana,但我想知道如何在 Prometheus 中进行自定义 bash 检查。

我应该将我的脚本放在这些 VM 上并以 Prometheus 格式公开结果吗?像这样:

# HELP csv_checker Check error in csv files
# TYPE csv_checker gauge
csv_checker 20

如果是,我该怎么做?

Prometheus 会定期检查这个端点吗?我如何使用约 300 个虚拟机来管理它?

我建议您使用 NodeExporter 的功能 Textfile Collector

  1. 在每个 VM 上设置节点导出器并添加一个 cronjob 调用您的 bash 脚本以每 2 分钟收集一次数据 (*/2 * * * *):

    #!/usr/bin/env bash
    set -euo pipefail
    
    csv_files=$(find /mnt -name "*.csv" | wc -l)
    echo "# HELP csv_files Amount of .csv files
    # TYPE csv_files gauge
    csv_files{} $csv_files" > /opt/node_exporter/textfile_collector/csv_files.prom.$$
    mv /opt/node_exporter/textfile_collector/csv_files.prom.$$ /opt/node_exporter/textfile_collector/csv_files.prom
    
  2. 设置 Prometheus 以从您的 VM 收集指标

  3. 设置警报管理器

  4. 添加警报规则,例如:

      - alert: Errors in CSV files
        expr: csv_files != 0
        for: 1m
        labels:
          severity: warning
        annotations:
          summary: Errors in CSV files on the instance {{ $labels.instance }}
          description: "VALUE = {{ $value }}\n  LABELS = {{ $labels }}"
    

Prometheus 将以给定的时间间隔检查您的所有主机,并在 /target_folder

中使用 .csv 文件通知每个实例