share facebook facebook2 twitter menu hatena pocket slack

2014.05.17 SAT

Sensu-client登録時に独自attributeを付与する(additional parameter)

岸上 健太郎

WRITTEN BY岸上 健太郎

cloudpackがみさんです。

sensu-pluginをテストしてる私ですお早うございます。

自分で見つけたわけではないのですが、忘れてしまうのでadditional parameterについてメモします

sensu-clientをserverへ登録するときに与えられるパラメータは固定されているように見えます。

parameter 意味
address ホスト名やIPアドレス(node[“hostname”])
subscriptions sensuに登録するホストのロール(chefのnode[“role”])とか
keepalive client – serverの通信チェック(秒)
handlers 通知に利用するイベントハンドラ

しかしsensuのLWRPを見てみるとadditonalというHash attributeがありました。

providers/client.rb

resources/client.rb

これを利用するとsensu-clientがsensu-serverへ情報を登録するとき、独自のattributeを渡すことができそうで、実際に試したところ追加できました。

例えばsensu-client登録時にEC2のメタデータを渡す時はこのように書くとうまく渡せます。

公式sensuのrecipeを直接書き換えるのではなく、include_recipeで取り込みましょう。

  • sensu-client用のadditional attributeを登録

curlを利用していますが、ohaiのEC2ヒントを追加していたら(node[“ec2”][“…”])でも取得できると思います

default.ec2_instance_id         = %x(curl -s http://169.254.169.254/latest/meta-data/instance-id)
default.ec2_availability_zone   = %x(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone)
default.ec2_instance_type       = %x(curl -s http://169.254.169.254/latest/meta-data/instance-type)
  • sensu-clientのrecipe

additionalパラメータとして、EC2のmetadataとどのプロジェクトで利用しているのかといった情報を書いてみます。

include_recipe "sensu::client"

sensu_client node.sensu.client_name do
  address node.sensu.client_ipaddress
  subscriptions node.roles
  keepalive(
    thresholds: {
      warning: 10,
      critical: 180,
    },
    handlers: node.sensu.default_handlers,
    refresh: 1800,
  )
  additional(
    ec2_instance_id:        node.ec2_instance_id,
    ec2_availability_zone:  node.ec2_availability_zone,
    ec2_instance_type:      node.ec2_instance_type,
    "customer_name": "test",
    "customer_description": "test",
    "project_name": "testpj",
    "project_description": "test project"
  )
end 
  • node.json
"run_list" : [ "recipe[sensu-run]"
  • 上記recipeの適用

適用後/etc/sensu/client.jsonにEC2のmetadataが反映されています。

{
  "client": {
    "name": "********_i-15c7290c",
    "address": "192.168.XXX.XXX",
    "subscriptions": [
      "all"
    ],
    "keepalive": {
      "thresholds": {
        "warning": 10,
        "critical": 180
      },
      "handlers": [
        "mailer-ses"
      ],
      "refresh": 1800
    },
    "ec2_instance_id": "i-15c7290c",
    "ec2_availability_zone": "ap-northeast-1c",
    "ec2_instance_type": "c3.large",
    "customer_name": "test",
    "customer_description": "test",
    "project_name": "testpj",
    "project_description": "test project"
  }
}

sensu-clientを起動してsensu-adminで確認すると
いい感じではないのですがadditional attributeも表示してくれます。

f:id:buta9999:20140514213155p:plain

f:id:buta9999:20140514214941p:plain

AWS-SDKを組み込むとタグ情報をひもづけることができるかもしれませんね(chef-server + knife-ec2でもいいのかな?)

これでattributeに悩むことがなくなりました。

こちらの記事はなかの人(がみさん)監修のもと掲載しています。
元記事は、こちら

岸上 健太郎

岸上 健太郎

頑張るぞ!