Skip to content

Instantly share code, notes, and snippets.

@threetee
Created July 6, 2012 15:35
Show Gist options
  • Save threetee/3060935 to your computer and use it in GitHub Desktop.
Save threetee/3060935 to your computer and use it in GitHub Desktop.
logstash::server recipe
rs_utils_marker :begin
# TODO: restrict search to servers in same environment
log "Retrieving elasticsearch server list via RightLink"
rs_utils_server_collection "elasticsearch_servers" do
tags ["cf_elasticsearch:active"]
secondary_tags 'server:private_ip_0'
action :load
end
# For now, just load the first one we find, and if we didn't find any, then fall back to attributes
if node.has_key?(:server_collection)
es_results = node[:server_collection]["elasticsearch_servers"]
end
unless es_results.nil? || es_results.empty?
es_server = es_results.first
es_server_ip = es_server[1].detect { |i| i =~ /server:private_ip_0/ }.split('=').last
else
log "No elasticsearch server_collection results, using default: '#{node['logstash']['elasticsearch_ip']}'"
es_server_ip = node['logstash']['elasticsearch_ip']
end
log "Using elasticsearch server IP: '#{es_server_ip}'"
# TODO: restrict search to servers in same environment
log "Retrieving graphite server list via RightLink"
rs_utils_server_collection "graphite_servers" do
tags ["cf_graphite:active"]
secondary_tags 'server:private_ip_0'
action :load
end
if node.has_key?(:server_collection)
graphite_results = node[:server_collection]["graphite_servers"]
end
unless graphite_results.nil? || graphite_results.empty?
graphite_server = graphite_results.first
graphite_server_ip = graphite_server[1].detect { |i| i =~ /server:private_ip_0/ }.split('=').last
else
log "No graphite server_collection results, using default: '#{node['logstash']['graphite_ip']}'"
graphite_server_ip = node['logstash']['graphite_ip']
end
log "Using graphite server IP: '#{graphite_server_ip}'"
#create directory for logstash
directory "#{node[:logstash][:basedir]}/server" do
action :create
mode "0755"
owner "#{node[:logstash][:user]}"
group "#{node[:logstash][:group]}"
end
%w{bin etc lib log tmp patterns }.each do |ldir|
directory "#{node['logstash']['basedir']}/server/#{ldir}" do
action :create
mode "0755"
owner node['logstash']['user']
group node['logstash']['group']
end
link "/var/lib/logstash/#{ldir}" do
to "#{node['logstash']['basedir']}/server/#{ldir}"
end
end
# installation
cookbook_file "#{node[:logstash][:basedir]}/server/lib/logstash-#{node[:logstash][:server][:version]}-monolithic.jar" do
source "logstash-#{node[:logstash][:server][:version]}-monolithic.jar"
owner "root"
group "root"
mode "0755"
end
link "#{node[:logstash][:basedir]}/server/lib/logstash.jar" do
to "#{node[:logstash][:basedir]}/server/lib/logstash-#{node[:logstash][:server][:version]}-monolithic.jar"
notifies :restart, "service[logstash_server]"
end
directory "#{node[:logstash][:basedir]}/server/etc/conf.d" do
action :create
mode "0755"
owner "#{node[:logstash][:user]}"
group "#{node[:logstash][:group]}"
end
link "/etc/logstash" do
to "#{node[:logstash][:basedir]}/server/etc"
end
runit_service "logstash_server"
template "#{node[:logstash][:basedir]}/server/etc/logstash.conf" do
source "#{node[:logstash][:server][:base_config]}"
owner "#{node[:logstash][:user]}"
group "#{node[:logstash][:group]}"
mode "0644"
variables(:graphite_server_ip => graphite_server_ip,
:es_server_ip => es_server_ip,
:enable_embedded_es => node['logstash']['server']['enable_embedded_es'],
:es_cluster => node['logstash']['elasticsearch_cluster'])
notifies :restart, "service[logstash_server]"
action :create
end
# Tag the server as an active logstash server
# TODO: generate the tag name from attributes so the cookbook will be more re-usable
tag = "cf_logstash:active=true"
log "Tagging server with #{tag}"
right_link_tag tag
# TODO: set up process logging using rs_utils_monitor_process
rs_utils_marker :end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment