From d0ca96a759fe4510d196c8db1515dfc9b2ad078a Mon Sep 17 00:00:00 2001 From: Krasimir Angelov Date: Tue, 5 Feb 2013 16:44:06 +0200 Subject: [PATCH 1/5] Add StasD / Librato metrics backend recipe --- cookbooks/main/recipes/default.rb | 3 + cookbooks/statsd-librato/README.md | 27 +++++++ cookbooks/statsd-librato/recipes/default.rb | 72 +++++++++++++++++++ .../templates/default/config.js.erb | 8 +++ .../templates/default/monitrc.conf.erb | 5 ++ .../templates/default/statsd.erb | 14 ++++ 6 files changed, 129 insertions(+) create mode 100644 cookbooks/statsd-librato/README.md create mode 100644 cookbooks/statsd-librato/recipes/default.rb create mode 100644 cookbooks/statsd-librato/templates/default/config.js.erb create mode 100644 cookbooks/statsd-librato/templates/default/monitrc.conf.erb create mode 100644 cookbooks/statsd-librato/templates/default/statsd.erb diff --git a/cookbooks/main/recipes/default.rb b/cookbooks/main/recipes/default.rb index 0d7c6429..51362800 100644 --- a/cookbooks/main/recipes/default.rb +++ b/cookbooks/main/recipes/default.rb @@ -138,3 +138,6 @@ # postgresql9_pg_buffercache "postgres" # postgresql9_pg_freespacemap "postgres" #end + +# uncomment to include the StatsD-Librato recipe +# require_recipe "statsd-librato" diff --git a/cookbooks/statsd-librato/README.md b/cookbooks/statsd-librato/README.md new file mode 100644 index 00000000..ae4bd7fc --- /dev/null +++ b/cookbooks/statsd-librato/README.md @@ -0,0 +1,27 @@ +# StatsD with Librato Metrics backend + +## Overview + +This is a simple chef recipe that installs [StatsD][statsd] with [Librato Metrics](https://metrics.librato.com) backend. + +## Requirements + +* An active [Librato Metrics](https://metrics.librato.com/sign_up) account. + +## Configuration + +* Set your [Librato Metrics](https://metrics.librato.com) credentials in recipes/defatult.rb. + +```ruby +librato_email = "you@example.com" +librato_token = "your-token-goes-here" +``` + +## Enabling + +* Enable the recipe in cookbooks/main/recipes/default.rb. + +```ruby +# uncomment to include the StatsD-Librato recipe +require_recipe "statsd-librato" +``` diff --git a/cookbooks/statsd-librato/recipes/default.rb b/cookbooks/statsd-librato/recipes/default.rb new file mode 100644 index 00000000..d21e749b --- /dev/null +++ b/cookbooks/statsd-librato/recipes/default.rb @@ -0,0 +1,72 @@ +# +# Cookbook Name:: statsd-librato +# Recipe:: default +# + +# Set your Librato credentials +librato_email = "you@example.com" +librato_token = "your-token-goes-here" + +# Set your app name +app_name = "your-app-name-goes-here" + +# Set install dir for statsd +src_dir = "/usr/lib/statsd" + +statsd_port = 8126 + +statsd_enabled_env = ['production'].include?(node[:environment][:framework_env]) +statsd_enabled_instance = ['app_master', 'app'].include?(node[:instance_role]) + +if statsd_enabled_env && statsd_enabled_instance + execute "install statsd" do + command "git clone git://github.com/etsy/statsd.git" + cwd "/usr/lib" + not_if { File.exists?("#{src_dir}/.git/")} + user "root" + end + + execute "install statsd-librato-backend" do + command "npm install statsd-librato-backend" + cwd "/usr/lib/statsd" + not_if { File.exists?("#{src_dir}/node_modules/statsd-librato-backend/package.json")} + user "root" + end + + template "/data/#{app_name}/shared/config/statsd.js" do + owner 'deploy' + group 'deploy' + mode 0644 + source "config.js.erb" + variables({ + :statsd_port => port + :librato_email => librato_email, + :librato_token => librato_token + }) + end + + template "/data/#{app_name}/shared/statsd" do + owner 'deploy' + group 'deploy' + mode 0744 + source "statsd.erb" + variables({ + :src_dir => src_dir, + :app_name => app_name + }) + end + + template "/etc/monit.d/statsd.monitrc" do + owner 'deploy' + group 'deploy' + mode 0644 + source "monitrc.conf.erb" + variables({ + :app_name => app_name + }) + end + + execute "monit reload" do + action :run + end +end diff --git a/cookbooks/statsd-librato/templates/default/config.js.erb b/cookbooks/statsd-librato/templates/default/config.js.erb new file mode 100644 index 00000000..b5439b7a --- /dev/null +++ b/cookbooks/statsd-librato/templates/default/config.js.erb @@ -0,0 +1,8 @@ +{ + port: <%= @statsd_port %>, + backends: [ "statsd-librato-backend" ], + librato: { + email: "<%= @librato_email %>", + token: "<%= @librato_token %>" + } +} diff --git a/cookbooks/statsd-librato/templates/default/monitrc.conf.erb b/cookbooks/statsd-librato/templates/default/monitrc.conf.erb new file mode 100644 index 00000000..0ea0a2b6 --- /dev/null +++ b/cookbooks/statsd-librato/templates/default/monitrc.conf.erb @@ -0,0 +1,5 @@ +check process statsd + with pidfile /data/<%= @app_name %>/shared/pids/statsd.pid + start = "/data/<%= @app_name %>/shared/statsd start" as uid deploy and gid deploy + stop = "/data/<%= @app_name %>/shared/statsd stop" as uid deploy and gid deploy + group statsd diff --git a/cookbooks/statsd-librato/templates/default/statsd.erb b/cookbooks/statsd-librato/templates/default/statsd.erb new file mode 100644 index 00000000..2871e738 --- /dev/null +++ b/cookbooks/statsd-librato/templates/default/statsd.erb @@ -0,0 +1,14 @@ +#!/bin/bash + +case $1 in + start) + echo $$ > /data/<%= @app_name %>/shared/pids/statsd.pid; + exec 2>&1 node <%= @src_dir %>/stats.js /data/<%= @app_name %>/shared/config/statsd.js + ;; + stop) + kill `cat /data/<%= @app_name %>/shared/pids/statsd.pid` ;; + *) + echo "usage: statsd {start|stop}" ;; + +esac +exit 0 From eba07bec506c973264e93dfc60c9a08597ae0fcc Mon Sep 17 00:00:00 2001 From: Krasimir Angelov Date: Tue, 5 Feb 2013 16:49:26 +0200 Subject: [PATCH 2/5] Update cookbooks/statsd-librato/README.md --- cookbooks/statsd-librato/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cookbooks/statsd-librato/README.md b/cookbooks/statsd-librato/README.md index ae4bd7fc..1cb55ccd 100644 --- a/cookbooks/statsd-librato/README.md +++ b/cookbooks/statsd-librato/README.md @@ -2,7 +2,7 @@ ## Overview -This is a simple chef recipe that installs [StatsD][statsd] with [Librato Metrics](https://metrics.librato.com) backend. +This is a simple chef recipe that installs [StatsD](https://github.com/etsy/statsd) with [Librato Metrics](https://metrics.librato.com) backend. ## Requirements @@ -10,7 +10,7 @@ This is a simple chef recipe that installs [StatsD][statsd] with [Librato Metric ## Configuration -* Set your [Librato Metrics](https://metrics.librato.com) credentials in recipes/defatult.rb. +* Set your [Librato Metrics](https://metrics.librato.com) credentials in ```cookbooks/recipes/defatult.rb```. ```ruby librato_email = "you@example.com" @@ -19,7 +19,7 @@ librato_token = "your-token-goes-here" ## Enabling -* Enable the recipe in cookbooks/main/recipes/default.rb. +* Enable the recipe in ```cookbooks/main/recipes/default.rb```. ```ruby # uncomment to include the StatsD-Librato recipe From 79efb919f35c56f588d5b0c4829882df673cb3aa Mon Sep 17 00:00:00 2001 From: Krasimir Angelov Date: Wed, 6 Feb 2013 10:39:28 +0200 Subject: [PATCH 3/5] Fix typo - missing comma in a hash --- cookbooks/statsd-librato/recipes/default.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cookbooks/statsd-librato/recipes/default.rb b/cookbooks/statsd-librato/recipes/default.rb index d21e749b..f5f25fde 100644 --- a/cookbooks/statsd-librato/recipes/default.rb +++ b/cookbooks/statsd-librato/recipes/default.rb @@ -39,7 +39,7 @@ mode 0644 source "config.js.erb" variables({ - :statsd_port => port + :statsd_port => port, :librato_email => librato_email, :librato_token => librato_token }) From 4582959f543fa34cbff92de0789d92126ddb562f Mon Sep 17 00:00:00 2001 From: Krasimir Angelov Date: Fri, 12 Apr 2013 11:40:42 +0300 Subject: [PATCH 4/5] Fix - make sure we use correct username if there's custom username set for the environment --- cookbooks/statsd-librato/recipes/default.rb | 1 + cookbooks/statsd-librato/templates/default/monitrc.conf.erb | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/cookbooks/statsd-librato/recipes/default.rb b/cookbooks/statsd-librato/recipes/default.rb index f5f25fde..1de1e925 100644 --- a/cookbooks/statsd-librato/recipes/default.rb +++ b/cookbooks/statsd-librato/recipes/default.rb @@ -62,6 +62,7 @@ mode 0644 source "monitrc.conf.erb" variables({ + :user => node[:owner_name], :app_name => app_name }) end diff --git a/cookbooks/statsd-librato/templates/default/monitrc.conf.erb b/cookbooks/statsd-librato/templates/default/monitrc.conf.erb index 0ea0a2b6..7685ce4e 100644 --- a/cookbooks/statsd-librato/templates/default/monitrc.conf.erb +++ b/cookbooks/statsd-librato/templates/default/monitrc.conf.erb @@ -1,5 +1,5 @@ check process statsd with pidfile /data/<%= @app_name %>/shared/pids/statsd.pid - start = "/data/<%= @app_name %>/shared/statsd start" as uid deploy and gid deploy - stop = "/data/<%= @app_name %>/shared/statsd stop" as uid deploy and gid deploy + start = "/data/<%= @app_name %>/shared/statsd start" as uid <%= @user %> and gid <%= @user %> + stop = "/data/<%= @app_name %>/shared/statsd stop" as uid <%= @user %> and gid <%= @user %> group statsd From 04a8ab87d849547832c067232f6154e80a57df76 Mon Sep 17 00:00:00 2001 From: Krasimir Angelov Date: Fri, 12 Apr 2013 11:43:36 +0300 Subject: [PATCH 5/5] Fix - make sure we use correct username _everywhere_ --- cookbooks/statsd-librato/recipes/default.rb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/cookbooks/statsd-librato/recipes/default.rb b/cookbooks/statsd-librato/recipes/default.rb index 1de1e925..4ad3f527 100644 --- a/cookbooks/statsd-librato/recipes/default.rb +++ b/cookbooks/statsd-librato/recipes/default.rb @@ -34,8 +34,8 @@ end template "/data/#{app_name}/shared/config/statsd.js" do - owner 'deploy' - group 'deploy' + owner node[:owner_name] + group node[:owner_name] mode 0644 source "config.js.erb" variables({ @@ -46,8 +46,8 @@ end template "/data/#{app_name}/shared/statsd" do - owner 'deploy' - group 'deploy' + owner node[:owner_name] + group node[:owner_name] mode 0744 source "statsd.erb" variables({ @@ -57,8 +57,8 @@ end template "/etc/monit.d/statsd.monitrc" do - owner 'deploy' - group 'deploy' + owner node[:owner_name] + group node[:owner_name] mode 0644 source "monitrc.conf.erb" variables({