/icinga-vagrant

Vagrant boxes for Icinga 2, Icinga Web 2, modules, themes and integrations (Graphite, InfluxDB, Elastic, Graylog, etc.)

Primary LanguageRubyGNU General Public License v2.0GPL-2.0

Icinga Vagrant Boxes

Table of Contents

  1. About
  2. License
  3. Support
  4. Requirements
  5. Installation
  6. Configuration
  7. FAQ
  8. Authors
  9. Contributing

About

The Icinga Vagrant boxes allow you to run Icinga 2, Icinga Web 2 and integrations (Graphite, InfluxDB, Grafana, Elastic Stack, Graylog) in various scenarios.

A simple vagrant up fully installs these VMs and you are ready to explore the Icinga ecosystem and possible integrations.

You can use these boxes for your own local demos, or to learn how to use Icinga in your environment. The Puppet provisioner uses official upstream modules including puppet-icinga2 and puppet-icingaweb2.

Overview

Below are some sample screenshots. Keep in mind that software is under steady development, so screenshots and features may change.

Visualization

Icinga Web 2 Reporting

Icinga Web 2 Maps

Icinga Web 2 Business Process

Metrics

Icinga 2 Grafana with Graphite

Icinga Web 2 Detail View with Graphite

Icinga Web 2 Detail View with Grafana & Influxdb

Logs and Events

Elastic Stack and Icingabeat

Graylog

Icinga Web 2 Elasticsearch

Certificates

Certificate Monitoring

Dashboards and Themes

Dashing

Icinga Web 2 Theme Unicorn

License

Box specific code is licensed under the terms of the GNU General Public License Version 2, you will find a copy of this license in the LICENSE file included in the source package.

Included Puppet modules in the .puppet/modules directory provide their own license details.

Support

These boxes are built for demos and development tests only. Team members and partners may use these for their Icinga Camp presentations or any other event too.

Join the Icinga community channels for questions.

Note

Boxes can run snapshot builds and unstable code to test the latest and the greatest.

You can also use them to test Icinga packages prior to the next release.

In case you've found a problem or want to submit a patch, please open an issue on GitHub and/or create a PR.

Requirements

One of these virtualization providers:

Each Vagrant box setup requires at least 2 Cores and 2 GB RAM. The required resources are automatically configured during the vagrant up run.

Note

OpenStack VMs are provisioned remotely in your cloud provider. Please continue here for a full documentation.

Optional:

Linux

VirtualBox

Example on Fedora (needs RPMFusion repository for VirtualBox):

sudo dnf install vagrant
sudo dnf install virtualbox
vagrant plugin install virtualbox

Fedora uses libvirt by default. More details on VirtualBox can be found here.

Example on Ubuntu:

$ sudo apt-get install vagrant
$ sudo apt-get install virtualbox

libvirt

libvirt uses NFS for shared folders in the VMs, nfs_udp: false is already set.

nfs3 needs to be enabled in your local firewall to allow connections.

# firewall-cmd --permanent --add-service=nfs3
# firewall-cmd --reload

macOS

macOS runs best with the Parallels provider, VirtualBox works as well.

Windows

Windows requires VirtualBox as provider. You'll also need the Git package which includes SSH.

Install the Git package and set autocrlf to false.

Windows Git CRLF

You can also set the options on the command line afterwards:

C:\Users\michi> git.exe config --global core.autocrlf false

Set the Windows command line as default:

Windows Git Command Line

Note

If vagrant up hangs with Vagrant 2.0.0 on Windows 7, you might need to upgrade your Powershell version. See this note for details.

Providers

Choose one of the providers below. VirtualBox can be used nearly everwhere. If you have a Parallels Pro license on macOS, or prefer to use libvirt, that's possible too.

Virtualbox

If Virtualbox is installed, this will be enabled by default.

The Virtualbox provider uses the bento base box.

Parallels

You'll need to install the vagrant-parallels plugin first:

$ vagrant plugin install vagrant-parallels

The Parallels provider uses the bento base box.

VMware

Both VMware Workstation and the Vagrant plugin require their own license.

The Vagrant plugin installation is described here.

The VMware provider uses the bento base box.

Libvirt

