3

influxdb grafana と collectd を使用しており、メモリ使用量のグラフを表示したいと考えています。

collectd はメモリのこのメトリクス値を提供し、influxdb に保存します

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

グラファナ グラフに合計メモリを表示したいので、次のメトリックを合計する必要があります。

memory_buffered + memory_cached + memory_free + memory_used

influxdb または grafana でこれを照会するにはどうすればよいですか?

4

2 に答える 2

2

これは現時点では不可能だと思います(InfluxDB 0.9を使用)。時系列 (フィールド) 間の比率を計算するには、ネストされたクエリまたはInfluxDB 0.9 で廃止された結合のいずれかを実行できる必要があります。

SELECT errors_per_minute.value / pages_per_minute.value FROM errors_per_minute INNER JOIN pages_per_minute. InfluxDB 0.9 では、MERGE 操作も JOIN 操作もサポートされていません。

ただし、collectd から既にパーセンテージとして値をレポートしている場合は、このようなクエリを回避できます (バージョン 5.5 以降では、CPU をパーセンテージとしてレポートすることがサポートされています)。

execこれは、 CPU、メモリ、およびディスクの使用率を計算するための単純な bashスクリプトです。

#!/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"
于 2016-01-26T13:12:47.400 に答える