Ansible: do zero ao Zabbix

Fala pessoal, hoje o artigo é “topzera da balada”, vamos conhecer um pouco sobre Ansible, uma ferramenta que está sendo muito utilizada pelos profissionais de TI mundo a fora. Pretendo ser direto ao ponto e mostrarei desde a parte conceitual da ferramenta até comandos ad-hoc no servidor do Zabbix.

  • O que é o Ansible:

Antes de mostrar a ementa do que vamos aprender, vale explicar o que é essa ferramenta incrível e como ela funciona, o Ansible é uma ferramenta para automação, configuração e orquestração de servidores, e é mantida pela Red-Hat e mais, é open-source.

Empresas em destaque que usam Ansible.

Eu ainda estou conhecendo o Ansible, e esse artigo será justamente para mostrar para os profissionais que estão começando assim como eu, que é importante aprender sobre essa ferramenta, porque ela atinge diretamente a configuração de toda a esteira DevOps até o teste final de um sistema, aplicativo.

  • O poder do Ansible:

Existem outros gerenciadores de configuração como o Puppet, Chef, que são excelentes também para se trabalhar. Considerei o Ansible porque ele não precisa de agente no host que será atingido, utiliza-se apenas uma conexão SSH e já é possível notar o quão ele é fantástico, deixando tudo organizado, atingindo centenas de máquinas, onde também é possível fazer inventários e organizar tudo em grupos, é demais, “sensacional”.

Vou deixar aqui o link do projeto do Ansible: https://docs.ansible.com/

Ansible Process

Ele é rico em recursos e funcionalidades, possuindo muitos módulos para se usar, tais como, cloud providers (AWS, Azure, GCP), Docker, Grafana, Zabbix, VMware, MySQL, Postgres, Linode, entre outros. Também podemos usar o comando ansible-galaxy onde é possível baixar e usar os playbooks escritos por outros usuários da comunidade.

  • O que vamos aprender nesse artigo:

A estrutura do Ansible;
Casos de uso do Ansible;
Instalação;
Principais arquivos;
Comandos ad-hoc no servidor Zabbix.

  • Casos de uso do Ansible:

Provisionamento;
Gerência de configuração;
Entrega contínua;
Segurança;
Orquestração;
Implantação de aplicativos.

Arquitetura do Ansible.
  • Um pouco da estrutura do Ansible:

Inventory: é o arquivo que contém a lista de hosts que serão gerenciados pelo Ansible.

Modules: são os recursos (serviços, pacotes, arquivos) que o Ansible usará para controlar e gerenciar os hosts.

Tasks: são as tarefas que serão executadas nos hosts, podemos usar também o modo de task chamado ad-hoc (comandos executados diretamente pela linha de comando sem playbooks).

Exemplo de comandos ad-hoc:

$ ansible all -m ping
$ ansible web-group -m ping
$ ansible all -a "/bin/echo hi"
$ ansible all -a "/sbin/reboot" -f 10
$ ansible all -m user -a "name=joe password=wat"
$ ansible all -m yum -a "name=nginx state=installed"
$ ansible all -m service -a "name=nginx state=started"

Playbooks: é um conjunto de tarefas, passos de um processo de configuração que são escritos em YAML (Yet Another Markup Language) que serão executadas nos hosts remotos pelo Ansible. É uma linguagem de fácil interpretação.

  • Instalação do Ansible:

A instalação do Ansible é muito simples, abaixo explico como vamos montar nosso cenário.

- Nesse artigo vou usar apenas uma instância com sistema operacional CentOS 7 como node gerenciado (Zabbix Server).
- Usar outro CentOS com o Ansible instalado (será o servidor de administração do ambiente).
- Não vou abordar aqui a configuração da instância, fica de sua livra escolha utilizar qualquer cloud provider do mercado, acho legal começar pelo EC2 da AWS, pois existem muitos artigos sobre isso em fóruns e blogs pela internet e a documentação da AWS é demais.

De acordo com a documentação do Ansible:

On RHEL and CentOS: $ sudo yum install -y ansible

Feita a instalação vamos conferir:

