一、监控模板

  1. 左侧树上点三个悬浮小点创建模板和监控项分组。

  2. 点击监控项分组,右侧创建监控项。

  3. 填写监控项表单

监控项表单说明

字段 说明
监控项 监控项名称
分类 固定有四个,包括基础、数据库、中间件、应用
Key 多个Key用逗号分割
更新方式 简单Ping、Exporter、Ansbile、SNMP、IPMI
Shell 通过Shell提交Key的值
目标IP:${TARGET_IP} => 网管用户连接IP Exporter方式的目标IP,默认是网管用户连接IP,可以在主机变量里填写,主机变量优先模板变量
目标端口:${TARGET_PORT} Exporter方式的目标端口,可以在主机变量里填写,主机变量优先模板变量
指标路径:${METRICS_PATH} Exporter方式的指标路径,可以在主机变量里填写,主机变量优先模板变量
低级发现 如果指标有不确定的值,比如分区,可以使用低级发现
间隔(分钟) 获取指标的间隔
定制倍数 对获取到的指标值先进行乘法运行后再入库
返回值类型 支持整数和浮点两种类型
存储类型 原值:直接入库。差值:当前值减前一个值。每秒差值:(当前值-前一个值)/时间差
单位 值的单位。包括%、b/s、B/s、个、个/s等

编写Shell说明

编写Shell需要用到一些变量,下表对Shell可用变量做了说明,这些变量在监控模板和低级发现里都可以使用。

变量 例子
${PROXY} http://127.0.0.1:60001
${HOST_ID} 2
${HOST_AK} e9cd1e013b1549bbabb2ff301f0f4164
${CLIENT_IP} 192.168.1.2
${EXEC_TIME} 1610189940
${ANSIBLE_CMD} ansible -i hosts
${SNMP_CMD} timeout 30 snmpwalk -v 1 -c publice 192.168.1.2
${IPMI_CMD} timeout 30 ipmitool -I lan -H 192.168.1.2 -U admin -P calvin
${SEND} curl -s --connect-timeout 3 -m 10 -X POST http://127.0.0.1:/60001/agent/mon/host
${LLD_ALL_METRICS} 低级发现用到的端点信息
${ALL_METRICS} 主机监控项用到的端点信息
${LLD_VALUE} 自动发现值

Exporter Shell例子

#!/bin/bash

#没低级发现
#ITEM_VALUE=$(echo "${ALL_METRICS}"|grep '^cpu_usage'|awk '{print $NF}')
#${SEND} -d "id=${HOST_ID}&ak=${HOST_AK}&exec_time=${EXEC_TIME}&key=cpu_usage&value=${ITEM_VALUE}"

#有低级发现
#ITEM_VALUE=$(echo "${ALL_METRICS}"|grep '^disk_fs_usage{device='|grep -E "\"${LLD_VALUE}\""|awk '{print $NF}')
#${SEND} -d "id=${HOST_ID}&ak=${HOST_AK}&exec_time=${EXEC_TIME}&key=disk_fs_usage&lld_value=${LLD_VALUE}&value=${ITEM_VALUE}"

Ansible Shell例子

#!/bin/bash

CMD_RESULT=$(${ANSIBLE_CMD} -m raw -a "df -k")
ITEM_VALUE=$(echo "${CMD_RESULT}")

#没低级发现
#${SEND} -d "id=${HOST_ID}&ak=${HOST_AK}&exec_time=${EXEC_TIME}&key=disk_fs_usage&value=${ITEM_VALUE}"

#有低级发现
#${SEND} -d "id=${HOST_ID}&ak=${HOST_AK}&exec_time=${EXEC_TIME}&key=disk_fs_usage&lld_value=${LLD_VALUE}&value=${ITEM_VALUE}"

SNMP Shell例子

#!/bin/bash

LLD_INDEX=$(echo "${LLD_VALUE}"|awk -F',' '{print $2}')
LLD_VALUE=$(echo "${LLD_VALUE}"|awk -F',' '{print $1}')

echo -e "\n发送in监控值"
echo "${SNMP_CMD} ifHCInOctets.${LLD_INDEX}"
in_result=$(${SNMP_CMD} ifHCInOctets.${LLD_INDEX})
in_value=$(echo "${in_result}"|awk '{print $NF}')

echo "${SEND} -d \"id=${HOST_ID}&ak=${HOST_AK}&exec_time=${EXEC_TIME}&key=in_rate&lld_value=${LLD_VALUE}&value=${in_value}\""
${SEND} -d "id=${HOST_ID}&ak=${HOST_AK}&exec_time=${EXEC_TIME}&key=in_rate&lld_value=${LLD_VALUE}&value=${in_value}"

echo -e "\n\n发送out监控值"
echo "${SNMP_CMD} ifHCOutOctets.${LLD_INDEX}"
out_result=$(${SNMP_CMD} ifHCOutOctets.${LLD_INDEX})
out_value=$(echo "${out_result}"|awk '{print $NF}')

echo "${SEND} -d \"id=${HOST_ID}&ak=${HOST_AK}&exec_time=${EXEC_TIME}&key=out_rate&lld_value=${LLD_VALUE}&value=${out_value}\""
${SEND} -d "id=${HOST_ID}&ak=${HOST_AK}&exec_time=${EXEC_TIME}&key=out_rate&lld_value=${LLD_VALUE}&value=${out_value}"

IPMI Shell例子

#!/bin/bash

CMD_RESULT=$(${IPMI_CMD} sdr list)
ITEM_VALUE=$(echo "${CMD_RESULT}")

