フラミナル

考え方や調べたことを書き殴ります。IT技術系記事多め

【stackdriver】 PUTVALでカスタムメトリクスを送信する(collectd経由)

f:id:lirlia:20211002011928p:plain

GoとかPythonでOpenCensusでいちいち書くのが煩わしすぎるので、手軽にシェルでstackdriverでメトリクスを送信する方法です。

元ネタ

stackoverflow.com

/home/testuser/test.sh

duした値を出力するだけです。

#!/bin/bash
INTERVAL=10
HOSTNAME=test
FOLDER="/home/testuser"

while true; do
  DU=$(du -sm ${FOLDER} | awk '{print $1}')

  # https://collectd.org/documentation/manpages/collectd-exec.5.shtml
  # PUTVAL Identifier [OptionList] Valuelist
  # Identifier: <host>/<plugin>-<plugin_instance>/<type>-<type_instance>
  # Type: See /opt/stackdriver/collectd/share/collectd/types.db
  echo "PUTVAL ${HOSTNAME}/exec-dir/gauge-usage/ interval=${INTERVAL} N:${DU}"
  sleep "${INTERVAL}"
done

testuserのディレクトリに置いてますが好きなところに置いてください。

/etc/stackdriver/collectd.d/dir.conf

LoadPlugin exec
<Plugin "exec">
    # userはrootにすると怒られるので注意
    Exec "testuser" "/home/testuser/test.sh"
</Plugin>

LoadPlugin target_set
PreCacheChain "PreCache"
<Chain "PreCache">
  # 名前はなんでもok
  <Rule "dir">
    <Match regex>
      # PUTVALの exec-dir のところを指定
      Plugin "^exec$"
      PluginInstance "^dir$"
    </Match>
    <Target "set">
      MetaData "stackdriver_metric_type" "custom.googleapis.com/folder/completesolar"
      # 動的に指定したい場合
      #MetaData "stackdriver_metric_type" "custom.googleapis.com/%{plugin_instance}/%{type_instance}"
      # ラベルに名前をつけたい場合
      # MetaData "label:name" "dir usage"
    </Target>
  </Rule>
</Chain>

ファイルを配置したあとに systemctl restart stackdriver-agent を実行。

確認する

しばらくしてから以下のリンク先の Metrics に custom と入力することでMetadataで設定した名前のメトリクスが閲覧できるようになります。

f:id:lirlia:20211002011150p:plain

いつまでも出てこない場合は値が送れていないので systemctl status stackdriver-agent などをしてみてください。(エラーがでてるはず)

あとはPUTVALの出力とかですね。以下が正しい出力です。

PUTVAL test/exec-dir/gauge-usage/ interval=10 N:929

参考