続Libratoコード化: Space・Alertでテンプレートを使う

先日の記事で紹介したLibrato管理ツールlbrt」にテンプレート機能を付けました。

github.com

基本的な使い方は以下の通り。

template "dstat" do
  chart "load_avg" do
    type "line"
    stream do
      metric "dstat.#{context.space_name}.load_avg"
      type "gauge"
      source "*"
      group_function "breakout"
      summary_function "average"
    end
  end
end

space "my-host-001" do
  include_template "dstat"
end

Alert・Serviceでも同様に使うことができます。

以下のような書き方もできます。

template "dstat" do
  space context.hostname + context.my_id do
    chart "load_avg" do
      type "line"
      stream do
        metric "dstat.#{context.space_name}.load_avg"
        type "gauge"
        source "*"
        group_function "breakout"
        summary_function "average"
      end
    end
  end
end

contest[:my_id] = "100"
include_template "dstat", hostname: "my-host"

templateメソッドの呼び出しはトップレベルのみですが、include_templateはどこでも使えます。

template "my stream" do
  stream do
    metric "dstat.#{context.space_name}.load_avg"
    type "gauge"
    source "*"
    group_function "breakout"
    summary_function "average"
  end
end

space "my-host-001" do
  chart "load_avg" do
    type "line"
    include_template "my stream"
  end
end

利用例①: テンプレートをホストごとSpace(ダッシュボード)に適用する

# requireでテンプレートを他のファイルに分けることもできます
template "dstat" do
  chart "load_avg" do
    type "line"
    stream do
      metric "dstat.#{context.space_name}.load_avg"
      type "gauge"
      source "*"
      group_function "breakout"
      summary_function "average"
    end
  end
end

space "my-host-001" do
  include_template "dstat"
end

space "my-host-002" do
  include_template "dstat"
end

space "my-host-003" do
  include_template "dstat"

  # このホストはMySQLのチャートも表示する
  chart "mysql qps" do
    type "line"
    stream do
      metric "mysql.qps"
      type "gauge"
      source "*"
      group_function "breakout"
      summary_function "average"
    end
  end
end

利用例②: テンプレートをホストごとのアラート適用する

# requireでテンプレートを他のファイルに分けることもできます
template "alert set1" do
  alert "#{context.hostname}/login-delay" do
    description "desc"
    attributes "runbook_url"=>"http://example.com"
    active true
    rearm_seconds 600
    rearm_per_signal false

    condition do
      type "below"
      metric_name 'login-delay'
      source nil
      threshold 4.0
      summary_function "sum"
    end

    service "mail", "my email"
  end

  alert "#{context.hostname}/login-delay2" do
    description "desc"
    attributes "runbook_url"=>"http://example.com"
    active true
    rearm_seconds 600
    rearm_per_signal false

    condition do
      type "below"
      metric_name 'login-delay2'
      source nil
      threshold 4.0
      summary_function "sum"
    end

    service "mail", "my email"
  end
end

include_template "alert set1", hostname: 'host1'

"host2".tap do |host|
  include_template "alert set1", hostname: host
  # host2はMySQLも監視する
  alert "#{host}/mysql.qps" do
    description "desc"
    attributes "runbook_url"=>"http://example.com"
    active true
    rearm_seconds 600
    rearm_per_signal false

    condition do
      type "below"
      metric_name 'mysql.qps'
      source nil
      threshold 4.0
      summary_function "sum"
    end

    service "mail", "my email"
    service "hipchat", "my hipchat"
  end
end

これでまた、Zabbixが不要な世界に一歩近づき、人類の進歩と平和に貢献することができました。

どうぞご利用ください。