You should have qemu and libvirt installed if you plan to run Vagrant on your local system. Then install the vagrant-libvirt` plugin:

$ vagrant plugin install vagrant-libvirt

The libvirt provider uses the official CentOS base boxes.

Installation

Linux

$ git clone https://github.com/Icinga/icinga-vagrant && cd icinga-vagrant

Change into the directory of the scenario and start the box(es).

$ cd standalone
$ vagrant up

Proceed here for an overview about all available boxes.

Windows

Clone this repository:

C:\Users\michi\Documents> git.exe clone https://github.com/Icinga/icinga-vagrant

Windows Git Clone

Change into the directory of the scenario and start the box(es).

Windows Vagrant Up

Proceed here for an overview about all available boxes.

Boxes

Each setup comes with the following basic tools installed:

Additionally, specific integrations, tools and modules are prepared for each scenario.

Standalone

Run Vagrant:

$ cd standalone && vagrant up

Application Interfaces

Application Url Credentials
Icinga Web 2 http://192.168.33.5/icingaweb2 icingaadmin/icinga
Icinga 2 API https://192.168.33.5:5665/v1 root/icinga
Graphite Web http://192.168.33.5:8003 -
Grafana http://192.168.33.5:8004 admin/admin
Dashing http://192.168.33.5:8005 -

Note: In case Dashing is not running, restart it manually:

$ vagrant ssh -c "sudo systemctl start dashing-icinga2"

Distributed

  • 2 VMs as Icinga 2 Master/Satellite scenario

Run Vagrant:

$ cd distributed && vagrant up

Application Interfaces

Application Url Credentials
Icinga Web 2 http://192.168.33.101/icingaweb2 icingaadmin/icinga
Icinga Web 2 http://192.168.33.102/icingaweb2 icingaadmin/icinga
Icinga 2 API https://192.168.33.101:5665/v1 root/icinga
Icinga 2 API https://192.168.33.102:5665/v1 root/icinga

InfluxDB

Run Vagrant:

$ cd influxdb && vagrant up

Application Interfaces

Application Url Credentials
Icinga Web 2 http://192.168.33.8/icingaweb2 icingaadmin/icinga
Icinga 2 API https://192.168.33.8:5665/v1 root/icinga
Grafana http://192.168.33.8:8004 admin/admin

Elastic Stack

Run Vagrant:

$ cd elastic && vagrant up

Application Interfaces

Application Url Credentials
Icinga Web 2 http://192.168.33.7/icingaweb2 icingaadmin/icinga
Icinga 2 API https://192.168.33.7:5665/v1 root/icinga
Kibana http://192.168.33.7:5602 icinga/icinga
Elasticsearch/Nginx http://192.168.33.7:9202 icinga/icinga
Kibana (TLS) https://192.168.33.7:5603 icinga/icinga
Elasticsearch/Nginx (TLS) https://192.168.33.7:9203 icinga/icinga

Graylog

Run Vagrant:

$ cd graylog && vagrant up

Application Interfaces

Application Url Credentials
Icinga Web 2 http://192.168.33.6/icingaweb2 icingaadmin/icinga
Icinga 2 API https://192.168.33.6:5665/v1 root/icinga
Graylog http://192.168.33.6:9000 admin/admin

Configuration

The default configuration for specific scenarios is stored in the Vagrantfile.nodes file. In case you want to modify its content to e.g. add synced folders or change the host-only IP address you can copy its content into the Vagrantfile.local file and modify it there.

Vagrantfile.local is not tracked by Git.

If you change the base box, keep in mind that provisioning only has been tested and developed with CentOS 7, no other distributions are currently supported.

Example for additional synced folders:

$ vim standalone/Vagrantfile.local

nodes = {
  'icinga2' => {
    :box_virtualbox => 'bento/centos-7.4',
    :box_parallels  => 'bento/centos-7.4',
    :box_hyperv     => 'bento/centos-7.4',
    :box_libvirt    => 'centos/7',
    :net            => 'demo.local',
    :hostonly       => '192.168.33.5',
    :memory         => '2048',
    :cpus           => '2',
    :mac            => '020027000500',
    :forwarded      => {
      '443'  => '8443',
      '80'   => '8082',
      '22'   => '2082',
      '8003' => '8082'
    },
    :synced_folders => {
      '../../icingaweb2-module-graphite' => '/usr/share/icingaweb2-modules/graphite'
    }
  }
}

If the vagrant-hostmanager plugin is installed an entry in /etc/hosts will be created to provide access by name.

Configuration: Icinga Package Repository

This requires you to edit the Hiera configuration tracked by Git. The setting below allows to control whether the Icinga release or snapshot package repositories are enabled by default.

That way you can easily either test the development snapshots or have stable packages for demos.

vim .puppet/hieradata/common.yaml

icinga::repo::type:                     "snapshot" # you can use 'release' too
#icinga::repo::type:                     "release"

FAQ

Vagrant Commands

Up

Start all VMs:

$ vagrant up

Depending on the provider you have chosen above, you might want to set it explicitely:

$ vagrant up --provider=virtualbox

SSH

SSH into the box as local vagrant user (Tip: Use sudo -i to become root):

$ vagrant ssh

Note

Multi-VM boxes require the hostname for vagrant ssh like so: vagrant ssh icinga2b. That works in a similar fashion for other sub commands.

Halt

Stop all VMs:

$ vagrant halt

Provision

Update packages/reset configuration for all VMs:

$ vagrant provision

Destroy

Destroy the VM (add -f to avoid the safety question)

$ vagrant destroy

Documentation Reference

Documentation for software used inside these boxes.

Project URL
Icinga 2 https://www.icinga.com/docs/icinga2/latest/doc/01-about/
Icinga Web 2 https://www.icinga.com/docs/icingaweb2/latest/doc/01-About/
Director https://www.icinga.com/docs/director/latest/doc/01-Introduction/
Graphite https://graphite.readthedocs.io
InfluxDB https://docs.influxdata.com/influxdb/
Grafana https://docs.grafana.org
Elastic https://www.elastic.co/guide/
Graylog http://docs.graylog.org

Vagrant update

On local config change (git pull for this repository).

$ pwd
$ git pull
$ git log
$ vagrant provision

Behind a proxy

If you are working behind a proxy, you can use the proxyconf plugin.

Install the plugin:

$ vagrant plugin install vagrant-proxyconf

Export the proxy variables into your environment:

$ export VAGRANT_HTTP_PROXY=http://proxy:8080
$ export VAGRANT_HTTPS_PROXY=http://proxy:8080

Vagrant exports the proxy settings into the VM and provisioning will then work.

Authors

Thanks to all contributors! :)

  • lippserd for the initial Vagrant box idea from Icinga Web 2.
  • gunnarbeutner for the base setup with Icinga 2.
  • NETWAYS for sponsoring the initial Icinga 2 Cluster setup.
  • bernd for the Graylog box.
  • nbuchwitz for fixes and workarounds on broken packages.
  • kornm for the Vagrant HTTP proxy FAQ.
  • ruzickap for the libvirt provider.
  • mightydok for fixes on Virtualbox provider.
  • joonas for Puppet provisioner fixes.
  • tomdc for his contributions to Icinga 1.x/Jasper.
  • martbhell for the OpenStack provider.

Contributing

Overview

Each box uses a generic Vagrantfile to set the required resources for initial VM startup. The Vagrantfile includes the Vagrantfile.nodes file which defines VM specific settings. In addition to that, tools/vagrant_helper.rb loads all pre-defined functions for provider and provisioner instantiation. Furthermore it configures vagrant-hostmanager if the plugin is installed.

The generic shell_provisioner.sh scripts ensure that all VM requirements are fulfilled and also takes care about installing Puppet which will be used as provisioner in the next step.

For OpenStack, there's a special SSH IP address override in place which provisions Puppet/Hiera with an auto-generated config file. This is needed for all integrations to work properly.

The main entry point is the Puppet provisioner which calls the default.pp environment resource. Anything compiled into this catalog will be installed into the VM.

Base Boxes

Provider Base Box
VirtualBox Bento
Parallels Bento
libvirt libvirt
OpenStack NWS CentOS 7

Pull updates.

vagrant box update

Tools

InfluxDB

Current version via HTTP API:

curl -sl -I 192.168.33.8:8086/ping

Show tags on a database:

# influx

use icinga2
show tag keys on icinga2

Puppet Module Overview

The following Puppet modules are used for provisioning the boxes, installing packages and configuring everything for your needs. In addition to these official modules, specific Puppet profiles have been created to avoid code duplication.

The modules are pulled into this repository as git subtree. The main reason for not using submodules or the official way of installing Puppet modules is that the upstream source may be gone or unreachable. That must not happen with this Vagrant environment.

General:

Name Puppet Version Path Url
puppetlabs-stdlib >= 2.7.20 .puppet/modules/stdlib https://github.com/puppetlabs/puppetlabs-stdlib.git
puppetlabs-concat >= 4.7.0 .puppet/modules/concat https://github.com/puppetlabs/puppetlabs-concat.git
puppetlabs-apache >= 4.7.0 .puppet/modules/apache https://github.com/puppetlabs/puppetlabs-apache.git
puppetlabs-mysql >= 4.7.0 .puppet/modules/mysql https://github.com/puppetlabs/puppetlabs-mysql.git
puppetlabs-vcsrepo >= 4.7.0 .puppet/modules/vcsrepo https://github.com/puppetlabs/puppetlabs-vcsrepo.git
puppet-module-epel >= 3.0.0 .puppet/modules/epel https://github.com/stahnma/puppet-module-epel.git
puppet-php >= 4.7.0 < 5.0.0 .puppet/modules/php https://github.com/voxpupuli/puppet-php.git
puppet-selinux >= 4.7.1 .puppet/modules/selinux https://github.com/voxpupuli/puppet-selinux.git
puppetlabs-java >= 4.7.0 .puppet/modules/java https://github.com/puppetlabs/puppetlabs-java.git
puppet-yum >= 4.6.1 .puppet/modules/yum https://github.com/voxpupuli/puppet-yum.git
puppet-archive >= 4.7.1 .puppet/modules/archive https://github.com/voxpupuli/puppet-archive.git
puppet-wget >= 4.7.0 .puppet/modules/wget https://github.com/rehanone/puppet-wget.git
puppet-vim >=4.0.0 < 5.0.0 .puppet/modules/vim https://github.com/saz/puppet-vim.git
puppet-datacat Type for ES .puppet/modules/datacat https://github.com/richardc/puppet-datacat.git
puppet-inifile >= 4.7.0 .puppet/modules/inifile https://github.com/puppetlabs/puppetlabs-inifile.git
puppet-timezone >= 4.0.0 .puppet/modules/timezone https://github.com/saz/puppet-timezone.git
puppet-snmp >= 5.5.8 < 7.0.0 .puppet/modules/snmp https://github.com/voxpupuli/puppet-snmp.git
puppet-systemd >= 4.10 < 7.0.0 .puppet/modules/systemd https://github.com/camptocamp/puppet-systemd.git

Specific projects:

Name Puppet Version Path Url
puppet-elastic-stack >= 4.6.1 .puppet/modules/elastic_stack https://github.com/elastic/puppet-elastic-stack.git
puppet-icinga2 4.x .puppet/modules/icinga2 https://github.com/Icinga/puppet-icinga2.git (Patch for Elasticsearch)
puppet-icingaweb2 >= 4.7.0 .puppet/modules/icingaweb2 https://github.com/Icinga/puppet-icingaweb2.git
puppet-graylog 4.x .puppet/modules/graylog https://github.com/Graylog2/puppet-graylog.git
puppet-elasticsearch >= 4.5.0 .puppet/modules/elasticsearch https://github.com/elasticsearch/puppet-elasticsearch.git
puppet-nginx >= 4.7.0 .puppet/modules/nginx https://github.com/voxpupuli/puppet-nginx.git
puppet-logstash >= 4.6.1 .puppet/modules/logstash https://github.com/elastic/puppet-logstash.git
puppet-kibana >= 4.5.0 .puppet/modules/kibana https://github.com/elastic/puppet-kibana.git
puppet-filebeat >= 4.0.0 .puppet/modules/filebeat https://github.com/pcfens/puppet-filebeat.git
puppet-mongodb >= 5.5.8 < 7.0.0 .puppet/modules/mongodb https://github.com/voxpupuli/puppet-mongodb.git
golja-influxdb >= 3.0.0 < 5.0.0 .puppet/modules/influxdb https://github.com/n1tr0g/golja-influxdb.git
puppet-graphite >= 3.0.0 < 5.0.0 .puppet/modules/graphite https://github.com/echocat/puppet-graphite.git
puppet-grafana >= 4.7.1 .puppet/modules/grafana https://github.com/voxpupuli/puppet-grafana.git

Puppet Module Git Subtree

Notes for developers only.

Add subtree:

$ git subtree add --prefix .puppet/modules/vim https://github.com/saz/puppet-vim master --squash

Update subtree:

$ git subtree pull --prefix .puppet/modules/postgresql https://github.com/puppetlabs/puppetlabs-postgresql.git master --squash