diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..e89e37d1f00cca8fad64b53118ed2e0e4117557c --- /dev/null +++ b/README.md @@ -0,0 +1,7 @@ +## Resources + +- [Install](https://www.elastic.co/guide/en/beats/heartbeat/6.5/heartbeat-installation.html) +- [Blogpost](https://www.elastic.co/blog/uptime-monitoring-with-heartbeat-and-the-elastic-stack) +- [Forum](https://discuss.elastic.co/c/beats/heartbeat) +- [GitHub](https://github.com/elastic/beats) +- [Monitor Config](https://www.elastic.co/guide/en/beats/heartbeat/6.5/configuration-heartbeat-options.html) diff --git a/handlers/main.yml b/handlers/main.yml new file mode 100644 index 0000000000000000000000000000000000000000..32317349c7066c87e6dd2d482ea4b0802b58c2fd --- /dev/null +++ b/handlers/main.yml @@ -0,0 +1,19 @@ +--- +# file: roles/heartbeat/handlers/main.yml + +- name: "Add Heartbeat to Boot-List" + systemd: + name: 'heartbeat-elastic' + state: 'started' + daemon_reload: yes + enabled: yes + +- name: "Start Heartbeat" + service: + name: 'heartbeat-elastic' + state: 'started' + +- name: "Restart Heartbeat" + service: + name: 'heartbeat-elastic' + state: 'restarted' diff --git a/meta/main.yml b/meta/main.yml new file mode 100644 index 0000000000000000000000000000000000000000..08947d7814d175dcc05547b85f504fac1714cbe0 --- /dev/null +++ b/meta/main.yml @@ -0,0 +1,4 @@ +--- + +dependencies: +- { role: kibana } diff --git a/tasks/config.yml b/tasks/config.yml new file mode 100644 index 0000000000000000000000000000000000000000..1b42116529d2b70400b4a9e8389850722c64b706 --- /dev/null +++ b/tasks/config.yml @@ -0,0 +1,23 @@ +--- +# file: roles/heartbeat/tasks/config.yml + +- name: "Ensure config directories" + file: + path: '/etc/heartbeat/monitors.d' + state: 'directory' + +- name: "Configure Heartbeat" + template: + src: 'heartbeat.yml' + dest: '/etc/heartbeat/heartbeat.yml' + owner: 'root' + group: 'root' + mode: '600' + notify: + - "Restart Heartbeat" + +- name: "Copy all monitor configurations" + copy: + src: '{{ inventory_dir }}/files/heartbeat/' + dest: '/etc/heartbeat/monitors.d/' + mode: '600' diff --git a/tasks/install.yml b/tasks/install.yml new file mode 100644 index 0000000000000000000000000000000000000000..6f3369f733073631e8c39abb863ef776aafe6b0d --- /dev/null +++ b/tasks/install.yml @@ -0,0 +1,22 @@ +--- +# file: roles/heartbeat/tasks/install.yml + +- name: "Apt Key" + apt_key: + url: 'https://artifacts.elastic.co/GPG-KEY-elasticsearch' + state: 'present' + +- name: "Apt Repository" + apt_repository: + repo: 'deb https://artifacts.elastic.co/packages/6.x/apt stable main' + state: 'present' + mode: '644' + +- name: "Install Heartbeat" + apt: + pkg: 'heartbeat-elastic' + state: 'present' + update_cache: yes + notify: + - "Add Heartbeat to Boot-List" + - "Start Heartbeat" diff --git a/tasks/main.yml b/tasks/main.yml new file mode 100644 index 0000000000000000000000000000000000000000..812a2e01eeb1ed379c833eb5e8ab6dace0ce3e75 --- /dev/null +++ b/tasks/main.yml @@ -0,0 +1,14 @@ +--- +# file: roles/heartbeat/tasks/main.yml + +- name: "Heartbeat Role" + set_fact: role_heartbeat_started=true + tags: 'always' + +- block: + + - include_tasks: install.yml + + - include_tasks: config.yml + + when: '"heartbeat" not in excluded_roles' diff --git a/templates/heartbeat.yml b/templates/heartbeat.yml new file mode 100644 index 0000000000000000000000000000000000000000..0a2610019c1a27b9692576a4696be67633dbd497 --- /dev/null +++ b/templates/heartbeat.yml @@ -0,0 +1,144 @@ +################### Heartbeat Configuration Example ######################### + +# This file is an example configuration file highlighting only some common options. +# The heartbeat.reference.yml file in the same directory contains all the supported options +# with detailed comments. You can use it for reference. +# +# You can find the full configuration reference here: +# https://www.elastic.co/guide/en/beats/heartbeat/index.html + +############################# Heartbeat ###################################### + +# Configure monitors +heartbeat.config.monitors: + path: /etc/heartbeat/monitors.d/*.yml + reload.enabled: true + reload.period: 5s + +#==================== Elasticsearch template setting ========================== + +setup.template.settings: + index.number_of_shards: 1 + index.codec: best_compression + #_source.enabled: false + +#================================ General ===================================== + +# The name of the shipper that publishes the network data. It can be used to group +# all the transactions sent by a single shipper in the web interface. +#name: + +# The tags of the shipper are included in their own field with each +# transaction published. +#tags: ["service-X", "web-tier"] + +# Optional fields that you can specify to add additional information to the +# output. +#fields: +# env: staging + + +#============================== Dashboards ===================================== +# These settings control loading the sample dashboards to the Kibana index. Loading +# the dashboards is disabled by default and can be enabled either by setting the +# options here, or by using the `-setup` CLI flag or the `setup` command. +#setup.dashboards.enabled: false + +# The URL from where to download the dashboards archive. By default this URL +# has a value which is computed based on the Beat name and version. For released +# versions, this URL points to the dashboard archive on the artifacts.elastic.co +# website. +#setup.dashboards.url: + +#============================== Kibana ===================================== + +# Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API. +# This requires a Kibana endpoint configuration. +setup.kibana: + +# Kibana Host +# Scheme and port can be left out and will be set to the default (http and 5601) +# In case you specify and additional path, the scheme is required: http://localhost:5601/path +# IPv6 addresses should always be defined as: https://[2001:db8::1]:5601 +#host: "localhost:5601" + +# Kibana Space ID +# ID of the Kibana Space into which the dashboards should be loaded. By default, +# the Default Space will be used. +#space.id: + +#============================= Elastic Cloud ================================== + +# These settings simplify using heartbeat with the Elastic Cloud (https://cloud.elastic.co/). + +# The cloud.id setting overwrites the `output.elasticsearch.hosts` and +# `setup.kibana.host` options. +# You can find the `cloud.id` in the Elastic Cloud web UI. +#cloud.id: + +# The cloud.auth setting overwrites the `output.elasticsearch.username` and +# `output.elasticsearch.password` settings. The format is `<user>:<pass>`. +#cloud.auth: + +#================================ Outputs ===================================== + +# Configure what output to use when sending the data collected by the beat. + +#-------------------------- Elasticsearch output ------------------------------ +output.elasticsearch: + # Array of hosts to connect to. + hosts: ["localhost:9200"] + + # Optional protocol and basic auth credentials. + #protocol: "https" + #username: "elastic" + #password: "changeme" + + #----------------------------- Logstash output -------------------------------- + #output.logstash: + # The Logstash hosts + #hosts: ["localhost:5044"] + + # Optional SSL. By default is off. + # List of root certificates for HTTPS server verifications + #ssl.certificate_authorities: ["/etc/pki/root/ca.pem"] + + # Certificate for SSL client authentication + #ssl.certificate: "/etc/pki/client/cert.pem" + + # Client Certificate Key + #ssl.key: "/etc/pki/client/cert.key" + +#================================ Procesors ===================================== + +# Configure processors to enhance or manipulate events generated by the beat. + +processors: +- add_host_metadata: ~ +- add_cloud_metadata: ~ + +#================================ Logging ===================================== + +# Sets log level. The default log level is info. +# Available log levels are: error, warning, info, debug +#logging.level: debug + +# At debug level, you can selectively enable logging only for some components. +# To enable all selectors use ["*"]. Examples of other selectors are "beat", +# "publish", "service". +#logging.selectors: ["*"] + +#============================== Xpack Monitoring =============================== +# heartbeat can export internal metrics to a central Elasticsearch monitoring +# cluster. This requires xpack monitoring to be enabled in Elasticsearch. The +# reporting is disabled by default. + +# Set to true to enable the monitoring reporter. +#xpack.monitoring.enabled: false + +# Uncomment to send the metrics to Elasticsearch. Most settings from the +# Elasticsearch output are accepted here as well. Any setting that is not set is +# automatically inherited from the Elasticsearch output configuration, so if you +# have the Elasticsearch output configured, you can simply uncomment the +# following line. +#xpack.monitoring.elasticsearch: