Provisione um servidor StatsD no EC2 usando Vagrant e Chef

É realmente super fácil de fazer. O Vagrant 1.2.x permite o provedor aws, o que significa que o Vagrant pode provisionar uma instância EC2 da mesma forma que faz com uma VM. Além disso, se usarmos o Berkshelf para gerenciamento de dependência de livro de receitas, podemos conectá-lo diretamente ao processo do Vagrant e evitar o armazenamento local de todos esses livros de receitas.

./Berksfile

site :opscode
cookbook
'apt'
cookbook
'statsd', git: 'https://github.com/librato/statsd-cookbook.git'
cookbook
'graphite', git: 'https://github.com/hw-cookbooks/graphite.git'

./Vagrantfile

# -*- mode: ruby -*-
# vi: set ft=ruby :
VAGRANTFILE_API_VERSION
= "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config
.omnibus.chef_version = :latest
config
.vm.box = "dummy"
config
.vm.box_url = "https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box"
# Provider
config
.vm.provider :aws do |aws, override|
aws
.access_key_id = "<redacted>"
aws
.secret_access_key = "<redacted>"
aws
.keypair_name = "<redacted>"
aws
.ami = "ami-5f2abc6f" # "Ubuntu 12.04 LTS with Chef"
aws
.region = "us-west-2"
aws
.instance_type = "t1.micro"
aws
.security_groups = ["Basic", "StatsD"]
override
.ssh.username = "ubuntu"
override
.ssh.private_key_path = "path/to/your/key"
aws
.tags = {
'Name' => 'Stats (Vagrant Provision)'
}
end
# Provisioning
config
.berkshelf.enabled = true
config
.vm.provision :chef_solo do |chef|
chef
.add_recipe "apt"
chef
.add_recipe "statsd"
chef
.add_recipe "graphite"
end
end

Apenas 2 arquivos necessários! Você vai querer ter certeza de ter resolvido as seguintes dependências:

  • Vagrant 1.2.x instalado
  • gema berkshelf ( gem install berkshelf)
  • Plugin vagrant-berkshelf instalado ( )vagrant plugin install vagrant-berkshelf
  • Plug in vagrant-omnibus instalado ( )vagrant plugin install vagrant-omnibus
  • Chave de acesso da AWS e chave de acesso secreta
  • Par de chaves local AWS
  • Grupo (s) de segurança EC2 permitindo
    • http (80) para a visualização da web de grafite
    • udp (8125 por padrão) o protocolo e a porta usados ​​pelo statsd
    • ssh (22) necessário para que o vagrant forneça a instância

Supondo que todas essas dependências sejam cobertas e os valores corretos estejam conectados ao Vagrantfile(como chaves de acesso e caminhos de chave, bem como região e nome de ami, caso precisem ser diferentes), basta o seguinte comando:

vagrant up --provider aws

Esse comando criará a instância. Antes do provisionamento, o plug-in omnibus verificará se o chef está instalado e o plug-in berskshelf executará seu comando de instalação, e o provisionamento chef cuidará do resto a partir daí. A criação da instância e o provisionamento podem demorar um pouco, portanto, esteja preparado para aguardar cerca de 10 minutos.

Quando estiver concluído, abra sua instância ec2 em um navegador da web e você encontrará a interface Graphite. Envie algumas estatísticas para o servidor StatsD:

Concha:

gem install statsd-ruby
irb

rubi:

require 'statsd-ruby'
statsd
= Statsd.new "<your ec2 instance host name>"
# Incrementer:
statsd
.increment "hello.world"
# Timer
statsd
.timing 'glork', 320
# Guage
statsd
.gauge 'bork', 100

Lembre-se também de que o StatsD tem opções de back-end adicionais , e o livro de receitas de statsd declarado Berksfileaqui é mantido pelo Librato , que fornece um back-end próprio. A configuração é tão simples quanto alguns atributos json no Vagrantfile.

Eu também passei por esse processo em uma essência aqui: https://gist.github.com/amoslanka/6245043

Ressalvas

O mundo da AWS é um pouco particular e, se algo der errado, você geralmente receberá uma resposta 400, que o Vagrant não consegue explicar além disso, então não há muitas explicações. Algumas coisas que observei são as seguintes:

  • Certifique-se de que o ami especificado vive na região especificada.
  • Certifique-se de especificar grupos de segurança por nome, não por id.