Doris生产环境中需要监控数据库的空间使用情况,暂时没有找到现成的exporter,自己写一个吧。

以下是用shell写的示例,已经能够满足监控告警的需求。

当然,如果能用python写,或许可以实现更多的功能。

  1. 编辑自定义指标输出脚本

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    cat doris_db_size.sh
    #!/bin/bash
    #配置MySQL/Doris连接信息
    MYSQL_USER="doris_monitor""
    MYSQL_PASS="your_password"
    MYSQL_HOST="127.0.0.1"
    MYSQL_PORT="9030"
    # 结果文件路径(符合 node_exporter textfile 规则)
    METRICS_FILE="/etc/prometheus/conf/node-exporter/doris_db_size.prom"
    #执行SQL查询数据库大小
    RESULT=$(mysql -u $MYSQL_USER -p$MYSQL_PASS -h $MYSQL_HOST -P $MYSQL_PORT -N -e "
    SELECT table_schema, SUM(data_length + C0ALESCE(index_length, 0)) / 1024 / 1024 / 1024
    FROM information_schema.tables GRouP BY table_schema;
    ")
    # 生成 Prometheus 监控格式
    echo "# HELP doris_database_size_gb Database size in GB" > $METRICS_FILE
    echo "# TYPE doris_database_size_gb gauge" >> $METRICS_FILE
    while read -r DB SIZE; do
    # 去除可能的空行
    if [[ !-z "$DB" && !-z "$SIZE" ]]; then
    echo "doris_database_size_gb{database=\"$DB\"} $SIZE" >> $METRICS_FILE
    fi
    done <<< "$RESULT"
    # 设置正确的权限
    chown prometheus:prometheus $METRICS_FILE
    chmod 644 $METRICS_FILE
  2. 配置定时执行脚本,输出实时指标数据

    1
    2
    crontab-l
    */1 * * * * sh /etc/prometheus/conf/node-exporter/doris_db_size.sh
  3. 查看输出的指标数据

    1
    2
    3
    4
    5
    6
    7
    8
    cat doris_db_size.prom
    # HELP doris_database_size_gb Database size in GB
    # TYPE doris_database_size_gb gauge
    doris_database_size_gb{database="cls_*****_db"} 1841.7360581755638
    doris_database_size_gb{database="information_schema"} 0
    doris_database_size_gb{database="__internal_schema"} 1.2457972718402743
    doris_database_size_gb{database="i***_db"} 1210.8293761350214
    doris_database_size_gb{database="mysql"} 0
  4. 在Prometheus Web中查看自定义指标doris_database_size_gb

  5. 在Grafana中已经可以查看数据库空间变化趋势