$ ansible --version
ansible 2.8.4
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /bin/ansible
python version = 2.7.5 (default, Jun 20 2019, 20:27:34) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
  • Principais arquivos do Ansible:
$ tree 
.
├── ansible.cfg
├── hosts
└── roles
1 directory, 2 files

Onde temos:

- O arquivo de configuração é definido no arquivo “/etc/ansible/ansible.cfg”.
- Invetário de hosts é definido no arquivo “/etc/ansible/hosts”.
- Já o diretório de roles é uma forma de reaproveitar códigos entre vários Playbooks, as roles ficam no diretório: “/etc/ansible/roles”.
- É necessário criar o diretório de playbooks para armazenar seus códigos “/etc/ansible/playbooks”

  • Comandos iniciais:

Bom, está chegando na parte que eu gosto, na prática! Eu tive que explorar a parte conceitual para que o pessoal entendesse do zero todo o contexto da ferramenta. Vamos iniciar com alguns comandos básicos.

1- Agora vamos fazer um simples teste de conexão para verificar o “ping” local da minha instância:

$ ansible -i hosts all -m ping
localhost | SUCCESS => {
"changed": false,
"ping": "pong"
}

2- Agora teste de ping com o node remoto (Zabbix Server):

$ ansible zabbix -m ping -k
SSH password:
192.168.20.101 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}

3- Vou mostrar um módulo importante para gerenciamento de arquivos, que é o módulo file. Vou criar um diretório para scripts no meu servidor Zabbix.

$ ansible zabbix -k -m file -a "path=/etc/zabbix/zabbix_scripts state=directory"
192.168.20.101 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},

Super indico estudarem a documentação do Ansible, existem muitos módulos para se usar, veja uma prévia:

Documentação do Ansible

4- Vamos parar o serviço do Zabbix no node remoto usando o módulo service:

$ ansible zabbix -k -m service -a "name=zabbix-server state=stop"
SSH password:
192.168.20.101 | FAILED! => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"msg": "value of state must be one of: reloaded, restarted, started, stopped, got: stop"
}

Ops, deu erro! Vamos ver o que eu fiz de errado. Olha o log de erro:

"msg": "value of state must be one of: reloaded, restarted, started, stopped, got: stop"

Corrigindo o erro:

$ ansible zabbix -k -m service -a "name=zabbix-server state=stopped"
SSH password:
192.168.20.101 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},

Eu simplesmente coloquei “stop” no comando, sendo que era “stopped”.

“Fácil como voar, não?!”

5- Copiando um script para o Zabbix:

$ ansible zabbix -k -m copy -a "src=/home/backup_zabbix_server dest=/etc/zabbix/backup_zabbix_server"
SSH password:
192.168.20.101 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},

6- Como eu uso muito o Zabbix, preciso de um pacote no servidor (Zabbix Sender), vou instalar ele usando o modulo do yum:

$ ansible zabbix -k -m yum -a "name=zabbix-sender state=latest"
SSH password:
192.168.20.101 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},

Olhando a versão do zabbix-sender no host remoto, ele mostra a última, como pedido:

$ zabbix_sender --version
zabbix_sender (Zabbix) 4.2.6
Revision d3bb18bbc4 26 August 2019, compilation time: Aug 26 2019 16:26:54

Demais isso né? Sensacional essa ferramenta.

Nesse artigo não foi abordado o uso de playbooks, eu estou preparando outro artigo somente de playbooks, como usar, melhores editores, tudo isso para automatizar sua infraestrutura.

  • Conclusão:

Espero que tenham gostado do artigo, foi bem simples, uma visão geral de como o Ansible funciona. Existem mais um MONTEEE de recursos que não foi contemplado nesse artigo.
Essa ferramenta está sendo bem utilizada por times de DevOps, caso você esteja afim de usar na sua empresa, sugiro começar com tarefas simples, como instalar aplicativos ou criar usuários. Existem muitos cursos nas plataformas Udemy, YouTube, GitHub e sem contar que a documentação do Ansible é excelente.

Obrigado pela leitura, fico à disposição para trocarmos experiências. #VAIIII

Senior Linux Administrator @IBM

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store