#没低级发现
#${SEND} -d "id=${HOST_ID}&ak=${HOST_AK}&exec_time=${EXEC_TIME}&key=disk_fs_usage&value=${ITEM_VALUE}"

#有低级发现
#${SEND} -d "id=${HOST_ID}&ak=${HOST_AK}&exec_time=${EXEC_TIME}&key=disk_fs_usage&lld_value=${LLD_VALUE}&value=${ITEM_VALUE}"

二、低级发现

低级发现表单说明

字段 说明
发现名称 低级发现名称
发现Key 低级发现Key
发现方式 Exporter、Ansbile、SNMP、IPMI
发现Shell 通过Shell提交低级发现的值
发现目标IP:${LLD_TARGET_IP} => 网管用户连接IP Exporter方式的目标IP,默认是网管用户连接IP,可以在主机变量里填写,主机变量优先模板变量
发现目标端口:${LLD_TARGET_PORT} Exporter方式的目标端口,可以在主机变量里填写,主机变量优先模板变量
发现指标路径:${LLD_METRICS_PATH} Exporter方式的指标路径,可以在主机变量里填写,主机变量优先模板变量
发现间隔(分钟) 获取指标的间隔

发现Exporter Shell例子

#!/bin/bash

LLD_VALUE="$(echo "${LLD_ALL_METRICS}"|grep 'disk_fs_usage{device='|awk -F'"' '{print $2}')"

echo "${LLD_VALUE}"|while read lld_value
do
  echo "${LLD_SEND} -d \"id=${HOST_ID}&ak=${HOST_AK}&lld_key=${LLD_KEY}&lld_value=${lld_value}\""
  ${LLD_SEND} -d "id=${HOST_ID}&ak=${HOST_AK}&lld_key=${LLD_KEY}&lld_value=${lld_value}"
  echo
done

发现Ansbile Shell例子

#!/bin/bash

CMD_RESULT=$(${ANSIBLE_CMD} -m raw -a "df -k")
LLD_VALUE="$(echo "${CMD_RESULT}"|grep ^/dev/|grep -Ev '^/dev/(sr|fb)'|awk '{print $1}'"

echo "${LLD_VALUE}"|while read lld_value
do
  echo "${LLD_SEND} -d \"id=${HOST_ID}&ak=${HOST_AK}&lld_key=${LLD_KEY}&lld_value=${lld_value}\""
  ${LLD_SEND} -d "id=${HOST_ID}&ak=${HOST_AK}&lld_key=${LLD_KEY}&lld_value=${lld_value}"
  echo
done

发现SNMP Shell例子

#!/bin/bash

CMD_RESULT="$(timeout 3 ${SNMP_CMD} ifDescr)"
LLD_VALUE="$(echo "${CMD_RESULT}"|awk -F' = STRING: ' '{print $1"."$NF}'|awk -F'.' '{print $2"|"$NF}')"
LLD_VALUE="$(echo "${LLD_VALUE}"|sed 's/10G - Level//g'|grep -Eiv '(Null|Loopback|Vlan)')"

echo "${LLD_VALUE}"|while read lld_value
do
echo -e "\n更新网口名称"
echo "${LLD_SEND} -d \"id=${HOST_ID}&ak=${HOST_AK}&lld_key=${LLD_KEY}&lld_value=${lld_value}\""
${LLD_SEND} -d "id=${HOST_ID}&ak=${HOST_AK}&lld_key=${LLD_KEY}&lld_value=${lld_value}"

LLD_INDEX=$(echo "${lld_value}"|awk -F'|' '{print $1}')

echo -e "\n更新网口状态"
netif_status=$(${SNMP_CMD} IF-MIB::ifOperStatus.${LLD_INDEX}|awk -F'(' '/=/{print $NF}'|sed 's/)//g')
if [ ! -z "${netif_status}" ];then
  echo "${LLD_UPDATE} -d \"id=${HOST_ID}&ak=${HOST_AK}&lld_key=ifDescr&lld_index=${LLD_INDEX}&netif_key=netif_status&netif_value=${netif_status}\""
  ${LLD_UPDATE} -d "id=${HOST_ID}&ak=${HOST_AK}&lld_key=ifDescr&lld_index=${LLD_INDEX}&netif_key=netif_status&netif_value=${netif_status}"
fi

echo -e "\n更新网口别名"
netif_alias=$(${SNMP_CMD} IF-MIB::ifAlias.${LLD_INDEX}|awk -F'STRING: ' '{print $2}')
if [ ! -z "${netif_alias}" ];then
  echo "${LLD_UPDATE} -d \"id=${HOST_ID}&ak=${HOST_AK}&lld_key=ifDescr&lld_index=${LLD_INDEX}&netif_key=netif_alias&netif_value=${netif_alias}\""
  ${LLD_UPDATE} -d "id=${HOST_ID}&ak=${HOST_AK}&lld_key=ifDescr=ifDescr&lld_index=${LLD_INDEX}&netif_key=netif_alias&netif_value=${netif_alias}"
fi
done

发现IPMI Shell例子

#!/bin/bash

CMD_RESULT=$(timeout 3 ${IPMI_CMD} sensor list)
LLD_VALUE="$(echo "${CMD_RESULT}"|grep ^CPU|grep Temp|awk '{print $1}'"

echo "${LLD_VALUE}"|while read lld_value
do
  echo "${LLD_SEND} -d \"id=${HOST_ID}&ak=${HOST_AK}&lld_key=${LLD_KEY}&lld_value=${lld_value}\""
  ${LLD_SEND} -d "id=${HOST_ID}&ak=${HOST_AK}&lld_key=${LLD_KEY}&lld_value=${lld_value}"
done

results matching ""

    No results matching ""