gpt4 book ai didi

influxdb将不同系列但相同时间间隔的grafana图的第一个值度量相加

转载 作者:行者123 更新时间:2023-12-02 19:59:44 25 4
gpt4 key购买 nike

我正在使用 influxdb grafana 和collectd,我想显示内存使用情况图。

collectd 为我提供内存指标值并将其保存在 influxdb 中

influxdb/memory/memory-buffered   
influxdb/memory/memory-cached
influxdb/memory/memory-free
influxdb/memory/memory-used

我想在grafana图表中显示总内存所以我需要总结以下指标:

memory_buffered + memory_cached + memory_free + memory_used

如何在 influxdb 或 grafana 中查询?

最佳答案

我认为目前这是不可能的(使用 InfluxDB 0.9)。为了计算ratios between timeseries (fields)你必须能够执行 nested queriesjoins在 InfluxDB 0.9 中已弃用:

SELECT errors_per_minute.value / pages_per_minute.value FROM errors_per_minute INNER JOIN pages_per_minute. In InfluxDB 0.9 neither the MERGE nor JOIN operations are supported.

但是,如果您已从collectd 报告值的百分比(从版本5.5 开始,它支持以百分比形式报告CPU),则可以避免此类查询。

这是一个简单的 bash exec 脚本,用于计算 cpu、内存和磁盘使用百分比:

#!/bin/bash
# a collectd script reporting resources usage as percentage

HOSTNAME="${COLLECTD_HOSTNAME:-`hostname -f`}"
INTERVAL="${COLLECTD_INTERVAL:-10}"

# delay for measuring CPU
DELAY=${1:-1}
# source: http://codereview.stackexchange.com/questions/62425/using-proc-stat-to-calculate-cpu-usage
function getstat() {
grep 'cpu ' /proc/stat | sed -e 's/ */x/g' -e 's/^cpux//'
}

function extract() {
echo $1 | cut -d 'x' -f $2
}

function change() {
local e=$(extract $ENDSTAT $1)
local b=$(extract $STARTSTAT $1)
local diff=$(( $e - $b ))
echo $diff
}

while sleep "$INTERVAL"
do
#Record the start statistics
STARTSTAT=$(getstat)
sleep $DELAY
#Record the end statistics
ENDSTAT=$(getstat)
#http://www.mjmwired.net/kernel/Documentation/filesystems/proc.txt#1236
#echo "From $STARTSTAT"
#echo "TO $ENDSTAT"
# usr nice sys idle iowait irq guest
#From 177834 168085 1276260 3584351494 144468 154895 0 0 0 0
#TO 177834 168085 1276261 3584351895 144468 154895 0 0 0 0

USR=$(change 1)
NICE=$(change 2)
SYS=$(change 3)
IDLE=$(change 4)
IOW=$(change 5)
#echo USR $USR SYS $SYS IDLE $IDLE IOW $IOW

ACTIVE=$(( $USR + $SYS + $IOW + $NICE))
TOTAL=$(($ACTIVE + $IDLE))
PCT=$(( $ACTIVE * 100 / $TOTAL ))
#echo "BUSY $ACTIVE TOTAL $TOTAL $PCT %"
date=$(date +%s)
# percentage of used CPU
echo "PUTVAL $HOSTNAME/cpu/gauge-all_pct interval=$INTERVAL $date:$PCT"
# percentage of used memory
mem_used=$(free | awk 'FNR == 3 {print $3/($3+$4)*100}')
echo "PUTVAL $HOSTNAME/memory/gauge-mem_used interval=$INTERVAL $date:$mem_used"
# percentage of used disk
disk_used=$(df -hl | grep 'rootfs' | awk '{print substr($5, 0, length($5))}')
echo "PUTVAL $HOSTNAME/df/gauge-used_pct interval=$INTERVAL $date:$disk_used"
done

将其编写为 Python 插件可能会更有效。不管怎样,接下来就可以查询内存使用情况了:

SELECT mean("value") FROM "memory_value" WHERE "type" = 'gauge' AND $timeFilter GROUP BY time($interval), "host"

关于influxdb将不同系列但相同时间间隔的grafana图的第一个值度量相加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31210041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com