shell - 获取consul kv并写入k8s prometheusRule(全局)

2021-07-05
#!/bin/bash
basepath=$(cd $(dirname $0); pwd)
source ${basepath}/config.sh
source /etc/profile.d/consul.sh
source /etc/profile
function DownloadConsul() {
    consul_files=$(/usr/local/bin/consul kv get --recurse | grep '\---' |awk -F ':' '{print $1}' )
    for consul_file in ${consul_files}
    do
        echo $consul_file
        local_file=$(echo ${consul_file} | awk -F '/' '{print $NF}')
        /usr/local/bin/consul kv get ${consul_file} > ${PROMETHEUS_RULE_PATH}/${local_file}
        consul_temp_file=$(echo ${consul_file} | awk -F '/' '{print $NF}')
        ls ${PROMETHEUS_RULE_PATH} | grep ${consul_temp_file}
    done
}

function RsyncNas() {
    rsync -av  ${PROMETHEUS_RULE_PATH}/* ${PROMETHEUS_RULE_PATH}/
    files=$(diff /tmp/new /tmp/old | grep '>' | awk '{print $NF}')
    for file in ${files}
    do
        rm ${PROMETHEUS_RULE_PATH}/${file}
    done
}

function CreateRule() {
    rule_file=${PROMETHEUS_RULE_PATH}/${sid}.yml
    sed -i '/---/d' ${rule_file}
    sed -i 's/^/  &/g' ${rule_file}
    sed -i 's/severity: 3/severity: "3"/g' ${rule_file}
    sed -i "s/id: ${sid}/id: \"${sid}\"/g" ${rule_file}
    cat k8s-rule-demo ${rule_file} >  ${temp_k8s_rule_path}/rules-${sid}.yml
    sed -i "s/__ID__/${sid}/g" ${temp_k8s_rule_path}/rules-${sid}.yml
    echo `date`
    /usr/local/bin/kubectl --kubeconfig /root/.kube/all-config/pro apply -f ${temp_k8s_rule_path}/rules-${sid}.yml
}

function DeleteRule() {
    /usr/local/bin/kubectl --kubeconfig /root/.kube/all-config/pro -n monitoring delete prometheusrules.monitoring.coreos.com  rules-${sid}
}

function UpdateK8s() {
    ls -l ${PROMETHEUS_RULE_PATH} | grep yml | awk '{print $NF}' | sort > /tmp/new
    /usr/local/bin/kubectl --kubeconfig /root/.kube/all-config/pro -n monitoring get prometheusrule | grep rules | awk '{print $1}' |awk -F 'rules-' '{print $2".yml"}' | sort > /tmp/old
    files=$(diff /tmp/new /tmp/old | grep '<' | awk '{print $NF}')
    for file in ${files}
    do
        sid=$(echo ${file} | awk -F '.yml' '{print $1}')
        if [[ ${sid} == "341" || ${sid} == "1131" || ${sid} == "347" ]];then
            echo "ignore"
        else
            CreateRule
        fi
    done
    files=$(diff /tmp/new /tmp/old | grep '>' | awk '{print $NF}')
    for file in ${files}
    do
        sid=$(echo ${file} | awk -F '.yml' '{print $1}')
#        DeleteRule
    done
}

PROMETHEUS_RULE_PATH="/opt/prometheus-rules.d"
temp_k8s_rule_path="/tmp/k8s-rules.d"
mkdir -p ${PROMETHEUS_RULE_PATH} ${temp_k8s_rule_path}
cd ${PROMETHEUS_RULE_PATH}
rm -rf ${PROMETHEUS_RULE_PATH}/*

echo `date`
DownloadConsul
RsyncNas

cd ${basepath}
UpdateK8s

标题:shell - 获取consul kv并写入k8s prometheusRule(全局)
地址:https://blog.njqhome.com:8443/articles/2021/07/05/1625474142697.html